Usar o modo estrito de simulação

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:

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 Repository.ServiceAccount.

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 WORKFLOW_CONFIG, a conta de serviço efetiva da configuração do fluxo de trabalho será usada.

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 WorkflowInvocation.InvocationConfig será usada se estiver definida.

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

  1. No Google Cloud console do, acesse a página Análise de registros.

    Acessar a Análise de registros

  2. Selecione o Google Cloud projeto em que você quer verificar os registros.

  3. Use o editor de consultas para filtrar os registros actAs do Dataform com as seguintes opções:

    • Para listar apenas as verificações actAs que falharam e exigem ação, use a seguinte consulta:

      logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
      jsonPayload.dryRunResult = false
      
    • Para listar todas as verificações actAs, use a seguinte consulta:

      logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
      

    Substitua PROJECT_ID pelo Google Cloud ID do seu projeto.

  4. 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.
    • compilationResult ou workflowConfig: 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.
  • create_repository_context ou update_repository_context: presente quando o método de API é CreateRepository ou UpdateRepository.

    • 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
  • 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.
  • create_workflow_config_context ou update_workflow_config_context: presente quando o método de API é CreateWorkflowConfig ou UpdateWorkflowConfig.

    • 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.

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:

  1. Nos detalhes de jsonPayload, anote o endereço de e-mail no campo caller para identificar o principal.

  2. Anote o endereço de e-mail no campo serviceAccount para identificar a conta de serviço.

  3. 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.

  4. 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:

  • create ou patch
    • Se a propriedade Repository.ServiceAccount estiver 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.
  • workflowConfigs.create ou workflowConfigs.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:

  1. No Google Cloud console do, acesse IAM > Contas de serviço.

    Acesse as Contas de serviço

  2. Selecione um projeto.

  3. Na página Contas de serviço do projeto "PROJECT_NAME", selecione sua conta de serviço personalizada.

  4. Acesse Principais com acesso e clique em Conceder acesso.

  5. 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.com
    

    Substitua PROJECT_NUMBER pelo seu Google Cloud número do projeto.

  6. Na lista Selecionar um papel, selecione o papel Usuário da conta de serviço.

  7. Clique em Adicionar outro papel e selecione o papel Criador de token de conta de serviço.

  8. 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.actAs necessá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.actAs na 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:

A seguir