Antes de começar, precisaremos de grupos e regras de acesso, para gerar isso:

  • Você precisará de uma conta e senha no Active Diretory para que o Airflow use essas credenciais para ler as informações dos usuários;
    • Sugerimos criar uma conta de serviço para isso, colocar em um grupo “no logon” (definir esse grupo como primário) e retirar do grupo Domain Users. Assim evitando que essa conta possa ser usada para logar em um computador;
  • Leia a tabela mais abaixo e:
  • Para cada parte em cinza:
  • Para cada item que estiver em amarelo:
    • Você precisa ter essas tags criadas no Airflow (as permissões/ACLs são baseadas nessas tags);
    • Acesse o Airflow e crie os grupos de acesso (ACL) de acordo com o arquivo de configuração que será feito (para cada item em amarelo, na tabela abaixo, execute esses procedimentos):
      • Acesse o Airflow como administrador;
      • Vá (no menu superior) em Security, e clique em List Roles;
      • Copie a role User (marque a role, clique em Actions, escolha Copy Rule e confirme a cópia);
      • Edite a role User copy (a que copiamos);
      • Clique na aba superior Detail;
        • Em Name, altere o nome (para o mesmo nome que está na tabela, em amarelo);
        • Remova as opções/permissões:
          • Can read on DAGs;
          • Can edit on DAGs e;
          • Can delete on DAGs;
        • Adicione as opções/permissões:
          • Can read on DAGs NOME_DA_TAG e;
          • Can edit on DAGs NOME_DA_TAG;
        • Clique em Save.
  • Para cada item que estiver em azul:
    • Crie o grupo no AD;

O módulo de conexão varia de acordo com a versão do Airflow, para evitar informação errada, vamos renomear o arquivo de configuração atual e criar um novo:

mv /opt/airflow/webserver_config.py /opt/airflow/webserver_config.old
touch /opt/airflow/webserver_config.py
chmod 775 webserver_config.py
chown airflow.airflow webserver_config.py

Agora vamos copiar o método de conexão para o novo arquivo, para isso execute os comandos:

echo "import os" > /opt/airflow/webserver_config.py
cat /opt/airflow/webserver_config.old | grep "import AUTH_LDAP" >> /opt/airflow/webserver_config.py

Agora vamos efetivamente configurar:

vim /opt/airflow/webserver_config.py

Pressione a tela INSERT, para entrar em modo de edição, descomente a linha que está comentada (retirando o símbolo # e o espaço no começo), em seguida adicione o seguinte conteúdo:

AUTH_TYPE = AUTH_LDAP
AUTH_LDAP_SERVER = “ldap://seu_servidor_dc.seu_dominio.com.br:389″
AUTH_LDAP_USE_TLS = False
 
# searches
AUTH_LDAP_SEARCH = “dc=seu_dominio,dc=com,dc=br”
AUTH_LDAP_UID_FIELD = “sAMAccountName”
 
# For a typical OpenLDAP setup (where LDAP searches require a special account):
AUTH_LDAP_BIND_USER = “CN=Nome da conta de servico,OU=Nome_da_OU,DC=seu_dominio,DC=com,DC=br”
AUTH_LDAP_BIND_PASSWORD = “senha_da_conta_acima
 
# registration configs
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = “Public”
AUTH_LDAP_FIRSTNAME_FIELD = “givenName”
AUTH_LDAP_LASTNAME_FIELD = “sn”
AUTH_LDAP_EMAIL_FIELD = “mail”
 
# a mapping from LDAP DN to a list of FAB roles
AUTH_ROLES_MAPPING = {
    “CN=Airflow Nome da Equipe1,OU=Nome_da_OU,DC=seu_dominio,DC=com,DC=br“: [“Equipe1“],
    “CN=Airflow Nome da Equipe2
,OU=Nome_da_OU,DC=seu_dominio,DC=com,DC=br“: [“Equipe2“],
    “CN=Airflow Admin,OU=Nome_da_OU,DC=seu_dominio,DC=com,DC=br“: [“Admin”],
}
 
# the LDAP user attribute which has their role DNs
AUTH_LDAP_GROUP_FIELD = “memberOf”
 
# if we should replace ALL the user’s roles each login, or only on registration
AUTH_ROLES_SYNC_AT_LOGIN = True
 
# force users to re-auth after 30min of inactivity (to keep roles in sync)
PERMANENT_SESSION_LIFETIME = 1800

Pressione a tela ESC, para sair em modo de edição, digite :wq! e pressione ENTER para salvar e sair.

systemctl restart airflow-scheduler
systemctl restart airflow-webserver

Fontes/Referências

NVLAN – Como obter o Distinguished Name (DN) no Active Directory

https://youtube.com/watch?v=s6TygwvYdN0

Mais Informações

Esperamos ter ajudado da melhor forma possível e estaremos sempre a disposição para mais informações.

Se você tem interesse em algum assunto específico, tem alguma dúvida que precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.

NVLAN - Consultoria