使用 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 权限
projects.subscriptions.getIamPolicy 获取订阅的 IAM 访问权限控制政策。 针对所请求订阅的 pubsub.subscriptions.getIamPolicy 权限
projects.subscriptions.list 列出匹配的订阅。 针对所请求云项目的 pubsub.subscriptions.list 权限
projects.subscriptions.modifyAckDeadline 修改特定消息的确认时限。 针对所请求订阅的 pubsub.subscriptions.consume 权限
projects.subscriptions.modifyPushConfig 修改指定订阅的 pushConfig。 针对所请求订阅的 pubsub.subscriptions.update 权限
projects.subscriptions.patch 更新现有订阅。 针对所请求订阅的 pubsub.subscriptions.update 权限
projects.subscriptions.pull 从服务器拉取消息。 针对所请求订阅的 pubsub.subscriptions.consume 权限
projects.subscriptions.seek 将现有订阅还原至某个时间点或快照。 针对所请求订阅的 pubsub.subscriptions.consume 权限,以及针对所请求快照的 pubsub.snapshots.seek 权限(如果有)。
projects.subscriptions.setIamPolicy 为订阅设置 IAM 访问权限控制政策。 针对所请求订阅的 pubsub.subscriptions.setIamPolicy 权限
projects.subscriptions.testIamPermissions 返回调用者对指定资源拥有的权限。

架构所需的权限

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

方法 说明 所需权限
projects.schemas.commit 提交新的架构修订版本。 针对所请求架构的 pubsub.schemas.commit 权限
projects.schemas.create 创建架构。 对所属云项目拥有 pubsub.schemas.create 权限
projects.schemas.delete 删除架构。 针对所请求架构的 pubsub.schemas.delete 权限
projects.schemas.deleteRevision 删除特定架构修订版本。 针对所请求架构的 pubsub.schemas.delete 权限
projects.schemas.get 获取架构。 针对所请求架构的 pubsub.schemas.get 权限
projects.schemas.getIamPolicy 获取架构的 IAM 访问权限控制政策。 针对所请求架构的 pubsub.schemas.getIamPolicy 权限
projects.schemas.list 列出项目中的架构。 针对所请求云项目的 pubsub.schemas.list 权限
projects.schemas.listRevisions 列出命名架构的所有架构修订版本。 针对所请求架构的 pubsub.schemas.listRevisions 权限
projects.schemas.rollback 根据之前的修订版本创建新的架构修订版本。 针对所请求架构的 pubsub.schemas.rollback 权限
projects.schemas.validate 验证架构定义。 对所属云项目拥有 pubsub.schemas.validate 权限
projects.schemas.validateMessage 根据架构验证消息。 对所属云项目拥有 pubsub.schemas.validate 权限

拍摄快照所需的权限

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

REST 方法 说明 所需权限
projects.snapshots.create 根据所请求的订阅创建快照。 针对所属云项目的 pubsub.snapshots.create 权限以及针对源订阅的 pubsub.subscriptions.consume 权限。
projects.snapshots.delete 移除现有快照。 针对所请求快照的 pubsub.snapshots.delete 权限
projects.snapshots.getIamPolicy 获取快照的 IAM 访问权限控制政策。 针对所请求快照的 pubsub.snapshots.getIamPolicy 权限
projects.snapshots.list 列出现有快照。 针对所请求云项目的 pubsub.snapshots.list 权限
projects.snapshots.patch 更新现有快照。 针对所请求快照的 pubsub.snapshots.update 权限
projects.snapshots.setIamPolicy 为快照设置 IAM 访问权限控制政策。 针对所请求快照的 pubsub.snapshots.setIamPolicy 权限
projects.snapshots.testIamPermissions 返回调用者对指定资源拥有的权限。

可用的 Pub/Sub 角色

下表列出了所有 Pub/Sub 角色以及与每个角色关联的权限:

Role Permissions

(roles/pubsub.admin)

Provides full access to topics and subscriptions.

Lowest-level resources where you can grant this role:

  • Schema
  • Snapshot
  • Subscription
  • Topic

cloudkms.keyHandles.*

  • cloudkms.keyHandles.create
  • cloudkms.keyHandles.get
  • cloudkms.keyHandles.list

cloudkms.operations.get

