谷歌云运行/故障排除 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的主要内容,如果未能解决你的问题,请参考以下文章