统一存储分区级访问权限

转到示例

本页面介绍了统一存储分区级访问权限,让您可以统一控制对 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 控制对存储分区中特定对象的访问权限。

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

限制

使用统一存储分区级访问权限时,存在以下限制:

  • Cloud Logging 和 Cloud Audit Logs 无法导出到已启用统一存储分区级访问权限的存储分区。

  • 对启用了统一存储分区级访问权限的存储分区,您无法使用 XML API 查看或设置权限。

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

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

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

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

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

  • gsutil 命令 cp -pmv -prsync -p 将失败(无论启用了统一存储分区级访问权限的存储分区是来源还是目标,这些命令都会失败)。 gsutil 命令 acldefacl 也会失败。

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

  • 在创建时,存储分区会收到专门的 IAM 角色。如果您在创建新存储分区时启用统一存储分区级访问权限,则该存储分区会获得链接表中所述的额外 IAM 角色。

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

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

还原为使用 ACL 时的行为

为了支持停用统一存储分区级访问权限并还原为使用 ACL,Cloud Storage 会将现有 ACL 保存 90 天。如果您在此期间停用统一存储分区级访问权限:

  • 对象会重新获得系统为其保存的 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 应用于它们。

在启用统一存储分级访问权限之前,请先检查存储分区具有的默认对象 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 只能用于启用了统一存储分区级访问权限的存储分区。也就是说:

  • 如需在存储分区中设置 IAM Conditions,您必须先对该存储分区启用统一存储分区级访问权限

  • 如需对存储分区停用统一存储分区级访问权限,您必须先从该存储分区的政策中移除所有 IAM Conditions。如需了解如何查看和移除存储分区政策中的条件,请参阅在存储分区中使用 IAM Conditions。请注意,如果存储分区已连续 90 天处于活跃状态,则无法停用统一存储分区级访问权限。

后续步骤