cloudkms.projects.showEffectiveAutokeyConfig

pubsub.*

  • pubsub.messageTransforms.validate
  • pubsub.schemas.attach
  • pubsub.schemas.commit
  • pubsub.schemas.create
  • pubsub.schemas.delete
  • pubsub.schemas.get
  • pubsub.schemas.getIamPolicy
  • pubsub.schemas.list
  • pubsub.schemas.listRevisions
  • pubsub.schemas.rollback
  • pubsub.schemas.setIamPolicy
  • pubsub.schemas.validate
  • pubsub.snapshots.create
  • pubsub.snapshots.createTagBinding
  • pubsub.snapshots.delete
  • pubsub.snapshots.deleteTagBinding
  • pubsub.snapshots.get
  • pubsub.snapshots.getIamPolicy
  • pubsub.snapshots.list
  • pubsub.snapshots.listEffectiveTags
  • pubsub.snapshots.listTagBindings
  • pubsub.snapshots.seek
  • pubsub.snapshots.setIamPolicy
  • pubsub.snapshots.update
  • pubsub.subscriptions.consume
  • pubsub.subscriptions.create
  • pubsub.subscriptions.createTagBinding
  • pubsub.subscriptions.delete
  • pubsub.subscriptions.deleteTagBinding
  • pubsub.subscriptions.get
  • pubsub.subscriptions.getIamPolicy
  • pubsub.subscriptions.list
  • pubsub.subscriptions.listEffectiveTags
  • pubsub.subscriptions.listTagBindings
  • pubsub.subscriptions.setIamPolicy
  • pubsub.subscriptions.update
  • pubsub.topics.attachSubscription
  • pubsub.topics.create
  • pubsub.topics.createTagBinding
  • pubsub.topics.delete
  • pubsub.topics.deleteTagBinding
  • pubsub.topics.detachSubscription
  • pubsub.topics.get
  • pubsub.topics.getIamPolicy
  • pubsub.topics.list
  • pubsub.topics.listEffectiveTags
  • pubsub.topics.listTagBindings
  • pubsub.topics.publish
  • pubsub.topics.setIamPolicy
  • pubsub.topics.update
  • pubsub.topics.updateTag

resourcemanager.projects.get

serviceusage.consumerpolicy.analyze

serviceusage.consumerpolicy.get

serviceusage.effectivepolicy.get

serviceusage.groups.*

  • serviceusage.groups.list
  • serviceusage.groups.listExpandedMembers
  • serviceusage.groups.listMembers

serviceusage.quotas.get

serviceusage.services.get

serviceusage.services.list

serviceusage.values.test

(roles/pubsub.editor)

Provides access to modify topics and subscriptions, and access to publish and consume messages.

Lowest-level resources where you can grant this role:

  • Schema
  • Snapshot
  • Subscription
  • Topic

cloudkms.keyHandles.*

  • cloudkms.keyHandles.create
  • cloudkms.keyHandles.get
  • cloudkms.keyHandles.list

cloudkms.operations.get

cloudkms.projects.showEffectiveAutokeyConfig

pubsub.messageTransforms.validate

pubsub.schemas.attach

pubsub.schemas.commit

pubsub.schemas.create

pubsub.schemas.delete

pubsub.schemas.get

pubsub.schemas.list

pubsub.schemas.listRevisions

pubsub.schemas.rollback

pubsub.schemas.validate

pubsub.snapshots.create

pubsub.snapshots.createTagBinding

pubsub.snapshots.delete

pubsub.snapshots.deleteTagBinding

pubsub.snapshots.get

pubsub.snapshots.list

pubsub.snapshots.listEffectiveTags

pubsub.snapshots.listTagBindings

pubsub.snapshots.seek

pubsub.snapshots.update

pubsub.subscriptions.consume

pubsub.subscriptions.create

pubsub.subscriptions.createTagBinding

pubsub.subscriptions.delete

pubsub.subscriptions.deleteTagBinding

pubsub.subscriptions.get

pubsub.subscriptions.list

pubsub.subscriptions.listEffectiveTags

pubsub.subscriptions.listTagBindings

pubsub.subscriptions.update

pubsub.topics.attachSubscription

pubsub.topics.create

pubsub.topics.createTagBinding

