Como usar o controle de acesso da interface do Airflow

Airflow gerenciado (Geração 3) | Airflow gerenciado (Geração 2) | Airflow gerenciado (Geração 1 legada)

Nesta página, descrevemos diferentes mecanismos de controle de acesso para a interface do Airflow e a interface do DAG. Além do controle de acesso fornecido pelo IAM, você pode usar esses mecanismos para separar usuários na interface do Airflow e na interface do DAG do seu ambiente.

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

O acesso à interface do Airflow e à interface do DAG, bem como a visibilidade dos dados e operações nessas interfaces, é controlado em dois níveis no Airflow gerenciado:

  1. O acesso à interface do Airflow e à interface do DAG no Airflow gerenciado é controlado pelo IAM.

    Se uma conta não tiver um papel que possa visualizar ambientes do Airflow gerenciado no seu projeto, a interface do Airflow e a interface do DAG não estarão disponíveis.

    O IAM não fornece nenhum controle de permissão refinado adicional na interface do Airflow ou na interface 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. Todos os usuários do Airflow com um papel específico do Airflow recebem as permissões desse papel. Por exemplo, os usuários do Airflow que têm um papel 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 Airflow gerenciado, é possível atribuir permissões no nível do DAG automaticamente, com base na subpasta em que o arquivo DAG está localizado no bucket do ambiente.

Se você quiser configurar o acesso para identidades externas por federação de identidade de colaboradores, primeiro conceda acesso ao seu ambiente no IAM, conforme descrito na seção Conceder papéis do IAM a identidades externas. Depois, você pode usar o controle de acesso da interface do Airflow normalmente. Os usuários do Airflow para identidades externas usam o identificador principal em vez do endereço de e-mail e têm valores diferentes preenchidos em outros campos de registro de usuário do que as Contas do Google.

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

Os usuários com o papel de administrador (ou equivalente) podem visualizar 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 Segurança. 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 o papel de administrador (ou equivalente) podem ver a lista de usuários que abriram a interface 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 seção a seguir.

Registrar usuários na interface do Airflow

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

No registro, os usuários recebem o papel especificado na opção de configuração do Airflow [webserver]rbac_user_registration_role. Para controlar a função dos usuários recém-registrados, substitua essa opção de configuração do Airflow por um valor diferente.

Se não for especificado, o papel de registro padrão será Op em ambientes com o Airflow 2 e 3.

As etapas a seguir são recomendadas para criar uma configuração de papel básico para a interface do Airflow:

  1. Os administradores do ambiente abrem a interface do Airflow para o ambiente recém-criado.

  2. Conceda às contas de administrador o papel Admin. O papel padrão para novas contas é Op. 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é-registrar 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. Também é possível pré-registrar um usuário manualmente e atribuir um papel a ele adicionando um registro de usuário com o campo de nome de usuário definido como o 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 as identidades do Google (endereços de e-mail) e as contas de usuário (IDs de usuário) não é fixa. Não é possível pré-registrar grupos do Google.

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

Para pré-registrar um usuário com uma função personalizada pela Google Cloud CLI, 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: o nome e o 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 ele acessar a interface do Airflow. Para revogar o acesso a toda a interface do Airflow, remova a composer.environments.get permissão da política de permissão do seu projeto.

Também é possível mudar o papel do usuário para "Público", o que mantém o registro do usuário, mas remove todas as permissões da interface do Airflow.

Configurar permissões no nível do DAG automaticamente

O recurso de registro de papéis por pasta cria automaticamente um papel personalizado do Airflow para cada subpasta diretamente dentro da pasta /dags e concede a esse papel acesso no nível do DAG a todos os DAGs que têm o arquivo de origem armazenado nessa subpasta. Isso simplifica o gerenciamento de papéis personalizados do Airflow e o acesso deles aos DAGs.

Como funciona o registro de papéis por pasta

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

