禁止公开访问

设置

本页面介绍禁止公开访问的存储桶设置和相关的禁止公开访问的组织政策限制条件。使用该设置或限制条件可以限制可获得授予数据访问权限的实体(例如通过互联网访问的匿名用户)。如需查看访问权限控制选项的概览,请参阅访问权限控制概览

概览

禁止公开访问可防止 Cloud Storage 存储桶和对象被意外泄露给公众。强制执行禁止公开访问后,任何人都无法通过 IAM 政策或 ACL 公开适用的存储桶中的数据。您可以通过以下两种方式来强制执行禁止公开访问:

您应该使用禁止公开访问设置吗?

如果您知道自己的数据绝对不应在公共互联网上公开,则使用禁止公开访问设置。为了向资源提供最高安全性,请在组织的最高级层强制执行禁止公开访问。

如果您需要针对静态网站托管等使用场景保持存储桶公开,则不应使用禁止公开访问设置。如需在组织中对本来强制执行禁止公开访问的此类存储桶设置例外,请对包含该存储桶的特定项目停用禁止公开访问。

强制执行后的行为

受到禁止公开访问制约的资源具有以下行为:

  • 对使用 allUsersallAuthenticatedUsers 授权的存储分区和对象发出请求时失败,状态代码为 HTTP 401403

  • 授予对 allUsersallAuthenticatedUsers 访问权限的现有 IAM 政策和 ACL 仍会保留,但会被禁止公开访问设置覆盖。

  • 请求创建 IAM 政策或 ACL 中带有 allUsersallAuthenticatedUsers 的存储桶或对象时失败,但以下情况除外:

    • 如果存储桶具有包含 allUsers 的默认对象 ACL,则请求在该存储桶中创建对象会成功。此类对象的 ACL 包含 allUsers,但 allUsers 会被禁止公开访问设置覆盖。
  • 请求向 IAM 政策或 ACL 添加 allUsersallAuthenticatedUsers 时失败并显示 412 Precondition Failed

继承

即使存储桶没有在其设置中明确强制执行禁止公开访问,它仍可能会继承禁止公开访问设置,如果对该存储桶存在于的项目、文件夹或组织设置了组织政策限制条件 storage.publicAccessPrevention,则会发生此情况。因此,存储桶状态只能设置为 enforcedinherited

  • 如果存储桶的禁止公开访问元数据设置为 enforced,则该存储桶禁止公开访问。

  • 如果存储分区的禁止公开访问元数据设置为 inherited,则是否禁止公开访问由 storage.publicAccessPrevention 组织政策限制条件决定:

    • 如果对于包含存储桶的项目storage.publicAccessPrevention 设置为 True,则将存储分区禁止公开访问。

    • 对于包含存储桶的项目,如果 storage.publicAccessPrevention 设置为 False,则存储桶禁止公开访问。

    • 对于包含存储分区的项目,如果未设置 storage.publicAccessPrevention,则是否禁止公开访问由包含该项目的文件夹(如果有)设置的 storage.publicAccessPrevention 值决定。

      • 同样,如果包含存储桶的文件夹也没有为 storage.publicAccessPrevention 设置任何值,则是否禁止公开访问由包含项目的组织设置的 storage.publicAccessPrevention 值决定。

      • 如果任何资源都未设置 storage.publicAccessPrevention,则该存储桶不禁止公开访问。

停用时的行为

当禁止公开访问不再应用于资源时,会发生以下情况:

  • 可向 allUsersallAuthenticatedUsers 授予访问权限的现有 IAM 政策和 ACL 生效,并将数据向公众公开。

  • 请求创建允许访问 allUsersallAuthenticatedUsers 的 IAM 政策或 ACL 会成功。

  • 如果在可公开访问存储分区中采用禁止公开访问设置创建了对象,但未采用公开 ACL,则对象可能会对公众开放。

您可以随时为项目、文件夹或组织停用禁止公开访问设置。即使您对采用 enforced 设置的存储分区所在的项目、文件夹或组织停用了该设置,这些存储分区仍继续强制执行禁止公开访问设置。

注意事项

  • 如果您针对现有资源强制执行禁止公开访问,系统会阻止新增 allUsersallAuthenticatedUsers 及向其所有现有授权。这可能会在以下方面影响您的存储分区:

    • 如果应用依赖于 allUsersallAuthenticatedUsers 来访问数据或创建公共资源,则启用禁止公开访问设置可能会破坏此应用。 如需了解如何识别其他应用可能依赖的公开资源,请展开以下内容:

      如何识别公开资源

      在强制执行禁止公开访问之前,我们建议您对公开资源进行清点,以确保不会破坏对公开数据有依赖关系的其他工作负载。您可以使用以下方法找到公开的存储桶、对象和托管式文件夹:

    • Cloud Audit Logs 不跟踪对公开对象的访问权限。如果您在强制执行禁止公开访问时启用了数据访问日志,则可能会看到日志生成次数增加,这会计入日志提取配额并可能产生 Cloud Audit Logs 费用。发生这种情况的原因是,之前公开且未记录的访问权限可能与记录的特定授权关联。

  • 签名网址,旨在为使用它们的任何人提供有时限的、范围较窄的访问权限,不受禁止公开访问的影响。

  • 未与组织关联的项目不能使用组织政策。此类项目中的存储桶应使用存储桶级层设置。

  • 禁止公开访问对于更新后读取具有高度一致性,但强制执行最长可能需要 10 分钟才能生效。

  • 强制执行开始后,在一段时间内,对象可能仍可通过互联网缓存公开访问,具体取决于对象的 Cache-Control 设置。例如,如果对象的 Cache-Control:max-age 设置为默认值 3600 秒,则该对象可能会在互联网缓存中保留这么长的时间。

后续步骤