Terraform Enterprise对接GCP工作负载身份时invalid_grant问题求助
错误信息
unable to generate access token: Post "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/{$SA}@{$projectid}.iam.gserviceaccount.com: generateAccessToken": oauth2/google: status code 400: {"error":"invalid_grant","error_description":"Error connecting to the given credential's issuer."}
可能的配置问题排查
尽管GCP VM代理能访问$ISSUER/.well-known/openid-configuration和$ISSUER/.well-known/jwks,仍可从以下方向排查:
OIDC Issuer URL一致性问题
核对GCP工作负载身份池配置的Issuer URL,必须与TFE请求时使用的URL完全匹配,包括是否带https://、末尾是否有斜杠这类细节。例如GCP配置为https://tfe.example.com,但TFE实际使用https://tfe.example.com/,就会触发验证失败。GCP网络出站规则限制
代理能访问OIDC元数据端点,但生成Token的请求发往iamcredentials.googleapis.com,需确认GCP侧VPC防火墙、云NAT或安全组是否允许该域名的HTTPS(443端口)出站流量。TFE代理配置不全
检查TFE的环境变量或配置文件,确保所有与GCP交互的请求都走指定代理。部分TFE组件可能未继承代理配置,导致请求直接出站而非通过代理,进而GCP无法访问TFE公网地址。工作负载身份池属性映射错误
检查GCP工作负载身份池的属性映射规则,确认是否正确将TFE的OIDC声明(如sub、aud)映射到GCP要求的属性。映射规则错误会导致GCP判定凭证无效,返回invalid_grant。OIDC令牌受众(aud)不匹配
确认TFE生成的OIDC令牌aud字段,是否与GCP工作负载身份池配置的受众完全一致。GCP会严格校验该字段,不匹配则拒绝请求。签名证书或算法问题
查看jwks端点返回的证书是否过期,签名算法是否为GCP支持的类型(如RS256)。证书过期或算法不兼容会导致GCP无法验证令牌签名,触发错误。
内容的提问来源于stack exchange,提问作者hb.Sara

