如何让Google Cloud Run作业的容器使用VM默认凭据?
解决Cloud Run作业容器访问凭据连接BigQuery的问题
方案一:使用Cloud Run作业专属服务账号(推荐,符合GCP最佳实践)
Cloud Run作业本身支持绑定GCP服务账号,无需依赖启动它的VM凭据,这是最安全可控的方式:
- 准备一个拥有BigQuery必要权限的服务账号,比如需要
bigquery.dataEditor(读写数据)、bigquery.jobUser(提交查询作业)等权限,根据你的DBT操作需求分配。 - 部署Cloud Run作业时指定该服务账号:
gcloud run jobs deploy <你的作业名称> --image <你的Docker镜像地址> --service-account <服务账号邮箱> - DBT的
profiles.yml配置无需额外指定凭据路径,GCP SDK会自动获取Cloud Run作业的服务账号默认凭据,OAuth连接会自动生效,示例配置:dbt_bigquery: target: dev outputs: dev: type: bigquery method: oauth project: <你的GCP项目ID> dataset: <你的BigQuery数据集> location: <区域,比如us-central1>
方案二:复用VM的默认凭据(不推荐,存在凭据管理风险)
如果必须使用VM上的默认凭据,可通过Secret Manager中转挂载:
- 在启动Cloud Run作业的VM上,导出默认凭据文件(通常路径为
~/.config/gcloud/application_default_credentials.json) - 将该凭据文件上传到Secret Manager:
gcloud secrets create vm_default_creds --data-file ~/.config/gcloud/application_default_credentials.json - 部署Cloud Run作业时,挂载该秘密并设置环境变量指向凭据路径:
gcloud run jobs deploy <你的作业名称> --image <你的Docker镜像地址> --update-secrets=GOOGLE_APPLICATION_CREDENTIALS=vm_default_creds:latest - 此时DBT会通过
GOOGLE_APPLICATION_CREDENTIALS环境变量找到VM的凭据,完成OAuth连接。
注意:此方案需要定期更新VM的凭据(默认凭据有有效期),且权限范围与VM默认凭据一致,不如服务账号权限粒度可控,仅作为特殊场景下的备选。
内容的提问来源于stack exchange,提问作者SCQs
相关产品推荐
相关产品推荐

