使用GitLab CI/CD通过工作负载身份联合认证GCP项目时,创建凭证配置报错‘argument AUDIENCE: Must be specified’的问题求助
我之前配置GitLab CI和GCP工作负载身份联合时也碰到过一模一样的报错,给你几个实用的排查方向:
检查
${GCP_WI_PROVIDER}的格式与有效性
这个变量必须是GCP工作负载身份提供者的完整资源ID,格式要求是:projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID很多人会犯的错误是只填了池ID或者提供者ID,没有完整的资源路径,导致gcloud无法识别这个参数作为audience来源。你可以先在script里加一行
echo ${GCP_WI_PROVIDER},确认输出的是符合要求的完整ID。确认环境变量是否正确注入CI/CD环境
如果${GCP_WI_PROVIDER}变量在GitLab CI里没有正确设置(比如变量被标记为“受保护”但当前分支不是受保护分支,或者变量名称拼写错误),会导致命令中第一个参数为空,gcloud自然会提示必须指定AUDIENCE。建议在script开头添加变量打印语句验证:echo "GCP_WI_PROVIDER value: ${GCP_WI_PROVIDER}"尝试显式指定
--audience参数
部分旧版本的gcloud SDK可能对位置参数的支持有兼容问题,你可以尝试显式添加--audience参数,修改后的命令如下:gcloud iam workload-identity-pools create-cred-config ${GCP_WI_PROVIDER} \ --service-account="${GCP_WIF_SA_EMAIL}" \ --output-file=.gcp_temp_cred.json \ --credential-source-file=.ci_job_jwt_file \ --audience=${GCP_WI_PROVIDER}另外,也可以把
google/cloud-sdk:slim镜像换成最新版本(比如google/cloud-sdk:latest),避免旧版本的语法适配问题。核对GCP提供者的受众配置
确保你在GCP上创建工作负载身份提供者时,设置的**受众(Audience)**与GitLab CI_JOB_JWT_V2的受众一致。GitLab托管实例的JWT受众默认是https://gitlab.com,如果你使用的是自托管GitLab,需要对应改成你的实例地址。如果GCP那边的受众配置不匹配,也可能触发类似的参数错误。
内容的提问来源于stack exchange,提问作者Steve Ahlswede

