Подготовка Active Directory
- Создаем системного пользователя который будет авторизовываться в Active Directory
- Создаем группу члены которой смогут использовать AirFlow
Пример интеграции с Active Directory
Добавляем в файл airflow.cfg папаметры в секцию [webserver]:
authenticate = True
auth_backend = airflow.contrib.auth.backends.ldap_auth
rbac = True
Выносим webserver_config.py из Docker Compose во внешний файл:
...
volumes:
- ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
- ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs
- ${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins
- ${AIRFLOW_PROJ_DIR:-.}/airflow.cfg:/opt/airflow/airflow.cfg
- ${AIRFLOW_PROJ_DIR:-.}/webserver_config.py:/opt/airflow/webserver_config.py
...
Конфигурация webserver_config.py для интеграции с Active Directory:
from __future__ import annotations
import os
# from airflow.www.fab_security.manager import AUTH_DB
from airflow.www.fab_security.manager import AUTH_LDAP
basedir = os.path.abspath(os.path.dirname(__file__))
# Flask-WTF flag for CSRF
WTF_CSRF_ENABLED = True
WTF_CSRF_TIME_LIMIT = None
AUTH_TYPE = AUTH_LDAP
#AUTH_TYPE = AUTH_DB
AUTH_LDAP_SERVER = 'ldap://10.77.77.250:389'
AUTH_LDAP_SEARCH = 'DC=gefest,DC=local'
AUTH_LDAP_UID_FIELD = 'sAMAccountName'
AUTH_LDAP_ALLOW_SELF_SIGNED = True
AUTH_LDAP_BIND_USER = 'CN=airflow_smsfinance,OU=Service Users,OU=IT,OU=SmsFinance,DC=gefest,DC=local'
AUTH_LDAP_BIND_PASSWORD = 'xxxPASSWORDxxx'
AUTH_USER_REGISTRATION = True
AUTH_ROLES_MAPPING = {
"CN=airflow-super-users,OU=Groups,OU=IT,OU=SmsFinance,DC=gefest,DC=local": ["Admin"],
"CN=airflow-users,OU=Groups,OU=IT,OU=SmsFinance,DC=gefest,DC=local": ["Viewer"],
}
AUTH_LDAP_GROUP_FIELD = "memberOf"
AUTH_ROLES_SYNC_AT_LOGIN = True
PERMANENT_SESSION_LIFETIME = 1800
Настройка отправки почты из Air Flow
Пример конфигурации AirFlow.cfg
[smtp]
smtp_host = 10.77.77.101
smtp_starttls = True
smtp_ssl = False
smtp_user = airflow_smsfinance
smtp_password = xxxPASSWORDxxx
smtp_port = 25
smtp_mail_from = airflow_smsfinance@smsfinance.ru
smtp_timeout = 30
smtp_retry_limit = 5