我正在python中研究boto3模块,我已经创建了一个机器人,该机器人可以找到可公开访问的存储桶,但这是为具有凭据的单个用户完成的。我正在考虑推进这些功能,并使机器人在每个用户帐户中获取所有可公开访问的存储桶。我想知道这是否可能,如果是,如何,如果不是为什么?
查看方法get_bucket_acl()
。
如果存储桶是公有的,您应该会看到 Grantee
的 ACL> 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/*
本文也可能有所帮助。
是不可能的。
无法发现存在的数百万个存储桶的名称。 已知至少有 2,000,000,000,000 个对象存储在 S3 中,这是几年前宣布的数字,可能大大低于现在的实际数字。 如果每个存储桶有 1,000,000 个此类对象,则意味着有 2,000,000 个存储桶来容纳它们。
您既没有时间和权限来扫描它们,直觉表明,如果您尝试过,AWS Security 会开始提出问题。