

# 对 Amazon S3 存储桶强制执行有条件删除
<a name="conditional-delete-enforce"></a>

 通过使用 Amazon S3 存储桶策略，可以对通用存储桶中的对象强制实施 `If-Match` 标头和有条件删除。如果 `If-Match` 标头不存在，则请求将被拒绝并显示 `403 Access Denied`。存储桶策略是基于资源的策略，您可以使用该策略向存储桶及其中对象授予访问权限。只有存储桶拥有者才能将策略与存储桶关联。有关存储桶策略的更多信息，请参阅 [Amazon S3 的存储桶策略](bucket-policies.md)。

以下示例说明如何使用存储桶策略中的条件来强制客户端使用 `If-Match` HTTP 标头。

**Topics**
+ [示例 1：仅支持使用带有 `ETag` 值的 `If-Match` 标头进行有条件删除](#conditional-writes-enforce-ex1)
+ [示例 2：仅支持使用带有 `*` 值的 `If-Match` 标头进行有条件删除](#conditional-deletes-enforce-ex2)

## 示例 1：仅支持使用带有 `ETag` 值的 `If-Match` 标头进行有条件删除
<a name="conditional-writes-enforce-ex1"></a>

可以使用此存储桶策略来仅支持使用 `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` 标头进行有条件删除
<a name="conditional-deletes-enforce-ex2"></a>

可以使用此存储桶策略来仅支持使用 `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"
                }
            }
        }
    ]
}
```