更改副本拥有者 - Amazon Simple Storage Service

更改副本拥有者

在复制中,默认情况下,源对象的拥有者也拥有副本。当源存储桶和目标存储桶由不同的 AWS 账户 拥有时,并且您想要将副本拥有权更改为拥有目标存储桶的 AWS 账户,您可以添加可选的配置设置以将副本所有权更改为拥有目标存储桶的 AWS 账户。例如,您可能会执行此操作来限制对对象副本的访问权。这称作复制配置的拥有者覆盖 选项。有关所有者覆盖选项的更多信息,请参阅 向复制配置添加拥有者覆盖选项。有关设置复制配置的信息,请参阅复制对象

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

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

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

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

有关更多信息,请参阅向复制配置添加拥有者覆盖选项。有关带分步说明的有效示例,请参阅当源存储桶和目标存储桶由不同账户拥有时更改副本所有权

对象所有权的强制存储桶拥有者设置

当您使用 Amazon S3 复制,且源和目标存储桶由不同的 AWS 账户 拥有时,目标存储桶的存储桶拥有者可以禁用 ACL(通过对象所有权的强制存储桶拥有者设置)以将副本拥有权更改为拥有目标存储桶的 AWS 账户。此设置模拟现有的所有者覆盖行为,而无需 s3:ObjectOwnerOverrideToBucketOwner 权限。这意味着,在强制存储桶拥有者设置的情况下已复制到目标存储桶的所有对象都归目标存储桶拥有者所有。有关对象所有权的更多信息,请参阅为您的存储桶控制对象所有权和禁用 ACL。

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

警告

仅在源存储桶和目标存储桶由不同 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> <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,接下来不会进行复制。