Estou testando as permissões necessárias para criar uma consulta agendada no BigQuery.
A consulta agendada será criada programaticamente com uma conta de serviço ( [email protected]
) que eu posso personificar. A consulta agendada será executada como outra conta de serviço ( [email protected]
).
Eu concedi as seguintes funções:
- Administrador do BigQuery para
[email protected]
ativarproject1
[email protected]
Conta de serviço Usuário para[email protected]
- Editor de dados do BigQuery para
[email protected]
o conjunto de dados de destino (test_dataset
) - Usuário do BigQuery Job para
[email protected]
ativarproject1
- BigQuery Resource Viewer para
[email protected]
uma organização (porque a consulta está usando aregion-us.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION
visualização)
Estou executando o seguinte enquanto conectado a project1
(o conjunto de dados de destino está neste projeto). Também tentei fazer o mesmo com o Terraform, com a mesma mensagem de erro.
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]
Recebo a seguinte saída:
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]
O erro é mentira, pois [email protected]
tem a função Usuário de Conta de Serviço[email protected]
ativada e essa função inclui iam.serviceAccounts.actAs
permissão.
Tem algo que estou esquecendo aqui? O suporte do GCP está me deixando louco, não está sendo útil em nada.
(os nomes da conta de serviço, do conjunto de dados e do projeto foram alterados)
Por fim, o suporte do Google me orientou para a resposta.
A
iam.disableCrossProjectServiceAccountUsage
restrição (política da organização) foi aplicada (como é por padrão, aparentemente), impedindo-me de anexar uma conta de serviçoproject2
a um recurso emproject1
.Defini a restrição como Não Aplicada
project2
e consegui executar o comando com sucesso.A mensagem de erro é muito enganosa e os logs também não indicam a restrição.