复制配置文件元素
Amazon S3 以 XML 形式存储复制配置。如果您通过 Amazon S3 REST API 以编程方式配置复制,则可以在此 XML 文件中指定复制配置的不同元素。如果您通过 Amazon Command Line Interface(Amazon CLI)配置复制,则可以使用 JSON 格式指定复制配置。有关 JSON 示例,请参阅配置实时复制的示例中的演练。
注意
复制配置 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 文件中,必须指定一个 Amazon Identity and Access Management(IAM)角色以及一个或多个规则,如下面的示例所示:
<ReplicationConfiguration> <Role>
IAM-role-ARN
</Role> <Rule> ... </Rule> <Rule> ... </Rule> ... </ReplicationConfiguration>
Amazon S3 无法在未经您的权限的情况下复制对象。可以使用在复制配置中指定的 IAM 角色向 Amazon S3 授予权限。Amazon S3 担任此 IAM 角色以代表您复制对象。您必须先向 IAM 角色授予必要的权限。有关管理权限的更多信息,请参阅 为实时复制设置权限。
在以下场景下,只在复制配置中添加一个规则:
-
您希望复制所有对象。
-
您希望只复制对象的一个子集。通过在规则中添加一个筛选条件,可标识对象子级。在该筛选条件中,指定对象键前缀、标签或二者的组合,来标识要向其应用规则的对象子集。筛选条件指向与您指定的确切值相匹配的对象。
如果要复制不同的对象子集,请在复制配置中添加多个规则。在每个规则中,指定一个用于选择不同子集的筛选条件。例如,您可能选择了键前缀为 tax/
或 document/
的复制对象。要做到这一点,您需要添加两个规则,一个规则指定 tax/
键前缀筛选条件,另一个指定 document/
键前缀。有关对象键前缀的更多信息,请参阅使用前缀组织对象。
以下各节提供了更多信息。
基本规则配置
每个规则必须包含规则的状态和优先级。规则还必须指示是否复制删除标记。
-
<Status>
元素通过使用值Enabled
或Disabled
来指示是启用还是禁用规则。如果规则处于禁用状态,则 Amazon S3 不会执行规则中指定的操作。 -
<Priority>
元素指示当两个或更多复制规则冲突时哪个规则优先。Amazon S3 将尝试根据所有复制规则复制对象。但是,如果同一目标存储桶有两个或更多规则,则将根据具有最高优先级的规则复制对象。数字越大,优先级越高。 -
<DeleteMarkerReplication>
元素通过使用值Enabled
或Disabled
来指示是否复制删除标记。
在 <Destination>
元素配置中,必须提供您希望 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:::amzn-s3-demo-destination-bucket
</Bucket> </Destination> </Rule> <Rule> ... </Rule> ... ...
您也可以指定其他配置选项。例如,您可能选择了将一个存储类用于对象副本,将另一个存储类用于源对象。
可选:指定筛选条件
要选择规则应用于的对象子集,请添加一个可选筛选条件。可按对象键前缀、对象标签或二者的组合进行筛选。如果您同时按键前缀和对象标签进行筛选,Amazon S3 会使用逻辑 AND
运算符组合这些筛选条件。换句话说,规则会应用于同时具有特定键前缀和特定标签的对象子集。
根据对象键前缀进行筛选
要指定具有基于对象键前缀的筛选条件的规则,请使用以下 XML。对于每个规则,只能指定一个前缀。
<Rule> ... <Filter> <Prefix>
key-prefix
</Prefix> </Filter> ... </Rule> ...
根据对象标签进行筛选
要指定具有基于对象标签的筛选条件的规则,请使用以下 XML。可以指定一个或多个对象标签。
<Rule> ... <Filter> <And> <Tag> <Key>
key1
</Key> <Value>value1
</Value> </Tag> <Tag> <Key>key2
</Key> <Value>value2
</Value> </Tag> ... </And> </Filter> ... </Rule> ...
使用键前缀和对象标签进行筛选
要指定组合了键前缀和对象标签的规则筛选条件,请使用以下 XML。您需要将这些筛选条件包含在 <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> ...
注意
-
如果您指定了一条带有空
<Filter>
元素的规则,则该规则将应用于您存储桶中的所有对象。 -
当您在实时复制中使用基于标签的复制规则时,必须在
PutObject
操作中使用匹配的复制规则标签来标记新对象。否则,将不会复制对象。如果在PutObject
操作后标记了对象,也不会复制这些对象。要复制在
PutObject
操作之后标记的对象,您必须使用 S3 批量复制。有关分批复制的更多信息,请参阅 复制现有对象。
其他目标配置
在目标配置中,指定您希望 Amazon S3 将对象复制到其中的存储桶。您可以设置配置以将对象从一个源存储桶复制到一个或更多个目标存储桶。
... <Destination> <Bucket>arn:aws:s3:::
amzn-s3-demo-destination-bucket
</Bucket> </Destination> ...
您可在 <Destination>
元素中添加以下选项。
主题
指定存储类
您可以为对象副本指定存储类。默认情况下,Amazon S3 使用源对象的存储类来创建对象副本,如以下示例所示。
... <Destination> <Bucket>arn:aws:s3:::
amzn-s3-demo-destination-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:::amzn-s3-demo-destination-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:::amzn-s3-demo-destination-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:::amzn-s3-demo-destination-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:::amzn-s3-demo-destination-bucket2
</Bucket> </Destination> </Rule> ...
更改副本所有权
当源存储桶和目标存储桶由不同账户拥有时,您可以将副本的所有权更改为拥有目标存储桶的 Amazon Web Services 账户。为此,请添加 <AccessControlTranslation>
元素。这个元素将获取值 Destination
。
... <Destination> <Bucket>arn:aws:s3:::
amzn-s3-demo-destination-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% 的对象(由服务等级协议提供支持)。
注意
<EventThreshold>
和 <Time>
元素只接受值 <Minutes>15</Minutes>
。
... <Destination> <Bucket>arn:aws:s3:::
amzn-s3-demo-destination-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 满足合规性要求。有关 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:::
amzn-s3-demo-destination-bucket
</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>Amazon KMS key ID to use for encrypting object replicas
</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> ...
有关更多信息,请参阅 复制加密对象(SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)。
复制配置示例
首先,您可以根据需要将以下复制配置示例添加到存储桶。
重要
要向存储桶添加复制配置,您必须具有 iam:PassRole
权限。此权限允许您传递向 Amazon S3 授予复制权限的 IAM 角色。通过提供复制配置 XML 中 <Role>
元素中使用的 Amazon 资源名称(ARN),可指定 IAM 角色。有关更多信息,请参阅《IAM 用户指南》中的向用户授予将角色传递给 Amazon Web Services 服务的权限。
例 1:包含一个规则的复制配置
以下基本复制配置指定一个规则。该规则指定 Amazon S3 可担任的一个 IAM 角色以及用于对象副本的目标存储桶。<Status>
的元素值 Enabled
指示该规则是有效的。
<?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:::amzn-s3-demo-destination-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:::amzn-s3-demo-destination-bucket
</Bucket> </Destination> </Rule> </ReplicationConfiguration>
如果您指定 <Filter>
元素,则还必须包含 <Priority>
和 <DeleteMarkerReplication>
元素。在此示例中,由于只有一个规则,因此您为 <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:::amzn-s3-demo-destination-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:::amzn-s3-demo-destination-bucket
</Bucket> <StorageClass>storage-class
</StorageClass> </Destination> </Rule> </ReplicationConfiguration>
您可以指定 Amazon S3 支持的任何存储类。
例 2:包含两个规则的复制配置
在以下复制配置中,规则指定以下内容:
-
每个规则按不同的键前缀进行筛选,以便每个规则应用于不同的对象子集。在此示例中,Amazon S3 复制键名为
和Tax/doc1.pdf
的对象,但是它不复制键名为Project/project1.txt
的对象。PersonalDoc/documentA
-
尽管两个规则都指定
<Priority>
元素的值,但由于规则应用于两个不同的对象集,因此规则优先级无关紧要。下一示例将说明应用规则优先级时会发生的情况。 -
第二个规则为对象副本指定 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:::amzn-s3-demo-destination-bucket
</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:::amzn-s3-demo-destination-bucket
</Bucket> <StorageClass>STANDARD_IA
</StorageClass> </Destination> ... </Rule> </ReplicationConfiguration>
例 3:包含两个具有重叠前缀的规则的复制配置
在此配置中,两个规则指定具有重叠键前缀
和 star/
的筛选条件。两个规则应用于键名称为 starship/
的对象。在此示例中,Amazon S3 使用规则优先级确定要应用哪个规则。数字越大,优先级越高。starship-x
<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:::amzn-s3-demo-destination-bucket
</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:::amzn-s3-demo-destination-bucket
</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:::amzn-s3-demo-destination-bucket
</Bucket> </Destination> </Rule> </ReplicationConfiguration> -
当您从源存储桶中删除对象而不指定对象版本 ID 时,Amazon S3 会添加一个删除标记。如果使用复制配置 XML V1 格式,Amazon S3 仅复制因用户操作产生的删除标记。换句话说,Amazon S3 仅在用户删除对象时才复制删除标记。如果 Amazon S3 移除到期的对象(作为生命周期操作的一部分),Amazon S3 不会复制删除标记。
在复制配置 XML V2 格式中,可以为非基于标签的规则启用删除标记复制。有关更多信息,请参阅 在存储桶之间复制删除标记。