You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为私有本地Gitlab配置Workload Identity Federation?含版本适配疑问

私有GitLab实例的GCP Workload Identity Federation配置及JWT令牌问题解答

一、仅VPN可访问的私有GitLab配置Workload Identity Federation的方案

GCP要求身份提供商的OIDC元数据和JWKs端点必须公开可访问,针对你的私有GitLab只能通过VPN访问的场景,有两种可行方案:

  • 部署公网反向代理服务
    在公网可访问的服务器上搭建反向代理,仅转发GitLab的/.well-known/openid-configuration(OIDC元数据)和/oauth/discovery/keys(JWKs)端点请求,代理服务器通过VPN访问你的私有GitLab。这样GCP就能通过公网代理获取到所需的OIDC配置,GitLab的其他接口仍保持私有访问限制。
    部署时要确保代理服务的稳定性,同时添加必要的访问控制,防止无关请求干扰。

  • 手动配置OIDC提供商信息
    若无法部署公网代理,可手动提取GitLab的OIDC元数据和JWKs内容,在GCP创建Workload Identity Provider时跳过自动发现流程,手动填入以下关键信息:

    1. 从GitLab的OIDC元数据中提取issuer字段值(格式通常为https://你的私有GitLab域名)
    2. 将JWKs中的公钥内容手动添加到GCP的身份提供商配置里
      这种方式的缺点是,当GitLab进行密钥轮换更新JWKs时,需要手动同步到GCP,否则会导致身份验证失败,需要定期维护。

二、GitLab v14.0获取合规JWT令牌的替代方案

GitLab v14.0确实未引入CI_JOB_JWT_V2变量,该变量是在v14.3版本才正式支持的,但并非只能通过升级版本解决:

  • 自定义生成符合要求的JWT令牌
    在GitLab CI流水线中,利用内置的CI变量(如CI_JOB_ID、CI_PROJECT_ID、CI_PROJECT_PATH等)填充JWT所需的声明字段,然后使用GitLab的签名密钥(可通过JWKs端点获取对应的公钥,或在项目CI变量中存储专用签名密钥)生成合规的JWT。
    生成的JWT必须包含Workload Identity Federation要求的核心声明,比如iss(签发者,需与GCP IdP配置的issuer一致)、sub(主体,可设为CI作业的唯一标识)、aud(受众,需指定为GCP的Workload Identity Provider的受众值),且签名算法要与GCP侧配置匹配。

  • 升级GitLab版本
    如果自定义生成JWT的开发和维护成本过高,或者需要长期保障兼容性,升级到v14.3及以上版本是更省心的选择,直接使用官方提供的CI_JOB_JWT_V2变量即可满足需求,无需额外开发。

内容的提问来源于stack exchange,提问作者Krisztian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:50:16