pubsub.topics.delete

pubsub.topics.deleteTagBinding

pubsub.topics.detachSubscription

pubsub.topics.get

pubsub.topics.list

pubsub.topics.listEffectiveTags

pubsub.topics.listTagBindings

pubsub.topics.publish

pubsub.topics.update

pubsub.topics.updateTag

resourcemanager.projects.get

serviceusage.consumerpolicy.analyze

serviceusage.consumerpolicy.get

serviceusage.effectivepolicy.get

serviceusage.groups.*

  • serviceusage.groups.list
  • serviceusage.groups.listExpandedMembers
  • serviceusage.groups.listMembers

serviceusage.quotas.get

serviceusage.services.get

serviceusage.services.list

serviceusage.values.test

(roles/pubsub.publisher)

Provides access to publish messages to a topic.

Lowest-level resources where you can grant this role:

  • Topic

pubsub.topics.publish

(roles/pubsub.subscriber)

Provides access to consume messages from a subscription and to attach subscriptions to a topic.

Lowest-level resources where you can grant this role:

  • Snapshot
  • Subscription
  • Topic

pubsub.snapshots.seek

pubsub.subscriptions.consume

pubsub.topics.attachSubscription

(roles/pubsub.viewer)

Provides access to view topics and subscriptions.

Lowest-level resources where you can grant this role:

  • Schema
  • Snapshot
  • Subscription
  • Topic

pubsub.messageTransforms.validate

pubsub.schemas.get

pubsub.schemas.list

pubsub.schemas.listRevisions

pubsub.schemas.validate

pubsub.snapshots.get

pubsub.snapshots.list

pubsub.snapshots.listEffectiveTags

pubsub.snapshots.listTagBindings

pubsub.subscriptions.get

pubsub.subscriptions.list

pubsub.subscriptions.listEffectiveTags

pubsub.subscriptions.listTagBindings

pubsub.topics.get

pubsub.topics.list

pubsub.topics.listEffectiveTags

pubsub.topics.listTagBindings

resourcemanager.projects.get

serviceusage.consumerpolicy.analyze

serviceusage.consumerpolicy.get

serviceusage.effectivepolicy.get

serviceusage.groups.*

  • serviceusage.groups.list
  • serviceusage.groups.listExpandedMembers
  • serviceusage.groups.listMembers

serviceusage.quotas.get

serviceusage.services.get

serviceusage.services.list

serviceusage.values.test

Service agent roles

Service agent roles should only be granted to service agents.

Role Permissions

(roles/pubsub.serviceAgent)

Grants Cloud Pub/Sub Service Account access to manage resources.

iam.serviceAccounts.get

iam.serviceAccounts.getAccessToken

iam.serviceAccounts.getOpenIdToken

iam.serviceAccounts.implicitDelegation

iam.serviceAccounts.list

iam.serviceAccounts.signBlob

iam.serviceAccounts.signJwt

resourcemanager.projects.get

resourcemanager.projects.list

serviceusage.services.use

通过 Google Cloud 控制台控制访问权限

您可以使用 Google Cloud 控制台来管理主题和项目的访问权限控制。

如需在项目级层设置访问权限控制,请按照以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 IAM 页面。

    转到 IAM

  2. 选择您的项目。

  3. 点击 Add

  4. 输入一个或多个主账号名称。

  5. 选择角色列表中,选择要授予的角色。

  6. 点击保存

  7. 验证该主账号是否拥有您授予的角色。

如需为主题和订阅设置访问权限控制,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 Pub/Sub 主题列表。

    前往“主题”

  2. 如有需要,请选择启用了 Pub/Sub 的项目。

  3. 执行以下步骤之一:

    • 如需为一个或多个主题设置角色,请选择相应主题。

    • 如需为附加到主题的订阅设置角色,请点击相应主题 ID。在主题详情页面中,点击订阅 ID。系统随即会显示订阅详情页面。

  4. 如果信息面板处于隐藏状态,请点击显示信息面板

  5. 权限标签页中,点击 添加主账号

  6. 输入一个或多个主账号名称。

  7. 选择角色列表中,选择要授予的角色。

  8. 点击保存

通过 IAM API 控制访问权限

借助 Pub/Sub IAM API,您可以为项目中的个别主题和订阅设置和获取政策,以及测试用户对给定资源所具有的权限。与常规的 Pub/Sub 方法一样,您可以通过客户端库或 API Explorer 或者直接通过 HTTP 调用 IAM API 方法。

请注意,不能使用 Pub/Sub IAM API 在 Google Cloud 项目级别管理政策。

以下部分举例说明了如何设置和获取政策,以及如何测试调用者对给定资源具有什么权限。

购买保单

借助 getIamPolicy() 方法,您可以获取现有政策。此方法将返回包含与资源关联的政策的 JSON 对象。

以下一些示例代码演示了如何获取订阅政策

C#

在尝试此示例之前,请按照《快速入门:使用客户端库》中的 C# 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub C# API 参考文档


using Google.Cloud.Iam.V1;
using Google.Cloud.PubSub.V1;

public class GetSubscriptionIamPolicySample
{
    public Policy GetSubscriptionIamPolicy(string projectId, string subscriptionId)
    {
        PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
        SubscriptionName subscriptionName = SubscriptionName.FromProjectSubscription(projectId, subscriptionId);
        Policy policy = publisher.IAMPolicyClient.GetIamPolicy(new GetIamPolicyRequest
        {
            ResourceAsResourceName = subscriptionName
        });
        return policy;
    }
}

gcloud

获取订阅政策:

gcloud pubsub subscriptions get-iam-policy \
   projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \
   --format json

输出:

   {
     "etag": "BwUjMhCsNvY=",
     "bindings": [
       {
         "role": "roles/pubsub.admin",
         "members": [
           "user:user-1@gmail.com"
         ]
       },
       {
         "role": "roles/pubsub.editor",
         "members": [
           "serviceAccount:service-account-2@",
           "user:user-3@gmail.com"
         ]
       }
     ]
   }

Go

以下示例使用 Go Pub/Sub 客户端库的主要版本 (v2)。如果您仍在使用 v1 库,请参阅迁移到 v2 的指南。如需查看 v1 代码示例的列表,请参阅 已弃用的代码示例

在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Go 设置说明进行操作。如需了解详情,请参阅 Pub/Sub Go API 参考文档

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/iam/apiv1/iampb"
	"cloud.google.com/go/pubsub/v2"
)

func getIAMPolicy(w io.Writer, projectID, subscription string) error {
	// projectID := "my-project-id"
	// subscription := "projects/my-project/subscriptions/my-sub"
	ctx := context.Background()
	client, err := pubsub.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %w", err)
	}
	defer client.Close()

	req := &iampb.GetIamPolicyRequest{
		Resource: subscription,
	}
	policy, err := client.SubscriptionAdminClient.GetIamPolicy(ctx, req)
	if err != nil {
		return fmt.Errorf("Policy: %w", err)
	}
	for _, b := range policy.Bindings {
		for _, m := range b.Members {
			fmt.Fprintf(w, "role: %s, member: %s\n", b.Role, m)
		}
	}
	return nil
}

Java

在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Java API 参考文档


import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.Policy;
import com.google.pubsub.v1.ProjectSubscriptionName;
import java.io.IOException;

public class GetSubscriptionPolicyExample {
  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String subscriptionId = "your-subscription-id";

    getSubscriptionPolicyExample(projectId, subscriptionId);
  }

  public static void getSubscriptionPolicyExample(String projectId, String subscriptionId)
      throws IOException {
    try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
      ProjectSubscriptionName subscriptionName =
          ProjectSubscriptionName.of(projectId, subscriptionId);
      GetIamPolicyRequest getIamPolicyRequest =
          GetIamPolicyRequest.newBuilder().setResource(subscriptionName.toString()).build();
      Policy policy = subscriptionAdminClient.getIamPolicy(getIamPolicyRequest);
      System.out.println("Subscription policy: " + policy);
    }
  }
}

Node.js

在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 Pub/Sub Node.js API 参考文档

/**
 * TODO(developer): Uncomment this variable before running the sample.
 */
// const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client; cache this for further use
const pubSubClient = new PubSub();

async function getSubscriptionPolicy(subscriptionNameOrId) {
  // Retrieves the IAM policy for the subscription
  const [policy] = await pubSubClient
    .subscription(subscriptionNameOrId)
    .iam.getPolicy();

  console.log(`Policy for subscription: ${JSON.stringify(policy.bindings)}.`);
}

