我想知道是否有一种方法可以在没有 JWT 令牌的情况下从计算引擎 VM 中使用服务帐户调用云运行服务。这个想法是限制仅从 VM 访问云运行服务。 VM对云运行服务的请求不能有多个token,所以我不能在请求中使用服务账号jwt
答案 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 Admin 或 Editor 角色)中找到此权限.
在这种情况下,我建议您以编程方式从元数据服务器获取令牌,然后将 Cloud Run Invoker 角色分配给您的 Compute Engine 虚拟机正在使用的服务帐号,因为它是调用 Cloud Run 服务所需的最低权限角色.
答案 1 :(得分:0)
在非常特殊的情况下,您可以实现您想要的。你需要
由于最新情况,您不应将任何内容连接到您的 VPC
因为不想依赖身份(JWT token),所以需要依赖网络中的存在。