是否可以使用AWS CLI在AWS账户之间复制S3存储桶的内容?我知道可以在同一个帐户中的存储桶之间复制/同步,但我需要将旧AWS账户的内容转换为新账户。我在AWS CLI上配置了两个配置文件,但我没有看到如何在单个copy / sync命令中使用这两个配置文件。
答案 0 :(得分:20)
非常简单。让我们说:
旧AWS账户= old@aws.com
新AWS账户= new@aws.com
以old@aws.com
转到您选择的存储分区并应用存储分区策略:
{
"Statement": [
{
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucket_name",
"Principal": {
"AWS": [
"account-id-of-new@aws.com-account"
]
}
},
{
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucket_name/*",
"Principal": {
"AWS": [
"account-id-of-new@aws.com-account"
]
}
}
]
}
我认为bucket_name
和account-id-of-new@aws.com-account1
在上述政策
现在,请确保您使用AWS-CLI
new@aws.com
运行以下命令,副本将像魅力一样发生:
aws s3 cp s3://bucket_name/some_folder/some_file.txt s3://bucket_in_new@aws.com_acount/fromold_account.txt
当然,请确保new@aws.com
对自己的存储桶bucket_in_new@aws.com_acount
具有写权限,该存储桶在上述命令中用于保存从old@aws.com
存储桶复制的内容。
希望这有帮助。
答案 1 :(得分:6)
好的,我现在有这个工作!谢谢你的回答。最后,我使用了@slayedbylucifer和@Sony Kadavan之间的组合。对我有用的是新的存储桶策略和新的用户策略。
我添加了以下存储桶策略(帐户A):
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::myfoldername",
"Principal": {
"AWS": [
"arn:aws:iam::111111111111:user/myusername"
]
}
},
{
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::myfoldername",
"Principal": {
"AWS": [
"arn:aws:iam::111111111111:user/myusername"
]
}
}
]
}
以下用户政策(帐户B):
{
"Version": "2012-10-17",
"Statement":{
"Effect":"Allow",
"Action":"s3:*",
"Resource":"arn:aws:s3:::myfoldername/*"
}
}
并使用以下aws cli命令(区域选项是必需的,因为帐户位于不同的区域):
aws --region us-east-1 s3 sync s3://myfoldername s3://myfoldername-accountb
答案 2 :(得分:1)
是的,你可以。 您需要首先在第二个帐户中创建一个IAM用户并将权限委派给它 - 在特定的S3存储桶上读/写/列表。完成此操作后,将此IAM用户的凭据提供给CLI,它将起作用。
如何委派权限: 向IAM用户委派跨账户权限 - AWS身份和访问管理:http://docs.aws.amazon.com/IAM/latest/UserGuide/DelegatingAccess.html#example-delegate-xaccount-roles
Sample S3 policy for delegation:
{
"Version": "2012-10-17",
"Statement" : {
"Effect":"Allow",
"Sid":"AccountBAccess1",
"Principal" : {
"AWS":"111122223333"
},
"Action":"s3:*",
"Resource":"arn:aws:s3:::mybucket/*"
}
}
在生产设置中执行此操作时,对权限的限制更多。如果您需要从一个桶复制到另一个桶。然后在一方面,你只需要给出List和Get(not Put)
答案 3 :(得分:1)
在我的情况下,下面提到的命令会起作用,希望这也适合你。我在不同的地区有两个不同的AWS账户,我想将旧的存储桶内容复制到新的存储桶中。我在AWS CLI中配置了两个配置文件。
使用以下aws cli命令:
aws s3 cp --profile <profile1> s3://source_bucket_path/ --profile <profile2> s3://destination_bucket_path/ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --recursive