Синхронизация CommuniGate Pro с Active Directory

В этой статье с покажу один из примеров того, как выполняется синхронизация CommuniGate Pro с Active Directory. Под синхронизацией я подразумеваю автоматическое создание учетных записей пользователей и синхронизация некоторого набора атрибутов учетной записи пользователя Active Directory.

Как правило, в компаниях уже развернута система, которая является централизованным источником для учетных записей. В моем примере, например, это Microsoft Active Directory.

Я лишь кратко изложу основные моменты. Полное описение работы и настройки сервиса синхронизции приведено в документации к продукту.

Описание общего принципа работы сервиса

Синхронизация CommuniGate Pro с Active Directory выполняется через сервис под названием ADSync-CGP. Он устанавливается на любой компьютер в домене Active Directory и синхронизует любые изменения в учетных записях Active Directory. Например, создание нового пользователя или изменение атрибутов уже созданного пользователя.

В самом простом варианте ключевой момент в работе утилиты ADSync-CGP – это выбор атрибута, по которому ADSync-CGP определяет что делать с объектом пользователя – предоставить доступ к сервисам CommuniGate или нет. Этот атрибут учетной записи Active Directory должен содержать одно из трех значений:

Значение атрибутаЧто происходит с УЗ пользователя в CommuniGate Pro
enabledЕсли пользователь еще не создан в CommuniGate, то он создается. Если пользователь уже создан, то его атрибуты периодически синхронизуются
disabledЕсли пользователь еще не создан в CommuniGate, то он создается. Доступ пользователя до сервисов CommuniGate отключен
deletedЕсли пользователь еще не создан в CommuniGate, то он создается. Так же отключается доступ к сервисам CommuniGate. Однако, дополнительно пользователь CommuniGate переименовывается в “deleted_<username>”

Если атрибут будет пустым, то пользователь вообще не будет создан в CommuniGate. Эта особенность может оказаться очень удобной на этапе миграции. Например, вы заполняете этот атрибут только у той порции пользователей, которые мигрируют в данный момент на CommuniGate и они автоматически создаются в CommuniGate.

В самом непростом случае вы можете написать свой собственный скрипт синхронизации, но мы не будем рассматривать этот способ. По крайней мере не в этой статье.

При выборе атрибута я бы не стал выбирать какой-то из тех атрибутов, которые управляются сервером Exchange. Я бы выбрал какой-то другой атрибут, который не используется никакими другими системами кроме Active Directory. Хотя, даже если вы выведите все сервера Exchange из эксплуатации, то значение атрибутов вы не потеряете.

Я, например, выберу атрибут “employeeType”.

Установка сервиса

Ссылка на дистрибутив ADSync-CGP размещена на странице документации.

Загружаем дистрибутив на любой компьютер в домене Active Directory. За не имением выбора я буду устанавливать ADSync-CGP на контроллере домена.

Предварительно необходимо убедиться, что на сервере установлен .NET Framework v4.5.2 (или выше).

Установка ADSync-CGP довольно прямолинейный процесс:

1. Распаковываем архив и запускаем установщик:

2. На первом шаге мастера установки нажимаем “Next”.

3. Указывем путь для установки утилиты синхронизации ADSync-CGP.

4. На последнем шаге установки нажимаем кнопку “Install”.

5. Дождитесь окончания процесса установки.

Настройка сервиса

Настройка клиента ADSync-CGP выполняется через редактирование конфигурационного файла (C:\Program Files\CommuniGate Systems\ADSync-CGP\ADSync-CGP.exe.config – если вы использовали стандартный путь для установки).

Открываем текстовый файл с конфигурцией в любом текстовом редакторе:

C:\Program Files\CommuniGate Systems\ADSync-CGP\ADSync-CGP.exe.config

В минимальной конфигурации редактируем следующие атрибуты:

