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

复制配置

Amazon S3 以 XML 形式存储复制配置。在复制配置 XML 文件中,您将指定一个 Amazon Identity and Access Management (IAM) 角色以及一个或多个规则。

<ReplicationConfiguration> <Role>IAM-role-ARN</Role> <Rule> ... </Rule> <Rule> ... </Rule> ... </ReplicationConfiguration>

Amazon S3 无法在未经您的权限的情况下复制对象。您将向复制配置中指定的 IAM 角色授予权限。Amazon S3 将担任该 IAM 角色以代表您复制对象。您必须先向 IAM 角色授予必要的权限。有关管理权限的更多信息,请参阅 设置权限

在以下场景的复制配置中添加一个规则:

  • 您希望复制所有对象。

  • 您希望复制对象子集。通过在规则中添加一个筛选条件,可标识对象子级。在该筛选条件中,指定对象键前缀、标签或二者的组合以标识要向其应用规则的对象子集。筛选条件指向与您指定的确切值相匹配的对象。

如果要复制其他对象子集,请在复制配置中添加多个规则。在每个规则中,指定一个选择不同对象子集的筛选条件。例如,您可能选择了键前缀为 tax/document/ 的复制对象。要做到这一点,您需要添加两个规则,一个规则指定 tax/ 键前缀筛选条件,另一个指定 document/ 键前缀。有关对象键前缀的更多信息,请参阅使用前缀组织对象

以下各节提供了更多信息。

基本规则配置

每个规则必须包含规则的状态和优先级。规则还必须指示是否复制删除标记。

  • Status 通过使用值 EnabledDisabled 指示规则是启用还是禁用。如果规则处于禁用状态,则 Amazon S3 不会执行规则中指定的操作。

  • Priority 指示当两个或更多复制规则冲突时哪个规则优先。Amazon S3 将尝试根据所有复制规则复制对象。但是,如果同一目标存储桶有两个或更多规则,则将根据具有最高优先级的规则复制对象。数字越大,优先级越高。

  • DeleteMarkerReplication 通过使用值 EnabledDisabled 指示是否复制删除标记。

在目标配置中,您必须提供希望 Amazon S3 将对象复制到其中的存储桶的名称。

以下示例显示针对 V2 规则的最低要求。为了向后兼容,Amazon S3 仍继续支持 XML V1 格式。有关更多信息,请参阅向后兼容性

... <Rule> <ID>Rule-1</ID> <Status>Enabled-or-Disabled</Status> <Filter> <Prefix></Prefix> </Filter> <Priority>integer</Priority> <DeleteMarkerReplication> <Status>Enabled-or-Disabled</Status> </DeleteMarkerReplication> <Destination>       <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET</Bucket> </Destination> </Rule> <Rule> ... </Rule> ... ...

您也可以指定其他配置选项。例如,您可能选择了将一个存储类用于对象副本,将另一个存储类用于源对象。

可选:指定筛选条件

要选择规则应用于的对象子集,请添加一个可选筛选条件。可按对象键前缀、对象标签或二者的组合进行筛选。如果您同时按键前缀和对象标签进行筛选,Amazon S3 会使用逻辑 AND 运算符组合这些筛选条件。换句话中,规则会应用于具有特定键前缀和特定标签的对象子集。

根据对象键前缀进行筛选

要指定具有基于对象键前缀的筛选条件的规则,请使用以下代码。只能指定一个前缀。

<Rule> ... <Filter> <Prefix>key-prefix</Prefix> </Filter> ... </Rule> ...
根据对象标签进行筛选

要指定具有基于对象标签的筛选条件的规则,请使用以下代码。可以指定一个或多个对象标签。

<Rule> ... <Filter> <And> <Tag> <Key>key1</Key> <Value>value1</Value> </Tag> <Tag> <Key>key2</Key> <Value>value2</Value> </Tag> ... </And> </Filter> ... </Rule> ...
使用键前缀和对象标签进行筛选

要指定具有基于键前缀和对象标签组合的规则筛选条件,请使用以下代码。您需要将这些筛选条件包含在 And 父元素中。Amazon S3 会执行逻辑 AND 运算以组合这些筛选条件。换句话说,规则会应用于同时具有特定键前缀和特定标签的对象子集。

<Rule> ... <Filter> <And> <Prefix>key-prefix</Prefix> <Tag> <Key>key1</Key> <Value>value1</Value> </Tag> <Tag> <Key>key2</Key> <Value>value2</Value> </Tag> ... </Filter> ... </Rule> ...
注意

如果您指定了一个带有空筛选条件标签的规则,则该规则将应用于您的存储桶中的所有对象。

其他目标配置

在目标配置中,指定您希望 Amazon S3 将对象复制到其中的存储桶。您可以设置配置以将对象从一个源存储桶复制到一个或更多个目标存储桶。

... <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET</Bucket> </Destination> ...

您可在 <Destination> 元素中添加以下选项。

指定存储类

