Аутентификация через LDAP
Важно
Аутентификация через LDAP доступна только в серверной версии ТестОпс.
LDAP — сетевой протокол для доступа к централизованным службам каталогов (например, Active Directory, OpenLDAP). Если вы настроите интеграцию с LDAP-сервером для вашего инстанса ТестОпс, пользователи смогут использовать учетные записи LDAP для входа в ТестОпс.
Примечание
Чтобы настроить аутентификацию через LDAP, вам необходимы:
- доступ к конфигурационным файлам ТестОпс;
- сведения об LDAP-сервере: URL-адрес (включая протокол и порт), служебная учетная запись и схема каталога (базы поиска, фильтры, имена атрибутов);
- понимание особенностей вашего LDAP-сервера: протокол и параметры различаются между серверами, поэтому универсального набора значений не существует;
- опционально — утилита ldapsearch для проверки запросов.
Принцип работы аутентификации через LDAP
ТестОпс устанавливает соединение с LDAP-сервером, используя служебную учетную запись.
На странице входа в ТестОпс пользователь вводит свои учетные данные.
В зависимости от конфигурации ТестОпс может автоматически преобразовать имя пользователя в нижний регистр.
ТестОпс отправляет запрос к LDAP-серверу, чтобы определить, существует ли указанная учетная запись.
Вы можете настроить конфигурацию этого запроса, чтобы он использовал один из двух вариантов:
- фильтр поиска — ТестОпс, используя служебную учетную запись, ищет пользователя по заданному фильтру, получает DNУникальный полный адрес объекта в LDAP-каталоге пользователя и выполняет аутентификацию (bind) на LDAP-сервере;
- шаблоны DN — ТестОпс формирует DN пользователя по шаблону и пытается выполнить аутентификацию (bind) на LDAP-сервере.
При успешной аутентификации (bind) ТестОпс запрашивает у LDAP-сервера информацию о пользователе, включая уникальный идентификатор (UID) и группы, к которым пользователь принадлежит. После этого ТестОпс ищет внутреннюю учетную запись, соответствующую указанному UID. Если такой записи не существует, ТестОпс создает новую запись.
В зависимости от конфигурации ТестОпс может обновить информацию о пользователе данными с LDAP-сервера (имя, электронная почта, роли и аватар).
После успешной аутентификации в ТестОпс пользователь перенаправляется на целевую страницу или страницу Проекты.
Настройка аутентификации через LDAP
Чтобы настроить аутентификацию в ТестОпс через LDAP:
- Определите базу и фильтр поиска пользователей на LDAP-сервере.
- Измените конфигурационные файлы ТестОпс.
- Протестируйте аутентификацию через LDAP с помощью ldapsearch.
- Настройте маппинг ролей между LDAP-сервером и ТестОпс (при необходимости).
Важно
Настраивайте маппинг ролей только после того, как убедитесь, что пользователь может войти в инстанс ТестОпс через LDAP.
1. Определите базу и фильтр поиска пользователей на LDAP-сервере
Для входа через LDAP ТестОпс должен найти учетную запись пользователя в каталоге. Для этого необходимы:
- база поиска пользователей — ветка каталога, в которой находятся пользователи. База поиска обычно соответствует доменному имени сервера, к которому добавляется OUКонтейнер в структуре LDAP-каталога, который служит для логической группировки объектов (пользователей, компьютеров, групп) для сужения области поиска.
- фильтр поиска пользователей — условие отбора записи. ТестОпс использует для работы идентификатор пользователя, которому предоставляется доступ (как правило, атрибут uid).
Эти значения можно узнать у администратора вашего LDAP-сервера или с помощью утилиты ldapsearch. В зависимости от операционной системы ldapsearch может входить в состав пакетов ldap-utils или ldap-clients.
Чтобы узнать базу и фильтр поиска пользователей с помощью утилиты ldapsearch:
Выполните запрос:
shldapsearch -x -H <URL> -b <Base DN> -D <Bind DN> -w <Password> <Filter>где:
- URL — URL-адрес LDAP-сервера (например,
ldap://ldap.example.org:389); - Base DN — предполагаемая база поиска, полученная из доменного имени сервера (например, для
example.orgэтоdc=example,dc=org); - Bind DN — DNУникальный полный адрес объекта в LDAP-каталоге пользователя, от имени которого выполняется запрос (например,
cn=admin,dc=example,dc=org); - Password — пароль пользователя, от имени которого выполняется запрос;
- Filter — фильтр поиска. Например, чтобы найти пользователя с фамилией Иванов, можно использовать фильтр
(cn=*Иванов*).
Пример запроса:
shldapsearch -x -H "ldap://ldap.example.org:389" -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w "password" "(cn=*Иванов*)"После выполнения запроса вы должны получить подобный результат:
yamldn: cn=Иван Иванов,ou=People,dc=example,dc=org objectClass: inetOrgPerson objectClass: posixAccount objectClass: person cn: Иван Иванов givenName: Иван sn: Иванов mail: ivan.ivanov@email.com uid: ivan- URL — URL-адрес LDAP-сервера (например,
Определите базу поиска пользователей из результата запроса. Обычно это часть строки
dn, соответствующая ветке с пользователями (например,ou=People,dc=example,dc=org).Сформируйте фильтр поиска пользователей из результата запроса. Вам потребуются:
- атрибут со значением, который есть у всех учетных записей пользователей (например,
objectClassсо значениемperson); - атрибут, в котором хранится идентификатор пользователя (например,
uid).
Пример фильтра:
(&(objectClass=person)(uid={0})).- атрибут со значением, который есть у всех учетных записей пользователей (например,
Сохраните полученные базу и фильтр поиска пользователей, они понадобятся для настройки интеграции с LDAP-сервером в конфигурационных файлах ТестОпс.
2. Измените конфигурационные файлы ТестОпс
Измените конфигурационные файлы ТестОпс в зависимости от вашего типа развертывания:
Измените параметры в файле values.yaml:
общие параметры:
auth.primary— введите ldap, чтобы установить LDAP в качестве основного метода аутентификации;auth.defaultRole— введите глобальную роль ТестОпс по умолчанию, которая будет назначена новым пользователям из LDAP-сервера. Рекомендуется указать ROLE_GUEST — глобальную роль «Гость», чтобы контролировать использование лицензионных мест.Примечание
Если значение параметра
auth.defaultRoleне указано, по умолчанию используется ROLE_GUEST.
подключение к LDAP-серверу:
auth.ldap.enabled— введите true, чтобы включить аутентификацию через LDAP;auth.ldap.url— введите URL-адрес LDAP-сервера;auth.ldap.auth.user— введите DN служебной учетной записи;auth.ldap.auth.pass— введите пароль служебной учетной записи.
названия атрибутов LDAP:
auth.ldap.uidAttribute— введите название атрибута, в котором хранится UID пользователя;auth.ldap.passwordAttribute— введите название атрибута, в котором хранится пароль пользователя;auth.ldap.usernamesToLowercase— введите true, чтобы перед поиском преобразовывать имя пользователя в нижний регистр, или false, чтобы оставить его без изменений.
параметры поиска пользователей:
auth.ldap.user.searchBase— введите базу поиска пользователей, которую вы сохранили на шаге 1;auth.ldap.user.searchFilter— введите фильтр поиска пользователей, который вы сохранили на шаге 1;auth.ldap.user.dnPatterns— введите шаблоны DN, разделенные запятыми.Важно
Искать пользователей в каталоге можно с помощью одного из двух параметров:
auth.ldap.user.searchFilterилиauth.ldap.user.dnPatterns.Эти параметры взаимоисключают друг друга, поэтому не указывайте их одновременно.
3. Тестирование аутентификации через LDAP с помощью ldapsearch
Перед перезапуском ТестОпс проверьте новые параметры вручную с помощью утилиты ldapsearch.
С помощью утилиты найдите пользователя на LDAP-сервере по его UID:
sh
ldapsearch \
-H 'ldap://ldap.example.com:389' \
-D 'cn=admin,dc=example,dc=com' \
-w 'SecretPa$$w0rd' \
-b 'dc=example,dc=com' \
'(&(objectClass=person)(uid=ivan))'Аргументы соответствуют следующим параметрам конфигурации:
- -H —
auth.ldap.url; - -D —
auth.ldap.auth.user; - -w —
auth.ldap.auth.pass; - -b —
auth.ldap.user.searchBase; - запрос —
auth.ldap.user.searchFilterилиauth.ldap.user.dnPatternsс именем пользователя вместо{0}.
4. Настройте маппинг ролей между LDAP-сервером и ТестОпс
При необходимости вы можете настроить маппинг ролей между LDAP-сервером и ТестОпс, который укажет, какие глобальные роли ТестОпс должны получить группы пользователей из LDAP-сервера.
Маппинг ролей позволяет контролировать использование мест в основной лицензии ТестОпс, предотвращать несанкционированный доступ к проектам ТестОпс и централизованно управлять правами пользователей из LDAP-сервера.
4.1. Определите базу и фильтр поиска групп на LDAP-сервере
Для маппинга ролей ТестОпс должен находить записи групп в каталоге и сопоставлять их с пользователем. Для этого необходимы:
- база поиска групп — ветка каталога, в которой находятся группы. База поиска обычно соответствует доменному имени сервера, к которому добавляется OU для сужения области поиска до ветки с группами.
- фильтр поиска групп — правило, по которому ТестОпс определяет, входит ли пользователь в группу.
Эти значения можно узнать у администратора вашего LDAP-сервера или с помощью утилиты ldapsearch.
Чтобы узнать базу и фильтр поиска групп с помощью утилиты ldapsearch:
Выполните запрос:
shldapsearch -x -H <URL> -b <Base DN> -D <Bind DN> -w <Password> <Filter>где:
- URL — URL-адрес LDAP-сервера (например,
ldap://ldap.example.org:389); - Base DN — предполагаемая база поиска, полученная из доменного имени сервера (например, для
example.orgэтоdc=example,dc=org); - Bind DN — DN пользователя, от имени которого выполняется запрос (например,
cn=admin,dc=example,dc=org); - Password — пароль пользователя, от имени которого выполняется запрос;
- Filter — фильтр поиска. Например, чтобы найти группу admins, можно использовать фильтр
(cn=admins).
Пример запроса:
shldapsearch -x -H "ldap://ldap.example.org:389" -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w "password" "(cn=admins)"После выполнения запроса вы должны получить подобный результат:
yamldn: cn=admins,ou=Groups,dc=example,dc=org objectClass: posixGroup objectClass: top cn: admins memberUid: admin memberUid: ivan- URL — URL-адрес LDAP-сервера (например,
Определите полную базу поиска групп из результата запроса. Обычно это часть строки
dn, соответствующая ветке с группами (например,ou=Groups,dc=example,dc=org).Сформируйте фильтр поиска групп из результата запроса. Вам потребуется атрибут, в котором хранятся идентификаторы пользователей, входящих в группу (например,
memberUid).Пример фильтра:
memberUid={1}.
Сохраните полученные базу и фильтр поиска групп, они понадобятся для настройки маппинга ролей в конфигурационных файлах ТестОпс.
4.2. Настройте маппинг ролей в конфигурационных файлах ТестОпс
Важно
Перед включением маппинга ролей убедитесь, что в конфигурации для всех нужных LDAP-групп указаны верные глобальные роли ТестОпс.
Измените параметры маппинга ролей и поиска групп в конфигурационных файлах ТестОпс в зависимости от вашего типа развертывания:
Измените параметры в файле values.yaml:
auth.ldap.group.roleAttribute— введите название атрибута, в котором хранится имя группы;auth.ldap.syncRoles— введите true, чтобы включить маппинг ролей между LDAP и ТестОпс;auth.ldap.userGroupName— введите названия LDAP-групп, участники которых получат глобальную роль «Пользователь» в ТестОпс;auth.ldap.adminGroupName— введите названия LDAP-групп, участники которых получат глобальную роль «Администратор» в ТестОпс;auth.ldap.group.searchBase— введите базу поиска групп, которую вы сохранили на шаге 4.1;auth.ldap.group.searchFilter— введите фильтр поиска групп, который вы сохранили на шаге 4.1.
Важно
Синхронизация ролей будет работать правильно только в случае, если параметр auth.defaultRole из шага 2 имеет значение ROLE_GUEST.
Примеры настроенных конфигурационных файлов ТестОпс для LDAP
yaml
auth:
primary: ldap
defaultRole: ROLE_GUEST
ldap:
enabled: true
auth:
user: user
pass: SecretPaSSw0rd
referral: follow
url: ldap://ldap.example.com:389
usernamesToLowercase: false
passwordAttribute: userPassword
user:
dnPatterns: ""
searchBase: ou=People,dc=example,dc=org
searchFilter: (&(objectClass=person)(uid={0}))
syncRoles: true
uidAttribute: uid
group:
searchBase: ou=Groups,dc=example,dc=org
searchFilter: memberUid={1}
roleAttribute: cn
userGroupName: testops_users
adminGroupName: testops_adminsИспользование LDAP вместе с локальной аутентификацией ТестОпс
Если LDAP указан как основной способ аутентификации в ТестОпс, при необходимости вы также можете использовать локальную аутентификацию:
- Страница https://<домен_инстанса_ТестОпс>/login использует метод аутентификации, указанный в конфигурационных файлах ТестОпс в атрибуте
primaryилиALLURE_LOGIN_PRIMARY. Для данной инструкции это LDAP. - Страница https://<домен_инстанса_ТестОпс>/login/system использует локальную аутентификацию ТестОпс.
Чтобы войти в ТестОпс, например, с глобальной ролью «Администратор», перейдите на https://<домен_инстанса_ТестОпс>/login/system и используйте учетные данные локального пользователя.
Устранение неполадок
Если вы получаете ошибку «Request failed with status code 401» при попытке входа с использованием LDAP:
- Убедитесь, что URL-адрес LDAP-сервера, указанный в файле конфигурации, правильный.
- Убедитесь, что вы используете действительный SSL-сертификат.
- Проверьте, что учетные данные, указанные в файле конфигурации, правильные и не содержат пробела в конце (например, для Docker Compose это
LDAP_LOGIN_SAиLDAP_LOGIN_SA_PASS).

