Управление группами пользователей с помощью LDAP#
Примечание
Данный раздел содержит документацию о получении из LDAP групп, в которых состоит пользователь. Документация об аутентификации пользователя в кластере с помощью LDAP находится в LDAP аутентификация.
CedrusData позволяет сопоставлять пользователей с группами для более удобного управления доступом. Например, вы можете установить правила доступа для группы, которые будут автоматически применены ко всем входящим в группу пользователям.
Примечание
Сопоставление пользователя с группами происходит на основе имени пользователя, полученного после Сопоставление пользователей.
CedrusData позволяет сопоставлять пользователей с группами на основе информации из LDAP.
Например, пользователь CedrusData bob
может иметь в LDAP запись uid=bob,ou=sales,dc=company,dc=com
,
которая принадлежит группе cn=management,ou=sales,dc=company,dc=com
.
CedrusData позволяет извлечь информацию о данной группе из LDAP так,
что пользователь CedrusData bob
будет сопоставлен с группой management
.
Алгоритм поиска групп#
CedrusData подключается к LDAP и проходит аутентификацию на основе имени и пароля системного пользователя (bind user), определенных в параметрах конфигурации
cedrusdata.group-provider.ldap.bind.user
иcedrusdata.group-provider.ldap.bind.password
.Происходит поиск записи текущего пользователя CedrusData в LDAP. Для этого CedrusData подставляет имя пользователя в паттерн
cedrusdata.group-provider.ldap.user.search-filter
. Типичные значение паттерна зависят от конкретного LDAP сервера и приведены ниже. Если пользователь не найден, будет возвращен пустой список групп.Если определен параметр конфигурации
cedrusdata.group-provider.ldap.user.member-of-attribute
, CedrusData попытается извлечь список групп пользователя из соответствующего атрибута его записи в LDAP. Если CedrusData удалось извлечь список групп из атрибута пользователя, они будут использованы для формирования финального результата, как описано в пункте 5.Если параметр конфигурации
cedrusdata.group-provider.ldap.user.member-of-attribute
не установлен или запись LDAP пользователя не содержит соответствующий атрибут, CedrusData предпримет попытку поиска групп пользователя с помощью отдельного запроса. Для этого CedrusData сформирует запрос на поиск групп на основе параметра конфигурацииcedrusdata.group-provider.ldap.group.search-filter
. К запросу будет добавлен дополнительный фильтр по атрибутуcedrusdata.group-provider.ldap.group.member-attribute
. Значением фильтра выступает DN (distinguished name) текущего пользователя. Таким образом будет получен список групп, в которых состоит текущий пользователь. Существует возможность рекурсивного получения списка родительских групп на один или несколько уровней вверх с помощью параметра конфигурацииcedrusdata.group-provider.ldap.group.hierarchy-levels
. Полученные группы будут использованы для формирования финального результата, как описано в пункте 5.Для всех полученных групп пользователя будет извлечен атрибут
cedrusdata.group-provider.ldap.group.name-attribute
, определяющий имя группы. Таким образом будет сформирован финальный список имен групп пользователя.
Конфигурация#
Создайте файл etc/group-provider.properties
на координаторе и задайте
в нем следующие обязательные параметры:
group-provider.name=cedrusdata_ldap
ldap.url=<URL сервера LDAP>
cedrusdata.group-provider.ldap.bind.user=<distinguished name системного пользователя>
cedrusdata.group-provider.ldap.bind.password=<пароль системного пользователя>
Сконфигурируйте дополнительные параметры по мере необходимости. Вы можете использовать Секреты в файлах конфигурации, чтобы не хранить чувствительную информацию в файле конфигурации.
Пример конфигурации для OpenLDAP с подключением по SSL:
group-provider.name=cedrusdata_ldap
ldap.url=ldaps://host:port
ldap.ssl.keystore.path=/path/to/keystore
ldap.ssl.keystore.password=${ENV:LDAP_KEYSTORE_PASSWORD}
ldap.ssl.truststore.path=/path/to/truststore
ldap.ssl.truststore.password=${ENV:LDAP_TRUSTSTORE_PASSWORD}
cedrusdata.group-provider.ldap.bind.user=uid=admin,ou=it,dc=company,dc=com
cedrusdata.group-provider.ldap.bind.password=${ENV:LDAP_BIND_PASSWORD}
cedrusdata.group-provider.ldap.search-base=dc=company,dc=com
cedrusdata.group-provider.ldap.user.search-filter=(&(objectClass=inetOrgPerson)(uid={0}))
cedrusdata.group-provider.ldap.group.search-filter=(objectClass=groupOfNames)
Пример конфигурации для Active Directory с подключением без SSL и
использованием memberOf
атрибута пользователя для получения списка
групп:
group-provider.name=cedrusdata_ldap
ldap.url=ldap://host:port
ldap.allow-insecure=true
cedrusdata.group-provider.ldap.bind.user=admin@company.com
cedrusdata.group-provider.ldap.bind.password=${ENV:LDAP_BIND_PASSWORD}
cedrusdata.group-provider.ldap.search-base=dc=company,dc=com
cedrusdata.group-provider.ldap.user.member-of-attribute=memberOf
Название |
Описание |
Значение по умолчанию |
---|---|---|
|
URL для подключения к серверу LDAP. Должен начинаться с |
|
|
Позволять ли подключение к серверу LDAP без использования SSL. Запрещено по умолчанию. |
|
|
||
|
Пароль keystore. |
|
|
||
|
Пароль truststore. |
|
|
Запретить запуск запросов на других LDAP серверах, предоставленных в качестве referrals. По умолчанию использование referrals разрешено. |
|
|
Таймаут для установления соединения с сервером LDAP. По умолчанию не ограничен. |
|
|
Таймаут на чтение данных с сервера LDAP. По умолчанию не ограничен. |
|
|
Distinguished name системного пользователя для подключения к серверу LDAP. |
|
|
Пароль системного пользователя для подключения к серверу LDAP. |
|
|
Базовый distinguished name, используемый для поиска. Используется для поиска пользователей, если не установлен параметр
|
|
|
Базовый distinguished name, используемый для поиска пользователей. Если не выставлен, будет использовано значение
|
|
|
Базовый distinguished name, используемый для поиска групп. Если не выставлен, будет использовано значение
|
|
|
Фильтра для поиска пользователей. Должен содержать строковую последовательность |
|
|
Фильтр для получения списка групп. Типичное значение для Active Directory: |
|
|
Атрибут пользователя, который содержит список его групп. Если не указан, поиск групп пользователя будет произведен отдельным запросом к LDAP.
Типичное значение для Active Directory и LDAP: |
|
|
Атрибут группы, который содержит участников группы (пользователей или другие группы). |
|
|
Атрибут группы, который содержит название группы. |
|
|
На сколько уровней вверх осуществлять поиск групп пользователя. Если установлено значение |
|
|
Как долго кэшировать список групп пользователя. Нулевое значение (например, |
|
|
Максимальный размер кэша групп пользователей. Нулевое значение отключает кэш. |
|
Устранение неисправностей#
Для устранения проблем добавьте следующую запись в файл etc/log.properties
и перезагрузите узел:
io.trino.plugin.cedrusdata.ldap=DEBUG
При попытке аутентификации пользователя в логе появятся записи, которые содержат фразу io.trino.plugin.cedrusdata.ldap
.
Данные записи будут содержать запросы, отправленные к LDAP серверу.
Попросите администраторов вашего LDAP-сервера подтвердить, что запросы сформированы корректно, и что они возвращают ожидаемую информацию.
Исправьте конфигурацию CedrusData соответствующим образом при необходимости.