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

GitLab通过WIF获取Google STS令牌失败:invalid_grant错误求助

排查GitLab WIF获取Google STS令牌的invalid_grant错误

核心问题分析

报错invalid_grant + "Error connecting to the given credential's issuer" 通常指向两个核心问题:Google无法验证GitLab的OIDC颁发者身份,或者GitLab生成的JWT断言不符合Google的验证规则。

排查步骤与修复方案

1. 验证Google OIDC提供商的颁发者URL配置

  • 检查Google工作负载身份池的OIDC提供商配置,确保颁发者URL严格为https://gitlab.com(无末尾斜杠,大小写完全一致)。
  • 确认Google能正常访问该地址:在Google Cloud Shell中执行curl https://gitlab.com/.well-known/openid-configuration,确保返回完整的OIDC配置JSON。

2. 修正GitLab CI/CD的ID Token配置

在.gitlab-ci.yml中必须正确定义id_tokens并指定Google的受众(audience),示例如下:

your_job:
  id_tokens:
    GOOGLE_OIDC_TOKEN:
      aud: "https://iam.googleapis.com/projects/[你的项目编号]/locations/global/workloadIdentityPools/[身份池ID]/providers/[OIDC提供商ID]"
  script:
    # 用令牌获取STS凭证的示例命令
    gcloud auth login --brief --cred-file=<(echo "$GOOGLE_OIDC_TOKEN")
  • 替换配置中的项目编号、身份池ID、提供商ID为实际值。
  • 确保GitLab项目的CI/CD设置中已启用ID tokens(路径:Settings > CI/CD > Token Access)。

3. 验证属性映射与条件的正确性

  • 检查GitLab JWT断言内容:在CI任务中临时添加脚本输出JWT的payload部分(注意不要泄露敏感信息):
    script:
      - echo "$GOOGLE_OIDC_TOKEN" | cut -d '.' -f2 | base64 -d | jq
    
    确认输出中包含namespace_id字段,且值为1234567(字符串类型)。
  • 核对Google属性映射:确保工作负载身份提供商的映射规则正确:
    • 映射键:attribute.namespace_id
    • 映射来源:assertion.namespace_id
  • 确认属性条件:条件attribute.namespace_id == '1234567'中的ID必须与GitLab输出的namespace_id完全一致(注意单引号包裹,无拼写错误)。

4. 检查身份池与服务账号的权限绑定

  • 确保目标Google服务账号已绑定工作负载身份用户权限:
    gcloud iam service-accounts add-iam-policy-binding [服务账号邮箱] \
      --role roles/iam.workloadIdentityUser \
      --member "principalSet://iam.googleapis.com/projects/[项目编号]/locations/global/workloadIdentityPools/[身份池ID]/attribute.namespace_id/1234567"
    
  • 确认工作负载身份池和OIDC提供商的状态为启用(Google Cloud Console > IAM > Workload Identity Federation)。

内容的提问来源于stack exchange,提问作者P. Sithole

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:20:03