【发布时间】:2021-06-16 07:17:39
【问题描述】:
我想知道是否有一种方法可以在没有 JWT 令牌的情况下使用来自计算引擎 VM 的服务帐户调用云运行服务。这个想法是限制仅来自 VM 的云运行服务访问。虚拟机对云运行服务的请求不能有多个令牌。所以我不能在请求中使用服务帐户 jwt
【问题讨论】:
标签: google-cloud-platform google-cloud-run service-accounts google-iam
我想知道是否有一种方法可以在没有 JWT 令牌的情况下使用来自计算引擎 VM 的服务帐户调用云运行服务。这个想法是限制仅来自 VM 的云运行服务访问。虚拟机对云运行服务的请求不能有多个令牌。所以我不能在请求中使用服务帐户 jwt
【问题讨论】:
标签: google-cloud-platform google-cloud-run service-accounts google-iam
在一个非常特殊的情况下,你可以实现你想要的。你需要
由于最新情况,您不应将任何东西连接到您的 VPC
因为不想依赖身份(JWT token),所以需要依赖网络中的存在。
【讨论】:
请注意,您无法仅使用一个令牌来授权您的请求(如果您计划在一段时间内与您的 Cloud Run 服务通信):
ID 令牌是 JSON Web 令牌 (JWT),在创建后大约一小时到期。如果您从元数据服务器获取令牌,您将始终获得有效的令牌。
1 小时后,您需要使用另一个令牌,因为旧令牌不再有效。例如,如果您从 gcloud auth 手动生成 ID 令牌,这可能会出现问题。但是,您可以通过编程方式从元数据服务器中简单地fetch them(参见代码示例)。这是可能的,因为任何 Google Cloud 服务都可以访问元数据服务器(包括 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 服务所需的最低权限角色.
【讨论】: