创建推送订阅

本文档介绍如何创建推送订阅。您可以使用 Google Cloud 控制台、Google Cloud CLI、客户端库或 Pub/Sub API 创建推送订阅。

准备工作

所需的角色和权限

如需获得创建推送订阅所需的权限,请让您的管理员为您授予项目的Pub/Sub Editor (roles/pubsub.editor) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色可提供 创建推送订阅所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

创建推送订阅需要以下权限:

  • pubsub.subscriptions.create 针对项目的权限
  • pubsub.topics.attachSubscription 针对主题

您也可以使用自定义角色或其他预定义角色来获取这些权限。

跨项目订阅

如果您在一个项目中为另一个项目中的主题创建订阅,则必须对创建订阅的项目具有 pubsub.subscriptions.create 权限,并且对该主题具有 pubsub.topics.attachSubscription 权限。

推送订阅属性

推送订阅支持所有 常见的订阅属性。以下部分介绍推送订阅特有的属性。

端点

端点网址(必需) 。可公开访问的 HTTPS 地址。推送端点的服务器必须具有由证书授权机构签署的有效 SSL 证书。 Pub/Sub 服务会将 同一 Google Cloud 区域中的消息传送至 Pub/Sub 服务 存储消息所在的推送端点。Pub/Sub 服务会尽最大努力传送来自 同一 Google Cloud 区域的消息。

  • 如果订阅者使用防火墙,则无法接收推送请求。要接收 推送请求,您必须关闭防火墙并验证请求中使用的 JSON Web 令牌 (JWT)。 如果订阅者有防火墙,您可能会收到 403 permission denied 错误。

  • Pub/Sub 不要求提供推送订阅网址网域的所有权证明。如果您的网域收到来自 Pub/Sub 的意外 POST 请求 ,您可以举报疑似 滥用行为

身份验证

启用身份验证 。启用后,Pub/Sub 传送给推送端点的消息会包含授权标头,以允许端点对请求进行身份验证。如果 App Engine 标准应用和 Cloud Run 函数端点托管在订阅所属的项目中,则可以使用自动身份验证和授权机制。

经过身份验证的推送订阅的身份验证配置包含用户代管式服务账号,以及在 createpatchModifyPushConfig 调用中指定的受众群体参数。您还必须向服务帐号授予特定角色,如下一部分所述。

  • 受众群体 。一个不区分大小写的字符串,供 Webhook 用于验证此特定令牌的目标受众群体。

  • 服务账号 。Pub/Sub 会自动为您创建一个服务帐号,格式为 service-{PROJECT_NUMBER}@gcp-sa-pubsub.

启用身份验证的前提条件

用户代管式服务账号是与推送订阅关联的服务帐号。 此账号用作生成的 JSON Web 令牌 (JWT) 的 email 声明。以下是服务帐号的要求列表:

  • 用户代管式服务必须与 推送订阅位于同一项目中。

  • 创建或修改推送订阅的主账号必须 对用户管理的服务账号具有 iam.serviceAccounts.actAs 权限,才能将服务帐号附加到推送 订阅。如需了解详情,请参阅 将服务账号附加到资源

  • 所需权限:必须向此服务帐号授予 iam.serviceAccounts.getOpenIdToken 权限(包含在 roles/iam.serviceAccountTokenCreator角色中),以允许 Pub/Sub 为指定的服务帐号创建 JWT 令牌 ,从而对推送请求进行身份验证。

载荷解封