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

演练 2:配置跨区域复制 (其中源存储桶和目标存储桶由不同 AWS 账户拥有)

在此演练中,您设置跨区域复制,其中源存储桶和目标存储桶由不同的 AWS 账户拥有。

由于存储桶由不同的 AWS 账户拥有,因此,您必须执行一个额外步骤来设置跨区域复制 – 目标存储桶拥有者必须创建一个存储桶策略,以便向源存储桶拥有者授予执行复制操作的权限。

在本练习中,您将使用控制台执行所有步骤,但创建 IAM 角色和出于以下原因向源存储桶添加复制配置除外:

  • Amazon S3 控制台支持在两个存储桶由同一个 AWS 账户拥有时设置复制配置。但是,在跨账户方案中,您必须指定由另一个 AWS 账户拥有的目标存储桶,并且 Amazon S3 控制台 UI 仅显示您的账户中的存储桶。

  • 在 IAM 控制台中,Amazon S3 未在 AWS Service Roles 列表中。您可以选择创建一个 IAM 角色,但选择另一个服务角色类型 (如 AWS Lambda)。在创建此角色后,您可以修改信任策略来指定可代入此角色的 Amazon S3 服务委托人 (而不是 Lambda 服务委托人)。在本练习中,您使用 AWS CLI 创建此角色。

  1. 使用两个不同的 AWS 账户创建两个存储桶。根据跨区域复制要求,您在不同的 AWS 区域中创建这两个存储桶并对它们启用版本控制。

    1. 在一个 AWS 区域中创建源存储桶。例如,账户 A 中的 美国西部(俄勒冈) (us-west-2)。有关说明,请转至如何创建 S3 存储桶? (在 Amazon Simple Storage Service 控制台用户指南 中)。

    2. 在另一个 AWS 区域中创建目标存储桶。例如,账户 B 中的 美国东部(弗吉尼亚北部) (us-east-1)。

    3. 对这两个存储桶启用版本控制。有关说明,请参阅如何为 S3 存储桶启用或暂停版本控制? (在 Amazon Simple Storage Service 控制台用户指南 中)。

      重要

      如果您在不受版本控制的存储桶中具有对象到期生命周期策略,并且希望在启用版本控制时保持相同的永久删除行为,则必须添加非当前版本到期策略。非当前版本到期生命周期策略将管理在受版本控制的存储桶中删除非当前对象版本的行为。(启用版本控制的存储桶会维护一个当前对象版本,以及零个或零个以上非当前对象版本。)有关更多信息,请参阅如何为 S3 存储桶创建生命周期策略? (在 Amazon Simple Storage Service 控制台用户指南 中)。

  2. 在目标存储桶上添加存储桶策略以允许源存储桶拥有者复制对象。

    { "Version":"2008-10-17", "Id":"", "Statement":[ { "Sid":"Stmt123", "Effect":"Allow", "Principal":{ "AWS":"arn:aws-cn:iam::AWS-ID-Account-A:root" }, "Action":["s3:ReplicateObject", "s3:ReplicateDelete"], "Resource":"arn:aws-cn:s3:::destination-bucket/*" } ] }

    有关说明,请参阅如何添加 S3 存储桶策略? (在 Amazon Simple Storage Service 控制台用户指南 中)。

  3. 向 Amazon S3 授予代表源存储桶拥有者复制对象的权限。

    在对源存储桶配置跨区域复制后,Amazon S3 将代表您复制对象。源存储桶拥有者可使用 IAM 角色向 Amazon S3 授予必要权限。在此步骤中,您将在账户 A 中创建一个 IAM 角色。

    使用 AWS CLI 创建该 IAM 角色。有关如何设置 AWS CLI 的信息,请参阅设置用于示例演练的工具。本练习假定您已使用以下两个配置文件配置 AWS CLI:accountAaccountB

    1. 复制以下策略并将其保存到名为 S3-role-trust-policy.json 的文件。此策略会向 Amazon S3 授予代入该角色的权限。

      { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
    2. 复制以下策略并将其保存到名为 S3-role-permissions-policy.json 的文件。此访问策略授予对各种 Amazon S3 存储桶和对象操作的权限。在以下步骤中,您将策略添加到所创建的 IAM 角色。

      { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws-cn:s3:::source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws-cn:s3:::source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws-cn:s3:::destination-bucket/*" } ] }
    3. 运行以下 AWS CLI 命令以创建角色:

      $ aws iam create-role \ --role-name crrRole \ --assume-role-policy-document file://S3-role-trust-policy.json \ --profile accountA
    4. 运行以下 AWS CLI 命令以创建策略:

      $ aws iam create-policy \ --policy-name crrRolePolicy \ --policy-document file://S3-role-permissions-policy.json \ --profile accountA
    5. 记下 create-policy 命令返回的策略 Amazon 资源名称 (ARN)。

    6. 运行以下 AWS CLI 命令以将策略附加到角色:

      $ aws iam attach-role-policy \ --role-name crrRole \ --policy-arn policy-arn \ --profile accountA

      现在,您的账户 A 中已有 Amazon S3 可代入的 IAM 角色。它拥有必要的 Amazon S3 操作的权限,以便 Amazon S3 能够将对象从特定的源存储桶复制到目标存储桶。在将跨区域复制添加到账户 A 中的源存储桶时,可以指定此角色。

  4. 在账户 A 中的源存储桶上添加复制配置,指示 Amazon S3 将具有前缀 Tax/ 的对象复制到目标存储桶,如以下示例配置所示。

    重要

    将复制配置添加到存储桶时,您必须具有 iam:PassRole 权限才能传递授予 Amazon S3 复制权限的 IAM 角色。IAM 角色由在复制配置 XML 中的 <Role> 元素中使用的 Amazon 资源名称 (ARN) 指定。有关更多信息,请参阅 IAM 用户指南 中的授予向 AWS 服务传递角色的用户权限

    <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws-cn:iam::AWS-ID-Account-A:role/role-name</Role> <Rule> <Status>Enabled</Status> <Prefix>Tax</Prefix> <Destination><Bucket>arn:aws-cn:s3:::destination-bucket</Bucket></Destination> </Rule> </ReplicationConfiguration>

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

    • 使用 AWS CLI.

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

      { "Role": "arn:aws-cn:iam::AWS-ID-Account-A:role/role-name", "Rules": [ { "Prefix": "Tax", "Status": "Enabled", "Destination": { "Bucket": "arn:aws-cn:s3:::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
    • 使用 Amazon S3 控制台.

      有关使用控制台的说明,请参阅如何为 S3 存储桶启用和配置跨区域复制? (在 Amazon Simple Storage Service 控制台用户指南 中)。

    • 使用 AWS SDK for Java.

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

  5. 测试设置。在 控制台中,执行以下操作:

    • 在源存储桶中,创建一个名为 Tax 的文件夹。

    • 将对象添加到源存储桶中的文件夹。

      • 验证 Amazon S3 是否已复制账户 B 拥有的目标存储桶中的对象。

      • 在对象属性中,注意 Replication Status 将设置为“副本”(将其标识为副本对象)。

      • 在对象属性中,权限部分未显示任何权限 (副本仍将由源存储桶拥有者拥有,并且目标存储桶拥有者不具有对象副本的权限)。您可以添加可选配置以指示 Amazon S3 更改副本所有权。有关示例请查看 演练 3:将副本拥有者更改为目标存储桶拥有者

         显示文本文件的复制状态 (副本) 和权限的对象属性屏幕截图。

      Amazon S3 复制对象所需的时间量取决于对象大小。有关查找复制状态的信息,请参阅查看跨区域复制状态

    • 在源存储桶中更新对象的 ACL,并验证更改是否出现在目标存储桶中。

      有关说明,请参阅如何在对象上设置权限? (在 Amazon Simple Storage Service 控制台用户指南 中)。

    • 更新对象的元数据。例如,更改存储类。验证更改是否出现在目标存储桶中。

      有关说明,请参阅如何向 S3 对象添加元数据? (在 Amazon Simple Storage Service 控制台用户指南 中)。

    请记住,副本是源存储桶中对象的精确副本。

跨区域复制 (CRR)

复制和不复制的内容

查看跨区域复制状态

演练 1:配置跨区域复制 (其中源存储桶和目标存储桶由同一 AWS 账户拥有)

本页内容: