【问题标题】:Access a cloud run from another cloud run从另一个云运行访问一个云运行
【发布时间】:2020-09-24 23:32:46
【问题描述】:

我正在开发一个在云中托管前端的应用程序:公共访问,无身份验证

另一个云运行服务有后端。这需要身份验证,并且不向公众开放。

当然,如果我禁用后端服务的身份验证,一切都会顺利进行。

是否可以通过前端云运行服务启用身份验证来访问后端?

这两个服务都在同一个无服务器 VPC 中。

【问题讨论】:

  • 这可能更适合 ServerFault,因为它是基础架构问题,而不是编程问题。就是说:当您在那里重新发布时,我认为这需要更多细节。正如所写,它是相当开放的。
  • 您可以从 Cloud Run 与 Cloud Run 进行通信。但是你的一句话access the backend with authentication enabled from the frontend cloud run让我迷失了。你的前端云运行是什么?你能描述一下吗?
  • 你怎么知道这两个服务在同一个 VPC 上?

标签: google-cloud-platform google-cloud-run


【解决方案1】:

正如在official doc 中捕获的那样,frontend 可以通过利用 Invoker IAM 角色安全地私下调用 backend

  • 为前端的服务帐号授予 Cloud Run Invoker IAM 角色。
  • 当您从frontendbackend 发出请求时,您必须在请求中附加一个身份令牌,请参阅here for code examples

【讨论】:

    【解决方案2】:

    要私下连接两个 Cloud Run 应用程序,您需要获取一个身份令牌,并将其添加到目标服务的出站请求的 Authorization 标头中。您可以在此处找到文档和示例。

    要使 Cloud Run 服务 A(使用服务帐户 SA1 运行)能够连接到私有 Cloud Run 服务 B,您需要:

    1. 更新服务 B 的 IAM 权限以赋予 SA1 Cloud Run Invoker 角色 (roles/run.invoker)。

    2. 从元数据服务获取身份令牌 (JWT):

    curl -H "metadata-flavor: Google" \
          http://metadata/instance/service-accounts/default/identity?audience=URL
    

    其中 URL 是服务 B 的 URL(即 https://*.run.app)。

    1. Add header Authentication: Bearer 上一条命令得到的响应在哪里。

    【讨论】:

      猜你喜欢
      • 2021-09-28
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      相关资源
      最近更新 更多