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

示例 4:复制加密对象

默认情况下,Amazon S3 不复制您的源存储桶中使用 AWS KMS 托管密钥通过服务器端加密静态存储的对象。要复制加密对象,请修改存储桶复制配置以指示 Amazon S3 复制这些对象。此示例介绍如何使用 Amazon S3 控制台和 AWS Command Line Interface (AWS CLI) 更改存储桶复制配置以允许复制加密对象。有关更多信息,请参阅 CRR 其他配置:复制使用 AWS KMS 托管加密密钥通过服务器端加密 (SSE) 创建的对象

主题

    复制加密对象(控制台)

    有关分步说明,请参阅 Amazon Simple Storage Service 控制台用户指南 中的如何向 S3 存储桶添加跨区域复制 (CRR) 规则?本主题提供当两个存储桶由相同和不同 AWS 账户拥有时,如何设置复制配置的说明。

    复制加密对象 (AWS CLI)

    要使用 AWS CLI 复制加密对象,您需要创建存储桶,对存储桶启用版本控制,创建一个 IAM 角色,该角色赋予 Amazon S3 复制对象并将复制配置添加到源存储桶的权限。复制配置提供有关复制使用 KMS 密钥加密的对象的信息。IAM 角色包含复制这些加密对象的必要权限。此外,您还将测试该设置。

    复制加密对象 (AWS CLI)

    1. 在此示例中,我们在同一 AWS 账户中创建了存储桶和目标存储桶。为 AWS CLI 设置凭证配置文件。在此示例中,我们使用配置文件名称 acctA。有关设置凭证配置文件的更多信息,请参阅 AWS Command Line Interface 用户指南 中的命名配置文件

    2. 创建存储桶,并对其启用版本控制。在此示例中,我们将在 美国东部(弗吉尼亚北部) (us-east-1) 区域中创建存储桶。

      aws s3api create-bucket \ --bucket source \ --region us-east-1 \ --profile acctA
      aws s3api put-bucket-versioning \ --bucket source \ --versioning-configuration Status=Enabled \ --profile acctA
    3. 创建目标存储桶,并对其启用版本控制。在此示例中,我们将在 美国西部(俄勒冈) (us-west-2) 区域中创建目标存储桶。

      注意

      要在存储桶和目标存储桶位于同一 AWS 账户时设置复制配置,请使用同一配置文件。在此示例中,我们使用的是 acctA。要在两个存储桶由不同 AWS 账户拥有时对复制配置进行测试,您将需要为每个存储桶指定不同的配置文件。在此示例中,我们对目标存储桶使用 acctB 配置文件。

      aws s3api create-bucket \ --bucket destination \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctA
      aws s3api put-bucket-versioning \ --bucket destination \ --versioning-configuration Status=Enabled \ --profile acctA
    4. 创建一个 IAM 角色。您将在稍后添加到存储桶的复制配置中指定此角色。Amazon S3 担任此角色以代表您复制对象。分两个步骤创建 IAM 角色:

      • 创建角色

      • 将一个权限策略附加到角色

      1. 创建一个 IAM 角色。

        1. 复制以下信任策略,并将其保存到本地计算机上当前目录中一个名为 s3-role-trust-policy-kmsobj.json 的文件。此策略授予 Amazon S3 服务委托人担任该角色的权限,以便 Amazon S3 可代表您执行任务。

          { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
        2. 创建角色:

          $ aws iam create-role \ --role-name crrRolekmsobj \ --assume-role-policy-document file://s3-role-trust-policy-kmsobj.json \ --profile acctA
      2. 将权限策略附加到角色。此策略授予对各种 Amazon S3 存储桶和对象操作的权限。

        1. 复制以下权限策略,并将其保存到本地计算机上当前目录中一个名为 s3-role-permissions-policykmsobj.json 的文件。您将创建一个 IAM 角色,稍后将策略附加到该角色。

          { "Version":"2012-10-17", "Statement":[ { "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration", "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Effect":"Allow", "Resource":[ "arn:aws:s3:::source", "arn:aws:s3:::source/*" ] }, { "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Effect":"Allow", "Condition":{ "StringLikeIfExists":{ "s3:x-amz-server-side-encryption":[ "aws:kms", "AES256" ], "s3:x-amz-server-side-encryption-aws-kms-key-id":[ "AWS KMS key IDs to use for encrypting object replicas" ] } }, "Resource":"arn:aws:s3:::destination/*" }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::source/*" ] } }, "Resource":[ "AWS KMS key IDs used to encrypt source objects." ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-west-2.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::destination/*" ] } }, "Resource":[ "AWS KMS key IDs to use for encrypting object replicas" ] } ] }
        2. 创建一个策略并将其附加到角色:

          $ aws iam put-role-policy \ --role-name crrRolekmsobj \ --policy-document file://s3-role-permissions-policykmsobj.json \ --policy-name crrRolechangeownerPolicy \ --profile acctA
    5. 将以下复制配置添加到存储桶。它指示 Amazon S3 将前缀为 Tax/ 的对象复制到目标存储桶。

      重要

      在复制配置中,指定 Amazon S3 可担任的 IAM 角色。仅当您具有 iam:PassRole 权限时,才能执行此操作。CLI 命令中指定的配置文件必须具有这些权限。有关更多信息,请参阅IAM 用户指南中的向用户授予将角色传递给 AWS 服务的权限

      <ReplicationConfiguration> <Role>IAM-Role-ARN</Role> <Rule> <Status>Enabled</Status> <Priority>1</Priority> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Status>Enabled</Status> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> <Bucket>arn:aws:s3:::dest-bucket-name</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> </Rule> </ReplicationConfiguration>

      要将复制配置添加到存储桶,请执行以下操作:

      1. AWS CLI 要求以 JSON 形式指定复制配置。将以下 JSON 保存到本地计算机上当前目录中的一个文件 (replication.json)。

        { "Role":"IAM-Role-ARN", "Rules":[ { "Status":"Enabled", "Priority":"1", "DeleteMarkerReplication":{ "Status":"Disabled" }, "Filter":{ "Prefix":"Tax" }, "Destination":{ "Bucket":"arn:aws:s3:::destination", "EncryptionConfiguration":{ "ReplicaKmsKeyID":"AWS KMS key IDs to use for encrypting object replicas" } }, "SourceSelectionCriteria":{ "SseKmsEncryptedObjects":{ "Status":"Enabled" } }, "Status":"Enabled" } ] }
      2. 编辑 JSON,即提供目标存储桶和 IAM-role-ARN 的值。保存更改。

      3. 存储桶添加复制配置。请务必提供存储桶名称。

        $ aws s3api put-bucket-replication \ --replication-configuration file://replicationkmsobj.json \ --bucket source \ --profile acctA
    6. 测试该设置以确认复制了加密对象。在 Amazon S3 控制台中,执行以下操作:

      1. 登录 AWS 管理控制台,并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

      2. 存储桶中,创建一个名为 Tax 的文件夹。

      3. 将示例对象添加到文件夹。请务必选择加密选项并指定用于加密对象的 KMS 密钥。

      4. 确认目标存储桶包含对象副本,并且它们已使用配置中指定的 KMS 加密密钥进行了加密。

    复制加密对象 (AWS 开发工具包)

    有关添加复制配置的代码示例,请参阅当源存储桶和目标存储桶由相同 AWS 账户拥有时配置 CRR(AWS 开发工具包)。您将需要适当地修改复制配置。有关概念性信息,请参阅CRR 其他配置:复制使用 AWS KMS 托管加密密钥通过服务器端加密 (SSE) 创建的对象