O modo "agir como" estrito 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.
- Criar uma invocação de fluxo de trabalho.
- 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.
O modo "agir como" estrito é aplicado a todos os repositórios.
Funções exigidas
Para receber as permissões necessárias para 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 -
Ver registros no Cloud Logging:
Visualizador de registros (
roles/logging.viewer) no projeto -
Conceder 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 personalizados papéis ou outros predefinidos papéis.
Verificar as permissões "agir como" da conta de serviço efetiva
Para garantir que os fluxos de trabalho do Dataform sejam executados com segurança e sem interrupções, é importante verificar as permissões "agir como" nas contas de serviço usadas. Esta seção explica como identificar a conta de serviço efetiva dos seus recursos, usar o 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 | A conta de serviço personalizada configurada para o repositório. Uma conta de serviço personalizada é necessária para todos os repositórios. Essa conta de serviço está listada no campo |
| Configuração do fluxo de trabalho | Para novas configurações de fluxo de trabalho, a conta de serviço personalizada selecionada ao criar uma configuração de fluxo de trabalho é usada. Se nenhuma conta de serviço for selecionada, a conta de serviço do repositório será usada. |
| Invocação de fluxo de trabalho | Se o resultado da compilação for um recurso Se você criar uma invocação de fluxo de trabalho a partir de um resultado de compilação, a conta de serviço listada no campo Caso contrário, ela será definida como a conta de serviço configurada no nível 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á ausente 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 ausentes. A verificação desses registros garante que os fluxos de trabalho e as configurações do Dataform continuem funcionando sem interrupções.
Ver registros no Cloud Logging
No Google Cloud console do, acesse a página Análise de registros.
Selecione o Google Cloud projeto em que você quer verificar os registros.
Use o editor de consultas para filtrar os registros
actAsdo Dataform com as seguintes opções:Para listar apenas as verificações
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
actAs, use a seguinte consulta:logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
Substitua
PROJECT_IDpelo Google Cloud ID do seu projeto.Clique em Executar consulta.
Interpretar entradas de registro
Expanda uma entrada de registro nos resultados da consulta para visualizar 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 do autor da chamada tentou representar. 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 de 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 nesse objeto contêm os nomes de recursos totalmente qualificados Google Cloud dos
nomes de recursos 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 de 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 versão.- 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 de 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 Google Cloud projeto.LOCATION_ID: a região em que o 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 versão 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
Para resolver problemas de permissão identificados no Logging, determine a causa raiz da falha e siga as etapas de resolução correspondentes.
Conceder permissões "agir como" ausentes
Se você encontrar entradas de registro em que o campo dryRunResult é false, faça o seguinte:
Nos detalhes de
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 representar a conta de serviço. A concessão dessa permissão permite que o autor da chamada use as permissões da 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 do autor da chamada na conta de serviço de destino. Para mais informações, consulte Conceder os papéis necessários do IAM.
Depois de conceder o papel, os registros futuros dessa combinação de autor da chamada e conta de serviço vão mostrar dryRunResult: true.
Processar a vinculação de conta de serviço entre projetos
Se o repositório e a conta de serviço efetiva estiverem em projetos diferentes, a solicitação para representar a conta de serviço poderá ser bloqueada pela restrição da política da organização iam.disableCrossProjectServiceAccountUsage.
Para resolver esse problema, consulte Ativar a vinculação de contas de serviço entre projetos.
Conceder os papéis necessários do IAM
O papel de Usuário da conta de serviço
(roles/iam.serviceAccountUser) contém a iam.serviceAccounts.actAs
permissão, que é necessária para o modo "agir como" estrito. Ao usar a
API Dataform, é necessário ter o papel de Usuário da conta de serviço concedido
para a conta de serviço efetiva com base no
projects.locations.repositories método
que você 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 usando essa configuração de versão.
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 Google Cloud console do, 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.comSubstitua
PROJECT_NUMBERpelo seu Google Cloud número do projeto.Na lista Selecionar um papel, selecione o papel Usuário da conta de serviço.
Clique em Adicionar outro papel e selecione o papel Criador de token de 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 versão
Efeitos do modo "agir como" estrito em versões e execuções automáticas
O modo "agir como" estrito tem o seguinte impacto nas versões automáticas do repositório e nas execuções automáticas do fluxo de trabalho.
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 versões automáticas em configurações de versão. Isso é aplicado para evitar que as mudanças de código feitas por um usuário que possa não ter as permissões
iam.serviceAccounts.actAsnecessárias em contas de serviço downstream sejam implantadas automaticamente. - As execuções de fluxo de trabalho programadas usando uma programação do Cron nas configurações de fluxo de trabalho permanecem ativadas. Para que essas execuções automatizadas sejam bem-sucedidas, é necessário conceder 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 que estão conectados a repositórios de terceiros:
- As versões programadas e as execuções de fluxo de trabalho programadas são permitidas.
- Para ativar uma versão automática de uma configuração de versão ou uma execução automática de um fluxo de trabalho, é necessário conceder ao agente de serviço padrão do Dataform a permissão
- Para uma configuração de versão 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 versão.
- Para uma configuração de fluxo de trabalho automática, conceda a permissão na conta de serviço efetiva usada por essa configuração de fluxo de trabalho.
iam.serviceAccounts.actAsna conta de serviço efetiva relevante:
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.