Установка базового кластера с LDAP
Назначение и ограничения
Эта конфигурация дополняет сценарий установки базового кластера и заменяет локальных пользователей на пользователей внешнего каталога Active Directory или LDAP.
Топология базового кластера и инвентарь Ansible не изменяются. Инструкция описывает только отличия от базового сценария: параметры zakroma_storage_gateway.auth и проверки подключения к каталогу.
Перед началом убедитесь, что:
- контроллер домена развёрнут и доступен со всех узлов группы
zakroma-storageпо LDAP или LDAPS; - есть служебная учётная запись (bind-пользователь) с правом чтения пользователей и групп;
- в каталоге существует группа, разрешающая доступ к Закрома.Хранение, и пользователь для роли первого администратора;
- при использовании LDAPS цепочка сертификата контроллера домена добавлена в системное хранилище доверенных CA каждого узла Закрома.Хранение.
Схема установки
Три узла с совмещёнными сервисами Закрома.Хранение и ZDS используют внешние серверы LDAP и PostgreSQL. Внешний балансировщик и DNS Round-Robin направляют клиентские подключения к узлам кластера и не устанавливаются Ansible-ролями из этой инструкции.
На схеме показано подключение к LDAP по порту 389. При использовании LDAPS топология не меняется, но подключение выполняется по порту 636. Обозначения Server1–Server5 условные: используйте имена узлов из статьи базового кластера и файла inventories/base-cluster/hosts.

