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

CRR 附加配置:更改副本拥有者

在跨区域复制 (CRR) 中,默认情况下,源对象的拥有者也拥有副本。当源存储桶和目标存储桶由不同的 AWS 账户拥有时,您可以添加可选的配置设置以将副本所有权更改为拥有目标存储桶的 AWS 账户。例如,您可能会执行此操作来限制对对象副本的访问权。这称作复制配置的拥有者覆盖 选项。本部分仅介绍相关的附加配置设置。有关设置复制配置的信息,请参阅跨区域复制

要配置拥有者覆盖,您需要执行以下任务:

  • 将拥有者覆盖选项添加到复制配置以指示 Amazon S3 更改副本所有权。

  • 向 Amazon S3 授予更改副本所有权的权限。

  • 在目标存储桶策略中添加允许更改副本所有权的权限。这将允许目标存储桶的拥有者接受对象副本的所有权。

以下各部分介绍了如何执行这些任务。有关带分步说明的有效示例,请参阅示例 3:当源存储桶和目标存储桶由不同 AWS 账户拥有时更改副本拥有者

向复制配置添加拥有者覆盖选项

警告

仅当源存储桶和目标存储桶由不同的 AWS 账户拥有时,才添加拥有者覆盖选项。Amazon S3 不会检查这两个存储桶是由相同还是不同的账户拥有。如果您在两个存储桶均由相同 AWS 账户拥有时添加拥有者覆盖,Amazon S3 会应用拥有者覆盖。它向目标存储桶的拥有者授予完全权限,不会将后续的更新复制到源对象访问控制列表 (ACL)。副本拥有者可以使用 PUT ACL 请求直接更改与副本关联的 ACL,但不能通过复制进行更改。

要指定拥有者覆盖选项,请以下内容添加到 Destination 元素:

  • AccessControlTranslation 元素,指示 Amazon S3 更改副本所有权

  • Account 元素,指定目标存储桶拥有者的 AWS 账户

<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> ... <Destination> ... <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> <Account>destination-bucket-owner-account-id</Account> </Destination> </Rule> </ReplicationConfiguration>

以下复制配置示例指示 Amazon S3 将键前缀为 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> <ID>Rule-1</ID> <Priority>1</Priority> <Status>Enabled</Status> <Status>Enabled</Status> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Destination> <Bucket>arn:aws:s3:::destination-bucket</Bucket> <Account>destination-bucket-owner-account-id</Account> <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> </Destination> </Rule> </ReplicationConfiguration>

向 Amazon S3 授予更改副本所有权的权限

通过在 IAM 角色关联的权限策略中添加 s3:ObjectOwnerOverrideToBucketOwner 操作的权限,可向 Amazon S3 授予更改副本所有权的权限。此角色是复制配置中指定的 IAM 角色,允许 Amazon S3 担任该角色并代表您复制对象。

... { "Effect":"Allow", "Action":[ "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::destination-bucket/*" } ...

在目标存储桶策略中添加允许更改副本所有权的权限

目标存储桶的拥有者必须向源存储桶的拥有者授予更改副本所有权的权限。目标存储桶的拥有者向源存储桶的拥有者授予 s3:ObjectOwnerOverrideToBucketOwner 操作的权限。这允许目标存储桶拥有者接受对象副本的所有权。以下示例存储桶策略语句说明如何执行此操作:

... { "Sid":"1", "Effect":"Allow", "Principal":{"AWS":"source-bucket-account-id"}, "Action":["s3:ObjectOwnerOverrideToBucketOwner"], "Resource":"arn:aws:s3:::destination-bucket/*" } ...

其他注意事项

当您配置所有权覆盖选项时,请注意以下几点:

  • 默认情况下,源对象的拥有者也将拥有副本。Amazon S3 复制对象版本及其关联的 ACL。

     

    如果您添加拥有者覆盖,Amazon S3 将仅复制对象版本,而不复制 ACL。此外,Amazon S3 也不复制对源对象 ACL 的后续更改。Amazon S3 会在副本设置上 ACL,将完全控制权限授予目标存储桶拥有者。

     

  • 当您更新复制配置以启用或禁用拥有者覆盖时,会发生以下情况:

     

    • 如果向复制配置添加拥有者覆盖选项

       

      Amazon S3 复制对象版本时,它会放弃与源对象关联的 ACL。而是改为在副本上设置 ACL,将完全控制权限授予目标存储桶的拥有者。它不会复制对源对象 ACL 的任何后续更改。但是,此 ACL 更改不会应用于设置拥有者覆盖选项之前复制的对象版本。设置拥有者覆盖之前所复制的源对象 ACL 上的任何更新仍将继续复制(因为对象及其副本继续具有相同的拥有者)。

       

    • 如果从复制配置中删除拥有者覆盖选项

       

      Amazon S3 将源存储桶中出现的新对象及其关联的 ACL 复制到目标存储桶。对于删除拥有者覆盖之前复制的对象,Amazon S3 不会复制其 ACL,因为 Amazon S3 进行的对象所有权更改仍保持有效。也就是说,对于在您设置了拥有者覆盖的情况下所复制的对象版本上的 ACL,接下来不会进行复制。