LDAP аутентификация#

CedrusData позволяет аутентифицировать пользователей с помощью LDAP на основе наличия их учетной записи на сервере LDAP и/или проверке их членства в определенной LDAP группе.

Примечание

Данный раздел содержит документацию об аутентификации пользователя в кластере CedrusData с помощью LDAP. Документация о получении из LDAP групп, в которых состоит пользователь, находится в Управление группами пользователей с помощью LDAP.

Важно

Для использования любого механизма аутентификации необходимо предварительно включить Шифрование клиентского трафика с помощью TLS и Аутентификация узлов в кластере (shared secret).

Конфигурация#

Конфигурацию необходимо задать на координаторе.

Задайте механизм аутентификации PASSWORD в etc/config.properties:

http-server.authentication.type=PASSWORD

Создайте файл etc/password-authenticator.properties, и задайте параметры конфигурации LDAP, как описано ниже. Конфигурация разделена на две части: подключение к LDAP и параметры аутентификации.

Параметры подключения к LDAP#

Название

Описание

password-authenticator.name

Тип аутентификатора. Должен иметь значение ldap.

ldap.url

URL-адрес сервера LDAP. URL должен начинаться с ldap:// (без TLS) или ldaps:// (с TLS). Если вы используете схему ldap://, необходимо так же добавить параметр ldap.allow-insecure=true.

ldap.allow-insecure

Разрешить подключение к LDAP без использования TLS. Значение по умолчанию: false.

ldap.ssl.keystore.path

Путь к файлу keystore в формате PEM или JKS. Обязателен при использовании TLS.

ldap.ssl.keystore.password

Пароль keystore. Обязателен при использовании TLS.

ldap.ssl.truststore.path

Путь к файлу truststore в формате PEM или JKS. Если не задан, будет использован файл ldap.ssl.keystore.path.

ldap.ssl.truststore.password

Пароль truststore.

ldap.ignore-referrals

Игнорировать перенаправление на другие сервера LDAP при выполнении запросов. Включение данного параметра гарантирует, что все запросы будут отправлены строго к серверу, указанному в ldap.url. Значение по умолчанию: false.

ldap.timeout.connect

Таймаут для установления соединения с сервером LDAP. По умолчанию таймаут отсутствует.

ldap.timeout.read

Таймаут чтения данных LDAP. По умолчанию таймаут отсутствует.

Параметры аутентификации#

CedrusData поддерживает два режима аутентификации в LDAP:

  1. Если параметр ldap.bind-dn не задан, CedrusData подключается к серверу LDAP от имени текущего пользователя, используя ldap.user-bind-pattern с подставленным именем текущего пользователя в качестве имени пользователя LDAP, и пароль текущего пользователя в качестве пароля LDAP. Если подключение произведено успешно, CedrusData может опционально проверить членство пользователя в группе LDAP с помощью параметров ldap.user-base-dn и ldap.group-auth-pattern.

  2. Если задан параметр ldap.bind-dn, CedrusData подключается к серверу LDAP от имени системного пользователя, используя ldap.bind-dn в качестве имени пользователя LDAP и ldap.bind-password в качестве пароля LDAP. далее CedrusData производит обязательную проверку, входит ли текущий пользователь CedrusData в конкретную группу LDAP, с помощью параметров ldap.user-base-dn и ldap.group-auth-pattern. После этого CedrusData проверяет совпадение пароля текущего пользователя с его паролем в LDAP.

Название

Описание

ldap.user-bind-pattern

Паттерн для формирования distinguished name пользователя. Паттерн должен содержать строку ${USER}, в которую будет подставлено имя пользователя CedrusData. Можно задать несколько паттернов, разделив их двоеточием. Параметр будет использован, если не задан параметр ldap.bind-dn.

ldap.group-auth-pattern

Паттерн для проверки членства пользователя в группе. Должен представлять собой запрос к объекту пользователя, в который добавлен фильтр на вхождение пользователя в определенную группу. Паттерн должен содержать строку ${USER}, в которую будет подставлено имя пользователя CedrusData. При работе с OpenLDAP необходимо включить memberOf overlay. Если данный параметр указан, вы так же должны задать ldap.user-base-dn. Данный параметр является обязательным, если задан ldap.bind-dn.

ldap.user-base-dn

Базовый distinguished name относительно которого будет происходить проверка членства пользователя в группе авторизации. Параметр будет использован, только если задан параметр ldap.group-auth-pattern. Например: dc=company,dc=com.

ldap.bind-dn

Distinguished name системного пользователя от имени которого будут происходить подключение к LDAP. Если данный параметр указан, аутентификация пользователя будет происходить на основе его членства в группе, заданной параметром ldap.group-auth-pattern. Обязательно должно быть указаны параметры ldap.bind-password, ldap.user-base-dn и ldap.group-auth-pattern.

ldap.bind-password

