【问题标题】:Cloud run service invoke云运行服务调用
【发布时间】:2021-06-16 07:17:39
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      请注意,您无法仅使用一个令牌来授权您的请求(如果您计划在一段时间内与您的 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 AdminEditor 角色)中找到.

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

      【讨论】:

        猜你喜欢
        • 2021-03-25
        • 2021-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        相关资源
        最近更新 更多