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
刚刚关注了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