

# 更新对象加密
<a name="batch-ops-update-encryption"></a>

可以使用 Amazon S3 批量操作对 Amazon S3 对象执行大规模批量操作。批量操作 [https://docs.aws.amazon.com//AmazonS3/latest/API/API_control_UpdateObjectEncryptionOperation.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_control_UpdateObjectEncryptionOperation.html) 操作使用单个请求来更新多个 Amazon S3 对象的服务器端加密类型。单个 `UpdateObjectEncryption` 复制作业可以支持包含多达 200 亿个对象的清单。

通用存储桶支持的所有 Amazon S3 存储类别都支持 `UpdateObjectEncryption` 操作。您可以使用 `UpdateObjectEncryption` 操作来将加密的对象从[具有 Amazon S3 托管式密钥的服务器端加密（SSE-S3）](https://docs.aws.amazon.com//AmazonS3/latest/userguide/UsingServerSideEncryption.html)更改为 [AWS Key Management Service（AWS KMS）密钥（SSE-KMS）](https://docs.aws.amazon.com//AmazonS3/latest/userguide/UsingKMSEncryption.html)，或者应用 S3 存储桶密钥。还可以使用 `UpdateObjectEncryption` 操作来更改用于加密数据的客户自主管理型 KMS 密钥，这样您就可以遵守自定义密钥轮换标准。

 创建批量操作作业时，可以根据您指定的源位置和筛选条件生成对象列表。可以使用 `MatchAnyObjectEncryption` 筛选条件从存储桶中生成您要更新并包含在清单中的对象的列表。生成的对象列表仅包含具有指定的服务器端加密类型的源存储桶对象。如果您选择 SSE-KMS，则可以选择通过指定特定的 KMS 密钥 ARN 和“存储桶密钥已启用”状态来进一步筛选结果。有关更多信息，请参阅《Amazon S3 API 参考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_JobManifestGeneratorFilter.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_JobManifestGeneratorFilter.html) 和 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_SSEKMSFilter.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_SSEKMSFilter.html)。

## 限制和注意事项
<a name="batch-ops-encrypt-object-restrictions"></a>

当您使用批量操作 `UpdateObjectEncryption` 操作时，以下限制和注意事项适用：
+ `UpdateObjectEncryption` 操作不支持未加密的对象，也不支持使用具有 AWS KMS keys 的双层服务器端加密（DSSE-KMS）或客户提供的加密密钥（SSE-C）进行加密的对象。此外，您不能指定 SSE-S3 加密类型 `UpdateObjectEncryption` 请求。
+ 您可以使用 `UpdateObjectEncryption` 操作来更新存储桶中启用了 S3 版本控制的对象。要更新特定版本的加密类型，您必须在 `UpdateObjectEncryption` 请求中指定版本 ID。如果未指定版本 ID，则 `UpdateObjectEncryption` 请求作用于对象的当前版本。有关 S3 版本控制的更多信息，请参阅[使用 S3 版本控制保留对象的多个版本](Versioning.md)。
+ `UpdateObjectEncryption` 操作对任何应用了 S3 对象锁定保留模式或法定保留的对象都将失败。如果某个对象具有治理模式保留期或法定保留，则在发出 `UpdateObjectEncryption` 请求之前，必须先移除该对象的对象锁定状态。您不能对应用了对象锁定合规模式保留期的对象使用 `UpdateObjectEncryption` 操作。有关 S3 对象锁定的更多信息，请参阅 [使用对象锁定以锁定对象](object-lock.md)。
+ 启用了实时复制功能的源存储桶上的 `UpdateObjectEncryption` 请求不会在目标存储桶中启动副本事件。如果要更改源存储桶和目标存储桶中对象的加密类型，则必须对源存储桶和目标存储桶中的对象发起单独的 `UpdateObjectEncryption` 请求。
+ 默认情况下，所有指定客户自主管理型 KMS 密钥的 `UpdateObjectEncryption` 请求都仅限于存储桶所有者的 AWS 账户拥有的 KMS 密钥。如果您正在使用 AWS Organizations，则可以通过联系 AWS 支持 来请求使用组织内其它成员账户拥有的 AWS KMS keys的能力。
+ 如果您使用 S3 批量复制来跨区域复制数据集，并且您的对象之前已将其服务器端加密类型从 SSE-S3 更新为 SSE-KMS，则您可能需要额外的权限。在源区域存储桶上，您必须拥有 `kms:decrypt` 权限。然后，您将需要针对目标区域中存储桶的 `kms:decrypt` 和 `kms:encrypt` 权限。
+ 在您的 `UpdateObjectEncryption` 请求中提供完整的 KMS 密钥 ARN。您不能使用别名名称或别名 ARN。您可以在 AWS KMS 控制台中或使用 AWS KMS `DescribeKey` API 确定完整的 KMS 密钥 ARN。

有关 `UpdateObjectEncryption` 的更多信息，请参阅[更新现有数据的服务器端加密](update-sse-encryption.md)。

## 所需的权限
<a name="batch-ops-required-permissions"></a>

要执行 `UpdateObjectEncryption` 操作，请将以下 AWS Identity and Access Management（IAM）策略添加到您的 IAM 主体（用户、角色或组）。要使用此策略，请将 *`amzn-s3-demo-bucket`* 替换为包含您要更新其加密的对象的存储桶名称。将 `amzn-s3-demo-manifest-bucket` 替换为包含清单的存储桶的名称，并将 `amzn-s3-demo-completion-report-bucket` 替换为要存储完成报告的存储桶的名称。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3BatchOperationsUpdateEncryption",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:PutObject",
                "s3:UpdateObjectEncryption"
            ],
            "Resource": [
                 "arn:aws:s3:::amzn-s3-demo-bucket-target"
                "arn:aws:s3:::amzn-s3-demo-bucket-target-target/*"
            ]
        },
        {
            "Sid": "S3BatchOperationsPolicyForManifestFile",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-manifest/*"
            ]
        },
        {
            "Sid": "S3BatchOperationsPolicyForCompletionReport",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-completion-report/*"
            ]
        },
        {
            "Sid": "S3BatchOperationsPolicyManifestGeneration",
            "Effect": "Allow",
            "Action": [
                "s3:PutInventoryConfiguration"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-target"
            ]
        },
        {
            "Sid": "AllowKMSOperationsForS3BatchOperations",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:Encrypt",
                "kms:ReEncrypt*"
            ],
            "Resource": [                "arn:aws:kms:us-east-1:111122223333:key/01234567-89ab-cdef-0123-456789abcdef"
            ]
        }
    ]
}
```

有关您必须附加到 S3 批量操作服务主体代表您运行批量操作作业所代入的 IAM 角色的信任策略和权限策略，请参阅[授予批处理操作的权限](batch-ops-iam-role-policies.md)和[更新对象加密](batch-ops-iam-role-policies.md#batch-ops-update-encryption-policies)。