您可以为对象副本指定存储类。默认情况下,Amazon S3 使用源对象的存储类来创建对象副本,如以下示例所示。

... <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET</Bucket> <StorageClass>storage-class</StorageClass> </Destination> ...

添加多个目标存储桶

您可以在单个复制配置中添加多个目标存储桶,如下所示。

... <Rule> <ID>Rule-1</ID> <Status>Enabled-or-Disabled</Status> <Priority>integer</Priority> <DeleteMarkerReplication> <Status>Enabled-or-Disabled</Status> </DeleteMarkerReplication> <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET1</Bucket> </Destination> </Rule> <Rule> <ID>Rule-2</ID> <Status>Enabled-or-Disabled</Status> <Priority>integer</Priority> <DeleteMarkerReplication> <Status>Enabled-or-Disabled</Status> </DeleteMarkerReplication> <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET2</Bucket> </Destination> </Rule> ...

为涉及多个目标存储桶的每个复制规则指定不同的参数

在单个复制配置中添加多个目标存储桶时,可以为每个复制规则指定不同的参数,如下所示。

... <Rule> <ID>Rule-1</ID> <Status>Enabled-or-Disabled</Status> <Priority>integer</Priority> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Metrics> <Status>Enabled</Status> <EventThreshold> <Minutes>15</Minutes> </EventThreshold> </Metrics> <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET1</Bucket> </Destination> </Rule> <Rule> <ID>Rule-2</ID> <Status>Enabled-or-Disabled</Status> <Priority>integer</Priority> <DeleteMarkerReplication> <Status>Enabled</Status> </DeleteMarkerReplication> <Metrics> <Status>Enabled</Status> <EventThreshold> <Minutes>15</Minutes> </EventThreshold> </Metrics> <ReplicationTime> <Status>Enabled</Status> <Time> <Minutes>15</Minutes> </Time> </ReplicationTime> <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET2</Bucket> </Destination> </Rule> ...

更改副本所有权

当源存储桶和目标存储桶由不同账户拥有时,您可以将副本的所有权更改为拥有目标存储桶的 Amazon Web Services 账户。为此,请添加 AccessControlTranslation 元素。这个元素将获取值 Destination

... <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET</Bucket> <Account>destination-bucket-owner-account-id</Account> <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> </Destination> ...

如果您没有将 AccessControlTranslation 元素添加到复制配置中,则副本由拥有源对象的同一 Amazon Web Services 账户 拥有。有关更多信息,请参阅更改副本拥有者

启用 S3 Replication Time Control

您可以在复制配置中启用 S3 Replication Time Control(S3 RTC)。S3 RTC 在几秒钟内复制大多数对象,并在 15 分钟内复制 99.99% 的对象(由服务等级协议提供支持)。

注意

EventThresholdTime 只接受值 <Minutes>15</Minutes>

... <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET</Bucket> <Metrics> <Status>Enabled</Status> <EventThreshold> <Minutes>15</Minutes> </EventThreshold> </Metrics> <ReplicationTime> <Status>Enabled</Status> <Time> <Minutes>15</Minutes> </Time> </ReplicationTime> </Destination> ...

有关更多信息,请参阅使用 S3 Replication Time Control(S3 RTC)满足合规性要求。有关 API 示例,请参阅《Amazon Simple Storage Service API 参考》中的 PutBucketReplication

复制使用 Amazon KMS 通过服务器端加密所创建的对象

您的源存储桶可能包含一些对象,它们是使用 Amazon Key Management Service(Amazon KMS)密钥的服务器端加密(SSE-KMS)创建的。默认情况下,Amazon S3 不复制这些对象。您可以有选择地指示 Amazon S3 复制这些对象。要做到这一点,首先通过添加 SourceSelectionCriteria 元素显式选择此功能。然后提供 Amazon KMS key(对于目标存储桶的 Amazon Web Services 区域),用于加密对象副本。以下示例显示了如何指定这些元素。

... <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>Amazon KMS key ID to use for encrypting object replicas</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> ...

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

复制配置示例

首先,您可以根据需要将以下复制配置示例添加到存储桶。

重要

要向存储桶添加复制配置,您必须具有 iam:PassRole 权限。此权限允许您传递向 Amazon S3 授予复制权限的 IAM 角色。通过提供复制配置 XML 中 Role 元素中使用的 Amazon 资源名称(ARN),可指定 IAM 角色。有关更多信息,请参阅《IAM 用户指南》中的向用户授予将角色传递给 Amazon Web Service的权限

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

以下基本复制配置指定一个规则。该规则指定 Amazon S3 可担任的一个 IAM 角色以及用于对象副本的目标存储桶。EnabledStatus 值指示该规则是有效的。

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

要选择要复制的对象子集,可添加一个筛选条件。在以下配置中,该筛选条件指定一个对象键前缀。此规则将应用于其键名中带有前缀 Tax/ 的对象。

