0

我正在使用 python 中的 boto3 模块,我已经创建了一个可以找到可公开访问的存储桶的机器人,但这是为具有他的凭据的单个用户完成的。我正在考虑推进这些功能并让机器人在每个用户帐户中获取所有可公开访问的存储桶。我想知道这是否可能,如果是,如何,如果不是,为什么?

4

2 回答 2

1

看方法get_bucket_acl()

如果存储桶是公共的,您应该会看到一个 ACL 来回Grantee->http://acs.amazonaws.com/groups/global/AllUsers'

例子:

>> client.get_bucket_acl(Bucket='PublicBucket')
....
  {'Grantee': {u'Type': 'Group',
    'URI': 'http://acs.amazonaws.com/groups/global/AllUsers'},
   'Permission': 'READ'}], ...

如您所见AllUsers,允许全局组READ访问此存储桶。

您可能还想检查get_bucket_policy()并确保存储桶上是否有策略,它不允许公共访问。

例子:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/*"]
    }
  ]
}

"Principal": "*"S3:GetObject表示每个人都可以访问examplebucket/*

这篇文章也可能有所帮助。

于 2018-01-31T09:04:39.377 回答
1

这是不可能的。

无法发现所有存在的数百万个存储桶的名称。已知至少有 2,000,000,000,000 个对象存储在 S3 中,这个数字是几年前公布的,可能远低于现在的实际数字。如果每个桶有 1,000,000 个这样的对象,那将意味着 2,000,000 个桶来容纳它们。

您既没有时间也没有权限扫描它们,直觉表明,如果您尝试过,AWS Security 会开始提问。

于 2018-02-01T01:20:44.723 回答