无法使用服务帐户订阅 google pub 子主题

Posted

技术标签:

【中文标题】无法使用服务帐户订阅 google pub 子主题【英文标题】:Unable to subscribe to a google pub sub topic using a service account 【发布时间】:2018-10-15 15:19:21 【问题描述】:

我试图理解此链接中的谷歌云示例中给出的示例

IAM Example

此示例创建一个服务帐号、一个虚拟机和一个 Pub/Sub 主题。虚拟机作为服务帐号运行,服务帐号拥有对 Pub/Sub 主题的订阅者访问权限,从而使运行在虚拟机上的服务和应用程序能够访问 Pub/Sub 主题。

但是,当我尝试部署此示例时,我遇到了错误

The fingerprint of the deployment is a-v3HjAHciZeSLuE-vSeZw==
Waiting for create [operation-1525502430976-56b6fb6809800-dbd09909-c5d681b2]...failed.
ERROR: (gcloud.deployment-manager.deployments.create) Error in Operation [operation-1525502430976-56b6fb6809800-dbd09909-c5d681b2]: errors:
- code: RESOURCE_ERROR
  location: /deployments/test-dp/resources/my-pubsub-topic
  message: '"ResourceType":"pubsub.v1.topic","ResourceErrorCode":"403","ResourceErrorMessage":"code":403,"message":"User
    not authorized to perform this action.","status":"PERMISSION_DENIED","details":[],"statusMessage":"Forbidden","requestPath":"https://pubsub.googleapis.com/v1/projects/fresh-deck-194307/topics/my-pubsub-topic:setIamPolicy","httpMethod":"POST"'

它提到用户无权执行此操作。 我无法理解它提到的是哪个用户。 由于我是项目所有者并且我的帐户是项目的所有者,我应该能够部署一个脚本,该脚本可以设置 IAM 策略以订阅 pubsub 主题。

上面可能是我的理解有误。有人可以帮助理解为什么这个例子失败了吗?

另外我希望如果运行这个例子需要任何额外的配置,应该在 README 文件中提到。但是没有说明。

【问题讨论】:

哪个用户或服务帐户正在通过 DM 部署,该用户/帐户是否具有“setIamPolicy”权限? @PatrickW 用户是项目所有者,部署管理器正在从云 shell 执行。 我正在做同样的事情并得到同样的错误。在“pubsub_topic.jinja”文件中设置 IAM 策略似乎是一个问题。这可能是 API 的问题,当我尝试使用 IAM API 通过 REST 设置 IAM 策略时,我收到了类似的奇怪错误消息。 我今晚再次尝试部署它,现在我不再收到 403 错误。这可能是一个暂时的问题。无论哪种方式,部署现在都可以正常工作 【参考方案1】: 确保您尝试部署的所有资源的 API 均已启用。 使用gcloud auth list 命令确保具有足够权限的帐户是活动帐户。 使用gcloud config list 命令确保默认项目或其他设置正确。

【讨论】:

是的,所有事情都经过检查并且有效。还是不行。 我已经测试了我的部署。它对我有用。如果它仍然对您不起作用,则必须对其进行调查。我建议您在Public Issue Tracker 中创建一个新问题。

以上是关于无法使用服务帐户订阅 google pub 子主题的主要内容,如果未能解决你的问题,请参考以下文章

将来自不同项目的服务帐户分配给 Pub/Sub 上的推送订阅

Google Pub/Sub - 多个订阅同一主题以通过 REST API 减少负载?

确保在第一个订阅者完成拉入 Google pub-sub 主题后触发第二个订阅者

如何使用当前的 pubsub 订阅者从 google Pub/Sub 系统获取消息

Google Firebase 通知无法订阅主题

Google Pub/Sub 分区 ID