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

设置跨区域复制

要设置跨区域复制,需要两个存储桶—源和目标。这两个存储桶必须启用版本控制,并且处于不同的 AWS 区域。有关可以在其中创建存储桶的 AWS 区域的列表,请参阅 AWS General Reference 中的区域和终端节点。源存储桶中的对象只能复制到一个目标存储桶。

重要

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

为由同一个 AWS 账户拥有的存储桶设置跨区域复制

如果这两个存储桶由同一个 AWS 账户拥有,则可以通过执行以下操作,设置从源存储桶到目标存储桶的跨区域复制:

  • 在账户中创建 IAM 角色。此角色向 Amazon S3 角色授予代表您复制对象的权限。

  • 对源存储桶添加复制配置。

创建 IAM 角色

Amazon S3 将源存储桶中的对象复制到目标存储桶。您必须通过 IAM 角色向 Amazon S3 授予必要权限。

注意

默认情况下,所有 Amazon S3 资源 (存储桶、对象和相关子资源) 都是私有的:只有资源拥有者可以访问资源。因此,Amazon S3 需要从源存储桶读取对象以及将它们复制到目标存储桶的权限。

创建 IAM 角色时,需将以下策略附加到角色:

  • 一个信任策略,您在其中将 Amazon S3 标识为可代入角色的服务委托人,如下所示:

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

    有关 IAM 角色的更多信息,请参阅 IAM 用户指南 中的 IAM 角色

  • 一个访问策略,您在其中向角色授予代表您执行复制任务的权限。在 Amazon S3 代入角色时,它将拥有您在此策略中指定的权限。

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws-cn:s3:::source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource":[ "arn:aws-cn:s3:::source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Resource":"arn:aws-cn:s3:::destination-bucket/*" } ] }

    访问策略授予以下操作的权限:

    • s3:GetReplicationConfigurations3:ListBucket 存储桶上的权限允许 Amazon S3 检索复制配置和列出存储桶 (当前权限模型需要 s3:ListBucket 权限来访问删除标记)。

    • s3:GetObjectVersions3:GetObjectVersionAcl – 针对所有对象授予的这些操作的权限允许 Amazon S3 获取对象的特定对象版本和访问控制列表 (ACL)。

    • s3:ReplicateObjects3:ReplicateDelete目标 存储桶中对象上的这些操作的权限允许 Amazon S3 在目标存储桶中复制对象或删除标记。有关删除标记的信息,请参阅删除操作和跨区域复制

      注意

      目标 存储桶上的 s3:ReplicateObject 操作的权限还允许复制对象标签。因此,Amazon S3 还复制对象标签 (您无需明确授予 s3:ReplicateTags 操作的权限)。

    • s3:GetObjectVersionTagging 存储桶中对象上的此操作的权限允许 Amazon S3 读取复制的对象标签 (请参阅 对象标签)。如果 Amazon S3 未获得此权限,则它将复制对象,但不复制对象标签 (如果有)。

    有关 Amazon S3 操作的列表,请参阅在策略中指定权限

    重要

    您只能授予您拥有其权限的资源的权限。更具体地说,拥有 IAM 角色的 AWS 账户必须拥有其向 IAM 角色授予的操作的权限。

    例如,假定源存储桶包含由另一个 AWS 账户拥有的对象。对象拥有者必须通过对象 ACL 向拥有 IAM 角色的 AWS 账户明确授予必要的权限。否则,这些对象的跨区域复制将失败 (因为根据角色策略中授予的权限,Amazon S3 无法访问这些对象)。有关 ACL 权限的信息,请参阅访问控制列表 (ACL) 概述

    在您了解有关其他 CRR 配置的更多信息后,您可以向 Amazon S3 授予其他资源的权限。一般规则仍将适用,即拥有 IAM 角色的 AWS 账户必须拥有其向 IAM 角色授予的操作的权限。

添加复制配置

向存储桶添加复制配置时,Amazon S3 会将该配置存储为 XML。以下是示例配置。有关 XML 结构的更多信息,请参阅 Amazon Simple Storage Service API Reference 中的 PUT Bucket 复制

重要

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

例 1:包含一个规则的复制配置

考虑以下复制配置:

<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws-cn:iam::AcctID:role/role-name</Role> <Rule> <Status>Enabled</Status> <Prefix></Prefix> <Destination><Bucket>arn:aws-cn:s3:::destinationbucket</Bucket></Destination> </Rule> </ReplicationConfiguration>

除了要让 Amazon S3 代入的 IAM 角色之外,配置还指定一个规则,如下所示:

  • 规则状态,指示规则是有效的。

  • 空前缀,指示规则适用于存储桶中的所有对象。

  • 目标存储桶,在其中复制对象。

您可以选择为对象副本指定存储类,如下所示:

<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws-cn:iam::account-id:role/role-name</Role> <Rule> <Status>Enabled</Status> <Prefix></Prefix> <Destination> <Bucket>arn:aws-cn:s3:::destinationbucket</Bucket> <StorageClass>storage-class</StorageClass> </Destination> </Rule> </ReplicationConfiguration>

如果 <Rule> 不指定存储类别,则 Amazon S3 将使用源对象的存储类别创建对象副本。

您可以指定 Amazon S3 支持的任何存储类,但 GLACIER 存储类除外。如果您要将对象转换为 GLACIER 存储类,请使用生命周期配置。有关生命周期管理的更多信息,请参阅对象生命周期管理。有关存储类别的更多信息,请参阅 存储类别

例 2:包含两个规则的复制配置

考虑以下复制配置:

<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws-cn:iam::account-id:role/role-name</Role> <Rule> <Prefix>Tax</Prefix> <Status>Enabled</Status> <Destination> <Bucket>arn:aws:s3:::destinationbucket</Bucket> </Destination> ... </Rule> <Rule> <Prefix>Project</Prefix> <Status>Enabled</Status> <Destination> <Bucket>arn:aws:s3:::destinationbucket</Bucket> </Destination> ... </Rule> </ReplicationConfiguration>

在复制配置中:

  • 每个规则均指定一个不同的键名称前缀,用于标识要将规则应用于的源存储桶中的一组单独的对象。随后,Amazon S3 仅复制带特定键前缀的对象。例如,Amazon S3 会复制具有键名称 Tax/doc1.pdfProject/project1.txt 的对象,但不会复制任何具有键名称 PersonalDoc/documentA 的对象。

  • 两个规则指定了同一个目标存储桶。

  • 两个规则均已启用。

您不能指定重叠前缀,如下所示:

<ReplicationConfiguration> <Role>arn:aws-cn:iam::AcctID:role/role-name</Role> <Rule> <Prefix>TaxDocs</Prefix> <Status>Enabled</Status> <Destination> <Bucket>arn:aws-cn:s3:::destinationbucket</Bucket> </Destination> </Rule> <Rule> <Prefix>TaxDocs/2015</Prefix> <Status>Enabled</Status> <Destination> <Bucket>arn:aws-cn:s3:::destinationbucket</Bucket> </Destination> </Rule> </ReplicationConfiguration>

两个规则指定重叠前缀 Tax/Tax/2015,这是不允许的。

例 3:示例演练

当源存储桶和目标存储桶由同一个 AWS 账户拥有时,您可以使用 Amazon S3 控制台设置跨区域复制。假设您拥有源存储桶和目标存储桶 (都启用了版本控制),则可以使用控制台对源存储桶添加复制配置。有关更多信息,请参阅以下主题:

为由其他 AWS 账户拥有的存储桶设置跨区域复制

在跨账户方案中设置复制配置时,除了执行上一个部分中概述的相同配置之外,目标存储桶拥有者还必须添加一个存储桶策略,以便向源存储桶拥有者授予执行复制操作的权限。

{ "Version":"2008-10-17", "Id":"PolicyForDestinationBucket", "Statement":[ { "Sid":"1", "Effect":"Allow", "Principal":{ "AWS":"SourceBucket-AcctID" }, "Action":[ "s3:ReplicateDelete", "s3:ReplicateObject" ], "Resource":"arn:aws:s3:::destinationbucket/*" }, { "Sid":"2", "Effect":"Allow", "Principal":{ "AWS":"SourceBucket-AcctID" }, "Action":"s3:List*", "Resource":"arn:aws:s3:::destinationbucket" } ] }

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

如果向源存储桶中的对象添加标签,请注意以下事项:

  • 如果源存储桶拥有者向 Amazon S3 授予 s3:GetObjectVersionTaggings3:ReplicateTags 操作的权限来复制对象标签 (通过 IAM 角色),则 Amazon S3 将复制标签以及对象。有关 IAM 角色的信息,请参阅创建 IAM 角色

  • 如果目标存储桶拥有者不希望复制标签,则该所有者可以向目标存储桶策略添加以下语句来显式拒绝 s3:ReplicateTags 操作的权限。

    ... "Statement":[ { "Effect":"Deny", "Principal":{ "AWS":"arn:aws:iam::SourceBucket-AcctID:root" }, "Action":["s3:ReplicateTags"], "Resource":"arn:aws:s3:::destinationbucket/*" } ] ...

更改副本所有权

您可以选择指示 Amazon S3 将副本所有权更改为拥有目标存储桶的 AWS 账户。这也称作复制配置的拥有者覆盖 选项。有关更多信息,请参阅跨区域复制的其他配置:更改副本拥有者

跨区域复制 (CRR)

复制和不复制的内容

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

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

查看跨区域复制状态

在 Amazon S3 中排查跨区域复制问题