使用 Identity and Access Management 控制访问权限

本文档介绍 Pub/Sub 中可用的访问权限控制选项。

概览

Pub/Sub 使用 Identity and Access Management (IAM) 进行访问权限控制。

借助 IAM,您可以向用户、群组和服务账号授予特定角色,从而向其授予执行任务所需的权限。您可以使用Google Cloud 控制台或 IAM API 授予这些 IAM 角色。

在 Pub/Sub 中,既可以在项目级别配置访问权限控制,也可以在个别资源级别配置。以下是一些使用 Pub/Sub 访问权限控制的示例:

  • 按资源授予访问权限,而不是授予对整个 Cloud 项目的访问权限。

  • 授予对有限功能的访问权限,例如只能向某主题发布消息,或者只能处理来自某订阅的消息,而不能删除该主题或订阅。

  • 向一组开发者授予对某项目中的所有 Pub/Sub 资源的访问权限。

如果您对单个资源(例如主题或订阅)只有“只能查看”权限,则无法使用 Google Cloud 控制台查看该资源。不过,您可以使用 Google Cloud CLI 查看资源。

如需详细了解 IAM 及其功能,请参阅 IAM 文档。尤其是授予、更改和撤消对资源的访问权限部分。

Pub/Sub 中的角色类型

与其他 Google Cloud 产品类似,Pub/Sub 支持三种类型的角色:

  • 基本角色:基本角色是在引入 IAM 之前就已存在的高度宽松角色。如需详细了解基本角色,请参阅基本角色

  • 预定义角色:预定义角色可提供对特定Google Cloud 资源的精细访问权限。如需详细了解预定义角色,请参阅预定义角色。 Pub/Sub 预定义角色将在本部分后面的内容中介绍。

  • 自定义角色:自定义角色可帮助您实施最小权限原则。如需详细了解自定义角色,请参阅自定义角色

所需的 Pub/Sub 权限

以下部分列出了访问不同 Pub/Sub 资源所需的 Pub/Sub 权限。

主题所需的权限

下表概括了与主题相关的每个 Pub/Sub API 方法所需的权限。该表显示了调用每种方法所需的 IAM 权限,以及相应方法的用途说明。

方法 说明 所需权限
projects.topics.create 使用指定名称创建指定主题。 对所属云项目拥有 pubsub.topics.create 权限
projects.topics.delete 删除具有指定名称的主题。 针对所请求主题的 pubsub.topics.delete 权限
projects.topics.get 获取主题的配置。 针对所请求主题的 pubsub.topics.get 权限
projects.topics.getIamPolicy 获取主题的 IAM 访问权限控制政策。 针对所请求主题的 pubsub.topics.getIamPolicy 权限
projects.topics.list 列出所有主题。 针对所请求云项目的 pubsub.topics.list 权限
projects.topics.patch 更新现有主题。 针对所请求主题的 pubsub.topics.update 权限
projects.topics.publish 向主题添加一条或多条消息。 针对所请求主题的 pubsub.topics.publish 权限
projects.topics.setIamPolicy 为主题设置 IAM 访问权限控制政策。 针对所请求主题的 pubsub.topics.setIamPolicy 权限
projects.topics.testIamPermissions 返回调用者对指定资源拥有的权限。

订阅所需的权限

下表概括了与订阅相关的每种 Pub/Sub API 方法所需的权限。 其中显示了调用每种方法所需的 IAM 权限,以及对相应方法的功能说明。

方法 说明 所需权限
projects.subscriptions.acknowledge 确认与 AcknowledgeRequest 中的 ack_ids 相关联的消息。 针对所请求订阅的 pubsub.subscriptions.consume 权限
projects.subscriptions.create 创建对指定主题的订阅。 针对所属云项目的 pubsub.subscriptions.create 权限以及针对所请求主题的 pubsub.topics.attachSubscription 权限。要在项目 A 中创建附加到项目 B 中主题 T 的订阅 S,必须同时对项目 A 和主题 T 授予适当的权限。在这种情况下,可以在项目 B 的审核日志中捕获用户身份信息。
projects.subscriptions.delete 删除现有订阅。 针对所请求订阅的 pubsub.subscriptions.delete 权限
projects.subscriptions.detach 将订阅与主题分离。 订阅所附加到的主题的 pubsub.topics.detachSubscription 权限。
projects.subscriptions.get 获取订阅的配置详细信息。 针对所请求订阅的 pubsub.subscriptions.get 权限