对 Amazon S3 存储桶强制执行有条件删除
通过使用 Amazon S3 存储桶策略,可以对通用存储桶中的对象强制实施 If-Match 标头和有条件删除。如果 If-Match 标头不存在,则请求将被拒绝并显示 403 Access Denied。存储桶策略是基于资源的策略,您可以使用该策略向存储桶及其中对象授予访问权限。只有存储桶拥有者才能将策略与存储桶关联。有关存储桶策略的更多信息,请参阅 Amazon S3 的存储桶策略。
以下示例说明如何使用存储桶策略中的条件来强制客户端使用 If-Match HTTP 标头。
示例 1:仅支持使用带有 ETag 值的 If-Match 标头进行有条件删除
可以使用此存储桶策略来仅支持使用 DeleteObject 和 DeleteObjects 请求(包含带有 ETag 值的 If-Match 标头)来进行有条件删除。Null 条件可确保 If-Match 标头存在,并授予 s3:GetObject 权限,因为具有特定 ETag 值的有条件删除同时需要 s3:DeleteObject 和 s3:GetObject 权限。所有非条件删除都将被拒绝,有条件删除将通过。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowConditionalDeletes", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:DeleteObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "Null": { "s3:if-match": "false" } } }, { "Sid": "AllowGetObjectBecauseConditionalDeleteIfMatchETag", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }
示例 2:仅支持使用带有 * 值的 If-Match 标头进行有条件删除
可以使用此存储桶策略来仅支持使用 DeleteObject 和 DeleteObjects 请求(包含带有 * 值的 If-Match 标头)来进行有条件删除。Null 条件可确保 If-Match 标头存在。由于未授予 s3:GetObject,因此具有特定 ETag 值的有条件删除将失败 – 只有 If-Match: *(检查对象是否存在且只需要 s3:DeleteObject 权限)才会成功。所有非条件删除都将被拒绝,只有 If-Match: * 有条件删除才会成功。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowConditionalDeletes", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:DeleteObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "Null": { "s3:if-match": "false" } } } ] }