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

示例 3:当源存储桶和目标存储桶由不同账户拥有时更改副本拥有者

当复制配置中的存储桶和目标存储桶由不同的 AWS 账户拥有时,您可以指示 Amazon S3 将副本所有权更改为拥有目标存储桶的 AWS 账户。此示例介绍如何使用 Amazon S3 控制台和 AWS CLI 更改副本所有权。有关更多信息,请参阅 其他复制配置:更改副本拥有者

主题

    当存储桶由不同账户拥有时更改副本拥有者(控制台)

    有关分步说明,请参阅Amazon Simple Storage Service 控制台用户指南中的 当目标存储桶位于其他 AWS 账户中时配置复制规则

    当存储桶由不同账户拥有时更改副本拥有者 (AWS CLI)

    要使用 AWS CLI 更改副本所有权,您需要创建存储桶,对存储桶启用版本控制,创建一个 IAM 角色,该角色向 Amazon S3 赋予复制对象并将复制配置添加到源存储桶的权限。在复制配置中,指示 Amazon S3 更改副本拥有者。此外,您还将测试该设置。

    当源存储桶和目标存储桶由不同 AWS 账户拥有时更改副本所有权 (AWS CLI)

    1. 在此示例中,您将在两个不同的 AWS 账户中创建存储桶和目标存储桶。使用两个命名配置文件配置 AWS CLI。此示例分别使用名为 acctAacctB 的配置文件。有关设置凭证配置文件的更多信息,请参阅 AWS Command Line Interface 用户指南 中的命名配置文件

      重要

      用于此练习的配置文件必须具有必要的权限。例如,在复制配置中,指定 Amazon S3 可担任的 IAM 角色。仅当您所使用的配置文件具有 iam:PassRole 权限时,您才能执行此操作。如果您使用管理员用户凭证创建命名配置文件,则可执行所有任务。有关更多信息,请参阅IAM 用户指南中的向用户授予将角色传递给 AWS 服务的权限

      您将需要确保这些配置文件具有必要的权限。例如,复制配置包含 Amazon S3 可代入的 IAM 角色。仅当您所使用的命名配置文件具有 iam:PassRole 权限时,它才能将此类配置附加到存储桶。如果您在创建这些命名配置文件时指定管理员用户凭证,则这些配置文件都将具有权限。有关更多信息,请参阅IAM 用户指南中的向用户授予将角色传递给 AWS 服务的权限

    2. 创建存储桶,并启用版本控制。此示例在美国东部(弗吉尼亚北部) (us-east-1) 区域中创建存储桶。

      aws s3api create-bucket \ --bucket source \ --region us-east-1 \ --profile acctA
      aws s3api put-bucket-versioning \ --bucket source \ --versioning-configuration Status=Enabled \ --profile acctA
    3. 创建一个目标存储桶,并启用版本控制。此示例在美国西部(俄勒冈) (us-west-2) 区域中创建目标存储桶。使用不同于用于存储桶的 AWS 账户配置文件。

      aws s3api create-bucket \ --bucket destination \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctB
      aws s3api put-bucket-versioning \ --bucket destination \ --versioning-configuration Status=Enabled \ --profile acctB
    4. 您必须添加权限到目标存储桶策略以允许更改副本所有权。

      1. 将以下策略保存到 destination-bucket-policy.json

        { "Version": "2012-10-17", "Statement": [ { "Sid": "<destination_bucket_policy_sid>", "Principal": { "AWS": "<src_account>" }, "Action": [ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Effect": "Allow", "Resource": [ "arn:<partition>:s3:::<destination_bucket_name>/*" ] } ] }
      2. 将以上策略放置到目标存储桶:

        aws s3api put-bucket-policy --region ${destination_region} --bucket ${destination_bucket_name} --policy file://destination_bucket_policy.json
    5. 创建一个 IAM 角色。您将在稍后添加到存储桶的复制配置中指定此角色。Amazon S3 担任此角色以代表您复制对象。分两个步骤创建 IAM 角色:

      • 创建角色。

      • 将权限策略附加到角色。

      1. 创建一个 IAM 角色。

        1. 复制以下信任策略,并将其保存到本地计算机上当前目录中一个名为 S3-role-trust-policy.json 的文件。此策略会向 Amazon S3 授予代入该角色的权限。

          { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
        2. 运行以下 AWS CLI 命令以创建角色。

          $ aws iam create-role \ --role-name replicationRole \ --assume-role-policy-document file://s3-role-trust-policy.json \ --profile acctA
      2. 将权限策略附加到角色。

        1. 复制以下权限策略,并将其保存到本地计算机上当前目录中一个名为 s3-role-perm-pol-changeowner.json 的文件。此策略授予对各种 Amazon S3 存储桶和对象操作的权限。在以下步骤中,您将创建一个 IAM 角色并将权限策略附加到该角色。

          { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::source/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::source" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Resource":"arn:aws:s3:::destination/*" } ] }
        2. 要创建策略并将其附加到角色,请运行以下命令。

          $ aws iam put-role-policy \ --role-name replicationRole \ --policy-document file://s3-role-perm-pol-changeowner.json \ --policy-name replicationRolechangeownerPolicy \ --profile acctA
    6. 向源存储桶添加复制配置。

      1. AWS CLI 要求以 JSON 形式指定复制配置。将以下 JSON 保存到本地计算机上当前目录中一个名为 replication.json 的文件。在配置中,添加 AccessControlTranslation 以指示副本所有权的更改。

        { "Role":"IAM-role-ARN", "Rules":[ { "Status":"Enabled", "Priority":"1", "DeleteMarkerReplication":{ "Status":"Disabled" }, "Filter":{ "Prefix":"Tax" }, "Status":"Enabled", "Destination":{ "Bucket":"arn:aws:s3:::destination", "Account":"destination-bucket-owner-account-id", "AccessControlTranslation":{ "Owner":"Destination" } } } ] }
      2. 编辑 JSON,即提供目标存储桶拥有者账户 ID 和 IAM-role-ARN 的值。保存更改。

      3. 要向源存储桶添加复制配置,请运行以下命令。提供存储桶名称。

        $ aws s3api put-bucket-replication \ --replication-configuration file://replication-changeowner.json \ --bucket source \ --profile acctA
    7. 在 Amazon S3 控制台中检查副本所有权。

      1. 登录 AWS 管理控制台,并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

      2. 存储桶中,创建一个名为 Tax 的文件夹。

      3. 将对象添加到存储桶中的该文件夹。确认目标存储桶包含对象副本,并且该副本的所有权已更改为拥有目标存储桶的 AWS 账户。

    当存储桶由不同账户拥有时更改副本拥有者(AWS 开发工具包)

    有关添加复制配置的代码示例,请参阅在存储桶由相同账户拥有时配置复制(AWS 开发工具包)。您将需要适当地修改复制配置。有关概念性信息,请参阅其他复制配置:更改副本拥有者