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

And*_*rew 87 file amazon-s3 transfer amazon-web-services

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

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

sid*_*e2k 122

是的,有一种方法.它非常简单,但很难找到它.8)

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

以acc1 打开AWS管理控制台.转到Amazon S3存储桶属性,然后在"权限"选项卡中单击"添加更多权限".然后为"Authenticated Users"添加List和View Permissions.

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

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

s3cmd cp s3://acc1_bucket/folder/ s3://acc2_bucket/folder --recursive
Run Code Online (Sandbox Code Playgroud)

所有转账都将在亚马逊方面进行.

  • 棒极了!同样用于同步整个桶```rsync`,你可以使用`s3cmd sync s3:// acc1_bucket s3:// acc2_bucket`. (8认同)
  • 如果在将文件从目标复制到主机时遇到403 AccessDenied问题,请参阅此文章.可能还有另一种方法可以做到,但结果对我有用.http://www.alfielapeter.com/posts/8-transferring-s3-bucket-contents-between-accounts-with-s3cmd (6认同)
  • f3可以和自制软件一起安装`s3cmd` (4认同)
  • 如果你的目标存储桶是为了公开提供文件..你可能想要添加`--acl-public`,否则所有文件都是私有的(至少在我执行命令时它对我来说).有这么多私人文件,我不得不在桶中添加一个策略,让它们再次公开 (3认同)

Pro*_*ter 59

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

aws s3 sync s3://bucket1 s3://bucket2
Run Code Online (Sandbox Code Playgroud)

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

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

  • 在一个非常大的桶上我运气好了.s3cmd似乎停止生成第一个桶中的文件列表.它可能已经完成,但我不耐烦了. (3认同)
  • 同步时不会复制权限,因此您必须指定`--grants`.我在复制了大量数据后学到了这一点,然后不得不将同步重做为新的存储桶.`--grants read = uri = http:// acs.amazonaws.com/groups/global/AllUsers`为公共用户设置读权限. (3认同)
  • 我有同样的经历; 无论出于何种原因,`aws s3 sync`似乎比`s3cmd cp`快一个数量级. (2认同)
  • 这对我有用.如果遇到权限问题,请尝试使用`--grants`选项.文档中的更多信息:http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html (2认同)

Geo*_*ord 21

如果您只是在寻找现成的解决方案,那么有一些解决方案可以做到这一点.Bucket Explorer可在Mac和Windows上运行,可以像Cloudberry S3 ExplorerS3 Browser一样在帐户中进行复制,但它们仅适用于Windows,因此可能不适合您.

我怀疑AWS控制台也可以使用适当的权限设置来完成它,但我还没有对此进行测试.

您也可以使用AWS API执行此操作,只要您已使用对目标存储桶使用写入权限的AWS账户.

  • Bucket Explorer是下载并重新上传数据,还是直接在Amazon服务器之间移动数据? (3认同)

Ros*_*one 5

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