使用AWS CLI同步具有多个凭据的S3存储桶

12

我只有源S3存储桶的只读访问权限。我无法更改此源帐户和存储桶的权限或类似的任何内容。我不拥有此帐户。

我想将所有文件从源存储桶同步到我拥有的目标存储桶中。我拥有包含目标存储桶的帐户。

我对于源存储桶和目标存储桶都有单独的凭证,但我不拥有源存储桶的凭证。

是否有一种方法可以使用AWS CLI使用两组凭据在存储桶之间进行同步?

aws s3 sync s3://source-bucket/ --profile source-profile s3://destination-bucket --profile default
如果没有,我该如何在拥有的目标存储桶上设置权限以便可以使用CLI进行同步?

这两个存储桶是否在不同的AWS账户中?您是否有修改存储桶策略的权限?如果是,请参考此答案:https://dev59.com/3Gcs5IYBdhLWcg3woFXt#17162973 - jzonthemtn
@jbird 不是同一个账户。源存储桶在我没有拥有的账户中,但我已经获得了读取凭据,目标存储桶在我拥有的账户中。 - duffn
4
使用 EC2 实例从一个存储桶下载文件并上传到另一个存储桶可能是最快的方法。这样,您就不必支付带宽费用,且速度更快。可能存在更好的方法,但我不知道。 - jzonthemtn
3个回答

6
内置的S3复制机制在API级别上要求将请求提交到目标存储桶,识别请求中的源存储桶和对象,并使用单一一组具有读取源和写入目标授权的凭据。这是从一个存储桶复制到另一个存储桶的唯一支持方式,而不必下载和上传文件。标准解决方案可在http://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example2.html找到。您可以授予其用户访问权限以写入您的存储桶,或者他们可以授予您的用户访问权限以访问他们的存储桶...但是在没有两个帐户所有者共同建立具有两种特权的单一凭据组的情况下,从一个存储桶复制到另一个存储桶而不下载和重新上传文件是不可能的。

3

使用rclone来完成此操作。它很方便,但我认为它会下载和上传文件,这使得处理大数据量时速度较慢。

rclone --config=creds.cfg copy source:bucket-name1/path/ target:bucket-name2/path/

creds.cfg:

[source]
type = s3
provider = AWS
access_key_id = AAA
secret_access_key = bbb

[target]
type = s3
provider = AWS
access_key_id = CCC
secret_access_key = ddd

1
这很可能是最方便的选择,如果你没有其中任何一个账户,那么这可能是唯一的选择。但是需要注意:命令中包含一个类型错误,destination 应该根据配置文件改为 target - Andreas

1
对于这个使用案例,我会考虑不同AWS账户拥有源和目标存储桶的跨区域复制
在此情况下,您可以设置源存储桶(由一个帐户拥有)上的跨区域复制,以复制另一个帐户拥有的目标存储桶中的对象。
该过程与在两个由同一帐户拥有的存储桶上设置跨区域复制的过程相同,只是需要多执行一步操作——目标存储桶所有者必须创建一个存储桶策略,授予源存储桶所有者进行复制操作的权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接