Node.js

在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 Pub/Sub Node.js API 参考文档

/**
 * TODO(developer): Uncomment this variable before running the sample.
 */
// const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';

// Imports the Google Cloud client library
import {PubSub, Policy} from '@google-cloud/pubsub';

// Creates a client; cache this for further use
const pubSubClient = new PubSub();

async function getSubscriptionPolicy(subscriptionNameOrId: string) {
  // Retrieves the IAM policy for the subscription
  const [policy]: [Policy] = await pubSubClient
    .subscription(subscriptionNameOrId)
    .iam.getPolicy();

  console.log(`Policy for subscription: ${JSON.stringify(policy.bindings)}.`);
}

PHP

在尝试此示例之前,请按照《快速入门:使用客户端库》中的 PHP 设置说明进行操作。如需了解详情,请参阅 Pub/Sub PHP API 参考文档

use Google\Cloud\PubSub\PubSubClient;

/**
 * Prints the policy for a PubSub subscription.
 *
 * @param string $projectId  The Google project ID.
 * @param string $subscriptionName  The Pub/Sub subscription name.
 */
function get_subscription_policy($projectId, $subscriptionName)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $subscription = $pubsub->subscription($subscriptionName);
    $policy = $subscription->iam()->policy();
    print_r($policy);
}

Python

在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Python 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Python API 参考文档

from google.cloud import pubsub_v1

# TODO(developer): Choose an existing subscription.
# project_id = "your-project-id"
# subscription_id = "your-subscription-id"

client = pubsub_v1.SubscriberClient()
subscription_path = client.subscription_path(project_id, subscription_id)

policy = client.get_iam_policy(request={"resource": subscription_path})

print("Policy for subscription {}:".format(subscription_path))
for binding in policy.bindings:
    print("Role: {}, Members: {}".format(binding.role, binding.members))

client.close()

Ruby

以下示例使用 Ruby Pub/Sub 客户端库 v3。如果您仍在使用 v2 库,请参阅 迁移到 v3 的指南。如需查看 Ruby v2 代码示例的列表,请参阅 已弃用的代码示例

在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Ruby 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Ruby API 参考文档

# subscription_id = "your-subscription-id"

pubsub = Google::Cloud::PubSub.new

policy = pubsub.iam.get_iam_policy \
  resource: pubsub.subscription_path(subscription_id)

puts "Subscription policy:"
puts policy.bindings.first.role
以下一些示例代码演示了如何获取主题政策

C#

在尝试此示例之前,请按照《快速入门:使用客户端库》中的 C# 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub C# API 参考文档


using Google.Cloud.Iam.V1;
using Google.Cloud.PubSub.V1;

public class GetTopicIamPolicySample
{
    public Policy GetTopicIamPolicy(string projectId, string topicId)
    {
        PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
        TopicName topicName = TopicName.FromProjectTopic(projectId, topicId);
        Policy policy = publisher.IAMPolicyClient.GetIamPolicy(new GetIamPolicyRequest
        {
            ResourceAsResourceName = topicName
        });
        return policy;
    }
}

gcloud

获取主题政策

gcloud pubsub topics get-iam-policy \
    projects/${PROJECT}/topics/${TOPIC} \
    --format json

输出:

{
  "etag": "BwUjMhCsNvY=",
  "bindings": [
    {
      "role":" roles/pubsub.viewer",
      "members": [
        "user:user-1@gmail.com"
      ]
    }
  ]
}

Go

以下示例使用 Go Pub/Sub 客户端库的主要版本 (v2)。如果您仍在使用 v1 库,请参阅迁移到 v2 的指南。如需查看 v1 代码示例的列表,请参阅 已弃用的代码示例

在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Go 设置说明进行操作。如需了解详情,请参阅 Pub/Sub Go API 参考文档

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/iam/apiv1/iampb"
	"cloud.google.com/go/pubsub/v2"
)

func getIAMPolicy(w io.Writer, projectID, topicID string) error {
	// projectID := "my-project-id"
	// topicID := "my-topic"
	ctx := context.Background()
	client, err := pubsub.NewClient(ctx, projectID)
	if err