我做了有2个独立的AWS账户的客户的一些工作。我们需要将其中一个S3帐户中的存储桶中的所有文件移至第二个帐户上的新存储桶。S3移动到不同的帐户桶之间进行文件?
我们认为s3cmd会允许这样做,使用格式:
s3cmd cp s3://bucket1 s3://bucket2 --recursive
然而,这仅允许我使用一个账户的钥匙,我不能指定第二帐户的帐户。
有没有办法做到这一点,而无需下载文件并重新上传他们的第二帐户?
我做了有2个独立的AWS账户的客户的一些工作。我们需要将其中一个S3帐户中的存储桶中的所有文件移至第二个帐户上的新存储桶。S3移动到不同的帐户桶之间进行文件?
我们认为s3cmd会允许这样做,使用格式:
s3cmd cp s3://bucket1 s3://bucket2 --recursive
然而,这仅允许我使用一个账户的钥匙,我不能指定第二帐户的帐户。
有没有办法做到这一点,而无需下载文件并重新上传他们的第二帐户?
您不必向每个人开放权限。从斗使用的源和目标复制下面的水桶政策在一个帐户到另一个使用IAM用户
桶复制从 - SourceBucket
桶复制到 - DestinationBucket
来源AWS账户ID - XXXX-XXXX-XXXX
源IAM用户 - SRC-IAM-用户
以下策略装置 - 该IAM用户 - XXXX-XXXX-XXXX:SRC-IAM-用户具有S3:ListBucket和s3 :GetObject priv在SourceBucket/*和S3 ileges:ListBucket和S3:上DestinationBucket PutObject特权/ *
在SourceBucket政策应该是这样的:
{
"Id": "Policy1357935677554",
"Statement": [
{
"Sid": "Stmt1357935647218",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::SourceBucket",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
},
{
"Sid": "Stmt1357935676138",
"Action": ["s3:GetObject"],
"Effect": "Allow",
"Resource": "arn:aws:s3::: SourceBucket/*",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}
]
}
在DestinationBucket的政策应该是:
{
"Id": "Policy1357935677554",
"Statement": [
{
"Sid": "Stmt1357935647218",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3::: DestinationBucket",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
},
{
"Sid": "Stmt1357935676138",
"Action": ["s3:PutObject"],
"Effect": "Allow",
"Resource": "arn:aws:s3::: DestinationBucket/*",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}
]
}
要运行的命令是s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1
带宽内AWS不计,所以你可以从里面AWS一个盒子做这一切节省一些金钱和时间,只要将铲斗在同一区域。
至于这样做,而不必在文件touch在某处的计算机上 - 不这么认为。
除外:既然他们这样做,从你邮寄到他们的硬盘批量上传,他们可能会做同样为你的桶桶传送。
谢谢汤姆。看起来就是这样。从一个实例做起来似乎也是一个很好的方法。谢谢你的提示。 – Geuis
我会建议使用云莓S3的探险家,作为一个简单的解决方案,得到的东西快速移动。此外,它还允许您使用内部aws无带宽传输服务。
您也可以使用云莓SDK工具集成到您的应用程序。
好运 乔恩
好吧,想出了一个答案。有可能还有其他的方法来做到这一点,但这很容易。
我能够与s3cmd工具来做到这一点,但可能可以用类似的工具来完成。
当您配置s3cmd时,请配置您的您的帐户访问密钥和秘密访问密钥。
使用您正转移到的存储桶的帐户登录到S3 Web控制台。
参观S3 Web控制台。
https://console.aws.amazon.com/s3/home
点击你的存储桶,然后点击动作,然后点击属性。
在“权限”选项卡下的底部点击“添加更多的权限。”
Set "Grantee" to Everyone
Check "List" and "Upload/Delete"
Save
转移,从终端
s3cmd cp s3://from_account_bucket s3://to_account_bucket --recursive
运行,当传输完成后,应立即访问的S3控制台一次删除您添加的桶的权限。
这里显然有一个安全问题。我们转移到的存储桶向所有人开放。有人找到您的存储桶名称的机会很小,但确实存在。
您可以使用存储桶策略作为替代方式,只开放特定账户的访问权限,但这对我来说太难了,所以我把这个做为一个练习给那些需要弄清楚的人。
希望这会有所帮助。
对不起,-1为安全漏洞。这里绝对不是很好的做法 - 这是一个很大的破解。 – swrobel
即使角色和策略是一个真正优雅的方式,我有另一种解决方案:
在本地计算机(台式机或AWS之外的任何服务器)创建具有新的配置文件源代码桶帐户的凭证。
AWS --profile $ {} YOUR_CUSTOM_PROFILE在aws_access_key_id和aws_secret_access_key(你可以跳过区域和输出)配置
填充
保存你的目的 - 斗凭据作为环境的变量
出口AWS_ACCESS_KEY_ID = AKI ...
出口AWS_SECRET_ACCESS_KEY = CN ...
现在做同步,但增加的关键 “配置文件” - 参数
AWS --profile $ {} YOUR_CUSTOM_PROFILE S3同步S3:// $ {} SOURCE_BUCKET_NAME S3:// $ {} DESTINATION_BUCKET_NAME
如果源桶和目标桶的凭据不同,我可以执行S3同步吗? – HariShankar
Ref:在两个不同的帐户之间复制/移动:http://stackoverflow.com/questions/5518205/move-files-directly-from-one-s3-account-to-another –