АтрибутНазначение
ADBaseDNОт какой иерархии в Active Directory начинать поиск объектов. Можно указать несколько путей через |
ADAddressАдрес контроллера домена Active Directory
ADCGAccountStatusАтрибут, по которому утилита синхронизации принимаем решение – создавать пользователя в CommuniGate или нет. Должен содержать значения enabled/disabled/deleted. Либо ничего не содержать – в таком случае пользователь синхронизоваться не будет.
ADCGSyncAllOnStartВыполняет глобальную синхронизацию учетных записей пользователей при запуске службы
ADCGDefaultDomainNameИмя вашего почтового домена.
CGProAddressАдрес сервера CommuniGate Pro
CGProUsernameЛогин для подключения к серверу CommuniGate Pro
CGProPasswordПароль для подключения к серверу CommuniGate Pro
CacheSizeРазмер кэша утилиты синхронизации. Для оптимальной производительности рекомендуется устанавливать значения в десятки тысяц

Ознакомиться с полным перечнем поддерживаемых парамтеров и их описанием можно вот тут.

C:\Program Files\CommuniGate Systems\ADSync-CGP\ADSync-CGP.exe.config

Текст моего конфигурационного файла получился следующий:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
  <appSettings>
    <add key="ADBaseDN" value="OU=Admins,DC=itproblog,DC=ru | OU=USR,DC=itproblog,DC=ru" />
    <add key="ADAddress" value="dc01.itproblog.ru:636" />
    <add key="ADAccountNameAttribute" value="sAMAccountName" />
    <add key="ADGroupNameAttribute" value="sAMAccountName" />
    <add key="ADGroupRealNameAttribute" value="cn" />
    <add key="ADCGAccountStatus" value="employeeType" />
    <!-- for account status handling in scgp on cgpro side
    <add key="ADCGStatusScript" value="adsync-status" />
    <add key="ADCGStatusFields" value="mail" />
    -->
    <add key="ADCGSyncAllOnStart" value="true" />
    <add key="ADCGDefaultDomainName" value="itproblog.ru" />
    <!-- for post-create processing in scgp on cgpro side, e.g. for vCard creation
    <add key="ADCGPostCreateScript" value="adsync-postcreate" />
    -->
    <!-- for post-update processing in scgp on cgpro side
    <add key="ADCGPostUpdateScript" value="adsync-postupdate" />
    -->
    <add key="ADCGGroupStatus" value="description" />
    <add key="ADObjectClass" value="organizationalPerson" />
    <add key="ADGroupObjectClass" value="group" />
    <add key="CGProAddress" value="com01.itproblog.ru" />
    <add key="CGProPort" value="106" />
    <add key="CGProSSL" value="false" />
    <!-- for different server address and SSL certificate domain name
    <add key="CGProDomain" value="itproblog.ru" />
    -->
    <add key="CGProSecureLogin" value="false" />
    <add key="CGProUsername" value="postmaster" />
    <add key="CGProPassword" value="Qwerty123" />
    <add key="LogDir" value="C:\\Program Files (x86)\\CommuniGate Systems\\ADSync-CGP" />
    <add key="LogLevel" value="4" />
    <add key="LogSizeLimit" value="3" />
    <add key="LogRotationPeriod" value="60" />
    <add key="CacheSize" value="1000" />
    <add key="givenName" value="RealName" />
    <add key="l" value="l" />
    <add key="st" value="st" />
    <add key="ou" value="ou" />
  </appSettings>
</configuration>

Как выяснилось в комментариях, если в параметре “ADBaseDN” указан корень домена, то синхронизация не работает. Необходимо явно указано OU (или несколько OU, как в моей конфигурации по ссылке выше).

 Если структура ваших OU в названии включает символы кириллици, то необходимо сохранять конфигурационный файл в кодировке UTF-8.

Вносим необходимые изменения и сохраняем конфигурационный файл.

Запускаем сервис синхронизации, если он еще не был запущен.

Если сервис по каким-то причинам не запускается, то либо у вас ошибка в конфигурационном файле, либо не удается подключиться к серверу CommuniGate Pro.

Проверка работы сервиса

Теперь попробуем заполнить атрибут “employeeType” (поскольку именно его мы выбрали в качестве флага) для одного из подопытных пользователей. Я заполню его вручную, но для больших объемов миграции явно нужен будет небольшой скрипт для автоматизации.

Ждем некоторое время. В журнале должно появиться событие о том, что пользователь будет создан в системе CommuniGate Pro.

