云运行服务调用

时间:2021-03-18 20:31:13

标签: google-cloud-platform google-cloud-run service-accounts google-iam

我想知道是否有一种方法可以在没有 JWT 令牌的情况下从计算引擎 VM 中使用服务帐户调用云运行服务。这个想法是限制仅从 VM 访问云运行服务。 VM对云运行服务的请求不能有多个token,所以我不能在请求中使用服务账号jwt

2 个答案:

答案 0 :(得分:1)

请注意,您无法仅使用一个令牌来授权您的请求(如果您计划通过一段时间与您的 Cloud Run 服务进行通信):

<块引用>

ID 令牌是 JSON 网络令牌 (JWT),在创建后大约一小时到期。如果您从元数据服务器获取令牌,您将始终获得一个有效的令牌。

1 小时后,您需要使用另一个令牌,因为旧令牌不再有效。例如,如果您从 gcloud auth 手动生成 ID 令牌,这可能是一个问题。但是,您可以以编程方式从元数据服务器中简单地 fetch them(请参阅代码示例)。这是可能的,因为任何 GCP 服务都可以访问元数据服务器(包括 Cloud Run 和 Compute Engine)。获取的令牌仍将过期,但会自动为您完成刷新。

<块引用>

“这个想法是限制仅从 VM 访问云运行服务。”

如果您的 Cloud Run 服务需要授权,任何没有 run.routes.invoke 权限的用户或服务帐户将无法访问您的 Cloud Run 服务,即使他们有有效的请求。可以在 Cloud Run Invoker 角色或具有 Cloud Run 服务一般访问权限的 IAM 角色(例如 Cloud Run AdminEditor 角色)中找到此权限.

在这种情况下,我建议您以编程方式从元数据服务器获取令牌,然后将 Cloud Run Invoker 角色分配给您的 Compute Engine 虚拟机正在使用的服务帐号,因为它是调用 Cloud Run 服务所需的最低权限角色.

答案 1 :(得分:0)

在非常特殊的情况下,您可以实现您想要的。你需要

  • 在项目的 VPC 中只有 1 个 VM(您所说的 VM)
  • 设置 Cloud Run ingress control to internal。这样,只有连接到您的 VPC 的组件才能调用您的 Cloud Run 服务。

由于最新情况,您不应将任何内容连接到您的 VPC

  • 您的项目中没有其他虚拟机
  • 没有与 VPC 的外部连接(云 VPN、互连、VPC 对等)
  • 无 VPC SC
  • 没有其他无服务器产品使用无服务器 VPC 连接器

因为不想依赖身份(JWT token),所以需要依赖网络中的存在。

相关问题