Интеграция DQ Core с LDAP
Введение
LDAP - это облегчённый протокол доступа к каталогам, является коммуникационным протоколом, который определяет методы, в которых служба каталога может быть доступна.
LDAP — относительно простой протокол, использующий TCP/IP и позволяющий производить операции аутентификации (bind), поиска (search) и сравнения (compare), а также операции добавления, изменения или удаления записей.
DQ поддерживает создание 1 и более LDAP-клиентов (в зависимости от ваших требований).
Параметры для настройки передаются в виде строк, по количеству создаваемых клиентов.
Если создается один клиент, то передается только один параметр.
Если два — то два параметра в одной строке, разделенные точкой с запятой.
В случае, если мы настраиваем два клиента, но какой-то из параметров отсутствует — он передается как None
.
Предварительные условия
Необходимые условия перед началом настройки:
- Доступ к серверу DQ Core с правами администратора
- Сетевой доступ между сервером DQ Core и LDAP-сервером
- Учетные данные администратора LDAP (логин/пароль)
- Информация о структуре LDAP (DN для пользователей и групп)
- Установленные Docker/Kubernetes (в зависимости от способа развертывания)
Роли:
- Администратор DQ Core - выполняет настройку интеграции
- Администратор LDAP - предоставляет доступ и параметры подключения
Пошаговая инструкция по настройке
Шаг 1. Получение параметров LDAP
- Запросите у администратора LDAP следующие данные:
- Адрес(а) LDAP-сервера (например:
ldap://ldap.example.com
) - DN (Distinguished Name) для:
- Поиска пользователей (например:
ou=users,dc=example,dc=com
) - Поиска групп (например:
ou=groups,dc=example,dc=com
)
- Поиска пользователей (например:
- Учетные данные для подключения (логин/пароль)
Шаг 2. Настройка параметров
- Создайте или отредактируйте файл конфигурации (для docker - var.env, для kubernetes - values.yml) :
# Основные параметры
LDAP_AUTH_ENABLE=True
LDAP_CLIENTS_COUNT=1
LDAP_SERVER_URIS=ldap://ldap.example.com
LDAP_LOGINS=cn=admin,dc=example,dc=com
LDAP_PASSWORDS=your_secure_password
# DN для поиска
LDAP_DN_GROUPS=ou=groups,dc=example,dc=com
LDAP_DN_USERS=ou=users,dc=example,dc=com
# Дополнительные параметры (при необходимости)
USER_GROUPS_FILTERSTR="(&(objectClass=posixGroup)(memberUid=$$username))"
USER_GROUPS_ATTRIBUTES=[memberOf]
LDAP_DEBUG_LEVEL=0
Шаг 3. Применение изменений
Для Docker:
docker-compose down
docker-compose up -d
Для Kubernetes:
helm upgrade dq-core ./chart --namespace dq-core
Шаг 4. Проверка работы
- Проверьте логи контейнера:
docker logs -f dq-core
- Убедитесь, что нет ошибок подключения к LDAP
- Проверьте аутентификацию тестового пользователя
Примеры конфигураций
Вариант 1: Подключение к OpenLDAP
LDAP_CLIENTS_COUNT=1
LDAP_DN_GROUPS=ou=groups,dc=example,dc=org
LDAP_DN_USERS=ou=people,dc=example,dc=org
LDAP_SERVER_URIS=ldap://openldap.example.org:389
LDAP_LOGINS=cn=admin,dc=example,dc=org
LDAP_PASSWORDS=admin_password
Вариант 2: Подключение к Active Directory
LDAP_CLIENTS_COUNT=1
LDAP_DN_GROUPS=DC=domain,DC=local
LDAP_DN_USERS=CN=Users,DC=domain,DC=local
LDAP_SERVER_URIS=ldap://ad.domain.local:389
LDAP_LOGINS=admin@domain.local
LDAP_PASSWORDS=admin_password
USER_GROUPS_FILTERSTR="(userPrincipalName=$$username@domain.local)"
Основные параметры
- LDAP_CLIENTS_COUNT - количество LDAP-клиентов. По умолчанию
2
. - LDAP_DN_GROUPS - DN (distinguished name), отличительное имя записи, с которой следует начать поиск. Параметр содержит массив DN, по количеству LDAP-клиентов. Используется при поиске, если искомый объект — группа.
- LDAP_DN_USERS - Аналогично
LDAP_DN_GROUPS
, но используется при поиске пользователей. - LDAP_SERVER_URIS - массив URL-адресов для подключения к LDAP.
- LDAP_LOGINS - массив логинов, разделенный
;
. - LDAP_PASSWORDS - массив паролей, разделенный
;
.
Если в DQ NEO в качестве owners
могут выступать не только пользователи, но и группы, необходимо указать параметры для проверки групп в LDAP:
- USER_GROUPS_FILTERSTR
- LDAP_DN_GROUPS
Дополнительные параметры
- LDAP_DEBUG_LEVEL - уровень логирования (библиотека
python-ldap
). По умолчанию0
. Для полного лога установите255
. - AUTH_LDAP_USER_SEARCH_TEMPLATE - настраивается, если шаблон поиска пользователя отличается от стандартного
(&(objectClass=person)(uid=%(user)s))
. Обычно совпадает сUSER_GROUPS_FILTERSTR
, но плейсхолдер$username
заменяется на%(user)s
.
ИЛИ - AUTH_LDAP_USER_DN_TEMPLATE - шаблон DN пользователя с плейсхолдером
%(user)s
. Пример:uid=%(user)s,ou=users,dc=example,dc=com
.
Параметры для метода get_user_groups
(возвращает группы пользователя):
- USER_GROUPS_FILTERSTR - шаблон для поиска групп (подставляется
username
). - USER_GROUPS_ATTRIBUTES - дополнительные атрибуты для поиска групп.
Параметры для метода is_object
(проверяет, является ли элемент объектом):
- USER_SEARCH_FILTERSTR - шаблон для проверки пользователя (
is_user
). - USER_SEARCH_ATTRIBUTES - дополнительные атрибуты для проверки пользователя.
- GROUP_SEARCH_FILTERSTR - шаблон для проверки группы (
is_group
). - GROUP_SEARCH_ATTRIBUTES - дополнительные атрибуты для проверки группы.
Примечания
- Шаблоны можно настраивать, но переменные
$username
и$object_name
не изменяйте. $username
используется вUSER_GROUPS_FILTERSTR
(поиск по пользователям).$object_name
— вGROUP_SEARCH_FILTERSTR
иUSER_SEARCH_FILTERSTR
(проверка объекта).- В .env-файлах присваивание делается через
=
, а$
экранируется как$$
. - Параметры в квадратных скобках (например,
USER_GROUPS_ATTRIBUTES: None;[memberOf]
) передаются без кавычек.
Рекомендации по безопасности
- Используйте TLS-шифрование (ldaps://) вместо обычного ldap://
- Ограничьте доступ к LDAP-серверу по IP
- Регулярно обновляйте пароли для LDAP-учетных записей
- Для отладки используйте
LDAP_DEBUG_LEVEL=255
, но в production установите0
Устранение неполадок
Проблема: Ошибка подключения к LDAP-серверу
Решение:
- Проверьте сетевую доступность сервера
- Убедитесь в правильности URI и порта
- Проверьте логин/пароль
Проблема: Пользователи не находятся
Решение:
- Проверьте
LDAP_DN_USERS
- Убедитесь в правильности
USER_SEARCH_FILTERSTR
- Проверьте права доступа учетной записи