Boto:查找存储桶是公共的还是私有的

non*_*ono 4 boto3

我找不到一种方法可以轻松知道我的 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)没有成功。

Vik*_*yol 9

您必须评估 3 个不同的条件来检查存储桶是否是公共的:

  • 政策
  • ACL
  • 阻止公共访问设置

根据本指南

  1. 使用get_public_access_block()方法检查是否设置了阻止公共访问选项。
response = s3client.get_public_access_block(Bucket='bucket_name')
Run Code Online (Sandbox Code Playgroud)

如果以下两项都设置为 true,则存储桶不是公开的:

response['PublicAccessBlockConfiguration']['BlockPublicAcls']
response['PublicAccessBlockConfiguration']['BlockPublicPolicy']
Run Code Online (Sandbox Code Playgroud)
  1. 使用get_bucket_policy_status () 方法检查策略是否允许公共访问。

get_bucket_policy_status

检索 Amazon S3 存储桶的策略状态,指示该存储桶是否是公共的

response = s3_client.get_bucket_policy_status(Bucket='bucket_name')
Run Code Online (Sandbox Code Playgroud)

如果满足以下条件,则存储桶是公共的:

response['PolicyStatus']['IsPublic']
Run Code Online (Sandbox Code Playgroud)
  1. 检查 ACL 以查看被授予者是 AllUsers 还是 AuthenticatedUsers 组。
response = s3client.get_bucket_acl(Bucket='bucket_name')
Run Code Online (Sandbox Code Playgroud)

如果 ACL 向预定义的 AllUsers 或 AuthenticatedUsers 组的成员授予任何权限,则存储桶是公共的。

受赠人(响应['赠款'][*]['受赠人']):

如果需要,您可以进一步评估对象 ACL。