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

在GitLab流水线中通过Terraform操作Google Cloud的认证问题

问题解决:GitLab流水线中Terraform使用GCP服务账号模拟身份

核心问题

已通过GitLab OIDC联合身份认证GCP,可通过gcloud config set auth/impersonate_service_account模拟指定服务账号,gcloud命令正常执行,但Terraform无法复用该身份:

  • 直接设置GOOGLE_APPLICATION_CREDENTIALS为OIDC配置文件时,因令牌路径错误报错:oauth2/google: unable to generate access token: Post "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/[MASKED]:generateAccessToken": oauth2/google/externalaccount: failed to open credential file "/tmp/oidc-token.txt"
  • Terraform默认使用的应用默认凭据(ADC)未加载模拟的服务账号身份

解决方案

方案1:复用gcloud的模拟身份生成ADC

利用已配置好的gcloud模拟身份,生成Terraform可识别的ADC文件:

# 基于当前gcloud模拟的服务账号生成应用默认凭据
gcloud auth application-default login --no-launch-browser --impersonate-service-account $GCLOUD_SERVICE_ACCOUNT

# 验证凭据有效性(可选)
gcloud auth application-default print-access-token

执行后,gcloud会自动将ADC写入默认路径/root/.config/gcloud/application_default_credentials.json,Terraform会自动读取该路径,无需额外设置GOOGLE_APPLICATION_CREDENTIALS。

也可手动指定生成路径:

gcloud auth application-default print-credentials > /tmp/adc.json
export GOOGLE_APPLICATION_CREDENTIALS=/tmp/adc.json

方案2:Terraform Provider直接配置服务账号模拟

跳过ADC配置,直接在Terraform的Google Provider中指定模拟的服务账号,让Terraform直接调用IAM Credentials API获取令牌:
在infra目录的provider.tf中添加:

provider "google" {
  project                    = "你的GCP项目ID"
  impersonate_service_account = var.gcloud_service_account # 或直接使用环境变量:"${var.GCLOUD_SERVICE_ACCOUNT}"
}

注意:需确保GitLab的OIDC联合身份主体(工作负载身份池中的身份)拥有roles/iam.serviceAccountTokenCreator权限,允许其模拟目标服务账号。

修复OIDC配置文件错误(可选)

若坚持使用OIDC配置文件,需完成以下两步:

  1. 将GitLab的OIDC令牌写入配置文件指定路径:
echo "$CI_JOB_JWT_V2" > /tmp/oidc-token.txt
  1. 确认$GCLOUD_CREDENTIAL_CONFIGURATION配置文件中的token_path字段指向/tmp/oidc-token.txt,且credential_source配置正确。

权限要求

  • GitLab联合身份主体:需拥有roles/iam.serviceAccountTokenCreator权限,用于模拟目标服务账号
  • 目标服务账号$GCLOUD_SERVICE_ACCOUNT:需拥有Terraform操作GCP资源的对应权限(如roles/compute.admin、roles/storage.admin等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:44:54