Пароль системного пользователя от имени которого будут происходить подключение к LDAP. Используется, только если задан параметр ldap.bind-dn.

ldap.cache-ttl

Как долго кэшировать результат аутентификации пользователя. Значение по умолчанию: 1h (один час).

Типичные значения параметра ldap.user-bind-pattern:

  • Active Directory: ${USER}@<domain_name_of_the_server>. Например: ${USER}@corp.example.com.

  • OpenLDAP: uid=${USER},<distinguished_name_of_the_user>. Например: uid=${USER},OU=America,DC=corp,DC=example,DC=com.

Типичные значения параметра ldap.group-auth-pattern:

  • Active Directory: (&(objectClass=<objectclass_of_user>)(sAMAccountName=${USER})(memberof=<dn_of_the_authorized_group>)). Например: (&(objectClass=person)(sAMAccountName=${USER})(memberof=CN=AuthorizedGroup,OU=Asia,DC=corp,DC=example,DC=com)).

  • OpenLDAP: (&(objectClass=<objectclass_of_user>)(uid=${USER})(memberof=<dn_of_the_authorized_group>)). Например: (&(objectClass=inetOrgPerson)(uid=${USER})(memberof=CN=AuthorizedGroup,OU=Asia,DC=corp,DC=example,DC=com)).

Типичные значения параметра ldap.bind-dn:

  • Active Directory: <user>@<domain_name_of_the_server>. Например: admin@corp.example.com.

  • OpenLDAP: uid=<user>,<distinguished_name_of_the_user>. Например: uid=admin,OU=America,DC=corp,DC=example,DC=com.

Конфигурация узла координатора Trino#

Доступ к координатору Trino должен осуществляться через HTTPS, настроенный, как описано в TLS и HTTPS.

Вам также необходимо внести изменения в файлы конфигурации Trino. Аутентификация LDAP настраивается на координаторе в два этапа. Первая часть - включить поддержку HTTPS и аутентификацию по паролю в файле координатора config.properties. Вторая часть - настроить LDAP в качестве плагина проверки подлинности пароля.

Примеры конфигурации#

Ниже приведены примеры параметров конфигурации, которые необходимо задать в файле etc/password-authenticator.properties на координаторе. Примеры используют Секреты в файлах конфигурации для передачи паролей из переменных окружения.

Простая аутентификация в OpenLDAP:

password-authenticator.name=ldap
ldap.url=ldaps://ldap-server:636
ldap.ssl.keystore.path=/path/to/keystore.pem
ldap.ssl.keystore.password=${ENV:LDAP_KEYSTORE_PASSWORD}
ldap.user-bind-pattern=uid=${USER},OU=America,DC=corp,DC=example,DC=com

Простая аутентификация в ActiveDirectory:

password-authenticator.name=ldap
ldap.url=ldaps://ldap-server:636
ldap.ssl.keystore.path=/path/to/keystore.pem
ldap.ssl.keystore.password=${ENV:LDAP_KEYSTORE_PASSWORD}
ldap.user-bind-pattern=uid=${USER}@corp.example.com

Аутентификация с помощью системного пользователя в OpenLDAP:

password-authenticator.name=ldap
ldap.url=ldaps://ldap-server:636
ldap.ssl.keystore.path=/path/to/keystore.pem
ldap.ssl.keystore.password=${ENV:LDAP_KEYSTORE_PASSWORD}
ldap.bind-dn=uid=admin,OU=America,DC=corp,DC=example,DC=com
ldap.bind-password=${ENV:LDAP_BIND_PASSWORD}
ldap.group-auth-pattern=(&(objectClass=inetOrgPerson)(uid=${USER})(memberof=CN=AuthorizedGroup,OU=Asia,DC=corp,DC=example,DC=com))
ldap.user-base-dn=OU=Asia,DC=corp,DC=example,DC=com

Аутентификация с помощью системного пользователя в Active Directory:

password-authenticator.name=ldap
ldap.url=ldaps://ldap-server:636
ldap.ssl.keystore.path=/path/to/keystore.pem
ldap.ssl.keystore.password=${ENV:LDAP_KEYSTORE_PASSWORD}
ldap.bind-dn=admin@corp.example.com
ldap.bind-password=${ENV:LDAP_BIND_PASSWORD}
ldap.group-auth-pattern=(&(objectClass=person)(sAMAccountName=${USER})(memberof=CN=AuthorizedGroup,OU=Asia,DC=corp,DC=example,DC=com))
ldap.user-base-dn=OU=Asia,DC=corp,DC=example,DC=com

Устранение неисправностей#

Проверка keystore#

Проверьте пароль для keystore и просмотрите его содержимое, используя Проверка keystore.

Логирование LDAP#

Вы можете включить логирование операций с LDAP, добавив следующую строку в файл etc/log.properties:

io.trino.plugin.password=DEBUG