LDAP (Lightweight Directory Access Protocol) — это протокол прикладного уровня для доступа к службе каталогов.

Служба каталогов (каталоги LDAP) — это система с иерархической структурой для хранения данных в формате "ключ-значение". Обычно службы каталогов используют для хранения информации об организации, её активах и пользователях. Существуют различные реализации каталогов LDAP. Например, ALD Pro, OpenLDAP и FreeIPA для Linux, Microsoft Active Directory для Windows и т.д.

Вы можете настроить синхронизацию платформы c каталогом LDAP. Тогда учётные записи пользователей из каталога будут автоматически создаваться в платформе.

Логика работы


Платформа запускает синхронизацию с каталогом LDAP с периодичностью, заданной в настройках. При синхронизации платформа подключается с заданными параметрами к каталогу LDAP и получает список пользователей. Информация о пользователях из каталога LDAP является более приоритетной по сравнению с информацией в платформе.

Общие правила синхронизации:

  1. Если у пользователя в каталоге LDAP не указан email, его учётная запись не будет использована при синхронизации.
  2. Если пользователя из каталога LDAP нет в платформе, платформа создаст учётную запись с данными из LDAP.
  3. Если пользователь из каталога LDAP уже создан в платформе, то платформа изменит источник учётной записи пользователя с локального на LDAP. После этого пользователь сможет авторизоваться в платформе с email и паролем из LDAP. Пароль пользователя будет храниться в LDAP и не запишется в БД платформы.
    Пример: В платформе создана учётная запись с именем admin@example.com и паролем secret1. В LDAP есть учётная запись с именем admin@example.com и паролем secret2. После синхронизации пользователь admin@example.com сможет авторизоваться в платформе только с паролем secret2.
  4. Если пользователь из каталога LDAP уже создан в платформе, то платформа изменит уровень учётной записи на данные из LDAP.
    Пример: В платформе создана учётная запись с именем admin@example.com уровня "Администратор". В LDAP есть учётная запись с именем admin@example.com в группе "Пользователи". После синхронизации уровень учётной записи изменится на "Пользователь". Если пользователь является владельцем серверов или ВМ, операции с этими объектами останутся ему доступны.
  5. Если администратор удалит из платформы пользователя, созданного при синхронизации с LDAP, платформа создаст этого пользователя при следующей синхронизации.
  6. Если пользователь будет удалён из каталога LDAP, платформа удалит его учётную запись при следующей синхронизации.
  7. Если пользователь будет заблокирован в каталоге LDAP, платформа установит для него статус "Заблокирован в LDAP". Такой пользователь не сможет авторизоваться в платформе.

Если удалить настроенную синхронизацию, пользователи из каталога LDAP не смогут авторизоваться в платформе.

Подготовка


Если на сервере с LDAP самоподписанный SSL-сертификат

Подключение к LDAP завершится с ошибкой, если требуется использовать SSL-соединение, а на сервере установлен самоподписанный SSL-сертификат.

Чтобы ошибки подключения не возникало, выполните следующие действия перед настройкой синхронизации:

  1. Подключитесь к серверу с платформой по SSH.

  2. Создайте директорию для конфигурации LDAP: 

    mkdir /opt/ispsystem/ldap
    BASH
  3. Создайте в директории /opt/ispsystem/ldap/ файл ldap.conf с содержимым: 

    TLS_CACERT	/etc/ssl/certs/ca-certificates.crt
    TLS_REQCERT never
    CODE
  4. Создайте файл патча /opt/ispsystem/ldap.yaml с содержимым: 

    version: "3.5"
    services:
      ldap:
        volumes:
        - /opt/ispsystem/ldap/:/etc/ldap/
    CODE
  5. Примените патч для сервиса LDAP: 

    VMmanager

    /usr/local/bin/vm add-patch -p=LDAP -f /opt/ispsystem/ldap.yaml
    BASH

    DCImanager 6

    /usr/local/bin/dci add-patch -p=LDAP -f /opt/ispsystem/ldap.yaml
    BASH

Настройка синхронизации