Para evitar esses conflitos, a ativação do registro de papéis por pasta também muda o comportamento desses mecanismos.

No Airflow 2 e 3:

  • É possível conceder acesso ao DAG a papéis pela propriedade access_control definida no código-fonte do DAG.
  • A concessão manual de permissões de DAG (pela interface do Airflow ou pela CLI gcloud) pode causar conflitos. Por exemplo, se você conceder permissões no nível do DAG manualmente a um papel por pasta, essas permissões poderão ser removidas ou substituídas quando o processador de DAG sincronizar um DAG. Recomendamos não conceder permissões de DAG manualmente.
  • Os papéis têm uma união de permissões de acesso ao DAG registradas pelo registro de papéis 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 nenhum papel por pasta. Eles não podem ser acessados com nenhum papel por pasta. Outros papéis, como administrador, operador, usuário ou qualquer função personalizada que receba permissões, podem acessá-los pela interface do Airflow e pela interface do DAG.

Se você fizer upload de DAGs para subpastas com nomes que correspondam a papéis integrados do Airflow e papéis criados pelo Airflow gerenciado, as permissões para DAGs nessas 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. Os papéis integrados do Airflow incluem administrador, operador, usuário, leitor e público. O Airflow gerenciado cria o UserNoDags depois que o recurso de registro de papéis por pasta é ativado.

O Airflow executa o registro de papéis por pasta quando processa DAGs no programador do Airflow. Se houver mais de cem DAGs no seu ambiente, talvez você note um aumento no tempo de análise do DAG. Nesse caso, recomendamos usar mais memória e CPU para os programadores.

Atribuir DAGs automaticamente a papéis por pasta

Para atribuir DAGs automaticamente 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. Mude o papel de registro de novo usuário para um papel sem acesso a nenhum DAG. Dessa forma, os novos usuários não têm acesso a nenhum DAG até que um administrador atribua um papel que tenha permissões para DAGs específicos às contas deles.

    UserNoDags é um papel criado pelo Airflow gerenciado 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 papéis aos usuários usando uma das abordagens:

    • Permita que o Airflow crie papéis automaticamente com base nas subpastas de DAGs e atribua usuários a esses papéis.
    • Pré-crie papéis vazios para as subpastas de DAGs, com nomes de papéis que correspondam ao nome de uma subpasta e atribua usuários a esses papéis. Por exemplo, para a pasta /dags/CustomFolder, crie um papel chamado CustomFolder.
  5. Faça upload de DAGs para subpastas com nomes que correspondam aos papéis atribuídos aos usuários. Essas subpastas precisam estar localizadas dentro da pasta /dags no bucket do ambiente. O Airflow adiciona permissões aos DAGs em uma subpasta, para que apenas usuários com o papel correspondente possam acessá-los pela interface do Airflow e pela interface do DAG.

Configurar permissões no nível do DAG manualmente

É possível configurar permissões no nível do DAG para papéis personalizados e especificar quais DAGs ficam visíveis para quais grupos de usuários.

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

  1. O administrador cria funções vazias para agrupar DAGs.
  2. O administrador atribui os usuários às funções apropriadas.
  3. O administrador ou os usuários atribuem DAGs a papéis.
  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 necessárias no nível do DAG aos papéis apropriados na interface do Airflow.

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

Como atribuir DAGs a papéis nas propriedades do DAG

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

O programador aplica permissões no nível do DAG quando analisa um DAG.

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

Mapear registros de auditoria na interface do Airflow para usuários

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

Airflow 3

No Airflow 3, é possível visualizar os registros de auditoria na página Navegar > Registro de auditoria na interface do Airflow.

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

Airflow 2

É possível visualizar os registros de auditoria na página Navegar > Registros de auditoria na 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 Segurança > Listar usuários. Essa página está disponível para usuários com o papel Admin.

A relação entre as identidades do Google (endereços de e-mail) e as contas de usuário (IDs de usuário) não é fixa.

A seguir