如何使用 boto 以编程方式检查 Amazon S3 权限?

2024-01-27

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

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

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

Thx


下面是一些使用 boto 的 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 是什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 boto 以编程方式检查 Amazon S3 权限? 的相关文章

随机推荐