如何在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
相关产品推荐
相关产品推荐

