复制加密对象 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

复制加密对象

默认情况下,Amazon S3 不会复制使用具有 Amazon Key Management Service(Amazon KMS)密钥的服务器端加密(SSE-KMS)或具有 Amazon KMS 密钥的双层服务器端加密(DSSE-KMS)加密的对象。要复制用 SSE-KMS 或 DSS-KMS 加密的对象,必须修改存储桶复制配置,以指示 Amazon S3 复制这些对象。此示例介绍如何使用 Amazon S3 控制台和 Amazon Command Line Interface(Amazon CLI)更改存储桶复制配置以允许复制加密对象。

有关更多信息,请参阅复制使用服务器端加密(SSE-C、SSE-S3、SSE-KMS、DSSE-KMS)创建的对象

注意

当为源或目标存储桶启用 S3 存储桶密钥时,加密上下文将是存储桶的 Amazon 资源名称 (ARN),而不是对象的 ARN。您必须更新 IAM 策略才能将存储桶 ARN 用于加密上下文。有关更多信息,请参阅S3 存储桶密钥和复制

注意

您可以在 Amazon S3 中使用多区域 Amazon KMS keys。但是,Amazon S3 目前将多区域密钥视为单区域密钥,且不使用密钥的多区域特征。有关更多信息,请参阅 Amazon Key Management Service 开发人员指南中的使用多区域密钥

如需分步指导,请参阅 为同一账户拥有的源存储桶和目标存储桶配置复制。本主题提供了在两个存储桶由相同和不同的 Amazon Web Services 账户拥有时设置复制配置的说明。

要使用 Amazon CLI 复制加密的对象,请执行以下操作:

  • 创建源存储桶和目标存储桶,并对这些存储桶启用版本控制。

  • 创建向 Amazon S3 授予复制对象的权限的 Amazon Identity and Access Management(IAM)服务角色。IAM 角色的权限包含复制这些加密对象所需的权限。

  • 将复制配置添加到源存储桶。复制配置提供与复制使用 KMS 密钥加密的对象相关的信息。

  • 将加密的对象添加到源存储桶。

  • 测试设置,以确认加密的对象正在复制到目标存储桶。

以下过程指导您完成此过程。

复制服务器端加密对象 (Amazon CLI)
  1. 在此示例中,我们在同一个 Amazon Web Services 账户中创建了 DOC-EXAMPLE-SOURCE-BUCKET 存储桶和 DOC-EXAMPLE-DESTINATION-BUCKET 存储桶。还可以为 Amazon CLI 设置凭证配置文件。此示例使用配置文件名称 acctA

    有关设置凭证配置文件的更多信息,请参阅《Amazon Command Line Interface 用户指南》中的命名配置文件。要使用本示例中的命令,请将 user input placeholders 替换为您的信息。

  2. 使用以下命令创建 DOC-EXAMPLE-SOURCE-BUCKET 存储桶并对该存储桶启用版本控制。以下示例命令在美国东部(弗吉尼亚州北部)(us-east-1)区域中创建 DOC-EXAMPLE-SOURCE-BUCKET 存储桶。

    aws s3api create-bucket \ --bucket DOC-EXAMPLE-SOURCE-BUCKET \ --region us-east-1 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket DOC-EXAMPLE-SOURCE-BUCKET \ --versioning-configuration Status=Enabled \ --profile acctA
  3. 使用以下命令创建 DOC-EXAMPLE-DESTINATION-BUCKET 存储桶并对该存储桶启用版本控制。以下示例命令在美国西部(俄勒冈州)(us-west-2)区域中创建 DOC-EXAMPLE-DESTINATION-BUCKET 存储桶。

    注意

    要在 DOC-EXAMPLE-SOURCE-BUCKET 存储桶和 DOC-EXAMPLE-DESTINATION-BUCKET 存储桶均位于同一 Amazon Web Services 账户中时设置复制配置,请使用同一配置文件。在此示例中,我们使用的是 acctA。要在两个存储桶由不同 Amazon Web Services 账户拥有时配置复制,您需要为每个存储桶指定不同的配置文件。

    aws s3api create-bucket \ --bucket DOC-EXAMPLE-DESTINATION-BUCKET \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket DOC-EXAMPLE-DESTINATION-BUCKET \ --versioning-configuration Status=Enabled \ --profile acctA
  4. 接下来,创建 IAM 服务角色。您将在稍后添加到 DOC-EXAMPLE-SOURCE-BUCKET 存储桶的复制配置中指定此角色。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 replicationRolekmsobj \ --assume-role-policy-document file://s3-role-trust-policy-kmsobj.json \ --profile acctA
    2. 接下来,将权限策略附加到角色。此策略授予对各种 Amazon S3 存储桶和对象操作的权限。

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

        重要

        在权限策略中,您可以指定将用于加密 DOC-EXAMPLE-SOURCE-BUCKETDOC-EXAMPLE-DESTINATION-BUCKET 存储桶的 Amazon KMS 密钥 ID。您必须为 DOC-EXAMPLE-SOURCE-BUCKETDOC-EXAMPLE-DESTINATION-BUCKET 存储桶创建两个独立的 KMS 密钥。Amazon KMS keys 始终不会在创建它们的 Amazon Web Services 区域外部共享。

        { "Version":"2012-10-17", "Statement":[ { "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration", "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Effect":"Allow", "Resource":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET/*" ] }, { "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Effect":"Allow", "Condition":{ "StringLikeIfExists":{ "s3:x-amz-server-side-encryption":[ "aws:kms", "AES256", "aws:kms:dsse" ], "s3:x-amz-server-side-encryption-aws-kms-key-id":[ "Amazon KMS key IDs(in ARN format) to use for encrypting object replicas" ] } }, "Resource":"arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/*" }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET/*" ] } }, "Resource":[ "Amazon KMS key IDs(in ARN format) 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:::DOC-EXAMPLE-DESTINATION-BUCKET/*" ] } }, "Resource":[ "Amazon KMS key IDs(in ARN format) to use for encrypting object replicas" ] } ] }
      2. 创建一个策略并将其附加到角色。

        $ aws iam put-role-policy \ --role-name replicationRolekmsobj \ --policy-document file://s3-role-permissions-policykmsobj.json \ --policy-name replicationRolechangeownerPolicy \ --profile acctA
  5. 接下来,将以下复制配置添加到 DOC-EXAMPLE-SOURCE-BUCKET 存储桶。它指示 Amazon S3 将前缀为 Tax/ 的对象复制到 DOC-EXAMPLE-DESTINATION-BUCKET 存储桶。

    重要

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

    <ReplicationConfiguration> <Role>IAM-Role-ARN</Role> <Rule> <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:::DOC-EXAMPLE-DESTINATION-BUCKET</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>Amazon KMS key IDs to use for encrypting object replicas</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> </Rule> </ReplicationConfiguration>

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

    1. Amazon 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:::DOC-EXAMPLE-DESTINATION-BUCKET", "EncryptionConfiguration":{ "ReplicaKmsKeyID":"Amazon KMS key IDs (in ARN format) to use for encrypting object replicas" } }, "SourceSelectionCriteria":{ "SseKmsEncryptedObjects":{ "Status":"Enabled" } } } ] }
    2. 编辑 JSON 以提供 DOC-EXAMPLE-DESTINATION-BUCKET 存储桶、Amazon KMS key IDs (in ARN format)IAM-role-ARN 的值。保存更改。

    3. 使用以下命令以将复制配置添加到 DOC-EXAMPLE-SOURCE-BUCKET 存储桶中。请务必提供 DOC-EXAMPLE-SOURCE-BUCKET 存储桶名称。

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

    1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

    2. DOC-EXAMPLE-SOURCE-BUCKET 存储桶中,创建一个名为 Tax 的文件夹。

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

    4. 确认 DOC-EXAMPLE-DESTINATION-BUCKET 存储桶包含对象副本,并且它们已使用在配置中指定的 KMS 密钥进行了加密。有关更多信息,请参阅获取复制状态信息

有关显示如何添加复制配置的代码示例,请参阅使用 Amazon SDK。您必须适当地修改复制配置。

有关概念性信息,请参阅 复制使用服务器端加密(SSE-C、SSE-S3、SSE-KMS、DSSE-KMS)创建的对象