Перейти к содержимому
CalabДокументация

Каталог (Active Directory)

Синхронизация с Active Directory по LDAPS — требования, фильтр групп, objectGUID, частота синхронизации и закрытие доступа.

Корпоративный вход отвечает на вопрос «кто это». Каталог отвечает на другой: «разрешает ли организация этому человеку доступ прямо сейчас». Calab раз в 5 минут читает Active Directory по LDAPS и закрывает доступ тем, чья учётная запись отключена, удалена или вышла из разрешённых групп.

Как это работает

  • Владелец явно связывает участника пространства с объектом AD по его objectGUID. Такой участник становится управляемым каталогом.
  • Каждые 5 минут Calab делает полный снимок каталога и обновляет статусы управляемых участников.
  • Если последней полной успешной синхронизации больше 1 часа, управляемые участники теряют доступ («Каталог организации не разрешает доступ. Обратитесь к владельцу.»), пока синхронизация не восстановится. Calab закрывает доступ при неизвестном состоянии, а не открывает.
  • Участники без связи с каталогом каталогом не затрагиваются.

Каталог работает независимо от SSO-подключения: связь «учётная запись IdP ↔ аккаунт» делает сотрудник при привязке, связь «объект AD ↔ участник» — владелец. Пароли AD в Calab не попадают.

Требования

ТребованиеПодробности
ПротоколТолько ldaps://, порт 636. Обычный LDAP и StartTLS не поддерживаются
СертификатПроверяются цепочка и имя хоста. Если оператор задал свой CA для хоста — доверяется только ему
Разрешение оператораХост контроллера домена должен быть в списке оператора (IDENTITY_DIRECTORY_HOSTS) вместе с допустимыми сетями — см. для операторов. Без этого сохранить настройки нельзя
Учётная записьОтдельная служебная учётная запись только для чтения. Анонимный bind не принимается
ОбъёмДо 100 000 учётных записей; полный обход должен уложиться в 120 секунд

Calab сам строит фильтр — (&(objectCategory=person)(objectClass=user)) в пределах Base DN — и читает только objectGUID, userAccountControl и memberOf. Произвольные фильтры не принимаются, ссылки (referrals) на другие разделы не открываются.

Настройка

Настройки пространства → «Настройка SSO» → «Active Directory» → «Настройки каталога». Нужны права владельца и подтверждённый пароль; при обязательном SSO — ещё и свежий SSO.

ПолеПримерЗначение
«Включено»вкл.Синхронизация включена
«LDAPS URL»ldaps://dc1.corp.example.com:636Адрес контроллера домена, только ldaps://
«Bind DN»CN=Calab,OU=Services,DC=corp,DC=example,DC=comПолный DN служебной учётной записи
«Пароль read-only bind»—Хранится зашифрованным; пустое поле сохраняет прежний
«Base DN»DC=corp,DC=example,DC=comКорень поиска учётных записей
«Разрешённые группы (DN по строкам)»CN=Calab Users,OU=Groups,DC=corp,DC=example,DC=comДо 100 групп, по одному DN в строке

После «Сохранить» нажмите «Проверить соединение», затем «Синхронизировать сейчас» (вручную — не чаще раза в минуту). В карточке видно время «Последняя успешная синхронизация» и последняя ошибка.

Фильтр групп

  • Список пуст — допущены все учётные записи под Base DN, которые не отключены.
  • Список задан — допущен тот, кто состоит хотя бы в одной из групп, в том числе через вложенные группы: контроллер домена проверяет членство по цепочке (правило LDAP_MATCHING_RULE_IN_CHAIN, 1.2.840.113556.1.4.1941).
  • Группы не назначают ролей в Calab: они только фильтруют допуск.

Связь участника с каталогом

Карточка «Допуск участников»: введите «ID участника» (ID пользователя Calab) и «Object GUID» учётной записи AD и нажмите «Сохранить».

objectGUID — неизменяемый идентификатор объекта AD; он не меняется при переименовании и переносе между OU. Calab принимает его в обычном строковом виде GUID — так, как его показывает Windows:

PowerShell
Get-ADUser -Identity jdoe -Properties ObjectGUID | Select-Object -ExpandProperty ObjectGUID
# 3f2504e0-4f89-11d3-9a0c-0305e82c3301

Через API — PUT /api/workspaces/{workspace_id}/identity/directory/members/{user_id} с телом {"objectGuid": "3f2504e0-4f89-11d3-9a0c-0305e82c3301"}.

Статусы

СтатусЗначитДоступ
DIRECTORY_MEMBER_STATUS_ACTIVEУчётная запись включена и проходит фильтр группЕсть (при свежем каталоге)
DIRECTORY_MEMBER_STATUS_DISABLEDУчётная запись отключена в AD (userAccountControl с флагом ACCOUNTDISABLE) вышла из разрешённых групп или пропала из последнего полного снимкаЗакрыт
DIRECTORY_MEMBER_STATUS_DELETEDУчётной записи нет в двух полных успешных снимках подряд — окончательная отметка об удаленииЗакрыт
DIRECTORY_MEMBER_STATUS_UNMAPPEDУчастник ещё не связан с объектом каталогаКаталог не влияет

При закрытии доступа Calab сразу отзывает подтверждения SSO и OAuth-доступы этого участника в пространстве. Если учётную запись снова включили, человек может войти через SSO заново; прежние OAuth-доступы не возвращаются. Ручные баны и роли участника каталог не трогает: повторное включение не снимает бан и не выдаёт ролей.

Защита от массовых потерь

Сбой сети, неполная выдача страниц или истёкшая аренда синхронизации никогда не трактуются как «все уволены» — снимок просто не публикуется.

Если полный снимок оказался пустым или резко меньше прежнего (пропало больше 20 % и не меньше 2 объектов, или столько же связанных активных участников), Calab помещает его в карантин: прежнее состояние сохраняется, а в карточке появляется ошибка «Directory scan returned far fewer accounts than before; the previous state is kept…». Обычно это значит, что служебная учётная запись потеряла права на чтение. Если сокращение настоящее — сохраните настройки каталога ещё раз: первая синхронизация новой конфигурации не проверяется на сокращение.

Отключение каталога

Выключение каталога или удаление связи не снимает автоматически ограничения с уже закрытых участников. Проверьте каждого и нажмите «Отвязать от каталога» — действие записывается в аудит. После этого участник входит заново.