Active Directory Connector — это интеграционный компонент, который обеспечивает синхронизацию пользователей и групп из Active Directory или FreeIPA в DION. Он позволяет автоматически создавать и удалять учетные записи пользователей в DION на основе данных из Active Directory или FreeIPA, а также обновлять информацию о пользователях, такую как ФИО, email, должность.
Коннектор поддерживает выборку пользователей из нескольких контейнеров и групп в Active Directory(FreeIPA), а также задание критериев выборки пользователей (исключаются рабочие станции, сервера и контроллеры доменов).
Для отправки данных в DION, коннектор поддерживает API DION, который позволяет отправлять данные в зашифрованном формате. Коннектор может быть настроен для отправки данных асинхронно для оптимизации производительности.
Коннектор также поддерживает расписание обновления данных, которое можно настроить в соответствии с требованиями организации. Он может обрабатывать ошибки при получении данных из Active Directory(FreeIPA) и отправке данных в DION, а также может логировать свою работу для быстрого выявления и устранения возможных проблем.
Обратите внимание. Если вам необходимо обновлять данные по нескольким доменам, укажите их все в конфигурационном файле в атрибуте
domain_name.

⚠️После включения возможности синхронизации пользователей, обязательно проведите тестовую синхронизацию, получите отчет, проверьте актуальность данных и изменений, которые будут выполняться с учетными записями DION. После проверки вы можете выбрать необходимый тип изменений, который будет использован в следующей синхронизации: удаление, обновление или добавление.
Учетная запись с правами на развертывание deb-пакета (rpm) и запуск сервиса Active Directory Connector DION
Дистрибутив AD Connector можно скачать по ссылке.
синтаксис: dion-ad-connector [command] [arguments]
 
### Команды:
version     - версия приложения
help        - описание
 
### Для этих команд требуется указать файл конфигурации -config=ad-connector.yml
### Можно не указывать, если файл конфигурации находится в директории /etc/dion/ad-connector.yml
 
check-config       - проверить корректность файла конфигурации
check-connect-ldap - проверить подключение к серверу Active Directory и показать несколько записей из AD
check-connect-dion - проверить подключение к Дион
get-users          - показать пользователей из AD
    [-limit 100]       - лимит 0 или без флага - без лимита
    [-encrypt]         - шифровать данные
    [-file]            - сохранить в файлу. В конце к файлу добавиться порядковый номер файла
upload-file        - выгрузить файл Дион. не более 4мб
    -file              - файл, который будет зашифрован и загружен в интеграционное api
get-schedule       - получить расписание будущих запусков
    [-limit 5]         - кол-во следующих запусков. По умолчанию 5
sync-once          - один раз получить данные из ldap и отправить их в Дион
sync               - запуск получения данных из ldap и отправки в Дион по расписанию
 
### Переменные окружения
CLI_MODE=true   - вывод в командную строку будет подкрашен
LOG_LEVEL=-1    - уровень логирования -1, 0, 1
 
