谷歌云运行/故障排除 pubsub 403

Posted

技术标签:

【中文标题】谷歌云运行/故障排除 pubsub 403【英文标题】:Google Cloud run / Trobleshooting pubsub 403 【发布时间】:2020-01-03 16:34:48 【问题描述】:

刚刚关注the tutorial available here,一切都清楚了;显然没有任何障碍

配置的运行服务iam:

gcloud beta run services get-iam-policy $CLOUD_RUN_INSTANCE_NAME

返回

bindings:
- members:
  - serviceAccount:cloud-run-pubsub-invoker@$PROJECT_NAME.iam.gserviceaccount.com
  role: roles/run.invoker
etag: BwWRVC2n5Ek=
version: 1

订阅:

gcloud pubsub subscriptions describe $app_subscription

返回

ackDeadlineSeconds: 10
expirationPolicy:
  ttl: 2678400s
messageRetentionDuration: 604800s
name: projects/$PROJECT_NAME/subscriptions/$app_subscription
pushConfig:
  oidcToken:
    serviceAccountEmail: cloud-run-pubsub-invoker@$PROJECT_NAME.iam.gserviceaccount.com
  pushEndpoint: https://$CLOUD_RUN_INSTANCE_NAME-he6agqsita-ew.a.run.app/

但是,该服务不接受来自 pubsub 触发器的任何内容(不断返回 403)。

本教程没有明确告诉人们将此角色添加到服务帐户。但根据经验,运行实例上的add-iam-binding 命令似乎不是正确的步骤

服务帐户令牌创建者也在 pusub 服务帐户上正确设置

这发生在托管上下文中,而不是 gke。运行服务在欧洲

教程中是否缺少它?这是预期的还是我在某处遗漏了什么?

【问题讨论】:

您已将 cloud-run-pubsub-invoker@$PROJECT_NAME.iam.gserviceaccount.com 添加到 Cloud Run,但 Pub/Sub 使用的是 PROJECT_NAME@$PROJECT_NAME.iam.gserviceaccount.com。不同的服务帐号。 @JohnHanley 抱歉,不,这是重写/隐藏名称的拼写错误;服务帐户匹配 【参考方案1】:

您需要将 TokenCreate 角色授予 pubsub service-agent 服务帐户

这里是我使用的命令行

gcloud projects add-iam-policy-binding <ProjectId> \
    --role roles/iam.serviceAccountTokenCreator \
    --member=serviceAccount:service-<ProjectNumber>@gcp-sa-pubsub.iam.gserviceaccount.com

Copy paste of the documentation事实上

【讨论】:

编辑了我的问题,一切都按照教程中的描述正确设置,做得很好而且很清楚。很沮丧没有像宣传的那样工作:s..事情应该可以工作 服务在 europe-west1 地区,这里有关系吗? Pubsub 和 cloud run 在同一个项目中? 是的。刚回来,看起来403消失了。可能是由于云运行的 beta 状态,idk。有点奇怪,但现在看起来效果很好 是的,可能是测试版问题。或 IAM 延迟。也许您必须等待 2 或 3 分钟才能传播新角色。但我认为你的测试花了 5 多分钟才写到这里。无论如何都很奇怪。【参考方案2】:

在标题为 Integrating with Cloud Pub/Sub 的部分中,有一个选项卡小部件要求您选择 Cloud Run 或 GKE 上的 Cloud Run。

对于 Cloud Run,步骤 (a) 是使用命令将服务帐号与特定服务上下文中的 roles/run.invoker 角色相关联。

gcloud beta run services add-iam-policy-binding pubsub-tutorial \
   --member=serviceAccount:cloud-run-pubsub-invoker@PROJECT-ID.iam.gserviceaccount.com \
   --role=roles/run.invoker

这会将调用者角色与服务帐号相关联,但仅适用于指定的 Cloud Run 服务。如果您将此角色添加到服务帐户,通常它将能够调用任何 Cloud Run 服务。本教程采用最小权限方法。

对于 GKE 上的 Cloud Run,调用者角色不受支持,并且 (d) 中的说明要求您添加自定义代码以验证作为 Pub/Sub 推送的一部分发送的 ID 令牌请求。

【讨论】:

我应该指定它;我在托管上下文中。将服务帐户与服务相关联不允许所描述的用途(我得到 403) 我已经添加了用于检查的命令;这些输出是否正确?事情应该工作 从您的问题来看,IAM绑定中的服务账户与Pub/Sub订阅中的服务账户不同。您能否再次检查两者是否使用了相同的服务帐号? 抱歉,这是一个错字重写,事情匹配

以上是关于谷歌云运行/故障排除 pubsub 403的主要内容,如果未能解决你的问题,请参考以下文章

对动态生成的 KML 进行故障排除

电脑故障排除

Linux系统故障排除

BadImageFormatException 故障排除

SQL 超时故障排除

如何用路由器日志快速定位及排除故障