复制使用具有 中存储的加密密钥的服务器端加密 (SSE) 创建的对象AWS KMS - Amazon Simple Storage Service

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

复制使用具有 中存储的加密密钥的服务器端加密 (SSE) 创建的对象AWS KMS

默认情况下, Amazon S3 不会使用存储在中的客户端主密钥(CMKS)的服务器端加密来复制静态存储的对象 AWS KMS. 本节介绍您可以添加的其他配置以指示 Amazon S3 复制这些对象。

重要

加密数据的复制是完全在 内部执行的服务器端过程。Amazon S3. 复制不支持客户端加密。

有关带分步说明的示例,请参阅。示例 4:复制加密对象. 有关创建复制配置的信息,请参阅Replication.

在复制配置中指定其他信息

在复制配置中,您需要执行以下操作:

  • Destination 配置,添加对称客户管理 AWS KMS 您希望的CMK Amazon S3 用于加密对象副本。

  • 通过启用使用 AWS KMS 通过添加 SourceSelectionCriteria 元素。

<ReplicationConfiguration> <Rule> ... <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> ... <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key ID for the AWS region of the destination bucket.</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> ... </Rule> </ReplicationConfiguration>
重要

必须事先已在目标存储桶所在的同一 AWS 区域中创建 AWS KMS CMK。

TheThethe AWS KMS CMK 必须 有效。TheThethe PUT 存储桶复制API并不检查有效性 AWS KMS CMKS。如果使用无效 CMK,您将在响应中收到 200 OK 状态代码,但复制将失败。

以下复制配置示例演示包含可选配置元素的复制配置。

<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <ID>Rule-1</ID> <Priority>1</Priority> <Status>Enabled</Status> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Destination> <Bucket>arn:aws:s3:::destination-bucket</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>The AWS KMS key ID for the AWS region of the destination bucket (S3 uses it to encrypt object replicas).</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> </Rule> </ReplicationConfiguration>

此复制配置包含一个规则。规则适用于具有 Tax 关键前缀。 Amazon S3 使用 AWS KMS 对这些对象副本加密的密钥ID。

为 IAM 角色授予额外权限

以复制在静态下加密的对象 AWS Key Management Service (AWS KMS),授予您在复制配置中指定的IAM角色的以下附加权限。通过更新与 IAM 角色关联的权限策略,可授予这些权限。不会复制使用具有客户提供的加密密钥的服务器端加密 (SSE-C) 创建的对象。

  • 源对象的 s3:GetObjectVersionForReplication 操作的权限。此操作允许 Amazon S3 如何使用服务器端加密复制未加密的对象和对象 Amazon S3 管理加密(SSE-S3)密钥或CMKS存储在 AWS KMS (SSE-KMS)。

    注意

    我们建议您使用 s3:GetObjectVersionForReplication 而不是 s3:GetObjectVersion 行动,因为它提供 Amazon S3 只有复制所需的最小权限。此外, s3:GetObjectVersion 操作允许复制未加密和SSE-S3加密对象,但不是使用CMK中存储的对象创建的 AWS KMS.

  • 以下 AWS KMS 操作的权限:

    • kms:Decrypt 权限 AWS KMS 用于加密源对象的CMK

    • kms:Encrypt 权限 AWS KMS 用于加密对象复制副本的CMK

    我们建议您使用 AWS KMS 条件键将这些权限限制为特定的存储桶和对象;如以下示例策略语句中所示。

    { "Action": ["kms:Decrypt"], "Effect": "Allow", "Condition": { "StringLike": { "kms:ViaService": "s3.source-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::source-bucket-name/key-prefix1*", ] } }, "Resource": [ "List of AWS KMS key ARNs used to encrypt source objects.", ] }, { "Action": ["kms:Encrypt"], "Effect": "Allow", "Condition": { "StringLike": { "kms:ViaService": "s3.destination-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::destination-bucket-name/key-prefix1*", ] } }, "Resource": [ "AWS KMS key ARNs (for the AWS Region of the destination bucket). S3 uses it to encrypt object replicas", ] }

    TheThethe AWS 拥有 IAM 角色必须具有这些权限 AWS KMS 操作(kms:Encryptkms:Decrypt) AWS KMS 政策中列出的CML。如果 AWS KMS CMKS由另一个公司拥有 AWS 账户,CMK所有者必须将这些权限授予 AWS 拥有 IAM 角色。有关管理对这些CMKS的访问权限的更多信息,请参阅 使用AWSKMS的IAM策略 AWS Key Management Service Developer Guide.

    以下是完整的 IAM 授予复制未加密对象的必要权限的策略,使用服务器端加密创建的对象 Amazon S3 管理的加密密钥和CMKS存储在 AWS KMS.

    注意

    不会复制使用具有客户提供的加密密钥的服务器端加密 (SSE-C) 创建的对象。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::source-bucket/key-prefix1*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::destination-bucket/key-prefix1*" }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.source-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::source-bucket-name/key-prefix1*" ] } }, "Resource":[ "List of AWS KMS key ARNs used to encrypt source objects." ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.destination-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::destination-bucket-name/prefix1*" ] } }, "Resource":[ "AWS KMS key ARNs (for the AWS Region of the destination bucket) to use for encrypting object replicas" ] } ] }

有关详细信息,请参阅 使用 IAM 政策 AWS KMS.

为跨账户方案授予其他权限

在跨客户场景中,在这里 source $and destination 存储区属于不同的AWS帐户,您可以使用客户管理CMK来加密对象副本。但是,CMK 拥有者必须向源存储桶拥有者授予使用 CMK 的权限。

如何授予源桶所有者权限使用 AWS KMS CMK(IAM 控制台)

  1. 登录 AWS 管理控制台 并打开 AWS Key Management Service (AWS KMS)控制台 https://console.aws.amazon.com/kms.

  2. 要更改 AWS 区域,请使用页面右上角的区域选择器。

  3. 要查看您账户中自己所创建和管理的密钥,请在导航窗格中选择 Customer managed keys (客户托管密钥).

  4. 选择 CMK。

  5. 下方 一般配置,选择 关键政策 选项卡。

  6. 选择 其他 AWS 账户.

  7. 选择 添加另一个 AWS 账户.

  8. ARN:AWS:IAM:,输入源桶帐户ID。

  9. 选择 保存更改.

向源存储桶拥有者授予使用 AWS KMS CMK 的权限 (AWS CLI)

AWS KMS 事务限制注意事项

在启用跨区域复制 (CRR) 后使用 AWS KMS 加密添加许多新对象时,您可能会遇到限流(HTTP 503 速度变慢错误)。如果每秒 AWS KMS 事务数超出当前限制,则会发生限流。有关详细信息,请参阅 限制AWS Key Management Service Developer Guide.

要请求提高限制,请使用 Service Quotas. 有关详细信息,请参阅 Amazon Web Services 限制. IFIFIF Service Quotas 不支持你所在地区 打开 AWS Support 案例.