Skip to content

Интеграция 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

  1. Запросите у администратора LDAP следующие данные:
  2. Адрес(а) LDAP-сервера (например: ldap://ldap.example.com)
  3. DN (Distinguished Name) для:
    • Поиска пользователей (например: ou=users,dc=example,dc=com)
    • Поиска групп (например: ou=groups,dc=example,dc=com)
  4. Учетные данные для подключения (логин/пароль)

Шаг 2. Настройка параметров

  1. Создайте или отредактируйте файл конфигурации (для 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. Проверка работы

  1. Проверьте логи контейнера:
    docker logs -f dq-core
    
  2. Убедитесь, что нет ошибок подключения к LDAP
  3. Проверьте аутентификацию тестового пользователя

Примеры конфигураций

Вариант 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 - дополнительные атрибуты для проверки группы.

Примечания

  1. Шаблоны можно настраивать, но переменные $username и $object_name не изменяйте.
  2. $username используется в USER_GROUPS_FILTERSTR (поиск по пользователям).
  3. $object_name — в GROUP_SEARCH_FILTERSTR и USER_SEARCH_FILTERSTR (проверка объекта).
  4. В .env-файлах присваивание делается через =, а $ экранируется как $$.
  5. Параметры в квадратных скобках (например, USER_GROUPS_ATTRIBUTES: None;[memberOf]) передаются без кавычек.

Рекомендации по безопасности

  1. Используйте TLS-шифрование (ldaps://) вместо обычного ldap://
  2. Ограничьте доступ к LDAP-серверу по IP
  3. Регулярно обновляйте пароли для LDAP-учетных записей
  4. Для отладки используйте LDAP_DEBUG_LEVEL=255, но в production установите 0

Устранение неполадок

Проблема: Ошибка подключения к LDAP-серверу
Решение:

  • Проверьте сетевую доступность сервера
  • Убедитесь в правильности URI и порта
  • Проверьте логин/пароль

Проблема: Пользователи не находятся
Решение:

  • Проверьте LDAP_DN_USERS
  • Убедитесь в правильности USER_SEARCH_FILTERSTR
  • Проверьте права доступа учетной записи

Дополнительные ресурсы