将文件直接从一个S3帐户移动到另一个帐户?

时间:2011-04-01 19:58:58

标签: file amazon-s3 amazon-web-services transfer

非常基本的问题,但我找不到答案。使用Transit我可以将文件从一个AWS账户上的一个S3存储桶“移动”到另一个AWS账户上的另一个S3存储桶,但实际上它是从第一个下载文件然后将它们上传到第二个。

有没有办法直接将文件从一个S3帐户移动到另一个S3帐户而无需在其间下载?

10 个答案:

答案 0 :(得分:122)

是的,有办法。它非常简单,但很难找到它。 8)

例如,假设您的第一个帐户用户名是acc1@gmail.com,第二个帐户是acc2@gmail.com。

以acc1打开AWS Management Console。转到Amazon S3存储桶属性,然后在“权限”选项卡中单击“添加更多权限”。然后为“Authenticated Users”添加列表和查看权限。

接下来,在AWS IAM(可以从控制台选项卡中访问)的acc2中创建一个对S3存储桶具有完全访问权限的用户(为了更安全,您可以设置准确的权限,但我更喜欢创建临时用户转移然后删除它。)

然后您可以使用s3cmd(使用acc2中新创建的用户的凭据)执行以下操作:

s3cmd cp s3://acc1_bucket/folder/ s3://acc2_bucket/folder --recursive

所有转会都将在亚马逊方面进行。

答案 1 :(得分:58)

使用aws cli(我使用的是ubuntu 14 ec2实例),然后运行以下命令:

aws s3 sync s3://bucket1 s3://bucket2

您需要为其中一个指定帐户详细信息,并对另一个具有公共写入权限或公共读取权限。

这将同步两个存储桶。您可以稍后再次使用相同的命令快速同步。最好的部分是,它似乎不需要任何带宽(例如文件不通过本地计算机)。

答案 2 :(得分:21)

如果您只是在寻找现成的解决方案,那么有一些解决方案可以做到这一点。 Bucket Explorer适用于Mac和Windows,copy across accountsCloudberry S3 Explorer可以S3 Browser,但它们只适用于Windows,因此可能对您不起作用。

我怀疑AWS console也可以通过适当的权限设置来完成,但我还没有测试过。

只要您将使用AWS API的AWS账户提供给目标存储桶,您也可以使用write permissions执行此操作。

答案 3 :(得分:5)

boto效果很好。见this thread。使用boto,您可以将对象直接从一个存储桶复制到另一个存储桶,而不是将它们下载到本地计算机并将其上传到另一个存储桶。

答案 4 :(得分:3)

在Mac OS X上,我使用了Panic的Transmit应用程序。我为每个S3帐户打开了一个窗口(使用API​​密钥和密钥)。然后我可以从一个窗口中的一个桶拖到另一个窗口中的另一个桶。 无需先在本地下载文件

Andrew是正确的,Transmit在本地下载文件然后上传文件。

答案 5 :(得分:2)

CrossFTP可以将S3文件直接从一个存储桶复制到另一个存储桶而无需下载。它是一个适用于Windows,Mac和Linux的GUI S3客户端。

答案 6 :(得分:2)

您可以使用Cyber​​duck(开源)

答案 7 :(得分:2)

将S3文件从一个帐户移动到另一个帐户

让我们考虑有两个帐户的源帐户和目标帐户。还有两个存储桶source-bucketdestination bucket。我们要将所有文件从source-bucket移到destination-bucket。我们可以按照以下步骤进行操作:

  1. aws configure
    • 使用凭据或IAM角色配置目标帐户。
  2. 为目标帐户用户创建用户策略。
  3. 通过修改源存储桶策略并将目标帐户用户策略添加到源存储桶,来使目标用户访问源存储桶。这样,目标用户将可以访问源存储桶。
  4. aws s3 ls s3://source-bucket/
    • 这将检查目标帐户是否有权访问源存储桶。只是为了确认。
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • 这会将源存储桶中的所有文件复制到目标存储桶中。使用--recursive标志复制所有文件。
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • 这会将所有文件从源存储桶移动到目标存储桶。

或者您可以使用sync命令  -aws s3 sync s3://source-bucket s3://detination-bucket

要获得更好的解释,请遵循link

答案 8 :(得分:1)

对于新创建的文件(不是现有对象),您可以利用AWS的新功能。它是跨区域复制(在"版本控制"对于S3存储桶)。您可以创建一个策略,允许您将新对象复制到另一个帐户中的存储桶。

对于现有对象,您仍然需要使用其他方法复制对象 - 除非AWS在将来为此引入了本机功能。

答案 9 :(得分:0)

一个人可以这样运行以下命令:

aws s3 mv (sync for keeping buckets in sync) s3://source-bucket s3://destination-bucket --recursive

  1. 在源帐户的源存储桶中添加存储桶策略。

  2. 将AWS Identity and Access Management(IAM)策略附加到目标帐户中的用户或角色。

  3. 使用“目标帐户”中的IAM用户或角色执行跨帐户转移。