仅限存储分区政策

本页面介绍“仅限存储分区政策”功能;通过该功能,您可以统一控制 Cloud Storage 资源访问权限。为存储分区启用“仅限存储分区政策”功能后,对该存储分区及其所含对象的访问权限只能通过存储分区级别 Cloud Identity and Access Management (Cloud IAM) 权限授予;系统会停用访问控制列表 (ACL) 并撤消通过 ACL 授予的访问权限。如需查看使用此功能的指南,请参阅使用“仅限存储分区政策”功能

概览

在 Cloud Storage 中,您可以通过以下两个系统向用户授予存储分区和对象的访问权限:Cloud Identity and Access Management (Cloud IAM)访问控制列表 (ACL)。这两个系统是并行运行的;要让用户能够访问 Cloud Storage 资源,您只需通过其中一个系统授予用户权限。Cloud IAM 适用于整个 Google Cloud Platform (GCP),可让您授予精细的存储分区级层和项目级层权限。ACL 仅适用于 Cloud Storage,并且提供的权限选项较少,但可让您基于每个对象授予权限。

为了实现统一的权限系统,Cloud Storage 提供了“仅限存储分区政策”功能。使用此功能时,所有 Cloud Storage 资源的 ACL 都会被停用,因此,Cloud Storage 资源访问权限只能通过 Cloud IAM 授予。

是否应使用“仅限存储分区政策”功能?

如果出现以下情况,建议使用“仅限存储分区政策”功能:

  • 您希望通过单一权限系统控制 Cloud Storage 资源访问权限。

  • 您希望在您的所有 GCP 资源中获得一致的访问控制体验。

  • 您的存储分区中包含的对象数量很大,并且您不希望逐一管理每个对象的访问权限。

  • 您希望使用诸如 Cloud Audit Logs网域限定共享等 GCP 安全功能,这些功能仅跟踪通过 Cloud IAM 政策而非 ACL 授予的访问权限。

  • 您不希望对象上传者始终完全控制对象。

如果出现以下情况,建议不要使用“仅限存储分区政策”功能:

  • 您希望通过旧 ACL 授予对存储分区中特定对象的访问权限。

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

限制

在使用“仅限存储分区政策”功能时,请遵循以下限制:

  • 导出到 Cloud Storage 的某些 GCP 服务无法导出到启用了“仅限存储分区政策”功能的存储分区。这包括以下服务:

    Stackdriver、Cloud Audit Logs、Cloud Datastore。

  • 您无法使用 XML API 检查“仅限存储分区政策”功能的状态或者启用/停用该功能。

  • 您无法使用 XML API 查看或设置启用了“仅限存储分区政策”功能的存储分区的权限。

  • 默认情况下,对于启用了“仅限存储分区政策”功能的存储分区中可公开访问的对象,Cache-Control 的值设置为 private,除非您将该值明确设置为 public

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

您可以在创建新的存储分区时或在为现有存储分区明确启用“仅限存储分区政策”功能时,启用“仅限存储分区政策”功能。

启用“仅限存储分区政策”功能后,以下 ACL 功能即会停用:

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

  • 使用 BucketAccessControlsDefaultObjectAccessControlsObjectAccessControls 方法发出的 JSON API 请求将失败并显示 400 Bad Request 错误。

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

  • gsutil 命令 cp -pmv -prsync -p 将失败(无论启用了“仅限存储分区政策”功能的存储分区是来源还是目标,这些命令都会失败)。

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

此外,如果您在创建新存储分区时启用“仅限存储分区政策”功能,则该存储分区会自动接收其他 Cloud IAM 角色。这一行为会保留对象继承自存储分区的默认对象 ACL 的权限。如果为现有存储分区启用“仅限存储分区政策”,您必须手动应用任何此类角色;如果您更改了此存储分区的默认对象 ACL,那么建议您应用一组不同的角色。

还原为使用 ACL 时的行为

为了支持停用“仅限存储分区政策”功能并还原为使用 ACL,Cloud Storage 会将现有 ACL 保存 90 天。如果您在此期间停用“仅限存储分区政策”功能,将会产生以下影响:

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

  • 在启用“仅限存储分区政策”功能后添加到存储分区中的所有对象会根据存储分区使用的默认对象 ACL 获得 ACL。

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

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

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

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

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

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

检查对象 ACL 的使用情况

转用“仅限存储分区政策”功能时,您应该检查存储分区中的对象是否是通过应用于它们的 ACL 进行访问的。为了检查这一点,Stackdriver 采用一个指标跟踪 ACL 使用情况。如果此指标指示用户或服务依赖 ACL 访问您的对象,您应先向存储分区分配 Cloud IAM 等效项,然后再启用“仅限存储分区政策”功能。如需查看在 Stackdriver 中检查 ACL 使用情况的指南,请参阅检查 ACL 使用情况

使用此指标可以确定启用“仅限存储分区政策”功能是否会破坏您的工作流:

指标 说明
storage.googleapis.com/authz/acl_operations_count 启用“仅限存储分区政策”功能后将被停用的 ACL 操作的数量(按 ACL 操作类型和存储分区细分)。

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

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

  • 如果此数字大于零,则过去 6 周内有访问对象的请求,这些请求需要使用对象 ACL 权限。在启用“仅限存储分区政策”功能之前,您应分配等效的 Cloud IAM 政策

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

检查存储分区的默认对象 ACL

所有存储分区都有一个与之关联的默认对象 ACL。除非在将对象添加到存储分区时明确提供 ACL,否则添加到存储分区的新对象将此默认对象 ACL 应用于它们。

启用“仅限存储分区政策”功能之前,请检查存储分区所具有的默认对象 ACL。启用“仅限存储分区政策”功能后,请考虑是否要授予与默认对象 ACL 关联的权限。如果是,请向存储分区分配 Cloud IAM 等效项

将 Cloud IAM 等效项分配给对象 ACL

对象 ACL 可以授予 Cloud IAM 当前不具有的访问权限。要确保现有用户在您启用“仅限存储分区政策”功能时不会失去对对象的访问权限,请使用下表并为受影响的用户分配适当的 Cloud IAM 角色

对象 ACL 权限 等效的 Cloud IAM 角色
READER roles/storage.legacyObjectReader
OWNER roles/storage.legacyObjectOwner

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Cloud Storage
需要帮助?请访问我们的支持页面