Настройка LDAP
Выполняйте установку по инструкции базового кластера. На шаге настройки домена, TLS и авторизации при редактировании inventories/base-cluster/group_vars/zakroma-storage.yml вместо локальной авторизации настройте LDAP: замените параметры default_admin и auth в существующей секции zakroma_storage_gateway. Остальные параметры секции сохраните без изменений.
Пример рассчитан на Active Directory, в которой пользователи идентифицируются атрибутом sAMAccountName, а членство хранится в атрибуте member группы.
1zakroma_storage_gateway: 2 # Остальные параметры существующей секции сохраните без изменений. 3 # Дефолтный администратор 4 default_admin: "zakromaadmin" 5 # Настройки аутентификации 6 auth: 7 # Провайдер аутентификации. Один из (keycloak, ldap, file, oidc) 8 auth_provider: "ldap" 9 # Провайдер пользователей. Один из (keycloak, ldap, file). Пусто — совпадает с auth_provider 10 user_provider: "ldap" 11 12 # Настройки LDAP 13 ldap: 14 # Группа в LDAP, которая требуется пользователю для входа в Закрома.Хранение 15 permission: 16 group: "clouduser" 17 # URL для подключения к LDAP-серверу (Пример: ldap://10.10.0.10:389) 18 url: "ldaps://dc1.example.internal:636" 19 # DN пользователя для подключения к LDAP-серверу (Пример: CN=Administrator,CN=Users,DC=zakroma,DC=internal) 20 bind_dn: "CN=svc-zakroma,CN=Users,DC=example,DC=internal" 21 # Пароль пользователя для подключения к LDAP-серверу 22 bind_password: "<LDAP_BIND_PASSWORD>" 23 # Фильтр для поиска пользователей по LDAP классам (Пример: "(objectClass=person)") 24 user_filter: "objectCategory=person" 25 # Фильтр для поиска пользователей по вхождению в LDAP группы (Пример: "(objectClass=group)") 26 group_filter: "objectClass=group" 27 # Атрибут для поиска группы (Пример: cn) 28 group_name_attribute: "cn" 29 # Путь в LDAP дереве (dn), с которого начинать поиск групп (Пример: ou=groups,dc=zakroma,dc=internal) 30 group_search_dn: "OU=Groups,DC=example,DC=internal" 31 # Атрибут имени пользователя (Пример: sAMAccountName) 32 user_name_attribute: "sAMAccountName" 33 # Путь в LDAP дереве (dn), с которого начинать поиск пользователей (Пример: CN=Users,DC=zakroma,DC=internal) 34 user_search_dn: "CN=Users,DC=example,DC=internal" 35 # Атрибут, отвечающий за имя пользователя (Пример: givenName) 36 user_firstname_attribute: "givenName" 37 # Атрибут, отвечающий за фамилию пользователя (Пример: sn) 38 user_lastname_attribute: "sn" 39 # Атрибут, отвечающий за email пользователя (Пример: email) 40 user_email_attribute: "mail" 41 # Атрибут, в котором хранится список членств пользователя (Пример: member) 42 membership_attribute_name: "member" 43 # Тип атрибута, определяющего членство пользователя (Пример: dn) 44 membership_attribute_type: "dn" 45 # Атрибут, показывающий принадлежность пользователя к группе (Пример: member) 46 memberof_attribute_name: "member" 47 # Тип атрибута, который используется для проверки членства (Пример: dn) 48 memberof_attribute_type: "" 49 # Размер страницы для листинга пользователей 50 listing_page_size: 100
| Переменная | Что указать |
|---|---|
default_admin | Имя существующего пользователя каталога. Его sAMAccountName должен совпадать со значением default_admin, а сам пользователь — быть прямым участником разрешающей группы. Этот пользователь станет первым администратором системы. |
url | Адрес контроллера домена. Для LDAPS используйте ldaps:// и порт 636. |
bind_dn, <LDAP_BIND_PASSWORD> | DN и пароль служебной учётной записи для чтения каталога. |
permission.group | Группа каталога, разрешающая вход в Закрома.Хранение. |
user_search_dn, group_search_dn | Пути в дереве каталога, с которых начинается поиск пользователей и групп. |
| Фильтры и атрибуты | Значения зависят от схемы вашего каталога. Проверьте их работоспособность до установки. |
Пароль bind_password — секрет. Зашифруйте его так же, как пароль PostgreSQL в базовой инструкции: ANSIBLE_CONFIG=ansible.cfg ansible-vault encrypt_string --name bind_password, затем вставьте полученный !vault-блок вместо открытого значения.
Пользователи разрешающей группы, соответствующие фильтру, будут импортированы в Закрома.Хранение и смогут входить в Admin UI по учётным данным каталога.
Проверка подключения
Штатный preflight Закрома.Хранение выполняет общие проверки узлов и не валидирует конфигурацию LDAP/AD полностью. Поэтому до установки проверьте подключение к каталогу вручную с каждого узла группы zakroma-storage: DNS, TLS-цепочку, bind-подключение, наличие пользователя default_admin и разрешающей группы. Команда ldapsearch входит в пакет клиентских утилит OpenLDAP.
1getent ahostsv4 dc1.example.internal 2openssl s_client \ 3 -connect dc1.example.internal:636 \ 4 -servername dc1.example.internal \ 5 -verify_return_error </dev/null 6 7ldapsearch -x -LLL \ 8 -H ldaps://dc1.example.internal:636 \ 9 -D "CN=svc-zakroma,CN=Users,DC=example,DC=internal" \ 10 -W \ 11 -b "CN=Users,DC=example,DC=internal" \ 12 "(sAMAccountName=zakromaadmin)" distinguishedName sAMAccountName 13 14ldapsearch -x -LLL \ 15 -H ldaps://dc1.example.internal:636 \ 16 -D "CN=svc-zakroma,CN=Users,DC=example,DC=internal" \ 17 -W \ 18 -b "OU=Groups,DC=example,DC=internal" \ 19 "(cn=clouduser)" member
Ожидаемый результат: имя контроллера домена разрешается, TLS-сессия устанавливается без ошибок проверки сертификата, первый ldapsearch возвращает запись пользователя default_admin, второй — запись группы со списком участников, включающим DN этого пользователя.
Запуск установки
После проверки подключения продолжите установку по базовой инструкции: настройте сервис ZDS, распространите сертификаты и лицензию, выполните preflight-проверки, затем установите Закрома.Хранение и сервис ZDS:
1ANSIBLE_CONFIG=ansible.cfg ansible-playbook \ 2 -i inventories/base-cluster/hosts \ 3 playbooks/sample-play-zakroma-storage.yml
Проверка после установки
Выполните проверки готовности из базовой инструкции. Дополнительно проверьте авторизацию через каталог:
- Войдите в Admin UI пользователем
default_adminс паролем из каталога. - Убедитесь, что в списке пользователей отображаются только участники разрешающей группы.
Подробная проверка сервисов приведена в Проверке статуса сервисов.