我正在测试在 BigQuery 上创建计划查询所需的权限。
[email protected]
计划查询将通过我可以模拟的服务帐户 ( ) 以编程方式创建。计划查询将以另一个服务帐户 ( [email protected]
) 的身份运行。
我已授予以下角色:
- BigQuery 管理员已
[email protected]
开启project1
- 服务
[email protected]
帐户用户[email protected]
- BigQuery 数据编辑器至
[email protected]
目标数据集 (test_dataset
) - BigQuery
[email protected]
作业用户project1
- BigQuery Resource Viewer到
[email protected]
组织(因为查询正在使用该region-us.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION
视图)
我在连接到(目标数据集在此项目中)时运行以下命令project1
。我也尝试使用 terraform 实现相同功能,但出现相同的错误消息。
gcloud config set auth/impersonate_service_account [email protected]
bq mk \
--transfer_config \
--target_dataset=test_dataset \
--display_name='test bq scheduled query' \
--params='{"destination_table_template":"test_jobs", "write_disposition":"WRITE_APPEND", "query":"SELECT job_id FROM `region-us.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION` WHERE DATE_TRUNC(creation_time, DAY) = '2025-01-22'"}' \
--data_source=scheduled_query \
[email protected]
我得到以下输出:
Updated property [auth/impersonate_service_account].
WARNING: This command is using service account impersonation. All API
calls will be executed as [[email protected]].
BigQuery error in mk operation:
Requesting user [email protected] does not have
iam.serviceAccounts.actAs permission to act as service account
[email protected]
该错误是谎言,因为[email protected]
已启用服务帐户用户角色[email protected]
,并且该角色包含iam.serviceAccounts.actAs
权限。
我是不是漏掉了什么?GCP 支持让我抓狂,一点帮助都没有。
(服务帐户、数据集和项目名称已更改)
最后,Google支持为我找到了答案。
约束
iam.disableCrossProjectServiceAccountUsage
(组织策略)是强制执行的(显然是默认的),阻止我将服务帐户附加project2
到中的资源project1
。我将约束设置为“不强制执行”,
project2
并且能够成功执行该命令。错误消息非常具有误导性,并且日志也没有暗示约束。