阻止公共访问设置的哪些组合使我的 s3 存储桶对所有人可见?

Posted

技术标签:

【中文标题】阻止公共访问设置的哪些组合使我的 s3 存储桶对所有人可见?【英文标题】:What combination of Block Public Access settings makes my s3 bucket viewable to everyone? 【发布时间】:2020-01-30 06:35:18 【问题描述】:

我是 AWS 新手,并为静态站点托管创建了一个 s3 存储桶。我想允许所有人只读访问,以便他们可以访问该网站。什么样的设置组合给了我这种情况?我是否需要取消选中阻止公共访问设置中的所有 4 个设置?如果所有 4 个设置都设置为关闭,我是否还需要添加存储桶策略?我只想确保存储桶永远不会写入帐户持有人。谢谢。

【问题讨论】:

【参考方案1】:

阻止公共访问作为一个附加保护层,以防止 Amazon S3 存储桶被意外公开。

默认情况下,Amazon S3 中的所有内容都是私有的。然后,您可以通过几种不同的方式访问内容:

在存储桶级别,通过在所需存储桶上创建存储桶策略。添加到此存储桶的规则可用于授予对对象 (GetObject) 的访问权限、列出内容、上传、删除等。策略也可以非常具体,例如仅允许访问特定的 IP 地址。 在对象级别,通过在每个单独的对象上配置 访问控制列表 (ACL)。例如,一个对象可以公开访问。 在 IAM 用户或 IAM 组级别,通过将 IAM 策略 直接添加到用户/组。这非常适合仅向特定的 IAM 用户集(而不是公开)授予访问权限。 通过使用以编程方式生成并提供对特定对象的限时访问的预签名 URL。这通常由应用程序用来授予对私有对象的访问权限。例如,照片共享网站会将所有照片保密,但授权用户可以查看自己的照片,或通过应用程序与他们共享的照片。

因此,在您的问题中,您说您希望“允许所有人进行只读访问,以便他们可以访问该网站”。这通常可以通过创建 Bucket Policy 来完成,例如:


  "Version":"2012-10-17",
  "Statement":[
    
      "Sid":"MakeItPublic",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::my-bucket/*"]
    
  ]

您应该首先停用两个引用存储桶策略(底部两个)的阻止公共访问设置。

【讨论】:

要使存储桶策略起作用,我认为只需要禁用最后一个选项,即“通过任何公共存储桶或访问点策略阻止对存储桶和对象的公共和跨账户访问”

以上是关于阻止公共访问设置的哪些组合使我的 s3 存储桶对所有人可见?的主要内容,如果未能解决你的问题,请参考以下文章

Amazon s3:“阻止公共访问”设置以允许使用签名 URL 进行公共读取私有写入

使用 AWS 和 S3 存储桶对静态站点进行基本用户身份验证

令人困惑的 s3 存储桶策略上传问题

Amazon S3 存储桶策略只允许访问特定的 http

除非 url 被签名,否则限制对 S3 对象的访问

AWS S3+Cloudfront 访问被拒绝初学者问题