我如何以编程方式检查Amazon S3的权限与伯特?(How can I programmatica

2019-08-31 09:18发布

我们在亚马逊S3水桶有大量文件的一把浓密的树。 我刚刚发现,虽然有些文件有两个权限条目,如果点击在AWS管理控制台文件,然后属性可见 - >权限,一行是“人人”和其他一些特定的用户,其他文件只是有一个进入该用户。 作为结果,我们无法下载这些文件使用博托或卷曲的Amazon EC2实例的问题。

我需要做的是去了所有的文件在桶中,并对其进行检查。 我知道如何获得钥匙的完整列表的前缀。 我可以使用博托提取权限的关键,并且是有测试的标准方法,如果这些权限对每个人都是或特定使用者,他们是什么呢?

另外,一旦我确定如果密钥具有限制性的权限,以编程方式通过增加读取权限为“大家”改变他们?

谢谢

Answer 1:

下面是一些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。



文章来源: How can I programmatically check Amazon S3 permissions with boto?