<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <Status>Enabled</Status> <Priority>1</Priority> <DeleteMarkerReplication> <Status>string</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax/</Prefix> </Filter> <Destination><Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET</Bucket></Destination> </Rule> </ReplicationConfiguration>

如果您指定 Filter 元素,则还必须包含 PriorityDeleteMarkerReplication 元素。在此示例中,由于只有一个规则,因此 Priority 无关紧要。

在以下配置中,筛选条件指定一个前缀和两个标签。规则将应用于具有指定键前缀和标签的对象子级。具体来说,规则将应用于键名前缀为 Tax/ 并具有指定对象标签的对象。由于只有一个规则,Priority 不适用。

<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <Status>Enabled</Status> <Priority>1</Priority> <DeleteMarkerReplication> <Status>string</Status> </DeleteMarkerReplication> <Filter> <And> <Prefix>Tax/</Prefix> <Tag> <Tag> <Key>tagA</Key> <Value>valueA</Value> </Tag> </Tag> <Tag> <Tag> <Key>tagB</Key> <Value>valueB</Value> </Tag> </Tag> </And> </Filter> <Destination><Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET</Bucket></Destination> </Rule> </ReplicationConfiguration>

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

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

您可以指定 Amazon S3 支持的任何存储类。

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

在以下复制配置中:

  • 每个规则按不同的键前缀进行筛选,以便每个规则应用于不同的对象子集。在此示例中,Amazon S3 复制键名为 Tax/doc1.pdfProject/project1.txt 的对象,但是它不复制键名为 PersonalDoc/documentA 的对象。

  • 由于规则应用于两个不同的对象子级,因此规则优先级无关紧要。下一示例将说明应用规则优先级时会发生的情况。

  • 第二个规则为对象副本指定 S3 Standard-IA 存储类。Amazon S3 对这些对象副本使用指定的存储类。

<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <Status>Enabled</Status> <Priority>1</Priority> <DeleteMarkerReplication> <Status>string</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Status>Enabled</Status> <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET1</Bucket> </Destination> ... </Rule> <Rule> <Status>Enabled</Status> <Priority>2</Priority> <DeleteMarkerReplication> <Status>string</Status> </DeleteMarkerReplication> <Filter> <Prefix>Project</Prefix> </Filter> <Status>Enabled</Status> <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET1</Bucket> <StorageClass>STANDARD_IA</StorageClass> </Destination> ... </Rule> </ReplicationConfiguration>
例 3:包含两个具有重叠前缀的规则的复制配置

在此配置中,两个规则指定具有重叠键前缀 star/starship/ 的筛选条件。两个规则应用于键名称为 starship-x 的对象。在此示例中,Amazon S3 使用规则优先级确定要应用哪个规则。数字越大,优先级越高。

<ReplicationConfiguration> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <Status>Enabled</Status> <Priority>1</Priority> <DeleteMarkerReplication> <Status>string</Status> </DeleteMarkerReplication> <Filter> <Prefix>star</Prefix> </Filter> <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET1</Bucket> </Destination> </Rule> <Rule> <Status>Enabled</Status> <Priority>2</Priority> <DeleteMarkerReplication> <Status>string</Status> </DeleteMarkerReplication> <Filter> <Prefix>starship</Prefix> </Filter> <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-BUCKET1</Bucket> </Destination> </Rule> </ReplicationConfiguration>
例 4:示例演练

有关演练示例,请参阅 演练:配置复制的示例

有关复制配置的 XML 结构的更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 PutBucketReplication

向后兼容性

复制配置 XML 的最新版本为 V2。XML V2 复制配置是那些包含规则的 Filter 元素和指定 S3 Replication Time Control(S3 RTC)的规则的配置。

要查看复制配置版本,您可以使用 GetBucketReplication API 操作。有关更多信息,请参阅 Amazon Simple Storage Service API 参考中的 GetBucketReplication

为了向后兼容,Amazon S3 仍继续支持 XML V1 复制配置。如果您已使用 XML V1 复制配置,请考虑影响向后兼容性的以下问题:

  • 复制配置 XML V2 包含规则的 Filter 元素。通过 Filter 元素,您可以指定基于对象键前缀和/或标签的对象筛选条件,以确定规则要应用于的范围。复制配置 XML V1 仅支持基于键前缀的筛选。在这种情况下,您直接添加 Prefix 作为 Rule 元素的子元素,如以下示例所示。

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

    为了向后兼容,Amazon S3 继续支持 V1 配置。

  • 当您从源存储桶中删除对象而不指定对象版本 ID 时,Amazon S3 会添加一个删除标记。如果使用复制配置 XML V1,Amazon S3 会复制因用户操作产生的删除标记。换句话说,Amazon S3 仅在用户删除对象时才复制删除标记。如果 Amazon S3 删除了过期的对象(作为生命周期操作的一部分),Amazon S3 不复制删除标记。

    在 V2 复制配置中,您可以为非基于标签的规则启用删除标记复制。有关更多信息,请参阅在存储桶之间复制删除标记