### Сервис dion-ad-connector
systemctl status dion-ad-connector  - состояние сервиса
systemctl restart dion-ad-connector - перезапустить сервис
systemctl stop dion-ad-connector    - остановить сервис (до следующего перезапуска системы)
systemctl disable dion-ad-connector - выключить запуск сервиса при загрузке системы
journalctl -u dion-ad-connector -f  - логи сервиса (если не указан файл логов в конфигурации
cd ~/directory/sudo dpkg -i dion-ad-connector-x.x.x.deb, где dion-ad-connector-x.x.x.deb - имя пакета\/etc/dion/ad-connector.yml  
# Для отступов используйте пробелы
# Уровень логирования (-1 debug, 0 - info, 1 - error)
# Переменная окружение LOG_LEVEL обладает приоритетом перед значением из конфигурации
log_level: 1
# Файл в который записывать логи. Если не указан вывод в stdout (stderr для ошибок)
# Запись логов в файл происходит только для настроенной по расписанию синхронизации
# Для команд настройки и отладки (посмотреть полный список: dion-ad-connector --help)
# вывод происходит в консоль
log_file:
# ------------------------------------------------------------------------------
#                                   БЛОК 1                                     |
#         ДОМЕНЫ ДЛЯ КОТОРЫХ ПРОИСХОДИТ СИНХРОНИЗАЦИЯ ПОЛЬЗОВАТЕЛЕЙ            |
# ------------------------------------------------------------------------------
# из AD получим и отправим в Дион только тех пользователей, почта которых имеет указанный домен
# Например user@test.ru - будет синхронизирован, а user2@test-org.ru - нет
# Допустимо указать несколько доменов через пробел: test.ru test2.ru test3.ru
domain_name: test.ru
# ------------------------------------------------------------------------------
#                                   БЛОК 2                                     |
#                                 ШИФРОВАНИЕ                                   |
# ------------------------------------------------------------------------------
dion:
    # Публичный ключ Дион
    # используется для шифрования данных, отправляемых в Дион
    public_key: >
       
    # Путь к файлу с публичным ключом Дион
    # То же что и dion_public_key. Если указано оба значения - приоритет файл.
    # Если указан путь к не существующему файлу, приложение не сможет работать
    public_key_file:
# ------------------------------------------------------------------------------
#                                   БЛОК 3                                     |
#                    ПОДКЛЮЧЕНИЕ К ИНТЕГРАЦИОННОМУ API ДИОН                    |
# ------------------------------------------------------------------------------
integration:
    # Путь к интеграционному API
    uri: https://api-integration.dion.vc/v1/customers/users
    # Путь к API теста подключения к интеграционному API
    connection_test_uri: https://api-integration.dion.vc/v1/connection-test
    # Интеграционный токен организации. Выпускается в панели администрирования в Дион
    token:
    # Путь к файлу с интеграционным токеном организации
    # Тоже самое что и integration_token. Если указано оба значения - приоритет файл
    # Если указан путь к не существующему файлу, приложение не сможет работать
    token_file:
    # прокси, через который будет выполнено подключение к интеграционному api
    proxy_url:
# ------------------------------------------------------------------------------
#                                   БЛОК 4                                     |
#                  ДАННЫЕ ПОДКЛЮЧЕНИЯ К ACTIVE DIRECTORY                       |
# ------------------------------------------------------------------------------
ldap:
    url: ldap-server
    port: 389
    # использовать ldaps
    # не совместимо с switch_to_tls=true
    ldaps: false
    # переключиться в ldaps после подключения по ldap
    # https://datatracker.ietf.org/doc/html/rfc4511#section-4.14
    switch_to_tls: true
    # Подключение без предоставления данных пользователя
    unauthenticated_bind: false
    # Пользователь, под которым будет происходить работа с AD
    user_dn: cn=admin,dc=test,dc=local
    # Пароль пользователя
    password: admin
    # Путь к файлу с паролем пользователя
    # Тоже самое что ldap.password. Если указано оба значения - приоритет файл
    # Если указан путь к не существующему файлу, приложение не сможет работать
    password_file:
    # Для технологического пользователя (для выборки записей настройки в БЛОКЕ №6)
    base_dn: ou=users,dc=test,dc=local
# ------------------------------------------------------------------------------
#                                    БЛОК 5                                    |
#                       ОТНОШЕНИЯ АТРИБУТОВ В AD -> DION                       |
# ------------------------------------------------------------------------------
ldap_attribute_mapping:
    # Название поля в AD которое будет отправлено в DION как Email пользователя
    # Обязательное поле
    email: mail
    # Название поля в AD (в нижнем регистре) которое будет отправлено в DION как ИМЯ пользователя.
    name_attr: displayname
    # Название поля в AD которое будет отправлено в DION как ДОЛЖНОСТЬ пользователя
    position_attr: title
# ------------------------------------------------------------------------------
#                                    БЛОК 6                                    |
#                            НАСТРОЙКИ ПОИСКА В AD                             |
# ------------------------------------------------------------------------------
ldap_searching:
    # Пути для поиска пользователей
    -   base_dn: ou=users,dc=test,dc=local
        filter: "(&(objectClass=user)(memberOf=cn=test,ou=groups,ou=test,dc=test,dc=local))"
# ------------------------------------------------------------------------------
#                                   БЛОК 7                                     |
#                               АВТОМАТИЗАЦИЯ                                  |
# ------------------------------------------------------------------------------
automation:
    # Формат crone: минуты часы дни месяцы дни_недели full
    # Используется время в UTC
    # пример запуска каждый день в 15 и в 20 часов: * 15,20 * * * full
    schedule:
        - "* 15,20 * * * full"
Base DN — раздел каталога, где приложение начнет поиск пользователей и групп. Чтобы ваших пользователей можно было найти в приложении, они должны располагаться под базовым DN.
Например, у нас могут быть следующие DN для пользователя и группы:
cn=Elon Musk,ou=users,dc=example,dc=com
cn=Finance,ou=users,dc=example,dc=com
Используя приведенные выше примеры, наш пользователь и группа находятся в организационной единице(Organisational Unit), называемой «users», поэтому мы можем безопасно установить для нашего базового DN следующее:
ou=users,dc=example,dc=com
И группа, и пользователь будут доступны в нашем приложении.
Если в вашей службе каталогов используются несколько классов обьектов для пользователей, то в параметре filter необходимо указать их все. Например, если пользователи отличаются наличием двух атрибутов objectClass (один равен «person», а другой — «user»), необходимо сопоставить их следующим образом:
(&(objectClass=person)(objectClass=user))
Обратите внимание на символ амперсанда & в начале. Его использование значит выполнение запроса: objectClass=person И objectClass=user.
В то же время,
(|(objectClass=person)(objectClass=user))
Использование прямого слеша значит выполнение запроса: objectClass=person ИЛИ objectClass=user.
Microsoft Active Directory поддерживает этот  memberOf атрибут, который позволяет фильтру работать с членством пользователей. 
Если вам необходимо синхронизировать пользователей из определенной группы, то используйте фильтр
base_dn: ou=users,dc=test,dc=local
        filter: "(&(objectClass=user)(memberOf=cn=test,ou=groups,dc=test,dc=local))"
На сервере, где установлен AD Connector, необходимо выполнить команду:
dion-ad-connector sync-once
Затем в панели администрирования DION нужно нажать на имя вашего домена и скачать полученный отчет. Внимательно проверьте отчет, обращая внимание на следующие столбцы: Имя Dion, Должность Dion, Статус Dion и Действие, которое будет выполнено с учетной записью в DION.


Если все данные корректны, вы можете выбрать необходимый тип изменений, которые будут применяться при следующих синхронизациях.
Для этого необходимо: Включить опцию Синхронизировать с AD. Выбрать нужный тип изменений: Добавление, Обновление или Удаление.

Если в вашей организации используется несколько доменов, и в панели администрирования DION некоторые из них находятся в статусе “Тест синхронизации с AD”, то синхронизация не будет работать в том числе и для тех доменов, которые находятся в статусе “Синхронизирован с AD”. Для начала работы синхронизации необходимо перевести домен из статуса “Тест синхронизации с AD” в статус “Синхронизирован с AD”.
| Ошибка | Вариант решения | 
| Описание должности в Active Directory длиннее, чем в DION | Размерность поля в DION ограничена. Описание полей пользователей DION представлено по ссылке | 
| Ошибка при обращении AD connector к Active Directory: LDAP Result Code 10 "Referral": 0000202B: RefErr: DSID-0310084A, data 0, 1 access points  | 
        Указанная директория не доступна для пользователя, указанного для подключения к Active Directory в конфигурационном файле | 
| Удаленные/заблокированные пользователи снова становятся активными | Необходимо удалить учетные записи таких пользователей из группы Active Directory, которая отвечает за их передачу в Dion | 
Вопросы по настройке и предложения по доработке отправляйте, пожалуйста, на support@diongo.ru