O modo estrito "agir como" ativa uma verificação de segurança adicional para as seguintes ações do usuário no Dataform:
- Criar ou atualizar um repositório
- Criar ou atualizar uma configuração de fluxo de trabalho
- Como criar uma invocação de fluxo de trabalho
- Como atualizar uma configuração de versão
Essa verificação de segurança adicional exige que o usuário que realiza essas ações
tenha a permissão iam.serviceAccounts.actAs na conta de serviço efetiva,
que é a conta de serviço cujas credenciais são usadas para executar fluxos de trabalho.
Para mais informações, consulte
Anexar contas de serviço a recursos.
Você pode ativar essas permissões das seguintes maneiras:
- Ao criar um repositório
- Ao atualizar um repositório com a flag
strict_act_as_checks
Funções exigidas
Para conseguir as permissões necessárias a fim de concluir as tarefas neste documento, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Usuário da conta de serviço (
roles/iam.serviceAccountUser) na conta de serviço personalizada -
Confira os registros no Logging:
Leitor de registros (
roles/logging.viewer) no projeto -
Conceda papéis do IAM a usuários ou contas de serviço:
Administrador da conta de serviço (
roles/iam.serviceAccountAdmin) no projeto
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Verificar as permissões de agir como para a conta de serviço efetiva
Para garantir que seus fluxos de trabalho do Dataform sejam executados com segurança e sem interrupções, é importante verificar as permissões de atuação em nome das contas de serviço usadas. Nesta seção, explicamos como identificar a conta de serviço efetiva dos seus recursos, usar o Cloud Logging para verificar problemas de permissão e resolver os problemas encontrados.
Determinar a conta de serviço efetiva
É possível determinar a conta de serviço efetiva que está executando os fluxos de trabalho de acordo com o tipo de recurso e as seguintes condições:
| Tipo de recurso | Conta de serviço efetiva |
|---|---|
| Repositórios | Se você selecionar uma conta de serviço personalizada ao criar o repositório, a conta de serviço Caso contrário, o padrão será o agente de serviço do Dataform. |
| Configuração do fluxo de trabalho | É possível selecionar uma conta de serviço personalizada ao criar a configuração do fluxo de trabalho. Caso contrário, o padrão será o agente de serviço do Dataform do repositório. |
| Invocação de fluxo de trabalho | Se o resultado da compilação for Se você criar uma invocação de fluxo de trabalho com base em um resultado de compilação, a conta de serviço Caso contrário, o padrão será o agente de serviço do Dataform do repositório. |
Verificar problemas de permissão no Cloud Logging
Para aumentar a segurança, o Dataform verifica se a permissão
iam.serviceAccounts.actAs está faltando nas contas de serviço usadas
pelos recursos do Dataform.
Os resultados dessas verificações, incluindo possíveis problemas de permissão, são registrados no Cloud Logging. Revise esses registros regularmente para identificar e conceder as permissões iam.serviceAccounts.actAs que estão faltando. A verificação desses registros garante que seus fluxos de trabalho e configurações do Dataform continuem funcionando sem interrupção.
Ver registros no Cloud Logging
No console do Google Cloud , acesse a página Análise de registros.
Selecione o projeto do Google Cloud em que você quer verificar os registros.
Use o editor de consultas para filtrar os registros do Dataform
actAscom as seguintes opções:Para listar apenas as verificações de
actAsque falharam e exigem ação, use a seguinte consulta:logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result" jsonPayload.dryRunResult = falsePara listar todas as verificações de
actAs, use esta consulta:logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
Substitua
PROJECT_IDpelo ID do projetoGoogle Cloud .Clique em Executar consulta.
Interpretar entradas de registro
Expanda uma entrada de registro nos resultados da consulta para ver os seguintes campos jsonPayload:
| Campo | Tipo | Descrição |
|---|---|---|
dryRunResult |
Booleano | true: a verificação de permissão foi aprovada.false: a verificação falhou. O principal do autor da chamada não tem a permissão iam.serviceAccounts.actAs na conta de serviço. |
caller |
String | O endereço de e-mail do principal (usuário ou conta de serviço) que iniciou a chamada de API. |
serviceAccount |
String | A conta de serviço que o principal chamador tentou usar. Esse campo geralmente está presente quando o campo dryRunResult é false. |
apiMethod |
String | O método da API Dataform que acionou a verificação, por exemplo, CreateWorkflowInvocation ou UpdateRepository. |
*_context |
Objeto | Um objeto que contém nomes de recursos relevantes para o método da API chamado. Para mais informações, consulte Objetos de contexto. |
Objetos de contexto
A entrada de registro inclui um objeto de contexto nos campos jsonPayload. Os campos desse objeto contêm os nomes totalmente qualificados dos recursos Google Cloud das entidades do Dataform envolvidas. Esses nomes seguem as estruturas padrão mostradas na lista a seguir, permitindo identificar os recursos com precisão.
create_workflow_invocation_context: presente quando o método de API éCreateWorkflowInvocation.workflowInvocation: o nome do recurso da invocação do fluxo de trabalho.- O formato do nome do recurso é o seguinte:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowInvocations/WORKFLOW_INVOCATION_ID.
- O formato do nome do recurso é o seguinte:
compilationResultouworkflowConfig: o nome do recurso da origem usada para a invocação.- O formato do nome do recurso para
compilationResulté o seguinte:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_ID. - O formato do nome do recurso para
workflowConfigé o seguinte:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- O formato do nome do recurso para
create_repository_contextouupdate_repository_context: presente quando o método da API éCreateRepositoryouUpdateRepository.repository: o nome do recurso do repositório do Dataform.- O formato do nome do recurso é o seguinte:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID
- O formato do nome do recurso é o seguinte:
update_release_config_context: presente quando o método de API éUpdateReleaseConfig.releaseConfig: o nome do recurso da configuração de lançamento.- O formato do nome do recurso é o seguinte:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/releaseConfigs/RELEASE_CONFIG_ID.
- O formato do nome do recurso é o seguinte:
create_workflow_config_contextouupdate_workflow_config_context: presente quando o método da API éCreateWorkflowConfigouUpdateWorkflowConfig.workflowConfig: o nome do recurso da configuração do fluxo de trabalho.- O formato do nome do recurso é o seguinte:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- O formato do nome do recurso é o seguinte:
Para comparar os formatos documentados com a entrada de registro, substitua o seguinte:
PROJECT_ID: o identificador exclusivo do seu projetoGoogle Cloud .LOCATION_ID: a região em que seu repositório do Dataform está localizado.REPOSITORY_ID: o ID definido pelo usuário do repositório do Dataform. Esse é o nome dado ao repositório quando ele foi criado.COMPILATION_RESULT_ID: o identificador exclusivo gerado pelo sistema para um resultado de compilação do Dataform.RELEASE_CONFIG_ID: o ID definido pelo usuário da configuração de lançamento do Dataform.WORKFLOW_CONFIG_ID: o ID definido pelo usuário da configuração do fluxo de trabalho do Dataform.
Resolver problemas de permissão
Se você encontrar entradas de registro em que o campo dryRunResult é false, faça o seguinte:
Nos detalhes do
jsonPayload, anote o endereço de e-mail no campocallerpara identificar o principal.Anote o endereço de e-mail no campo
serviceAccountpara identificar a conta de serviço.Confirme se o principal do autor da chamada deve ter permissão para agir como a conta de serviço. Ao conceder essa permissão, o caller pode usar as permissões mantidas pela conta de serviço.
Se o acesso for intencional, conceda o papel de usuário da conta de serviço (
roles/iam.serviceAccountUser) ao principal de chamada na conta de serviço de destino. Para mais informações, consulte Conceder o papel de usuário da conta de serviço do IAM.
Depois de conceder o papel, os futuros registros dessa combinação de chamador e
conta de serviço vão mostrar dryRunResult: true.
Conceder o papel do IAM de usuário da conta de serviço
O papel de usuário da conta de serviço
(roles/iam.serviceAccountUser) contém a permissão iam.serviceAccounts.actAs, que é necessária para o modo estrito de agir como. Ao usar a API Dataform, você precisa ter o papel de usuário da conta de serviço concedido para a conta de serviço efetiva com base no método projects.locations.repositories que está chamando:
createoupatch- Se a propriedade
Repository.ServiceAccountestiver definida, você precisará ter o papel de usuário da conta de serviço concedido para essa propriedade. - Se você estiver chamando o método
patch, precisará ter o papel de usuário da conta de serviço concedido para todas as contas de serviço efetivas em todas as configurações de fluxo de trabalho no repositório.
- Se a propriedade
workflowConfigs.createouworkflowConfigs.patch- Você precisa ter o papel de usuário da conta de serviço concedido para a conta de serviço efetiva usada na configuração do fluxo de trabalho.
releaseConfigs.patch- Você precisa ter o papel de usuário da conta de serviço concedido para todas as contas de serviço efetivas usadas nas configurações de fluxo de trabalho com essa configuração de lançamento.
workflowInvocations.create- Você precisa ter o papel de usuário da conta de serviço concedido para a conta de serviço efetiva usada na invocação do fluxo de trabalho.
Para conceder o papel de Usuário da conta de serviço a uma conta de serviço personalizada, siga estas etapas:
No console Google Cloud , acesse IAM > Contas de serviço.
Selecione um projeto.
Na página Contas de serviço do projeto "PROJECT_NAME", selecione sua conta de serviço personalizada.
Acesse Principais com acesso e clique em Conceder acesso.
No campo Novos principais, insira o ID do agente de serviço padrão do Dataform.
O ID do agente de serviço padrão do Dataform está no seguinte formato:
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.comNa lista Selecionar um papel, escolha Usuário da conta de serviço.
Clique em Salvar.
Para mais informações, consulte os papéis necessários para criar uma configuração de fluxo de trabalho e os papéis necessários para criar uma configuração de lançamento.
Efeitos do modo de agir como estrito em execuções e lançamentos automáticos
Quando o modo estrito de agir como está ativado, ele afeta as versões automáticas de repositório e as execuções automáticas de fluxo de trabalho da seguinte maneira:
Para repositórios que não estão conectados a repositórios de terceiros:
- Não é possível definir uma
programação do Cron
para lançamentos automáticos em configurações de lançamento. Isso é aplicado para evitar a implantação automática de
mudanças no código feitas por um usuário que não tem as permissões
iam.serviceAccounts.actAsnecessárias em contas de serviço downstream. - As execuções programadas de fluxo de trabalho usando uma programação cron nas configurações de fluxo de trabalho permanecem ativadas. Para que essas execuções automatizadas sejam bem-sucedidas, conceda ao agente de serviço padrão do Dataform a permissão
iam.serviceAccounts.actAsna conta de serviço efetiva especificada na configuração do fluxo de trabalho.
Para repositórios conectados a repositórios de terceiros:
- São permitidos lançamentos e execuções de fluxo de trabalho programados.
- Para ativar uma versão automática de uma configuração de versão ou uma execução automática de uma configuração de fluxo de trabalho, conceda ao agente de serviço padrão do Dataform a permissão
iam.serviceAccounts.actAsna conta de serviço efetiva relevante:- Para uma configuração de lançamento automática, conceda a permissão nas contas de serviço efetivas de todas as configurações de fluxo de trabalho acionadas por essa configuração de lançamento.
- Para uma configuração automática de fluxo de trabalho, conceda a permissão na conta de serviço efetiva usada por essa configuração.
A seguir
- Para saber como criar um repositório, consulte Criar um repositório.
- Para saber mais sobre como o Dataform funciona com o BigQuery, consulte Visão geral dos fluxos de trabalho.
- Para saber como criar uma configuração de fluxo de trabalho, consulte Programar execuções.
- Para saber como criar uma configuração de versão, consulte Configurar compilações.