Como usar o controle de acesso da interface do Airflow

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Nesta página, descrevemos diferentes mecanismos de controle de acesso para a interface do Airflow e a interface de DAG. É possível usar esses mecanismos, além do controle de acesso fornecido pelo IAM, para separar usuários na interface do Airflow e da DAG do seu ambiente.

Visão geral do controle de acesso da interface do Airflow no Cloud Composer

O acesso à interface do Airflow e à interface do DAG e a visibilidade de dados e operações nessas interfaces são controlados em dois níveis no Cloud Composer:

  1. O acesso à interface do Airflow e da DAG no Cloud Composer é controlado pelo IAM.

    Se uma conta não tiver uma função que possa acessar ambientes do Cloud Composer no seu projeto, a interface do Airflow e a interface do DAG não estarão disponíveis.

    O IAM não fornece recursos de na interface do Airflow ou do DAG.

  2. O modelo de controle de acesso do Apache Airflow permite reduzir a visibilidade na interface do Airflow e na interface do DAG com base no função do usuário.

    O controle de acesso do Apache Airflow é um recurso do Airflow, com um modelo próprio de usuários, papéis e permissões, que é diferente do IAM.

O controle de acesso do Apache Airflow usa permissões baseadas em recursos. Todo o Airflow Os usuários com um papel específico do Airflow recebem as permissões dele. Por exemplo, os usuários do Airflow que têm uma função com a permissão can delete on Connections podem excluir conexões na página "Conexões" da interface do Airflow.

Também é possível atribuir permissões no nível do DAG para DAGs individuais. Por exemplo, para que apenas usuários com um papel específico do Airflow possam ver um determinado DAG na interface do Airflow. No Cloud Composer, é possível atribuir automaticamente permissões no nível do DAG, com base na subpasta em que o arquivo DAG está localizado no do Google Cloud.

Se você quiser configurar o acesso para identidades externas por meio federação de identidade da força de trabalho, primeiro conceder acesso ao seu ambiente no IAM, conforme descrito Conceder papéis do IAM a identidades externas nesta seção. Depois, você pode usar o controle de acesso da IU do Airflow normalmente. Os usuários do Airflow para identidades externas usam o identificador principal do endereço de e-mail e ter valores diferentes preenchidos em outras campos de registro do que as contas do Google.

Antes de começar

Gerenciar papéis e configurações de controle de acesso do Airflow

Os usuários com a função de administrador (ou equivalente) podem conferir e modificar as configurações de controle de acesso na interface do Airflow.

Na interface do Airflow, é possível configurar as configurações de controle de acesso no menu Security. Para mais informações sobre o modelo de controle de acesso do Airflow, as permissões disponíveis e os papéis padrão, consulte a documentação do controle de acesso da interface do Airflow.

O Airflow mantém a própria lista de usuários. Os usuários com a função de administrador (ou equivalente) podem conferir a lista de usuários que abriram a IU do Airflow de um ambiente e foram registrados no Airflow. Essa lista também inclui usuários pré-registrados manualmente por um administrador, conforme descrito na próxima seção.

Registrar usuários na interface do Airflow

Novos usuários são registrados automaticamente quando abrem a interface do Airflow de um do Cloud Composer pela primeira vez.

No registro, os usuários recebem o papel especificado na opção de configuração [webserver]rbac_user_registration_role do Airflow. Você pode controlar a função de usuários recém-registrados, substituindo esse Opção de configuração do Airflow com um valor diferente.

Se não for especificada, a função de registro padrão será Op em ambientes com Airflow 2.

As etapas a seguir são recomendadas para criar uma configuração básica de papéis para a interface do Airflow:

  1. Os administradores do ambiente abrem a interface do Airflow para o contêiner de nuvem.

  2. Conceda às contas de administrador o papel Admin. O papel padrão para novas contas em ambientes com o Airflow 2 é:Op de dados. Para atribuir o papel Admin, execute o seguinte comando da CLI do Airflow com a CLI gcloud:

      gcloud composer environments run ENVIRONMENT_NAME \
        --location LOCATION \
        users add-role -- -e USER_EMAIL -r Admin
    

    Substitua:

    • ENVIRONMENT_NAME pelo nome do ambiente
    • LOCATION pela região em que o ambiente está localizado;
    • USER_EMAIL pelo e-mail de uma conta de usuário.
  3. Agora os administradores podem configurar o controle de acesso para novos usuários, incluindo a concessão do papel Admin para outros usuários.

Pré-registro de usuários

