Google 云 运行 / pubsub 403 故障排除

Google Cloud run / Trobleshooting pubsub 403

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

配置的运行服务iam:

gcloud beta run services get-iam-policy $CLOUD_RUN_INSTANCE_NAME

returns

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

returns

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。 运行 服务在欧洲

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

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

对于云 运行,步骤 (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 运行 服务。本教程采用最小权限方法。

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

您需要将 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 事实上