Use o modo de atuação rigoroso

O modo de atuação rigoroso ativa uma verificação de segurança adicional para as seguintes ações do utilizador 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 lançamento

Esta verificação de segurança adicional requer que o utilizador que executa estas ações tenha a autorizaçã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 o artigo Anexe contas de serviço a recursos.

Pode ativar estas autorizações das seguintes formas:

  • Quando cria um repositório
  • Quando atualiza um repositório existente com a flag strict_act_as_checks repository

Funções necessárias

Para receber as autorizações de que precisa para concluir as tarefas neste documento, peça ao seu administrador que lhe conceda as seguintes funções de IAM:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Valide as autorizações para "agir em nome de" da conta de serviço em vigor

Para garantir que os fluxos de trabalho do Dataform são executados de forma segura e sem interrupções, é importante validar as autorizações de atuação em nome de nas contas de serviço que usam. Esta secção explica como identificar a conta de serviço eficaz para os seus recursos, usar o Cloud Logging para verificar se existem problemas de autorização e, em seguida, resolver os problemas que encontrar.

Determine a conta de serviço eficaz

Pode determinar a conta de serviço efetiva que está a executar os fluxos de trabalho de acordo com o tipo de recurso e as seguintes condições:

Tipo do recurso Conta de serviço efetiva
Repositórios

Se selecionar uma conta de serviço personalizada quando criar o repositório, é usada a conta de serviço Repository.ServiceAccount.

Caso contrário, a predefinição é o agente do serviço Dataform.

Configuração do fluxo de trabalho

Pode selecionar uma conta de serviço personalizada quando criar a configuração do fluxo de trabalho.

Caso contrário, a predefinição é o agente do serviço Dataform do repositório.

Invocações de fluxo de trabalho

Se o resultado da compilação for WORKFLOW_CONFIG, é usada a conta de serviço efetiva da configuração do fluxo de trabalho.

Se criar uma invocação de fluxo de trabalho a partir de um resultado de compilação, é usada a conta de serviço WorkflowInvocation.InvocationConfig, se estiver definida.

Caso contrário, a predefinição é o agente do serviço Dataform do repositório.

Verifique se existem problemas de autorização nos Registos na nuvem

Para melhorar a segurança, o Dataform verifica se a autorização iam.serviceAccounts.actAs está em falta nas contas de serviço usadas pelos recursos do Dataform.

Os resultados destas verificações, incluindo potenciais problemas de autorização, são registados no Cloud Logging. Deve rever estes registos regularmente para identificar e conceder as autorizações iam.serviceAccounts.actAs em falta. A verificação destes registos garante que as configurações e os fluxos de trabalho do Dataform continuam a funcionar sem interrupções.

Veja os registos no Cloud Logging

  1. Na Google Cloud consola, aceda à página Explorador de registos.

    Aceda ao Explorador de registos

  2. Selecione o Google Cloud projeto no qual quer verificar os registos.

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

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

      logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
      jsonPayload.dryRunResult = false
      
    • Para apresentar uma lista de 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 seu Google Cloud ID do projeto.

  4. Clique em Executar consulta.

Interprete as entradas do registo

Expanda uma entrada de registo nos resultados da consulta para ver os seguintes campos:jsonPayload

Campo Tipo Descrição
dryRunResult Booleano true: a verificação de autorização foi aprovada.

false: a verificação falhou. O principal do autor da chamada não tem a autorização iam.serviceAccounts.actAs na conta de serviço.
caller String O endereço de email do principal (utilizador ou conta de serviço) que iniciou a chamada da API.
serviceAccount String A conta de serviço que o principal do autor da chamada tentou usar. Este campo está normalmente 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 os nomes dos recursos relevantes para o método da API chamado. Para mais informações, consulte o artigo Objetos de contexto.
Objetos de contexto

A entrada do registo inclui um objeto de contexto nos campos jsonPayload. Os campos neste objeto contêm os nomes dos recursos totalmente qualificados das entidades do Dataform envolvidas. Google Cloud Estes nomes seguem as estruturas padrão apresentadas na lista seguinte, o que lhe permite identificar os recursos com precisão.

  • create_workflow_invocation_context: presente quando o método da 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 usado 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 da API é UpdateReleaseConfig.

    • releaseConfig: o nome do recurso da configuração do 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 registo, substitua o seguinte:

  • PROJECT_ID: o identificador exclusivo do seu projeto do Google Cloud .
  • LOCATION_ID: a região onde se encontra o seu repositório do Dataform.
  • REPOSITORY_ID: o ID definido pelo utilizador do repositório do Dataform. Este é o nome atribuído ao repositório quando foi criado.
  • COMPILATION_RESULT_ID: o identificador único gerado pelo sistema para um resultado da compilação do Dataform.
  • RELEASE_CONFIG_ID: o ID definido pelo utilizador da configuração de lançamento do Dataform.
  • WORKFLOW_CONFIG_ID: o ID definido pelo utilizador da configuração do fluxo de trabalho do Dataform.

