AWS CLI S3同步存储桶并保留权限

时间:2019-03-24 14:01:55

标签: aws-cli

我需要在我的亚马逊帐户中创建存储分区的镜像副本。

主要问题是某些对象具有“私有”权限,而其他部分则具有“公共读取”权限。

当我跑步时:

aws s3 sync s3://bucket-saas s3://bucket-saas-bkp --acl public-read

运行时,所有对象都变为公用

aws s3 sync s3://bucket-saas s3://bucket-saas-bkp --acl private 所有对象都变为私有。

是否可以同步文件并保留其权限?

3 个答案:

答案 0 :(得分:1)

--acl是罐头ACL,它是预定义的授权。您可以在AWS Documentation for Canned ACLs中查看可用的罐头ACL。 遗憾的是,当您通过CLI在存储桶之间复制对象时,似乎没有保留现有权限的选项。基于存储桶名称,我假设您正在尝试将一个存储桶备份到另一个存储桶。亚马逊确实提供了名为Cross Region Replication的功能,这正是我认为您正在寻找的功能。 CRR非常适合此操作,因为它会立即跨每个对象复制到备份存储桶,同时保留与该对象关联的大量数据。

来自CRR documentation

  

目标存储桶中的对象副本是的精确副本   源存储桶中的对象。它们具有相同的键名,并且   相同的元数据-例如,创建时间,所有者,用户定义   元数据,版本ID,访问控制列表(ACL)和存储类。   (可选)您可以显式指定其他存储类   对象副本。不管谁拥有源存储桶或   源对象,您可以选择将副本所有权更改为AWS   拥有目标存储桶的帐户。

如果这不是您要执行的操作,而您只想让脚本在存储桶之间同步对象并保留权限,那么您可能必须编写一个脚本,该脚本将在每个对象之后对其进行查找将其复制到新存储桶,并为其分配现有权限。请记住,您必须为这些S3 API操作付费,因此我建议您进行研究,以免AWS账单上出现令人讨厌的惊喜。

答案 1 :(得分:1)

我遇到了同样的问题-我有一个装有大量物体的水桶,而其中一些应该可以公开使用。在保留ACL的同时,我不得不将整个存储桶复制到另一个存储桶中,当然,手动设置ACL将花费我很多时间。

我已经在python中制作了这个简单的脚本,该脚本将对象从一个存储桶复制到另一个存储桶,并为其设置ACL。

随时查看: https://github.com/terminator9999/aws-s3-bucket-copy/

答案 2 :(得分:0)

请参阅是否可以使用S3存储桶策略功能来完成此操作。

S3 Bucket Policy
Steps to Add Policy in s3 Bucket