统一存储桶级访问权限

设置

本页面介绍了统一存储桶级访问权限,让您可以统一控制对 Cloud Storage 资源的访问权限。在您对存储桶启用统一存储桶级访问权限时,访问控制列表 (ACL) 会停用,并且只有存储桶级 Identity and Access Management (IAM) 权限会授予对该存储桶及其包含的对象的访问权限。您可以撤消对象 ACL 授予的所有访问权限,以及撤消使用存储桶 ACL 管理权限的功能。

概览

在 Cloud Storage 中,您可以通过以下两个系统向用户授予存储桶和对象的访问权限:IAM访问控制列表 (ACL)。这两个系统是并行运行的;为了让用户能够访问 Cloud Storage 资源,您只需通过其中一个系统授予用户权限。IAM 可在整个 Google Cloud 中使用,并允许您在存储桶级和项目级授予各种权限。ACL 仅适用于 Cloud Storage,并且提供的权限选项数量有限,但它们允许您基于每个对象授予权限。

为了支持统一的权限系统,Cloud Storage 具有统一存储桶级访问权限。在存储桶中使用此功能时,该存储桶中所有 Cloud Storage 资源的 ACL 都会被停用,因此,对 Cloud Storage 资源的访问权限只能通过 IAM 授予。在对存储桶连续 90 天启用统一存储桶级访问权限后,无法停用该功能。

您应该使用统一存储桶级访问权限吗?

通常,推荐使用统一存储桶级访问权限,因为这可以统一并简化您授予对 Cloud Storage 资源的访问权限的方式。

通过使用统一存储桶级访问权限,您还可以使用其他 Google Cloud 安全功能,例如网域限定共享员工身份联合IAM Conditions

在以下情况下,您可能不希望使用统一存储桶级访问权限,而是保留精细控制 ACL:

  • 您希望通过旧版 ACL 控制对存储桶中特定对象的访问权限。

  • 您希望对象上传者可以完全控制该对象,但不能完全控制存储桶中的其他对象。

  • 您可以使用 XML API 查看或设置存储桶权限。

启用“仅限存储桶政策”时的行为

您可以在创建新存储桶时或者对现有存储桶明确启用统一存储桶级访问权限

启用后,存储桶会有以下表现:

  • 设置、读取或修改存储桶和对象 ACL 的请求将失败并显示 400 Bad Request 错误。

  • 对于获取存储桶或对象元数据完整投影的 JSON API 请求,响应中将包含空 ACL 列表。

  • 单独的对象所有权不再存在,通过此类所有权授予的访问权限将被撤消,并且针对存储桶和对象元数据的请求不再包含 owner 字段。

  • 在创建时,存储桶会收到专用 IAM 角色。如果您在创建新存储桶时启用统一存储桶级访问权限,则该存储桶会获得额外的 IAM 角色

    • 这一行为会保留对象继承自存储桶的标准默认对象 ACL 的权限。

    • 如果您对现有存储桶启用统一存储桶级访问权限,则必须手动应用任何此类角色;如果您之前更改了此存储桶的默认对象 ACL,则建议您应用一组不同的角色。

还原为使用 ACL 时的行为

为了支持停用“统一存储桶级访问权限”的功能并还原为使用 ACL,Cloud Storage 会保存现有的 ACL。如果您停用统一存储桶级访问权限:

  • 对象会重新获得系统为其保存的 ACL。

  • 在启用统一存储桶级访问权限后添加到存储桶中的所有对象都会根据存储桶使用的默认对象 ACL 获得 ACL。

迁移现有存储桶时的注意事项

在为现有存储桶启用统一存储桶级访问权限时,您应确保先前依赖 ACL 访问的用户和服务将其权限迁移到 IAM。本部分概述了存储桶转用统一存储桶级访问权限时应执行的一些步骤。请注意,由于 ACL 和 IAM 在存储桶权限方面是同步的,您的注意点主要侧重于对存储桶内对象的访问,而非对存储桶的访问。

考虑存储桶级的 IAM 权限是否过度暴露数据

将 IAM 等效项分配给 ACL 之前,请考虑以下事项:

  • 在存储桶级别应用的 IAM 权限适用于存储桶中的所有对象,而对象 ACL 可能因对象而异。

如果您希望有些访问权限应用于某些对象而非其他对象,您应将对象分组到单独的存储分区中。每个分组包含的对象都应权限相同。

检查对象 ACL 的使用情况

转用统一存储桶级访问权限时,您应该检查存储桶中的对象是否是通过应用于它们的 ACL 进行访问的。为了检查这一点,Cloud Monitoring 采用一个指标跟踪 ACL 使用情况。如果此指标表明用户或服务依赖 ACL 访问您的对象,您应先将 IAM 等效项分配给存储桶,然后再启用统一存储桶级访问权限。如需查看如何在 Monitoring 中检查 ACL 使用情况的指南,请参阅检查 ACL 使用情况

使用此指标来确定启用统一存储桶级访问权限是否会破坏您的工作流:

指标 说明
storage.googleapis.com/authz/acl_operations_count 启用统一存储桶级访问权限后将被停用的 ACL 操作数(按 ACL 操作类型和存储桶细分)。

您需要检查的一项重要 ACL 操作是 OBJECT_ACCESS_REQUIRED_OBJECT_ACL

  • 如果此数字为零,则过去 6 周内无需使用对象级的 ACL 即可访问对象。IAM 政策涵盖了存储桶级或项目级的必要权限。

  • 如果此数字大于零,则过去 6 周内有访问对象的请求,这些请求需要使用对象 ACL 权限。您应先分配等效的 IAM 政策,然后再启用统一存储桶级访问权限。

如需详细了解 Monitoring 指标,请参阅指标、时间序列和资源

检查存储桶的默认对象 ACL

没有统一存储桶级访问权限的存储桶具有与之关联的默认对象 ACL。添加到此类存储桶的新对象会将此默认对象 ACL 应用于该存储桶,除非在将对象添加到存储桶时明确提供了 ACL。

例如,存储桶通常使用 projectPrivate 预定义的 ACL 作为其默认对象 ACL。projectPrivate 会向与存储桶关联的项目查看者授予对象 READER 权限,并向与存储桶关联的项目编辑者和所有者授予对象 OWNER 权限。

在启用统一存储分级访问权限之前,请先检查存储桶具有的默认对象 ACL。启用统一存储桶级访问权限后,请考虑是否要授予与默认对象 ACL 关联的权限。如果是,请将 IAM 等效项分配给存储桶。

将 IAM 等效项分配给对象 ACL

对象 ACL 可以授予 IAM 当前不具有的访问权限。如需确保现有用户在启用统一存储桶级访问权限后不会失去对对象的访问权限,请使用下表并为受影响的用户分配适当的 IAM 角色

对象 ACL 权限 等效 IAM 角色
READER Storage Legacy Object Reader (roles/storage.legacyObjectReader)
OWNER Storage Legacy Object Owner (roles/storage.legacyObjectOwner)

使用 IAM Conditions 时的注意事项

为防止存储桶的 IAM 政策与对象 ACL 之间发生冲突,IAM Conditions 只能用于启用了统一存储桶级访问权限的存储桶。也就是说:

后续步骤