更新对象加密 - Amazon Simple Storage Service

更新对象加密

可以使用 Amazon S3 批量操作对 Amazon S3 对象执行大规模批量操作。批量操作 UpdateObjectEncryption 操作使用单个请求来更新多个 Amazon S3 对象的服务器端加密类型。单个 UpdateObjectEncryption 复制作业可以支持包含多达 200 亿个对象的清单。

通用存储桶支持的所有 Amazon S3 存储类别都支持 UpdateObjectEncryption 操作。您可以使用 UpdateObjectEncryption 操作来将加密的对象从具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)更改为 AWS Key Management Service(AWS KMS)密钥(SSE-KMS),或者应用 S3 存储桶密钥。还可以使用 UpdateObjectEncryption 操作来更改用于加密数据的客户自主管理型 KMS 密钥,这样您就可以遵守自定义密钥轮换标准。

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

限制和注意事项

当您使用批量操作 UpdateObjectEncryption 操作时,以下限制和注意事项适用:

  • UpdateObjectEncryption 操作不支持未加密的对象,也不支持使用具有 AWS 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 请求都仅限于存储桶所有者的 AWS 账户拥有的 KMS 密钥。如果您正在使用 AWS Organizations,则可以通过联系 AWS 支持 来请求使用组织内其它成员账户拥有的 AWS KMS keys的能力。

  • 如果您使用 S3 批量复制来跨区域复制数据集,并且您的对象之前已将其服务器端加密类型从 SSE-S3 更新为 SSE-KMS,则您可能需要额外的权限。在源区域存储桶上,您必须拥有 kms:decrypt 权限。然后,您将需要针对目标区域中存储桶的 kms:decryptkms:encrypt 权限。

  • 在您的 UpdateObjectEncryption 请求中提供完整的 KMS 密钥 ARN。您不能使用别名名称或别名 ARN。您可以在 AWS KMS 控制台中或使用 AWS KMS DescribeKey API 确定完整的 KMS 密钥 ARN。

有关 UpdateObjectEncryption 的更多信息,请参阅更新现有数据的服务器端加密

所需的权限

要执行 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 角色的信任策略和权限策略,请参阅授予批处理操作的权限更新对象加密