繁体   English   中英

Gitlab 连接到 GCP 工作负载身份联合返回 invalid_grant

[英]Gitlab connection to GCP Workload Identity Federation return invalid_grant

昨天我看到 Gitlab 为 ci/cd 上的作业启用了 OIDC JWT 令牌 我知道 CI_JOB_JWT_V2 被标记为 alpha 功能。

我试图在带有 gcloud cli 的 Gitlab 运行器上将它与 Workflow Identity Federation(WIF) 一起使用,但出现错误。 当尝试通过 STS API 执行此操作时,我遇到了同样的错误。 我错过了什么?

{
    "error": "invalid_grant",
    "error_description": "The audience in ID Token [https://gitlab.com] does not match the expected audience."
}

我的 Gitlab JWT 令牌在解码后看起来大多像这样(ofc 没有细节)

{
  "namespace_id": "1111111111",
  "namespace_path": "xxxxxxx/yyyyyyyy/zzzzzzzzzzz",
  "project_id": "<project_id>",
  "project_path": "xxxxxxx/yyyyyyyy/zzzzzzzzzzz/hf_service",
  "user_id": "<user_id>",
  "user_login": "<username>",
  "user_email": "<user_email>",
  "pipeline_id": "456971569",
  "pipeline_source": "push",
  "job_id": "2019605390",
  "ref": "develop",
  "ref_type": "branch",
  "ref_protected": "true",
  "environment": "develop",
  "environment_protected": "false",
  "jti": "<jti>",
  "iss": "https://gitlab.com",
  "iat": <number>,
  "nbf": <number>,
  "exp": <number>,
  "sub": "project_path:xxxxxxx/yyyyyyyy/zzzzzzzzzzz/hf_service:ref_type:branch:ref:develop",
  "aud": "https://gitlab.com"
}

在 GCP 控制台中,我有一个 WIF 池,其中一个提供者设置为 OIDC,名为 gitlab 和来自https-configuration-known/gitlab.com/ 的发行者 url

我试图让服务帐户访问整个池,但没有区别。 为此 SA 创建的配置如下所示

{
  "type": "external_account",
  "audience": "//iam.googleapis.com/projects/<projectnumber>/locations/global/workloadIdentityPools/<poolname>/providers/gitlab",
  "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
  "token_url": "https://sts.googleapis.com/v1/token",
  "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/gitlab-deployer@<projectid>.iam.gserviceaccount.com:generateAccessToken",
  "credential_source": {
    "file": "gitlab_token",
    "format": {
      "type": "text"
    }
  }
}

默认情况下,工作负载身份联合要求aud声明包含工作负载身份池提供者的 URL 这个 URL 看起来像这样:

https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID

但是您的令牌似乎使用https://gitlab.com作为观众。

重新配置 GitHub 以使用工作负载身份池提供程序 URL 作为受众,或通过运行重新配置池以使用自定义受众

gcloud iam workload-identity-pools providers update-oidc ... \
  --allowed-audiences=https://gitlab.com

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM