更新对象加密
可以使用 Amazon S3 批量操作对 Amazon S3 对象执行大规模批量操作。批量操作 UpdateObjectEncryption 操作使用单个请求来更新多个 Amazon S3 对象的服务器端加密类型。单个 UpdateObjectEncryption 复制作业可以支持包含多达 200 亿个对象的清单。
通用存储桶支持的所有 Amazon S3 存储类别都支持 UpdateObjectEncryption 操作。您可以使用 UpdateObjectEncryption 操作来将加密的对象从具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)更改为 Amazon Key Management Service(Amazon KMS)密钥(SSE-KMS),或者应用 S3 存储桶密钥。还可以使用 UpdateObjectEncryption 操作来更改用于加密数据的客户自主管理型 KMS 密钥,这样您就可以遵守自定义密钥轮换标准。
创建批量操作作业时,可以根据您指定的源位置和筛选条件生成对象列表。可以使用 MatchAnyObjectEncryption 筛选条件从存储桶中生成您要更新并包含在清单中的对象的列表。生成的对象列表仅包含具有指定的服务器端加密类型的源存储桶对象。如果您选择 SSE-KMS,则可以选择通过指定特定的 KMS 密钥 ARN 和“存储桶密钥已启用”状态来进一步筛选结果。有关更多信息,请参阅《Amazon S3 API 参考》中的 JobManifestGeneratorFilter 和 SSEKMSFilter。
限制和注意事项
当您使用批量操作 UpdateObjectEncryption 操作时,以下限制和注意事项适用:
-
UpdateObjectEncryption操作不支持未加密的对象,也不支持使用具有 Amazon KMS keys 的双层服务器端加密(DSSE-KMS)或客户提供的加密密钥(SSE-C)进行加密的对象。此外,您不能指定 SSE-S3 加密类型UpdateObjectEncryption请求。 -
您可以使用
UpdateObjectEncryption操作来更新存储桶中启用了 S3 版本控制的对象。要更新特定版本的加密类型,您必须在UpdateObjectEncryption请求中指定版本 ID。如果未指定版本 ID,则UpdateObjectEncryption请求作用于对象的当前版本。有关 S3 版本控制的更多信息,请参阅使用 S3 版本控制保留对象的多个版本。 -
UpdateObjectEncryption操作对任何应用了 S3 对象锁定保留模式或法定保留的对象都将失败。如果某个对象具有治理模式保留期或法定保留,则在发出UpdateObjectEncryption请求之前,必须先移除该对象的对象锁定状态。您不能对应用了对象锁定合规模式保留期的对象使用UpdateObjectEncryption操作。有关 S3 对象锁定的更多信息,请参阅 使用对象锁定以锁定对象。 -
启用了实时复制功能的源存储桶上的
UpdateObjectEncryption请求不会在目标存储桶中启动副本事件。如果要更改源存储桶和目标存储桶中对象的加密类型,则必须对源存储桶和目标存储桶中的对象发起单独的UpdateObjectEncryption请求。 -
默认情况下,所有指定客户自主管理型 KMS 密钥的
UpdateObjectEncryption请求都仅限于存储桶所有者的 Amazon Web Services 账户拥有的 KMS 密钥。如果您正在使用 Amazon Organizations,则可以通过联系 Amazon Web Services 支持 来请求使用组织内其它成员账户拥有的 Amazon KMS keys的能力。 -
如果您使用 S3 批量复制来跨区域复制数据集,并且您的对象之前已将其服务器端加密类型从 SSE-S3 更新为 SSE-KMS,则您可能需要额外的权限。在源区域存储桶上,您必须拥有
kms:decrypt权限。然后,您将需要针对目标区域中存储桶的kms:decrypt和kms:encrypt权限。 -
在您的
UpdateObjectEncryption请求中提供完整的 KMS 密钥 ARN。您不能使用别名名称或别名 ARN。您可以在 AWS KMS 控制台中或使用 AWS KMSDescribeKeyAPI 确定完整的 KMS 密钥 ARN。 -
要在使用
KmsKeyArn筛选条件时提高清单生成性能,请将此筛选条件与其它对象元数据筛选条件结合使用。例如,您可以在 S3 批量操作中自动生成清单时将KmsKeyArn与MatchAnyPrefix、CreatedAfter、或MatchAnyStorageClass相结合。
有关 UpdateObjectEncryption 的更多信息,请参阅更新现有数据的服务器端加密。
所需的权限
要执行 UpdateObjectEncryption 操作,请将以下 Amazon 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 角色的信任策略和权限策略,请参阅授予批处理操作的权限和更新对象加密。