我没有找到一种方法来轻松了解我的AWS S3存储桶是公共的还是私有的。
我期望做list_bucket_response = s3client.list_buckets()
,并直接知道该存储桶是否可公开访问。
我遇到过https://jgreenemi.com/how-to-check-if-your-s3-buckets-allow-public-read-acls/,但是在我列出存储桶的情况下,我没有URI。
我也尝试了s3client.get_bucket_acl(Bucket=bucket_name)
,但没有成功。
答案 0 :(得分:1)
您必须评估3种不同的条件,以检查存储桶是否公开:
根据此guide:
response = s3client.get_public_access_block(Bucket='bucket_name')
如果以下两项都设置为true,则存储桶不是公共的:
response['PublicAccessBlockConfiguration']['BlockPublicAcls']
response['PublicAccessBlockConfiguration']['BlockPublicPolicy']
get_bucket_policy_status
检索Amazon S3存储桶的策略状态,指示存储桶是否是公共的
response = s3_client.get_bucket_policy_status(Bucket='bucket_name')
如果满足以下条件,则该存储桶是公共的:
response['PolicyStatus']['IsPublic']
response = s3client.get_bucket_acl(Bucket='bucket_name')
如果ACL向预定义的AllUsers或AuthenticatedUsers组的成员授予任何权限,则存储桶是公共的。
Grantee(响应['Grants'] [*] ['Grantee']):
如果需要,您可以进一步评估对象ACL。
答案 1 :(得分:0)
实际上,如果您关闭了公共访问权限,get_bucket_policy_status将引发异常 我发现这段代码很好用
try:
access = s3.get_public_access_block(Bucket=bucket['Name'])
print (access)
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == 'NoSuchPublicAccessBlockConfiguration':
print('\t no Public Access')
else:
print("unexpected error: %s" % (e.response))