我们在亚马逊S3水桶有大量文件的一把浓密的树。 我刚刚发现,虽然有些文件有两个权限条目,如果点击在AWS管理控制台文件,然后属性可见 - >权限,一行是“人人”和其他一些特定的用户,其他文件只是有一个进入该用户。 作为结果,我们无法下载这些文件使用博托或卷曲的Amazon EC2实例的问题。
我需要做的是去了所有的文件在桶中,并对其进行检查。 我知道如何获得钥匙的完整列表的前缀。 我可以使用博托提取权限的关键,并且是有测试的标准方法,如果这些权限对每个人都是或特定使用者,他们是什么呢?
另外,一旦我确定如果密钥具有限制性的权限,以编程方式通过增加读取权限为“大家”改变他们?
谢谢
下面是一些Python代码,使用博托,会去翻所有在桶中的钥匙。 如果该键不允许“人人”读取密钥的内容,这将增加public-read
权限是关键:
import boto
all_users = 'http://acs.amazonaws.com/groups/global/AllUsers'
conn = boto.connect_s3()
bucket = conn.get_bucket('mybucket')
for key in bucket:
readable = False
acl = key.get_acl()
for grant in acl.acl.grants:
if grant.permission == 'READ':
if grant.uri == all_users:
readable = True
if not readable:
key.make_public()
此代码还没有被彻底的测试,所以你应该首先尝试的事情了。 此外,明确的是,这样做的最终结果是使任何人在所有的桶中的对象的读取。 也请记住,所以如果有几百万个对象的这个脚本取桶中的每个对象的当前ACL,这是数以百万计,可以采取大量的时间和与它相关的一些费用的请求。
另一种方法是只调用make_public()
桶中的每一个关键,不管它的当前ACL。