【问题标题】:How can I programmatically check Amazon S3 permissions with boto?如何使用 boto 以编程方式检查 Amazon S3 权限?
【发布时间】:2013-04-10 10:19:00
【问题描述】:

我们在 Amazon S3 的存储桶中有一棵茂密的树,其中包含大量文件。我刚刚发现,虽然有些文件有两个权限条目,如在 AWS 管理控制台中单击一个文件,然后是属性 -> 权限,一行是“每个人”,另一行是某个特定用户,其他文件只有一个该用户的条目。因此,我们在使用 boto 或 curl 将这些文件下载到 Amazon EC2 实例时遇到问题。

我需要做的是检查存储桶中的所有文件并检查它们。我知道如何获取前缀的完整键列表。我可以使用 boto 来提取密钥的权限吗?是否有标准的方法来测试这些权限是针对每个人还是针对特定的人,以及它们是什么?

此外,一旦我确定某个密钥是否具有限制性权限,我是否可以通过向“所有人”添加读取权限以编程方式更改它们?

谢谢

【问题讨论】:

    标签: python permissions amazon-s3 boto


    【解决方案1】:

    这里有一些 Python 代码,使用 boto,可以查看存储桶中的所有键。如果密钥不允许“所有人”读取密钥的内容,它将为该密钥添加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 是什么。

    【讨论】:

    • 我的桶里有很多对象,所以我想让这个过程多线程。这是我的代码,以防其他人发现它有用:pixelchef.net/…
    • 你有类似的boto3解决方案吗?
    猜你喜欢
    • 2015-09-22
    • 2013-02-03
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2012-08-11
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多