Os usuários são registrados automaticamente com IDs numéricos de contas de usuário do Google (não endereços de e-mail) como nomes de usuário. Você também pode fazer o pré-registro manual de um usuário e atribuir um papel a eles adicionando um registro de usuário com o conjunto de campos nome de usuário ao endereço de e-mail principal do usuário. Quando um usuário com um endereço de e-mail que corresponde a um registro de usuário pré-registrado faz login na interface do Airflow pela primeira vez, o nome de usuário é substituído pelo ID do usuário identificado no endereço de e-mail no momento do primeiro login. A relação entre identidades do Google (endereços de e-mail) e contas de usuário (IDs de usuário) não é fixa. Os grupos do Google não podem ser pré-registrados.

Para pré-registrar usuários, use a interface do Airflow ou execute um comando da CLI do Airflow pela Google Cloud CLI.

Para fazer o pré-registro de um usuário com um papel personalizado pela Google Cloud CLI, faça o seguinte: Execute o seguinte comando da CLI do Airflow:

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  users create -- \
  -r ROLE \
  -e USER_EMAIL \
  -u USER_EMAIL \
  -f FIRST_NAME \
  -l LAST_NAME \
  --use-random-password # The password value is required, but is not used

Substitua:

  • ENVIRONMENT_NAME: o nome do ambiente
  • LOCATION: a região em que o ambiente está localizado
  • ROLE: um papel do Airflow para o usuário, por exemplo, Op.
  • USER_EMAIL: o endereço de e-mail do usuário
  • FIRST_NAME e LAST_NAME: nome e sobrenome do usuário

Exemplo:

gcloud composer environments run example-environment \
  --location us-central1 \
  users create -- \
  -r Op \
  -e "example-user@example.com" \
  -u "example-user@example.com" \
  -f "Name" \
  -l "Surname" \
  --use-random-password

Remover usuários

A exclusão de um usuário do Airflow não revoga o acesso a esse usuário, porque ele é registrado automaticamente na próxima vez que acessar a interface do Airflow. Para revogar o acesso a toda a interface do Airflow, remova a permissão composer.environments.get da política de permissão do projeto.

Também é possível alterar a função do usuário para Pública, o que mantém os do usuário, mas remove todas as permissões para a interface do Airflow.

Configurar permissões no nível do DAG automaticamente

O recurso Registro de funções por pasta cria automaticamente um papel personalizado do Airflow para cada subpasta diretamente na pasta /dags e concede a esse papel acesso no nível do DAG a todos os DAGs com arquivos de origem armazenados na respectiva subpasta. Isso simplifica o gerenciamento de papéis personalizados do Airflow e o acesso deles aos DAGs.

Como funciona o registro de funções por pasta

O registro de papéis por pasta é uma maneira automatizada de configurar papéis e as permissões deles no nível do DAG. Por isso, ele pode causar conflitos com outros mecanismos do Airflow que concedem permissões no nível do DAG:

Para evitar esses conflitos, ativar o registro de funções por pasta também muda o comportamento desses mecanismos.

No Airflow 2:

  • É possível conceder acesso do DAG a papéis usando a propriedade access_control definida no código-fonte do DAG.
  • Conceder manualmente permissões do DAG (por meio da interface do Airflow ou CLI gcloud) podem causar conflitos. Por exemplo, se você conceder manualmente permissões no nível do DAG a um papel por pasta, essas permissões poderão ser removidas ou substituídas quando o processador do DAG sincronizar um DAG. Recomendamos que você não conceda permissões do DAG manualmente.
  • As funções têm uma união de permissões de acesso ao DAG registradas pelo registro de funções por pasta e definidas na propriedade access_control do DAG.

Os DAGs localizados diretamente na pasta /dags de nível superior não são atribuídos automaticamente a nenhuma função por pasta. Eles não podem ser acessados com nenhuma função por pasta. Outra opção como Administrador, Op, Usuário ou qualquer papel personalizado com permissão acessá-los pela interface do Airflow e do DAG.

Se você fizer upload de DAGs para subpastas com nomes que correspondem aos papéis integrados do Airflow e os papéis criados pelo Cloud Composer, além das permissões para DAGs no essas subpastas ainda serão atribuídas a esses papéis. Por exemplo, fazer upload de um DAG para a pasta /dags/Admin concede permissões a esse DAG para o papel de administrador. As funções integradas do Airflow incluem administrador, operador, usuário, leitor e público. O Cloud Composer cria NoDags e UserNoDags após a classe O recurso Registro de funções está ativado.

