Что ж, к счастью, я понял это и смог ответить на свой собственный вопрос, первый, который до сих пор был дан ответ на SO.
Частично причина в том, что FAB использует пакет python-ldap
для обработки ошибок, но есть также пакеты ldap3
и ldap
, которые, если вы установили их в определенном порядке, могут мешать с использованием python-ldap
.
Я также обнаружил, что python-ldap
имеет определенные требования к сборке .
Кроме того, я обнаружил, что в FAB есть еще один параметр LDAP, AUTH_LDAP_SEARCH_FILTER
, который позволяет фильтровать возможных пользователей по определенной группе, что именно то, что я хотел, но это не упоминается в документации; Я нашел это в репозитории на GitHub.
Вот мой webserver_config.py
файл, который работает для меня:
# -*- coding: utf-8 -*-
import os
from airflow import configuration as conf
from flask_appbuilder.security.manager import AUTH_LDAP
basedir = os.path.abspath(os.path.dirname(__file__))
# The SQLAlchemy connection string.
SQLALCHEMY_DATABASE_URI = conf.get('core', 'SQL_ALCHEMY_CONN')
# Flask-WTF flag for CSRF
CSRF_ENABLED = True
# ------------------------------------------------------------------------------
# AUTHENTICATION CONFIG
# ------------------------------------------------------------------------------
# For details on how to set up each of the following authentications, see
# http://flask-appbuilder.readthedocs.io/en/latest/security.html# authentication-methods
# The authentication type
AUTH_TYPE = AUTH_LDAP
AUTH_ROLE_PUBLIC = "Public"
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = "Viewer"
AUTH_LDAP_SERVER = "ldaps://ldaps.myorg.org:636"
AUTH_LDAP_BIND_USER = "CN=myuser,OU=Service Accounts,DC=myorg,DC=org"
AUTH_LDAP_BIND_PASSWORD = "relevant_password"
AUTH_LDAP_SEARCH = "DC=myorg,DC=org" # same as BASEDN
AUTH_LDAP_SEARCH_FILTER = "(memberOf=CN=My Team,OU=My Group,DC=myorg,DC=org)"
AUTH_LDAP_UID_FIELD = AUTH_LDAP_UID_FIELD = "sAMAccountName"
AUTH_LDAP_ALLOW_SELF_SIGNED = True
AUTH_LDAP_USE_TLS = False
AUTH_LDAP_TLS_DEMAND = True
AUTH_ROLE_ADMIN = "Admin"
Я установил AUTH_USER_REGISTRATION_ROLE
на Viewer, потому что по умолчанию Public не имеет связанных с ним разрешений, поэтому, если кто-то в AD входит в систему и его роль по умолчанию установлена в Public, он не сможет ничего сделать, пока администратор не изменится. их роль.
Я узнал от ИТ в своей организации, что контроллер домена сервера LDAP обрабатывает TLS, поэтому я думаю, что поэтому я могу установить AUTH_LDAP_ALLOW_SELF_SIGNED
на True
, тогда как у меня нет сертификата TLS в Docker Контейнеры для указания потока воздуха для установки AUTH_LDAP_USE_TLS
в True.