我需要在我的亚马逊帐户中做一个桶的镜像副本。
主要问题是某些对象具有“私有”权限,而其他部分具有“公共读取”权限。
当我跑:
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
所有对象都变为私有。
有没有办法同步文件并保留其权限?
--acl
是一个预定义的ACL,它是一个预定义的授权。您可以在AWS Documentation for Canned ACLs中查看可用的固定ACL。遗憾的是,当您通过CLI在存储桶之间复制对象时,看起来没有选项可以保留现有权限。基于存储桶名称,我假设您正在尝试将一个存储桶备份到另一个存储桶。亚马逊提供了一个名为Cross Region Replication的功能,这是我认为你正在寻找的功能。 CRR非常适合这种情况,因为它会立即将每个对象复制到备份桶,同时保留与该对象相关的大量数据。
目标存储桶中的对象副本是源存储桶中对象的精确副本。它们具有相同的键名和相同的元数据 - 例如,创建时间,所有者,用户定义的元数据,版本ID,访问控制列表(ACL)和存储类。 (可选)您可以为对象副本显式指定其他存储类。无论谁拥有源存储桶或源对象,您都可以选择将副本所有权更改为拥有目标存储桶的AWS账户。
如果那不是你想要做的事情而你只是想要一个脚本来在桶之间同步对象并保留权限,那么你可能不得不编写一个脚本,在每个对象复制后对其进行查找。到新存储桶并为其分配现有权限。请记住,您必须为这些S3 API操作付费,因此我建议您进行研究,这样您的AWS账单上就不会出现任何令人讨厌的意外情况。
我遇到了同样的问题 - 我有一个装有大量物品的桶,而其中一些应该可以公开访问。我必须在保留ACL的同时将整个存储桶复制到另一个存储桶,当然,手动设置ACL会花费我很多时间。
我在python中创建了这个简单的脚本,它将对象从一个存储桶复制到另一个存储桶,并为它设置ACL。
请参阅是否可以使用S3存储桶策略功能完成此操作。