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


90

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

有没有一种方法可以将文件直接从一个S3帐户移动到另一个帐户,而无需在两个帐户之间下载文件?

Answers:


22

如果您只是在寻找现成的解决方案,那么可以使用一些解决方案。Bucket Explorer在Mac和Windows上均可使用,可以像Cloudberry S3 ExplorerS3 Browser一样跨帐户复制,但是它们仅适用于Windows,因此可能不适用于您。

我怀疑AWS控制台也可以通过适当的权限设置来做到这一点,但我尚未对此进行测试。

您还可以使用AWS API来执行此操作,只要您已授予AWS账户您正在使用对目标存储桶的写入权限


为Bucket Explorer +1。在账户之间复制存储桶比使用AWS管理控制台或s3cmd容易得多。:第二组方向为我工作与他们的免费试用 bucketexplorer.com/documentation/...
LennonR

Cloudberry是必经之路。免费,而且安装更简单之后,拖放操作也很容易。不,我不在那儿工作:)
Skidadon 2015年

3
Bucket Explorer是否下载并重新上传数据,还是直接在Amazon服务器之间移动数据?
Wouter

请注意,Cloudberry试用版(至少为5.0.0.32版)的传输限制为5GB!
DarthPablo

123

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

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

以acc1的身份打开AWS管理控制台。转到Amazon S3存储桶属性,然后在“权限”选项卡中单击“添加更多权限”。然后为“已认证的用户”添加列表和查看权限。

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

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

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

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


8
大提示!rsync您也可以使用同步整个存储桶s3cmd sync s3://acc1_bucket s3://acc2_bucket
lllllll 2014年

6
如果将文件从目标复制到主机时遇到403 AccessDenied的问题,请参阅此文章。可能还有另一种方法,但是这里的结果对我有用。 alfielapeter.com/posts/...
crlane

有点大的桶呢?比如说在50GB的区域,它给您带来任何问题吗?
ianstarz 2014年

4
s3cmd也可以安装自制软件,
fyi

3
如果您的目标存储桶旨在公开提供文件..您可能要添加--acl-public其他内容,所有文件都是私有的(至少当我执行命令时,这对我来说是私有的)。有这么多的私人文件,我不得不在桶中添加策略,以使它们都再次公开
choonkeat

58

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

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

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

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


3
在一个很大的水桶上,我最好为此加油。s3cmd似乎停滞了在第一个存储桶中生成文件列表的速度。它可能已经完成,但是我很不耐烦。
考虑过2014年

2
我有同样的经历。不管出于什么原因,aws s3 sync它的运行速度似乎都比快s3cmd cp
pix0r 2014年

2
这对我有用。如果遇到权限问题,请尝试使用该--grants选项。文档中的更多信息:docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen 2015年

3
同步时不会复制权限,因此您必须指定--grants。复制大量数据后,我才学到了这一点,然后不得不将同步重做到新的存储桶。--grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers为公共用户设置读取权限。
丹·桑德兰

它的运行速度比s3cmd我快10倍,并且还能够同步更改文件,而不是在将来需要重新运行命令时重新复制所有内容-更好!
nfm 2015年

5

boto运作良好。看到这个线程。使用boto,您可以将对象直接从一个存储桶复制到另一个存储桶,而不是将它们下载到本地计算机并将其上传到另一个存储桶。


3

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

安德鲁是正确的,传输在本地下载文件,然后上传文件。


2
我有Transmit,对于您所描述的传输确实会将文件下载到临时文件夹,然后上传到其他服务器,我有99%的肯定。您确定文件没有流过计算机吗?
安德鲁(Andrew)

1
有人可以确认吗?
David Mauricio

2
我确定。传输下载和上传。这使事情变得非常缓慢,但是具有将复制的内容存储在正确的所有者下的巨大优势。
法比奥·鲁索

3

将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

为了更好的解释,请点击链接


2

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


4
应该注意的是,这只有付费版本才有可能。这不是一个免费的解决方案。
Michael Brook

2

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


他们在Windows商店中收取下载此文件的费用,但是您可以从其网站上免费获得该文件。创建一个AWS Access Key ID和Secret Access Key之后,我已经设法连接到我的S3存储。尚未测试复制任何内容,但看起来可能可行。
Wouter

1

对于新创建的文件(不存在对象),您可以利用AWS的新功能。这是跨区域复制(在S3存储桶的“版本”下)。您可以创建一个策略,将新对象复制到其他帐户中的存储桶。

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


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用户或角色执行跨帐户移动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.