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

如何在Shell脚本中动态使用两个ServiceAccount执行bq命令?

在Shell脚本中动态使用不同ServiceAccount执行bq命令

方法1:通过临时环境变量指定身份

利用GOOGLE_APPLICATION_CREDENTIALS环境变量,仅让当前bq命令使用目标ServiceAccount的密钥文件,不会修改全局活跃账号状态,适合脚本内交替使用不同身份。

示例脚本:

# 使用第一个ServiceAccount执行bq show
GOOGLE_APPLICATION_CREDENTIALS="/绝对路径/sa1-key.json" bq show --project=你的项目ID1 数据集.表名

# 使用第二个ServiceAccount执行bq load
GOOGLE_APPLICATION_CREDENTIALS="/绝对路径/sa2-key.json" bq load --project=你的项目ID2 \
  --source_format=CSV \
  数据集.目标表名 \
  /数据文件路径/data.csv \
  schema.json

方法2:通过gcloud激活后指定账号执行

先一次性激活两个ServiceAccount,后续执行bq命令时直接通过--account参数指定身份,无需频繁切换全局账号。

第一步:激活ServiceAccount(脚本中执行一次即可)

# 激活第一个SA
gcloud auth activate-service-account sa1@你的项目ID1.iam.gserviceaccount.com --key-file=/绝对路径/sa1-key.json

# 激活第二个SA
gcloud auth activate-service-account sa2@你的项目ID2.iam.gserviceaccount.com --key-file=/绝对路径/sa2-key.json

第二步:指定账号执行bq命令

# 用SA1执行bq show
bq show --account=sa1@你的项目ID1.iam.gserviceaccount.com --project=你的项目ID1 数据集.表名

# 用SA2执行bq load
bq load --account=sa2@你的项目ID2.iam.gserviceaccount.com --project=你的项目ID2 \
  --source_format=CSV \
  数据集.目标表名 \
  /数据文件路径/data.csv \
  schema.json

权限说明

  • 执行bq show的ServiceAccount需要拥有bigquery.tables.get权限
  • 执行bq load的ServiceAccount需要拥有bigquery.tables.create和bigquery.tables.updateData权限
  • 若要让目标ServiceAccount拥有表的访问权限,需在对应表的IAM设置中,为该账号添加BigQuery Data Owner或其他所需数据权限(如BigQuery Data Editor)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:17:19