Google Pub/Sub 推送消息不适用于启用 IAP 的应用引擎

Posted

技术标签:

【中文标题】Google Pub/Sub 推送消息不适用于启用 IAP 的应用引擎【英文标题】:Google Pub/Sub push message not working for IAP enabled app engine 【发布时间】:2020-01-09 01:23:35 【问题描述】:

我正在测试一个非常基本的 Pub/Sub 订阅。我将推送端点设置为我通过 App Engine 中的 Python Flex 服务部署的应用程序。该服务位于启用了 Identity-Aware Proxy 的项目中。 IAP 配置为允许通过我们的域进行身份验证的用户。

我没有看到我的应用正在处理任何推送请求。

我关闭了 IAP 保护,然后我看到请求已得到处理。我重新打开它,它们不再被处理。

【问题讨论】:

目前不支持将 Pub/Sub 推送到受 IAP 保护的 App Engine。这里有一个为其创建的功能请求:issuetracker.google.com/issues/69892982。此 SO 帖子中提到了可能的解决方法(它很旧但仍然适用):***.com/a/47233259/4926605 【参考方案1】:

注意:此答案使用 BETA 命令和功能。

要启用已启用 IAP 的 App Engine 访问 Pub/Sub 推送通知:

启用 Pub/Sub 以创建身份令牌 创建一个服务帐号,Pub/Sub 将使用它作为 IAP 的身份 使用服务帐号创建推送 Pub/Sub 订阅 将 Pub/Sub 服务帐户电子邮件地址添加到 IAP

允许 Pub/Sub 服务(服务代理)代表服务帐户创建身份令牌:

gcloud projects add-iam-policy-binding PROJECT-ID \
     --member=serviceAccount:service-PROJECT-NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
     --role=roles/iam.serviceAccountTokenCreator

创建一个服务帐户,Pub/Sub 将使用它作为 IAP 的身份:

gcloud iam service-accounts create pubsub-invoker \
     --display-name "Pub/Sub Invoker Service Account"

使用服务帐号创建推送 Pub/Sub 订阅:

gcloud beta pubsub subscriptions create mySubscription --topic myTopic \
   --push-endpoint=SERVICE-URL/ \
   --push-auth-service-account=pubsub-invoker@PROJECT-ID.iam.gserviceaccount.com

将服务帐户电子邮件地址 pubsub-invoker@PROJECT-ID.iam.gserviceaccount.com 添加到 App Engine 的 IAP。

我不知道此步骤的 CLI 命令。在 Google Cloud Console 中执行此步骤。

【讨论】:

成功了!!谢谢你。我可以知道上面的命令是做什么的吗? 我在顶部和每个命令的答案中列出了每个命令的作用。 约翰。昨天当我尝试启用 IAP 的 pubsub 时,它起作用了。但它今天不工作。 什么不起作用?你需要具体。检查 Stackdriver 日志中的错误消息。 这个解决方案对我有用,只是稍作改动。我必须将订阅的推送身份验证 Audience 字段值设置为 IAP Web 应用程序的 OAuth 客户端 ID。我在这里找到了这个 ID:console.cloud.google.com/apis/credentials

以上是关于Google Pub/Sub 推送消息不适用于启用 IAP 的应用引擎的主要内容,如果未能解决你的问题,请参考以下文章

在我的端点上看不到 Google Pub/Sub 推送通知

Google Pub/Sub + Cloud Run 生成多个容器

从 Google Pub/Sub 调用 Google App Engine 端点

google cloud pub sub中两个主题之间的消息传输

Pub/Sub 推送消息没有 messageId 属性

在 Google Pub/Sub 订阅创建期间出现无效推送端点错误