Resolva problemas de autorizações

Se encontrar entradas de registo em que o campo dryRunResult é false, faça o seguinte:

  1. Nos detalhes de jsonPayload, tome nota do endereço de email no campo caller para identificar o principal.

  2. Tome nota do endereço de email no campo serviceAccount para identificar a conta de serviço.

  3. Confirme que o principal do autor da chamada deve ter autorização para agir como a conta de serviço. A concessão desta autorização permite que o autor da chamada use as autorizações detidas pela conta de serviço.

  4. Se o acesso for intencional, conceda a função de utilizador da conta de serviço (roles/iam.serviceAccountUser) ao principal autor da chamada na conta de serviço alvo. Para mais informações, consulte o artigo Conceda a função de IAM de utilizador da conta de serviço.

Depois de conceder a função, os registos futuros desta combinação de autor da chamada e conta de serviço devem apresentar dryRunResult: true.

Conceda a função IAM de utilizador da conta de serviço

A função de utilizador da conta de serviço (roles/iam.serviceAccountUser) contém a autorização iam.serviceAccounts.actAs, que é necessária para o modo de atuação rigoroso. Quando usa a API Dataform, tem de ter a função Utilizador da conta de serviço concedida para a conta de serviço efetiva com base no método projects.locations.repositories que está a chamar:

  • create ou patch
    • Se a propriedade Repository.ServiceAccount estiver definida, deve ter a função Utilizador da conta de serviço concedida para essa propriedade.
    • Se estiver a chamar o método patch, deve ter a função Utilizador da conta de serviço concedida para todas as contas de serviço eficazes em todas as configurações do fluxo de trabalho no repositório.
  • workflowConfigs.create ou workflowConfigs.patch
    • Deve ter a função Utilizador da conta de serviço concedida para a conta de serviço eficaz usada na configuração do fluxo de trabalho.
  • releaseConfigs.patch
    • Deve ter a função Utilizador da conta de serviço concedida para todas as contas de serviço eficazes usadas nas configurações do fluxo de trabalho através desta configuração de lançamento.
  • workflowInvocations.create
    • Deve ter a função Utilizador da conta de serviço concedida para a conta de serviço eficaz usada na invocação do fluxo de trabalho.

Para conceder a função Utilizador da conta de serviço a uma conta de serviço personalizada, siga estes passos:

  1. Na Google Cloud consola, aceda a IAM > Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.

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

  4. Aceda a Entidades com acesso e, de seguida, clique em Conceder acesso.

  5. No campo Novos membros, introduza o ID do agente de serviço do Dataform predefinido.

    O ID do agente do serviço Dataform predefinido está no seguinte formato:

    service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
    
  6. Na lista Selecionar uma função, selecione a função Utilizador da conta de serviço.

  7. Clique em Guardar.

Para mais informações, consulte as funções necessárias para criar uma configuração de fluxo de trabalho e as funções necessárias para criar uma configuração de lançamento.

Efeitos do modo de atuação rigoroso em lançamentos e execuções automáticas

Quando o modo de agir como rigoroso está ativado, afeta as versões automáticas do repositório e as execuções automáticas do fluxo de trabalho da seguinte forma:

Para repositórios que não estão associados a repositórios de terceiros:

  • Não pode definir um horário Cron para lançamentos automáticos nas configurações de lançamento. Isto é aplicado para evitar a implementação automática de alterações ao código feitas por um utilizador que possa não ter as autorizações iam.serviceAccounts.actAs necessárias nas contas de serviço a jusante.
  • As execuções de fluxos de trabalho agendadas através de uma programação Cron nas configurações de fluxos de trabalho permanecem ativadas. Para que estas execuções automáticas sejam bem-sucedidas, tem de conceder ao agente de serviço do Dataform predefinido a autorização iam.serviceAccounts.actAs na conta de serviço efetiva especificada na configuração do fluxo de trabalho.

Para repositórios que estão associados a repositórios de terceiros:

  • São permitidos lançamentos agendados e execuções de fluxos de trabalho agendados.
  • Para ativar um lançamento automático a partir de uma configuração de lançamento ou uma execução automática a partir de uma configuração de fluxo de trabalho, tem de conceder ao agente de serviço do Dataform predefinido a autorização iam.serviceAccounts.actAs na conta de serviço efetiva relevante:
    • Para uma configuração de lançamento automático, conceda a autorização nas contas de serviço efetivas de todas as configurações de fluxo de trabalho acionadas por esta configuração de lançamento.
    • Para uma configuração de fluxo de trabalho automática, conceda a autorização na conta de serviço eficaz usada por essa configuração de fluxo de trabalho.

O que se segue?