1

我正在尝试使Cloud Run 的 IAM 策略在 Google Cloud Load Balancer 后面工作。

直接调用 Cloud Run 服务时,我需要将目标受众设置为等于 Cloud Run 服务的 URL,例如my-service-abcdef.a.run.app

import { credentials } from '@grpc/grpc-js';
import { GoogleAuth } from 'google-auth-library';

const clientCredentials = await new GoogleAuth().getIdTokenClient(
  'https://my-service-abcdef.a.run.app',
);

const client = new MyServiceClient(
  'my-service-abcdef.a.run.app',
  credentials.combineChannelCredentials(
    credentials.createSsl(),
    credentials.createFromGoogleCredential(clientCredentials),
  ),
);

现在,当我将 Cloud Run 服务放在 GCLB 后面时,当我提供已链接到 GCLB 的域时,我实际上仍然可以调用它(例如my-domain.com),但我需要保持目标受众(对于 getIdTokenClient 调用)完好无损(https://my-service-abcdef.a.run.app)。

一旦我在 GCLB 后面添加更多具有不同“本机”URL(在.run.app域中,因此需要不同的受众)的区域,这就会中断(这是完全可以理解的)。

Cloud Run 服务是否接受任何其他受众?我可以指定我自己的吗?

4

2 回答 2

1

我正在尝试使 Cloud Run 的 IAM 策略在 Google Cloud Load Balancer 后面工作。

使用谷歌授权,目前没有解决办法。

目前,IAP 不适用于无服务器 NEG(Cloud Run、Cloud Functions、App Engine)。

无服务器网络端点组 - ​​限制

Cloud Run 服务是否接受任何其他受众?

不,受众由 GFE/IAP 前端验证。无效请求不会到达您的服务入口点。

我可以指定我自己的吗?

如果您指的是 IAP 验证的您自己的受众,则不会。如果您关闭授权,您可以实现自己的身份令牌/API 密钥/密码并在您的代码中进行验证。

于 2021-03-19T23:13:34.390 回答
1

有一个特殊情况是支持额外的受众。如果您查看最终用户 auth 的文档,如果您查看解码的最终用户令牌的受众,它会提供线索。

您将看到,当您在项目的凭据部分中创建 Web 应用程序 OAuth 客户端时,您将拥有一个格式为 client-id

nnn-xyz.apps.googleusercontent.com

您可以在通过服务帐户或 GCP Auth 客户端库为 auth 标头创建 JWT 时将其指定为受众。在对 GCLB 的请求中使用此 JWT 时,它将适用于任何区域的服务。调用者的身份仍然需要是每个服务的 IAM 调用者成员列表中的授权身份。

如果您使用 IAP 的客户端 ID(在同一凭证页面中列出),这可能会导致单个身份验证标头通过 2 层验证:IAP 身份验证检查以及 Cloud Run 的 IAM 调用程序检查(一旦完全支持 IAP ,这部分已经到位)。

需要注意的一个警告是,必须在部署修订之前在项目中创建客户端 ID。为现有服务部署新修订版将获取最近创建的客户端 ID。

于 2021-03-20T16:18:33.820 回答