Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

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

在此演练中,您会对由一个账户拥有的源存储桶设置跨区域复制,以便在由另一个账户拥有的目标存储桶中复制对象。

该过程与两个存储桶由同一个账户拥有时设置跨区域复制的过程基本相同,只是要执行一个额外步骤—目标存储桶拥有者必须创建一个存储桶策略,以便向源存储桶拥有者授予执行复制操作的权限。

在本练习中,您将使用控制台执行所有步骤 (除了创建 IAM 角色和对源存储桶设置复制配置)。您将使用 AWS CLI 或适用于 Java 的 AWS 开发工具包执行这些步骤。

  1. 创建两个存储桶。

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

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

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

    重要

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

  3. 对目标存储桶添加以下存储桶策略,以向源存储桶拥有者授予执行复制操作的权限:

    Copy
    { "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 控制台用户指南 中)。

  4. 在账户 A 中创建一个 IAM 角色。然后,账户 A 将在以下步骤中对源存储桶添加复制配置时指定此角色。

    使用 AWS CLI 创建该 IAM 角色。有关如何设置 AWS CLI 的说明,请参阅设置用于示例演练的工具

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

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

      Copy
      { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersion", "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. 运行以下 CLI 命令以创建角色:

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

      Copy
      $ aws iam create-policy \ --policy-name PolicyForS3CrossAccountCrossRegionReplication \ --policy-document file://S3-role-permissions-policy.json
    5. 记下在上一命令输出中返回的策略 ARN。

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

      Copy
      $ aws iam attach-role-policy \ --role-name RoleForS3CrossAccountCrossRegionReplication \ --policy-arn policy-arn

      账户 A 现在创建了一个执行必要 Amazon S3 操作所需的角色,以便复制对象。

  5. 在账户 A 中对源存储桶启用跨区域复制。在复制配置中,您将添加一个规则,请求 Amazon S3 将具有键名称前缀 Tax/ 的对象复制到指定目标存储桶。Amazon S3 会将复制配置保存为 XML,如以下示例所示:

    Copy
    <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 或 AWS 开发工具包向源存储桶添加复制配置。

    • 使用 AWS CLI。

      AWS CLI 要求以 JSON 形式指定配置。请将以下 JSON 保存在一个文件 (replication.json) 中。您需要提供存储桶名称和 IAM 角色 ARN。

      Copy
      { "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" } } ] }

      然后,运行 CLI 命令以向源存储桶添加复制配置:

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

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

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

      Copy
      $ aws s3api get-bucket-replication \ --bucket source-bucket
    • 使用适用于 Java 的 AWS 开发工具包。

      有关代码示例,请参阅 如何使用适用于 Java 的 AWS 开发工具包设置跨区域复制

  6. 按如下所示测试设置:

    • 使用账户 A 凭证,在源存储桶中创建对象并验证 Amazon S3 是否复制了账户 B 拥有的目标存储桶中的对象。Amazon S3 用于复制对象的时间取决于对象大小。有关查找复制状态的信息,请参阅如何查找对象的复制状态

      注意

      上传源存储桶中的对象时,对象键名称必须具有 Tax 前缀 (例如,Tax/document.pdf)。根据账户 A 添加到源存储桶的复制配置,Amazon S3 将仅复制具有 Tax 前缀的对象。

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

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

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

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

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

跨区域复制

复制和不复制的内容

如何查找对象的复制状态

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

本页内容: