Google 云 Pub/Sub:推送订阅不调用受 IAP 保护的 GAE 应用
Google Cloud Pub/Sub: push subscription doesn't call IAP-protected GAE app
我有一个带有推送订阅的 Pub/Sub 主题。我希望在向主题发布消息时调用我的 AppEngine 应用程序。
以下是我创建订阅的方式:
subscriber.create_subscription(
name=subscription_name,
topic=pubsub_topic,
push_config=pubsub_v1.types.PushConfig(
push_endpoint=f'my_gae_app_hostname/api/update',
oidc_token=pubsub_v1.types.PushConfig.OidcToken(
service_account_email=f"{project_id}@appspot.gserviceaccount.com")))
我的 GAE 应用支持身份识别代理 (IAP)。没有 IAP 一切正常。但是,如果启用 IAP,则不会调用 GAE。日志中没有任何错误。在 Cloud Console 中,在 Pub/Sub 订阅页面上,我只能看到有未送达的消息(在概览图上)。
IAP 有一个我用于订阅的 GAE 默认帐户的主体 (service_account_email)
我授予 Pub/Sub SA iam.serviceAccountTokenCreator 角色(尽管根据 docs 它不再需要):
gcloud projects add-iam-policy-binding $PROJECT_ID
--member="serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com"
--role=roles/iam.serviceAccountTokenCreator
我也尝试创建一个单独的 SA(如本 answer 中所建议),但没有帮助。
您必须指定正确的观众。当您使用 App Engine 和 IAP 时,受众是不寻常的。我 wrote an article 您可以在哪里找到要设置的正确值。
为了加快搜索速度,这里是最重要的信息:
- 观众有这种模式
<PROJECT_NUMBER>-<HASH>.apps.googleusercontent.com
- 受众是IAP客户端ID。您可以前往
API & Services
和 select Credentials
找到它。查看 OAuth 2.0 client IDs
并查找 IAP-App-Engine-app
行并复制 Client ID
我有一个带有推送订阅的 Pub/Sub 主题。我希望在向主题发布消息时调用我的 AppEngine 应用程序。
以下是我创建订阅的方式:
subscriber.create_subscription(
name=subscription_name,
topic=pubsub_topic,
push_config=pubsub_v1.types.PushConfig(
push_endpoint=f'my_gae_app_hostname/api/update',
oidc_token=pubsub_v1.types.PushConfig.OidcToken(
service_account_email=f"{project_id}@appspot.gserviceaccount.com")))
我的 GAE 应用支持身份识别代理 (IAP)。没有 IAP 一切正常。但是,如果启用 IAP,则不会调用 GAE。日志中没有任何错误。在 Cloud Console 中,在 Pub/Sub 订阅页面上,我只能看到有未送达的消息(在概览图上)。
IAP 有一个我用于订阅的 GAE 默认帐户的主体 (service_account_email)
我授予 Pub/Sub SA iam.serviceAccountTokenCreator 角色(尽管根据 docs 它不再需要):
gcloud projects add-iam-policy-binding $PROJECT_ID
--member="serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com"
--role=roles/iam.serviceAccountTokenCreator
我也尝试创建一个单独的 SA(如本 answer 中所建议),但没有帮助。
您必须指定正确的观众。当您使用 App Engine 和 IAP 时,受众是不寻常的。我 wrote an article 您可以在哪里找到要设置的正确值。
为了加快搜索速度,这里是最重要的信息:
- 观众有这种模式
<PROJECT_NUMBER>-<HASH>.apps.googleusercontent.com
- 受众是IAP客户端ID。您可以前往
API & Services
和 selectCredentials
找到它。查看OAuth 2.0 client IDs
并查找IAP-App-Engine-app
行并复制Client ID