在 GCP 上使用 Pubsub 时如何解决身份验证范围不足的问题
Posted
技术标签:
【中文标题】在 GCP 上使用 Pubsub 时如何解决身份验证范围不足的问题【英文标题】:How to solve insufficient authentication scopes when use Pubsub on GCP 【发布时间】:2020-07-02 13:45:08 【问题描述】:我正在尝试构建 2 个微服务(在 Java Spring Boot 中)以使用 GCP Pub/Sub 相互通信。
首先,我在本地笔记本电脑(http://localhost)中测试了程序(在 Eclipse 中)的工作方式,即一个微服务发布了消息,另一个使用 GCP 中创建的主题/订阅者成功接收了消息(以及凭证私钥:mypubsub.json)。
然后,我部署了相同的程序来运行 GCP,并得到以下错误:
- 2020-03-21 15:53:16.831 WARN 1 --- [bsub-publisher2] o.s.c.g.p.c.p.PubSubPublisherTemplate : Publishing to json-payload-sample-topic topic failed
- com.google.api.gax.rpc.PermissionDeniedException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had insufficient authentication scopes. at com.google.api.gax.rpc.ApiExceptionFactory
我做了什么来部署程序(在容器中)以在 GCP/Kubernetes Engine 上运行:
-
切换到我的项目后登录 Cloud Shell 进行 Pubsub 测试
Git 克隆我在 Eclipse 中测试的程序
将 mypubsub.json 文件移动到 /home/my_user_id 下
导出 GOOGLE_APPLICATION_CREDENTIALS="/home/my_user_id/mp6key.json"
运行“mvn clean package”构建微服务程序
运行“docker build”来创建镜像文件
运行 'docker push' 将镜像文件推送到 gcr.io repo
运行“kubectl create”以创建部署并公开服务
一旦部署和公开了 2 个微服务,当我尝试在浏览器中访问它们时,发布消息的微服务可以很好地从数据库中检索数据并处理数据,然后在尝试访问 GCP 时因上述错误而失败发布消息的 Pubsub API
任何人都可以提供有关检查什么来解决问题的提示吗?
【问题讨论】:
编辑您的问题以澄清。你提到了 Cloud Shell、Compute Engine 和 Kubernetes。您在使用什么以及用于哪个部分?您为容器正在使用的服务帐户分配了哪些角色? ***.com/help/minimal-reproducible-example 这与 Compute Engine 无关。基本上,我使用 Cloud Shell 作为工具将我的程序部署为在 GCP 上运行的容器(即使用 Google Kubernetes Engine 来运行我的应用程序的容器而不是 Cloud Run)。我将服务帐户分配为我的程序尝试为其发布消息的主题的 Pub/Sub 管理员。 那你为什么说“我也试图停止 VM 实例然后更新服务帐户”?你的问题需要提高焦点和清晰度。正如所写的那样,我什至无法尝试重现你所拥有的完成了,也不知道你真正的问题是什么。再次阅读我的第一条评论,然后阅读此链接:***.com/help/how-to-ask @John:这是我的理解问题:我认为我必须创建一个 VM 实例,即使我在 GCP 上通过 Contrainer(GKE) 运行我的应用程序,因此我在谷歌上搜索了更新服务的问题停止 VM 实例后,帐户以“允许对所有云 API 的完全访问”。根据您的最后评论,我意识到我的项目与 Compute Engine 无关,因此可能根本不需要创建 VM 实例。我只是试图停止 VM 实例并在 GCP 上重新运行我的服务,但仍然是同样的问题...... PS:我从我的问题中删除了与 VM 相关的部分,以免混淆其他人。 【参考方案1】:该问题已按照指南解决:
https://cloud.google.com/kubernetes-engine/docs/tutorials/authenticating-to-cloud-platform
简单的解决方案是在deployment.yaml中添加以下行来加载凭证密钥:
- name: google-cloud-key
secret:
secretName: pubsub-key
containers:
- name: my_container
image: gcr.io/my_image_file
volumeMounts:
- name: google-cloud-key
mountPath: /var/secrets/google
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: /var/secrets/google/key.json
【讨论】:
以上是关于在 GCP 上使用 Pubsub 时如何解决身份验证范围不足的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GCP 在 pubsub 模型中一次向所有订阅者发送消息