Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

CRR 演练 4:指示 Amazon S3 复制使用 AWS KMS 托管加密密钥通过服务器端加密创建的对象

您的源存储桶中可以有使用 AWS KMS 托管密钥通过服务器端加密创建的对象。默认情况下,Amazon S3 不会复制这些对象。但是,您可以向存储桶复制配置添加可选配置以指示 Amazon S3 复制这些对象。

在本练习中,您首先在跨账户方案 (源存储桶和目标存储桶由不同的 AWS 账户拥有) 中设置复制配置。随后,此部分提供了有关更新配置以指示 Amazon S3 复制使用 AWS KMS 托管密钥加密的对象的说明。

注意

虽然此示例使用现有演练来在跨账户方案中设置 CRR,但在源存储桶和目标存储桶具有相同的拥有者时也可配置 SSE-KMS 加密的对象的复制。

  1. 完成 CRR 演练 2。有关说明,请参阅演练 2:配置跨区域复制 (其中源存储桶和目标存储桶由不同 AWS 账户拥有)

  2. 将源存储桶上的复制配置替换为以下内容 (这将添加指示 Amazon S3 复制使用 AWS KMS 密钥加密的源对象的选项)。

    <ReplicationConfiguration> <Role>IAM role ARN</Role> <Rule> <Prefix>Tax</Prefix> <Status>Enabled</Status> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> <Bucket>arn:aws:s3:::dest-bucket-name</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key ID to use for encrypting object replicas.</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> </Rule> </ReplicationConfiguration>

    在此示例中,您可以使用 AWS CLI 或 AWS 开发工具包添加复制配置。

    • 使用 AWS CLI.

      AWS CLI 要求以 JSON 形式指定复制配置。请将以下 JSON 保存在一个文件 (replication.json) 中。

      { "Role": "IAM role ARN", "Rules": [ { "Prefix": "Tax", "Status": "Enabled", "SourceSelectionCriteria": { "SseKmsEncryptedObjects" : { "Status" : "Enabled" } }, "Destination": { "Bucket": "arn:aws:s3:::dest-bucket-name", "EncryptionConfiguration" : { "ReplicaKmsKeyID": "AWS KMS key ARN(created in the same region as the destination bucket)." } } } ] }

      通过提供存储桶名称和角色 ARN 来更新 JSON。随后运行 AWS CLI 命令以向源存储桶添加复制配置:

      $ aws s3api put-bucket-replication \ --bucket source-bucket \ --replication-configuration file://replication.json \ --profile accountA

      有关如何设置 AWS CLI 的说明,请参阅设置用于示例演练的工具

      账户 A 可以使用 get-bucket-replication 命令检索复制配置:

      $ aws s3api get-bucket-replication \ --bucket source-bucket \ --profile accountA
    • 使用 AWS SDK for Java.

      有关代码示例,请参阅 使用AWS SDK for Java设置跨区域复制

  3. 通过添加 AWS KMS 操作的权限来更新 IAM 角色的权限策略。

    { "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/Tax" ] } }, "Resource":[ "List of AWS KMS key IDs used to encrypt source objects." ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.dest-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::dest-bucket-name/Tax" ] } }, "Resource":[ "List of AWS KMS key IDs that you want S3 to use to encrypt object replicas." ] }
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource": [ "arn:aws:s3:::source-bucket/Tax" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource": [ "arn:aws:s3:::source-bucket" ] }, { "Effect": "Allow", "Action": [ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource": "arn:aws:s3:::dest-bucket/*" }, { "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/Tax*" ] } }, "Resource": [ "List of AWS KMS key IDs used to encrypt source objects." ] }, { "Action": [ "kms:Encrypt" ], "Effect": "Allow", "Condition": { "StringLike": { "kms:ViaService": "s3.dest-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::dest-bucket/Tax*" ] } }, "Resource": [ "List of AWS KMS key IDs that you want S3 to use to encrypt object replicas." ] } ] }
  4. 测试设置。在控制台中,使用 AWS KMS 托管密钥将一个对象上传到源存储桶 (在 /Tax 文件夹中)。验证 Amazon S3 是否已在目标存储桶中复制对象。