【发布时间】:2014-04-11 09:13:10
【问题描述】:
是否可以使用 AWS CLI 在 AWS 账户之间复制 S3 存储桶的内容?我知道可以在同一账户中的存储桶之间复制/同步,但我需要将旧 AWS 账户的内容放入新账户。我为 AWS CLI 配置了两个配置文件,但我不知道如何在单个复制/同步命令中使用这两个配置文件。
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-cli
是否可以使用 AWS CLI 在 AWS 账户之间复制 S3 存储桶的内容?我知道可以在同一账户中的存储桶之间复制/同步,但我需要将旧 AWS 账户的内容放入新账户。我为 AWS CLI 配置了两个配置文件,但我不知道如何在单个复制/同步命令中使用这两个配置文件。
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-cli
非常简单。比方说:
旧 AWS 账户 = old@aws.com
新 AWS 账户 = new@aws.com
以 old@aws.com 身份登录 AWS 控制台
转到您选择的存储桶并应用以下存储桶政策:
{
"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 在上述政策中对您来说很明显
现在,请确保您使用 new@aws.com 的凭据运行 AWS-CLI
运行下面的命令,复制会像魅力一样发生:
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 存储桶复制的内容。
希望这会有所帮助。
【讨论】:
好的,我现在有这个工作!感谢您的回答。最后,我使用了@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 命令(需要 region 选项,因为帐户位于不同的区域):
aws --region us-east-1 s3 sync s3://myfoldername s3://myfoldername-accountb
【讨论】:
是的,你可以。 您需要首先在第二个账户中创建一个 IAM 用户并将权限委派给它 - 特定 S3 存储桶上的读/写/列表。完成此操作后,将此 IAM 用户的凭据提供给您的 CLI,它就会起作用。
如何委派权限: 向 IAM 用户委派跨账户权限 - AWS Identity and Access Management: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(而不是 Put)
【讨论】:
在我的例子中,下面提到的命令会起作用,希望这也对你有用。我在不同地区有两个不同的 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
【讨论】:
--profile 开关吗?它似乎对我不起作用,我在文档中找不到任何提及。