Usar o modo estrito de simulação

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:

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:

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 Repository.ServiceAccount será usada.

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 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 com base em um resultado de compilação, a conta de serviço WorkflowInvocation.InvocationConfig será usada se estiver definida.

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

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

    Acessar a Análise de registros

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

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

    • Para listar apenas as verificações de 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 de actAs, use esta consulta:

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

    Substitua PROJECT_ID pelo ID do projetoGoogle Cloud .

  4. 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.
    • 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 da 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 lançamento.
      • 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 da 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 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:

  1. Nos detalhes do 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 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.

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

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

  1. No console Google Cloud , 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
    
  6. Na lista Selecionar um papel, escolha Usuário da conta de serviço.

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