C:\Program Files\CommuniGate Systems\ADSync-CGP\[todayDate].log
2022-07-27_07:59:31.880 2: [000009] Handle CN=adm,OU=Admins,DC=itproblog,DC=ru
2022-07-27_07:59:31.880 3: [000009] Update account settings adm@itproblog.ru
2022-07-27_07:59:31.942 4: CLI request: UPDATEACCOUNTSETTINGS "adm@itproblog.ru" {"AccessModes"=#NULL#;"RealName"="adm";"l"=#NULL#;"st"=#NULL#;"ou"=#NULL#;}
2022-07-27_07:59:31.942 4: CLI response: 513 unknown user account
2022-07-27_07:59:31.958 4: CLI request: CREATEACCOUNT "adm@itproblog.ru" {"RealName"="adm";"l"=#NULL#;"st"=#NULL#;"ou"=#NULL#;}
2022-07-27_07:59:31.958 4: CLI response: 200 OK

Выполним проверку непосредственно в системе CommuniGate (Users -> Domains -> itproblog.ru -> Objects):

Как видно из скриншота выше пользователь успешно был синхронизирован.

Настройка синхронизации Active Directory с сервером CommuniGate Pro завершена.

Синхронизация CommuniGate Pro с Active Directory: 13 комментариев

  1. Здравствуйте! А можно увидеть начало лога, до создания учетки в CGP? А то в моем конфиге всё аналогично, но ни одна учетка, у которой employeeType выставлен в enabled или disabled, не создалась.

    1. Добрый день! Вот тут выложил логи от момента запуска сервиса + мой конфиг:

      https://itproblog.ru/wp-content/uploads/2022/08/2022-08-22.zip

      В процессы работы службы был создан новый пользователь – u6@itproblog.ru. Насколько я помню, у меня не синхронизировались пользователи, если в параметре “ADBaseDN” был указан корень домена. Не ручаюсь закономерность ли эта была или просто я не дождался цикла синхронизации. Попробуйте явно указано OU (или несколько OU, как в моей конфигурации по ссылке выше).

      1. Спасибо! Всё получилось. Действительно, без указания хотя бы одного OU, запуск не получался. А у кого также, как у меня, большинство OU написаны кириллицей, рекомендую сохранять конфиг в кодировке UTF-8, всё синхронизируется.

    1. С SAMBA DC не тестировал варианты синхронизации. В быстром доступе документации по такой конфигурации тоже не нашел. Скорее всего нужно какое-то стороннее или самописное решение.

  2. РОман а есть ли идеи как employeeType проставлять в зависимости от состояния учетки AD
    Disable = disabled
    enable = enabled

    1. Добрый день! Мне видится вариант с PowerShell скриптом, который опрашивает ваше AD по расписанию и в зависимости от состояния учетки заполняет атрибут employeeType. Даже если опрашивать в цикле пользоваетлей по командлету Get-ADUser, то даже у него в выводе есть свойство Enable, которое в зависимости от того включана УЗ или нет отдает значение true или false. Если я правильно понял вопрос, то это именно то, что вам нужно.

  3. Добрый день!
    Мучаюсь уже неделю, при запуске службы выдает ошибку : Служба “ADSync-CGP” на Локальный компьютер была запущена и затем остановлено. Некоторые службы автоматически останавливаются, если они не используются другими службами или программами.

    В логах пишет следующее:
    2023-04-17_11:45:35.933 0: Service started, version 1.2.8
    2023-04-17_11:45:35.933 1: Connecting to CGP
    2023-04-17_11:45:35.977 0: Service stopped

    Скрипт идентичен, просто внесены данные своего домена. Не могу найти проблему, подскажите в чем может быть проблема.

    1. Добрый день! Точно такие симптомы у меня были только в тех случаях, когда были допущены ошибки в конфигурационном файле. Я бы на вашем месте еще раз перепроверил конфигурационный файл.

  4. Добрый день. Пытаюсь настроить синхронизацию. В моей ситуации на cgp нужно синхронизировать не в дефолтный домен в дополнительный (с другим именем) что-то пока никак, в лучшем случае синхронизирует с дефолтным. Подскажите как сделать

  5. Добрый день, подскажите с чем может быть связанна данная ошибка?

    CLI response: 510 you do not have the required access right
    CLI error: 510 you do not have the required access right

    1. Добрый день, вы точно правильно указали учетную запись для подключения к серверу CGP? У неё есть необхождимые разрешения для создания почтовых ящиков?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *