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

演练 3:将副本拥有者更改为目标存储桶拥有者

在本练习中,您更新练习 2 (演练 2:配置跨区域复制 (其中源存储桶和目标存储桶由不同 AWS 账户拥有) ) 中的复制配置以指示 Amazon S3 将副本拥有者更改为拥有目标存储桶的 AWS 账户。有关更改副本所有权的更多信息,请参阅跨区域复制的其他配置:更改副本拥有者

  1. 完成演练 2。有关说明,请参阅演练 2:配置跨区域复制 (其中源存储桶和目标存储桶由不同 AWS 账户拥有)

  2. 通过添加 <AccessControlTranslation> 元素更新复制配置规则,如下所示:

    <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></Prefix> <Destination> <Bucket>arn:aws:s3:::destinationbucket</Bucket> <Account>destination-bucket-owner-account-id</Account> <StorageClass>storage-class</StorageClass> <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> </Destination> </Rule> </ReplicationConfiguration>

    在此示例中,您可以使用 AWS CLI 或 AWS 开发工具包添加复制配置。由于控制台不支持在其他 AWS 账户中指定目标存储桶,因此您不能使用控制台。

    • 使用 AWS CLI.

      AWS CLI 要求以 JSON 形式指定复制配置。请将以下 JSON 保存在一个文件 (replication.json) 中。

      { "Role": "arn:aws:iam::AWS-ID-Account-A:role/role-name", "Rules": [ { "Prefix": "Tax", "Status": "Enabled", "Destination": { "Bucket": "arn:aws:s3:::destination-bucket", "AccessControlTranslation" : { "Owner" : "Destination" } } } ] }

      通过提供存储桶名称和角色 Amazon 资源名称 (ARN) 来更新 JSON。随后运行 AWS CLI 命令以向源存储桶添加复制配置:

      $ aws s3api put-bucket-replication \ --bucket source-bucket \ --replication-configuration file://replication.json \ --profile accountA

      有关如何设置 AWS CLI 的说明,请参阅设置用于示例演练的工具

      您可以使用 get-bucket-replication 命令检索复制配置:

      $ aws s3api get-bucket-replication \ --bucket source-bucket \ --profile accountA
    • 使用 AWS SDK for Java.

      有关代码示例,请参阅 使用AWS SDK for Java设置跨区域复制

  3. 在 IAM 控制台中,选择您创建的 IAM 角色,并通过添加 s3:ObjectOwnerOverrideToBucketOwner 操作的权限来更新关联的权限策略。

    将显示更新后的策略:

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::destination-bucket/*" } ] }
  4. 在 Amazon S3 控制台中,选择目标存储桶并更新存储桶策略,如下所示:

    • 向源对象拥有者授予 s3:ObjectOwnerOverrideToBucketOwner 操作的权限。

    • 向源存储桶拥有者授予 s3:ListBuckets3:ListBucketVersions 操作的权限。

    以下存储桶策略显示其他权限。

    { "Version":"2008-10-17", "Id":"PolicyForDestinationBucket", "Statement":[ { "Sid":"1", "Effect":"Allow", "Principal":{ "AWS":"source-bucket-owner-aws-account-id" }, "Action":[ "s3:ReplicateDelete", "s3:ReplicateObject", "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::destinationbucket/*" }, { "Sid":"2", "Effect":"Allow", "Principal":{ "AWS":"source-bucket-owner-aws-account-id" }, "Action":[ "s3:ListBucket", "s3:ListBucketVersions" ], "Resource":"arn:aws:s3:::destinationbucket" } ] }
  5. 在 Amazon S3 控制台中测试复制配置:

    1. 将对象上传到源存储桶 (在 Tax 文件夹中)。

    2. 验证是否已在目标存储桶中创建副本。对于副本,验证权限。请注意,目标存储桶拥有者现在具有对象副本的完全权限。