O Airflow executa o registro de papéis por pasta quando processa DAGs no programador do Airflow. Se houver mais de cem DAGs em seu você verá uma de aumento no tempo de análise do DAG. Nesse caso, recomendamos usar mais memória e CPU para programadores. Você também pode aumentar o valor da opção de configuração [scheduler]parsing_processes do Airflow.

Atribuir automaticamente DAGs a papéis por pasta

Para atribuir automaticamente DAGs a papéis por pasta:

  1. Modifique a seguinte opção de configuração do Airflow:

    Seção Chave Valor
    webserver rbac_autoregister_per_folder_roles True
  2. Altere o novo papel de registro de usuário para um papel sem acesso a nenhum DAG. Dessa forma, os novos usuários não terão acesso aos DAGs até que um administrador atribui às contas um papel com permissões para DAGs específicos.

    UserNoDags é uma função criada pelo Cloud Composer somente quando o recurso de registro de papéis por pasta está ativado. É equivalente ao papel de usuário, mas sem acesso a nenhum DAG.

    Modifique a seguinte opção de configuração do Airflow:

    Seção Chave Valor
    webserver rbac_user_registration_role UserNoDags

  3. Verifique se os usuários estão registrados no Airflow.

  4. Atribua funções aos usuários usando uma destas abordagens:

    • permitir que o Airflow crie papéis automaticamente com base nas subpastas de DAGs atribua usuários a esses papéis.
    • Crie funções vazias para as subpastas de DAGs com nomes de função correspondentes ao nome de uma subpasta e atribua usuários a essas funções. Por exemplo: Na pasta /dags/CustomFolder, crie um papel com o nome CustomFolder.
  5. Faça o upload de DAGs para subpastas com nomes que correspondem às funções atribuídas aos usuários. Essas subpastas precisam estar localizadas na pasta /dags no bucket do ambiente. O Airflow adiciona permissões aos DAGs em uma subpasta, para que apenas os usuários com a função correspondente possam acessá-los pela IU do Airflow e do DAG.

Configurar permissões no nível do DAG manualmente

É possível configurar permissões no nível do DAG para funções personalizadas e especificar quais DAGs ficam visíveis para grupos de usuários específicos.

Para configurar permissões no nível do DAG na interface do Airflow:

  1. O administrador cria papéis vazios para agrupar DAGs.
  2. O administrador atribui os usuários aos papéis apropriados.
  3. O administrador ou os usuários atribuem DAGs a funções.
  4. Na interface do Airflow, os usuários só podem ver os DAGs atribuídos ao grupo deles.

Os DAGs podem ser atribuídos a papéis por meio de propriedades do DAG ou da interface do Airflow.

Como atribuir DAGs a papéis na interface do Airflow

Um administrador pode atribuir as permissões no nível do DAG necessárias a papéis apropriados na interface do Airflow.

Essa operação não é compatível com a interface da DAG.

Como atribuir DAGs a papéis nas propriedades do DAG

É possível definir o parâmetro DAG access_control em um DAG, especificando os papéis de agrupamento do DAG a que ele é atribuído.

Nas versões do Airflow 2 anteriores à 2.1.0, o administrador, o desenvolvedor do DAG ou processo automatizado precisa executar o comando do Airflow sync-perm para aplicar as novas configurações de controle de acesso.

No Airflow 2.1.0 e versões mais recentes, a execução desse comando não é mais necessária, porque o programador aplica permissões no nível do DAG quando analisa um DAG.

dag = DAG(
  access_control={
    'DagGroup': {'can_edit', 'can_read'},
  },
  ...
  )

Associar registros de auditoria na interface do Airflow aos usuários

Os registros de auditoria na interface do Airflow são mapeados para IDs numéricos de contas de usuário do Google. Para Por exemplo, se um usuário pausar um DAG, uma entrada será adicionada aos registros.

Para acessar os registros de auditoria, acesse a página Procurar > Registros de auditoria a interface do Airflow.

Uma entrada na página "Registros de auditoria" no Airflow 2
Figura 1. Uma entrada na página "Registros de auditoria" no Airflow 2

Uma entrada típica lista um ID numérico no campo Proprietário: accounts.google.com:NUMERIC_ID. É possível mapear IDs numéricos para e-mails de usuários na página Security > List Users. Esta página está disponível para usuários com a função Admin.

Observe que a relação entre Identidades do Google (endereços de e-mail) e contas de usuário (IDs de usuário) não for corrigido.

A seguir