本文档介绍 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
权限 |