云计划程序不适用于自定义云运行域



我是托管云运行内部管理工具的后端。由于只有GCP项目的管理员应该能够访问这个工具,我按照这里的说明通过设置一个静态外部IP(和自定义域)的负载均衡器来启用云运行的IAP,限制进入"内部和云负载平衡",并允许未经身份验证的公共访问云运行服务,因为IAP正在处理身份验证和授权。

现在我正在尝试在Cloud Scheduler上设置一些cron作业,为此我提供了一个与我的自定义域(例如https://customdomain.com/endpoint)相对应的端点,以及一个允许生成OIDC令牌的服务帐户电子邮件。OIDC令牌的受众自动设置为相同的自定义域URL。然而,正如在这个线程中报告的那样,似乎有一个云调度程序只允许运行的错误。app受众—任何其他内容(包括自定义域)都会导致401 UNAUTHENTICATED。即使我将目标URL设置为https://customdomain.com/endpoint,但将受众设置为https://cloud-run-service.a.run.app/endpoint,也会发生这种情况。当然,我不能改变我的目标URL为https://cloud-run-service.a.run.app/endpoint,因为它不允许直接流量不通过负载均衡器。

有人遇到过这种情况或知道任何解决方法吗?谢谢!

我明白你的问题是,在Cloud Scheduler中,发送到Cloud Run Service的OIDC令牌仅在受众是Cloud Run提供的URL而不是自定义域URL时才有效。

  1. 不工作:URL: https://service-url.customdomain.com |观众:https://https://service-url.customdomain.com
  2. 作品:URL: https://service-url.customdomain.com |观众:https://example-abcdefg.a.run.app
  3. 作品:URL: https://example-abcdefg.a.run.app |观众:https://example-abcdefg.a.run.app

Google已经意识到这个问题,并且正在努力允许他们为Cloud Run服务指定自定义受众,这将解决您的问题。

现在根据2022年5月的最新更新,我们即将为Cloud Run提供定制受众。如果您有兴趣成为"Cloud Run"自定义受众的早期测试者,请填写此表格。

目前,要通过Cloud IAM验证调用者,您必须传入JWT令牌,并将受众字段设置为服务的完整URL,例如https://example-abcdefg.a.run.app。使用此功能,您可以将自定义域指定为OAuth令牌中的受众字段,而不是原始服务URL,从而使部署在多个区域的服务能够接受公共受众字段

问题跟踪器参考:https://issuetracker.google.com/182490050

我相信您仍然可以通过使用service accounts

将目标URL(在配置Cloud Scheduler时)设置为Cloud Run服务的run.app/endpoint
  1. 首先为Cloud Scheduler创建一个服务帐户

  2. 然后赋予该服务帐户调用云运行服务的权限

查看Google的文档在这里

经过几个小时的痛苦调试,下面是遇到同样问题的人的解决方案。虽然映射到Cloud Run服务的自定义域仍然不能作为OIDC受众工作,但Cloud Run提供的运行也不能。当在负载均衡器前使用IAP时。在这种情况下,预期用户是IAP Client ID。您可以在凭据->api和服务->OAuth 2.0客户端id ->IAP服务名称>只需手动将OIDC受众设置为这个字符串,事情就应该开始工作了!

最新更新