本指南不再进行更新。有关当前信息和说明,请参阅新的 Amazon S3 用户指南。
示例 3:当源存储桶和目标存储桶由不同账户拥有时更改副本拥有者
当复制配置中的源
存储桶和目标
存储桶由不同的 AWS 账户拥有时,您可以指示 Amazon S3 将副本所有权更改为拥有目标
存储桶的 AWS 账户。此示例介绍如何使用 Amazon S3 控制台和 AWS CLI 更改副本所有权。有关更多信息,请参阅更改副本拥有者。
主题
有关分步说明,请参阅《Amazon Simple Storage Service 控制台用户指南》中的当目标存储桶位于其他 AWS 账户中时配置复制规则。
要使用 AWS CLI 更改副本所有权,您需要创建存储桶,对存储桶启用版本控制,创建一个 IAM 角色,该角色向 Amazon S3 赋予复制对象并将复制配置添加到源存储桶的权限。在复制配置中,指示 Amazon S3 更改副本拥有者。此外,您还将测试该设置。
当源存储桶和目标存储桶由不同 AWS 账户拥有时更改副本所有权 (AWS CLI)
-
在此示例中,您将在两个不同的 AWS 账户中创建
源
存储桶和目标
存储桶。使用两个命名配置文件配置 AWS CLI。此示例分别使用名为acctA
和acctB
的配置文件。有关设置凭证配置文件的更多信息,请参阅《AWS 命令行界面用户指南》中的命名配置文件。重要 用于此练习的配置文件必须具有必要的权限。例如,在复制配置中,指定 Amazon S3 可担任的 IAM 角色。仅当您所使用的配置文件具有
iam:PassRole
权限时,您才能执行此操作。如果您使用管理员用户凭证创建命名配置文件,则可执行所有任务。有关更多信息,请参阅《IAM 用户指南》中的向用户授予将角色传递到 AWS 服务的权限。您将需要确保这些配置文件具有必要的权限。例如,复制配置包含 Amazon S3 可担任的 IAM 角色。仅当您所使用的命名配置文件具有
iam:PassRole
权限时,它才能将此类配置附加到存储桶。如果您在创建这些命名配置文件时指定管理员用户凭证,则这些配置文件都将具有权限。有关更多信息,请参阅《IAM 用户指南》中的向用户授予将角色传递到 AWS 服务的权限。 -
创建
源
存储桶,并启用版本控制。此示例在美国东部(弗吉尼亚北部)(us-east-1) 区域中创建源
存储桶。aws s3api create-bucket \ --bucket
source
\ --region us-east-1 \ --profile acctAaws s3api put-bucket-versioning \ --bucket
source
\ --versioning-configuration Status=Enabled \ --profile acctA -
创建一个
目标
存储桶,并启用版本控制。此示例在美国西部(俄勒冈)(us-west-2) 区域中创建目标
存储桶。使用不同于用于源
存储桶的 AWS 账户配置文件。aws s3api create-bucket \ --bucket
destination
\ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctBaws s3api put-bucket-versioning \ --bucket
destination
\ --versioning-configuration Status=Enabled \ --profile acctB -
您必须添加权限到
目标
存储桶策略以允许更改副本所有权。-
将以下策略保存到
destination-bucket-policy
.json{ "Version": "2012-10-17", "Statement": [ { "Sid":
"destination_bucket_policy_sid"
, "Principal": { "AWS":"source-bucket-owner-account-id"
}, "Action": [ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::destination
/*" ] } ] } -
将以上策略放置到
目标
存储桶:aws s3api put-bucket-policy --region
$
{destination_region
} --bucket$
{destination
} --policy file://destination_bucket_policy
.json
-
-
创建一个 IAM 角色。您将在稍后添加到
源
存储桶的复制配置中指定此角色。Amazon S3 担任此角色以代表您复制对象。分两个步骤创建 IAM 角色:-
创建角色。
-
将权限策略附加到角色。
-
创建一个 IAM 角色。
-
复制以下信任策略,并将其保存到本地计算机上当前目录中一个名为
S3-role-trust-policy.json
的文件。此策略会向 Amazon S3 授予担任该角色的权限。{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
-
运行以下 AWS CLI 命令以创建角色。
$
aws iam create-role \ --role-name replicationRole \ --assume-role-policy-document file://s3-role-trust-policy.json \ --profile acctA
-
-
将权限策略附加到角色。
-
复制以下权限策略,并将其保存到本地计算机上当前目录中一个名为
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
/*" } ] } -
要创建策略并将其附加到角色,请运行以下命令。
$
aws iam put-role-policy \ --role-name replicationRole \ --policy-document file://s3-role-perm-pol-changeowner.json \ --policy-name replicationRolechangeownerPolicy \ --profile acctA
-
-
-
向源存储桶添加复制配置。
-
AWS CLI 要求以 JSON 形式指定复制配置。将以下 JSON 保存到本地计算机上当前目录中一个名为
replication.json
的文件。在配置中,添加AccessControlTranslation
以指示副本所有权的更改。{ "Role":"
IAM-role-ARN
", "Rules":[ { "Status":"Enabled", "Priority":1, "DeleteMarkerReplication":{ "Status":"Disabled" }, "Filter":{ }, "Status":"Enabled", "Destination":{ "Bucket":"arn:aws:s3:::destination
", "Account":"destination-bucket-owner-account-id
", "AccessControlTranslation":{ "Owner":"Destination" } } } ] } -
编辑 JSON,即提供
目标
存储桶拥有者账户 ID 和IAM-role-ARN
的值。保存更改。 -
要向源存储桶添加复制配置,请运行以下命令。提供
源
存储桶名称。$
aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucketsource
\ --profile acctA
-
-
在 Amazon S3 控制台中检查副本所有权。
-
登录 AWS 管理控制台,并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
将对象添加到
源
存储桶。确认目标
存储桶包含对象副本,并且该副本的所有权已更改为拥有目标
存储桶的 AWS 账户。
-
有关添加复制配置的代码示例,请参阅在存储桶由相同账户拥有时配置复制(AWS 开发工具包)。您将需要适当地修改复制配置。有关概念性信息,请参阅更改副本拥有者。