LDAP (Lightweight Directory Access Protocol) — это протокол прикладного уровня для доступа к службе каталогов.
Служба каталогов (каталоги LDAP) — это система с иерархической структурой для хранения данных в формате "ключ-значение". Обычно службы каталогов используют для хранения информации об организации, её активах и пользователях. Существуют различные реализации каталогов LDAP. Например, ALD Pro, OpenLDAP и FreeIPA для Linux, Microsoft Active Directory для Windows и т.д.
Вы можете настроить синхронизацию платформы c каталогом LDAP. Тогда учётные записи пользователей из каталога будут автоматически создаваться в платформе.
Логика работы
Платформа запускает синхронизацию с каталогом LDAP с периодичностью, заданной в настройках. При синхронизации платформа подключается с заданными параметрами к каталогу LDAP и получает список пользователей. Информация о пользователях из каталога LDAP является более приоритетной по сравнению с информацией в платформе.
Общие правила синхронизации:
- Если у пользователя в каталоге LDAP не указан email, его учётная запись не будет использована при синхронизации.
- Если пользователя из каталога LDAP нет в платформе, платформа создаст учётную запись с данными из LDAP.
- Если пользователь из каталога LDAP уже создан в платформе, то платформа изменит источник учётной записи пользователя с локального на LDAP. После этого пользователь сможет авторизоваться в платформе с email и паролем из LDAP. Пароль пользователя будет храниться в LDAP и не запишется в БД платформы.
Пример: В платформе создана учётная запись с именем admin@example.com и паролем secret1. В LDAP есть учётная запись с именем admin@example.com и паролем secret2. После синхронизации пользователь admin@example.com сможет авторизоваться в платформе только с паролем secret2. - Если пользователь из каталога LDAP уже создан в платформе, то платформа изменит уровень учётной записи на данные из LDAP.
Пример: В платформе создана учётная запись с именем admin@example.com уровня "Администратор". В LDAP есть учётная запись с именем admin@example.com в группе "Пользователи". После синхронизации уровень учётной записи изменится на "Пользователь". Если пользователь является владельцем серверов или ВМ, операции с этими объектами останутся ему доступны. - Если администратор удалит из платформы пользователя, созданного при синхронизации с LDAP, платформа создаст этого пользователя при следующей синхронизации.
- Если пользователь будет удалён из каталога LDAP, платформа удалит его учётную запись при следующей синхронизации.
- Если пользователь будет заблокирован в каталоге LDAP, платформа установит для него статус "Заблокирован в LDAP". Такой пользователь не сможет авторизоваться в платформе.
Подготовка
Если на сервере с LDAP самоподписанный SSL-сертификат
Подключение к LDAP завершится с ошибкой, если требуется использовать SSL-соединение, а на сервере установлен самоподписанный SSL-сертификат.
Чтобы ошибки подключения не возникало, выполните следующие действия перед настройкой синхронизации:
- Подключитесь к серверу с платформой по SSH.
-
Создайте директорию для конфигурации LDAP:
mkdir /opt/ispsystem/
-
Узнайте версию ОС внутри контейнера с LDAP. Для этого введите в терминал:
docker ps | grep ldap
Версия ОС будет указана в последнем сегменте вывода. Пример вывода команды для контейнера с AlmaLinux 8.9:
docker-registry.ispsystem.com/team/common/ldap/alma:8.9
- Для контейнеров LDAP с ОС Astra Linux:
-
Создайте в директории /opt/ispsystem/ldap/ файл ldap.conf с содержимым:
TLS_CACERT /etc/ssl/certs/ca-certificates.crt TLS_REQCERT never
-
Создайте файл патча /opt/ispsystem/ldap.yaml с содержимым:
version: "3.5" services: ldap: volumes: - /opt/ispsystem/ldap/:/etc/ldap/
-
-
Для контейнера LDAP с ОС AlmaLinux:
-
Создайте в директории /opt/ispsystem/ldap/ файл ldap.conf с содержимым:
TLS_CACERT /etc/ssl/certs/ca-bundle.crt TLS_REQCERT never
-
Создайте файл патча /opt/ispsystem/ldap.yaml с содержимым:
version: "3.7" services: ldap: volumes: - /opt/ispsystem/ldap/:/etc/openldap/
-
-
Примените патч для сервиса LDAP:
VMmanager/usr/local/bin/vm add-patch -p=LDAP -f /opt/ispsystem/ldap.yaml
DCImanager 6/usr/local/bin/dci add-patch -p=LDAP -f /opt/ispsystem/ldap.yaml
Настройка синхронизации
Чтобы настроить синхронизацию, перейдите в → Синхронизация с LDAP:
- Выберите реализацию каталога LDAP:
- LDAP — стандартная реализация службы каталогов;
- Active Directory;
- FreeIPA;
-
ALD Pro.
Для синхронизации с ALD Pro:
- в DCImanager 6 — выберите ALD Pro;
- в VMmanager — выберите FreeIPA.
- Укажите настройки подключения:
- Base DN — объект каталога, с которого начинается поиск. Например, для каталога example.com укажите "dc=example,dc=com".
- Если нужно, включите опцию Использовать SSL для подключения.
- Адрес основного сервера.
- Порт подключения.
- Bind DN — уникальное имя для аутентификации. Вы можете указать имя в формате name@example.com или "cn=name,ou=group,dc=example,dc=com".
- Пароль.
- Для стандартной реализации LDAP укажите:
- Users DN — параметр для поиска и загрузки пользователей. Например, "ou=users".
- Groups DN — параметр для поиска и загрузки групп пользователей. Например, "ou=groups".
- Groupname attribute — атрибут для загрузки имени группы. Например, CN или memberof.
- E-mail attribute — атрибут для загрузки адреса электронной почты пользователя. Например, mail.
- Users DN — параметр для поиска и загрузки пользователей. Например, "ou=users".
- Нажмите Далее. Платформа проверит подключение к каталогу LDAP с указанными параметрами.
- Выберите DN группы для всех ролей, используемых в платформе.
- Чтобы платформа выполняла синхронизацию по расписанию:
- Включите опцию Синхронизировать пользователей автоматически.
- Выберите параметры расписания:
- Каждый час;
- Ежедневно → выберите время;
- Еженедельно → выберите день недели → выберите время;
- произвольное время в формате cron → укажите Команду для cron. Например, 15 10 * * 0 — синхронизировать по воскресеньям в 10:15 или 00 12 1,16 * * — синхронизировать по 1-м и 16-м числам месяца в 12:00.
- Вы можете Загрузить список пользователей для синхронизации. Список содержит имена пользователей, их роли и информацию о наличии аналогичных пользователей в платформе.
- Нажмите Начать синхронизацию. Платформа запустит процесс синхронизации. Синхронизация может занять несколько минут.
Пример настройки
Вы можете изменить сохранённые настройки в разделе → Синхронизация с LDAP.
Чтобы выполнить синхронизацию вручную, перейдите в → Синхронизация с LDAP → Синхронизировать сейчас или Пользователи → Синхронизировать с LDAP → Начать синхронизацию.
Синхронизация через API
Для настройки синхронизации используйте API сервиса LDAP.
Пример настройки подключения
-
Проверьте подключение и получите список групп:
curl -ks -X 'POST' \ 'https://domain.com/ldap/v4/connect' \ -H 'Cookie: ses6=<auth_token>' \ -H 'x-xsrf-token: <auth_token>' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "type": "ldap", "base_dn": "dc=example,dc=com", "address": "192.168.0.5", "port": 389, "is_ssl": false, "bind_dn": "cn=admin,dc=example,dc=com", "password": "secret", "users_dn": "cn=users", "groups_dn": "cn=groups", "groupname_attr": "memberOf", "email_attr": "mail" }'
Пояснения к команде -
Завершите создание подключения:
curl -ks -X 'POST' \ 'https://domain.com/ldap/v4/setting' \ -H 'Cookie: ses6=<auth_token>' \ -H 'x-xsrf-token: <auth_token>' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "type": "ldap", "base_dn": "dc=example,dc=com", "address": "192.168.0.5", "port": 389, "is_ssl": false, "bind_dn": "cn=admin,dc=example,dc=com", "password": "secret", "groups_bind": { "@admin": [ "cn=admins,cn=groups,cn=accounts,dc=example,dc=com", "cn=devops,cn=groups,cn=accounts,dc=example,dc=com" ], "@user": [ "cn=support,cn=groups,cn=accounts,dc=example,dc=com", "cn=developer,cn=groups,cn=accounts,dc=example,dc=com" ] }, "auto_sync": "0 * * * *" }'
Пояснения к команде
Диагностика
Лог-файлы синхронизации хранятся на сервере с платформой:
- DCImanager 6 — файл /var/log/isp_ldap.log в контейнере dci_ldap_1;
- VMmanager — файл /var/log/isp_ldap.log в контейнере vm_ldap_1.