Чтобы настроить синхронизацию, перейдите в Синхронизация с LDAP:

  1. Выберите реализацию каталога LDAP:
    • LDAP — стандартная реализация службы каталогов;
    • Active Directory;
    • FreeIPA;
    • ALD Pro.

      Для синхронизации с ALD Pro:

      • в DCImanager 6 — выберите ALD Pro;
      • в VMmanager — выберите FreeIPA.
  2. Укажите настройки подключения:
    1. Base DN — объект каталога, с которого начинается поиск. Например, для каталога example.com укажите "dc=example,dc=com".
    2. Если нужно, включите опцию Использовать SSL для подключения.
    3. Адрес основного сервера.
    4. Порт подключения.
    5. Bind DN — уникальное имя для аутентификации. Вы можете указать имя в формате name@example.com или "cn=name,ou=group,dc=example,dc=com".
    6. Пароль.
    7. Для стандартной реализации LDAP укажите:
      1. Users DN — параметр для поиска и загрузки пользователей. Например, "ou=users".
      2. Groups DN — параметр для поиска и загрузки групп пользователей. Например, "ou=groups".
      3. Groupname attribute — атрибут для загрузки имени группы. Например, CN или memberof.
      4. E-mail attribute — атрибут для загрузки адреса электронной почты пользователя. Например, mail.
  3. Нажмите Далее. Платформа проверит подключение к каталогу LDAP с указанными параметрами.
  4. Выберите DN группы для всех ролей, используемых в платформе.
  5. Чтобы платформа выполняла синхронизацию по расписанию:
    1. Включите опцию Синхронизировать пользователей автоматически.
    2. Выберите параметры расписания:
      • Каждый час;
      • Ежедневно → выберите время;
      • Еженедельно → выберите день недели → выберите время;
      • произвольное время в формате cron → укажите Команду для cron. Например, 15 10 * * 0 — синхронизировать по воскресеньям в 10:15 или 00 12 1,16 * * — синхронизировать по 1-м и 16-м числам месяца в 12:00.
  6. Вы можете Загрузить список пользователей для синхронизации. Список содержит имена пользователей, их роли и информацию о наличии аналогичных пользователей в платформе.
  7. Нажмите Начать синхронизацию. Платформа запустит процесс синхронизации. Синхронизация может занять несколько минут.

Пример настройки

Вы можете изменить сохранённые настройки в разделе Синхронизация с LDAP.

Чтобы выполнить синхронизацию вручную, перейдите в Синхронизация с LDAPСинхронизировать сейчас или ПользователиСинхронизировать с LDAPНачать синхронизацию.

Синхронизация через API


Для настройки синхронизации используйте API сервиса LDAP.

Пример настройки подключения

  1. Проверьте подключение и получите список групп: 

    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"
    }'
    BASH

    domain.com — IP-адрес или доменное имя сервера с платформой

    <auth_token> — токен авторизации

    type — реализация каталога LDAP

    base_dn — объект каталога, с которого начинается поиск

    address — IP-адрес основного сервера

    port — порт подключения

    is_ssl — опция "Использовать SSL для подключения"

    bind_dn — уникальное имя для аутентификации

    password — пароль администратора LDAP

    users_dn — параметр для поиска и загрузки пользователей

    groups_dn — параметр для поиска и загрузки групп пользователей

    groupname_attr — атрибут для загрузки имени группы

    email_attr — атрибут для загрузки адреса электронной почты пользователя

  2. Завершите создание подключения:

    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 * * * *"
    }'
    BASH

    domain.com — IP-адрес или доменное имя сервера с платформой

    <auth_token> — токен авторизации

    type — реализация каталога LDAP

    base_dn — объект каталога, с которого начинается поиск

    address — IP-адрес основного сервера

    port — порт подключения

    is_ssl — опция "Использовать SSL для подключения"

    bind_dn — уникальное имя для аутентификации

    password — пароль администратора LDAP

    groups_bind — DN-группы для каждой роли пользователя в платформе

    auto_sync — время в формате cron для синхронизации с каталогом

Диагностика


Лог-файлы синхронизации хранятся на сервере с платформой:

  • DCImanager 6 — файл /var/log/isp_ldap.log в контейнере dci_ldap_1;
  • VMmanager — файл /var/log/isp_ldap.log в контейнере vm_ldap_1.

Может быть полезно

Связанные статьи: