Аутентификация пользователей LDAP
Вы можете настроить функции безопасности Elastic Stack для работы с сервером Lightweight Directory Access Protocol (LDAP) для аутентификации пользователей. См. Настройка области LDAP.
LDAP хранит пользователей и группы иерархически, подобно тому, как папки группируются в файловой системе. Иерархия каталога LDAP построена из контейнеров, таких как организационная единица (ou), организация (o) и компонент домена (dc).
Путь к записи — это отличительное имя (DN), которое однозначно идентифицирует пользователя или группу. Имена пользователей и групп обычно имеют такие атрибуты, как общее имя (cn) или уникальный идентификатор (uid). DN указывается как строка, например "cn=admin,dc=example,dc=com" (пробелы игнорируются).
Область ldap поддерживает два режима работы: поиск пользователей и режим со специфическими шаблонами для DN пользователей.
Сопоставление групп LDAP с ролями
Неотъемлемой частью процесса аутентификации в области является разрешение ролей, связанных с аутентифицированным пользователем. Роли определяют привилегии пользователя в кластере.
Поскольку с областью ldap пользователи управляются внешне на сервере LDAP, ожидается, что их роли также будут управляться там. Фактически, LDAP поддерживает понятие групп, которые часто представляют роли пользователей для различных систем в организации.
Область ldap позволяет сопоставлять пользователей LDAP с ролями через их группы LDAP или другую метаданные. Это сопоставление ролей можно настроить с помощью API добавления сопоставлений ролей API или с помощью файла, хранящегося на каждом узле. При аутентификации пользователя с помощью LDAP привилегии этого пользователя являются объединением всех привилегий, определенных ролями, к которым сопоставлен пользователь.
Настройка области LDAP
Для интеграции с LDAP необходимо настроить область ldap и сопоставить группы LDAP с ролями пользователей.
-
Определите, какой режим вы хотите использовать. Область
ldapподдерживает два режима работы: поиск пользователей и режим со специфическими шаблонами для DN пользователей.Поиск пользователей LDAP — это наиболее распространенный режим работы. В этом режиме используется конкретный пользователь с разрешением на поиск в каталоге LDAP для поиска DN аутентифицируемого пользователя на основе предоставленного имени пользователя и атрибута LDAP. После нахождения пользователь аутентифицируется путем попытки привязки к серверу LDAP с использованием найденного DN и предоставленного пароля.
Если ваша среда LDAP использует несколько специфических стандартных условий именования для пользователей, вы можете использовать шаблоны DN пользователей для настройки области. Преимущество этого метода заключается в том, что для поиска DN пользователя не требуется выполнение поиска. Однако для нахождения правильного DN пользователя может потребоваться несколько операций привязки.
-
Для настройки области
ldapс поиском пользователей:-
Добавьте конфигурацию области в
elasticsearch.ymlв пространстве именxpack.security.authc.realms.ldap. Как минимум, необходимо указатьurlиorderсервера LDAP и установитьuser_search.base_dnна DN контейнера, где производится поиск пользователей. См. Настройки области LDAP для получения всех доступных параметров для областиldap.Например, следующий фрагмент показывает область LDAP, настроенную с поиском пользователей:
xpack: security: authc: realms: ldap: ldap1: order: 0 url: "ldaps://ldap.example.com:636" bind_dn: "cn=ldapuser, ou=users, o=services, dc=example, dc=com" user_search: base_dn: "dc=example,dc=com" filter: "(cn={0})" group_search: base_dn: "dc=example,dc=com" files: role_mapping: "ES_PATH_CONF/role_mapping.yml" unmapped_groups_as_roles: falseПароль для пользователя
bind_dnдолжен быть настроен путем добавления соответствующего параметраsecure_bind_passwordв хранилище ключей Elasticsearch. Например, следующая команда добавляет пароль для указанной выше области:bin/elasticsearch-keystore add \ xpack.security.authc.realms.ldap.ldap1.secure_bind_password
При настройке областей в
elasticsearch.ymlиспользуются только указанные вами области для аутентификации. Если вы также хотите использовать областиnativeилиfile, необходимо включить их в цепочку областей.
-
-
Для настройки области
ldapс шаблонами DN пользователей:-
Добавьте конфигурацию области в
elasticsearch.ymlв пространстве именxpack.security.authc.realms.ldap. Как минимум, необходимо указатьurlиorderсервера LDAP и указать, по крайней мере, один шаблон с опциейuser_dn_templates. См. Настройки области LDAP для получения всех доступных параметров для областиldap.Например, следующий фрагмент показывает область LDAP, настроенную с шаблонами DN пользователей:
xpack: security: authc: realms: ldap: ldap1: order: 0 url: "ldaps://ldap.example.com:636" user_dn_templates: - "cn={0}, ou=users, o=marketing, dc=example, dc=com" - "cn={0}, ou=users, o=engineering, dc=example, dc=com" group_search: base_dn: "dc=example,dc=com" files: role_mapping: "/mnt/elasticsearch/group_to_role_mapping.yml" unmapped_groups_as_roles: falseПараметр
bind_dnне используется в режиме шаблонов. Все операции LDAP выполняются от имени аутентифицированного пользователя.
-
-
(Необязательно) Настройте взаимодействие функций безопасности с несколькими серверами LDAP.
Параметр
load_balance.typeможно использовать на уровне области. Функции безопасности Elasticsearch поддерживают режимы работы с отказоустойчивостью и балансировкой нагрузки. См. Настройки области LDAP. - (Необязательно) Для защиты паролей зашифруйте связь между Elasticsearch и сервером LDAP.
- Перезапустите Elasticsearch.
-
Сопоставьте группы LDAP с ролями.
Область
ldapпозволяет сопоставлять пользователей LDAP с ролями через их группы LDAP или другие метаданные. Это сопоставление ролей можно настроить с помощью API добавления сопоставлений ролей API или с помощью файла, хранящегося на каждом узле. При аутентификации пользователя с помощью LDAP привилегии этого пользователя являются объединением всех привилегий, определенных ролями, к которым сопоставлен пользователь.В определении сопоставления вы указываете группы с использованием их отличительных имен. Например, следующая конфигурация сопоставления сопоставляет группу LDAP
adminsс ролямиmonitoringиuser, а группуusersс рольюuser.Настройка через API сопоставления ролей:
resp = client.security.put_role_mapping( name="admins", roles=[ "monitoring", "user" ], rules={ "field": { "groups": "cn=admins,dc=example,dc=com" } }, enabled=True, ) print(resp)const response = await client.security.putRoleMapping({ name: "admins", roles: ["monitoring", "user"], rules: { field: { groups: "cn=admins,dc=example,dc=com", }, }, enabled: true, }); console.log(response);PUT /_security/role_mapping/admins { "roles" : [ "monitoring" , "user" ], "rules" : { "field" : { "groups" : "cn=admins,dc=example,dc=com" } }, "enabled": true }Отличительное имя (DN) группы LDAP
admins.resp = client.security.put_role_mapping( name="basic_users", roles=[ "user" ], rules={ "field": { "groups": "cn=users,dc=example,dc=com" } }, enabled=True, ) print(resp)const response = await client.security.putRoleMapping({ name: "basic_users", roles: ["user"], rules: { field: { groups: "cn=users,dc=example,dc=com", }, }, enabled: true, }); console.log(response);PUT /_security/role_mapping/basic_users { "roles" : [ "user" ], "rules" : { "field" : { "groups" : "cn=users,dc=example,dc=com" } }, "enabled": true }Отличительное имя (DN) группы LDAP
users.Или же, альтернативно, настройка через файл сопоставления ролей:
monitoring: - "cn=admins,dc=example,dc=com" user: - "cn=users,dc=example,dc=com" - "cn=admins,dc=example,dc=com"
Имя сопоставленной роли.
Отличительное имя (DN) группы LDAP
admins.Отличительное имя (DN) группы LDAP
users.Для получения дополнительной информации см. Сопоставление групп LDAP с ролями и Сопоставление пользователей и групп с ролями.
Область LDAP поддерживает области авторизации как альтернативу сопоставлению ролей.
-
(Необязательно) Настройте параметр
metadataв области LDAP для включения дополнительных полей в метаданные пользователя.По умолчанию в метаданные пользователя заполняются
ldap_dnиldap_groups. Для получения дополнительной информации см. Метаданные пользователя в областях LDAP.В приведенном ниже примере общее имя пользователя (
cn) включается как дополнительное поле в их метаданные.xpack: security: authc: realms: ldap: ldap1: order: 0 metadata: cn - Настройте SSL для шифрования связи между Elasticsearch и LDAP. См. Шифрование связи между Elasticsearch и LDAP.
Метаданные пользователя в домене LDAP
При аутентификации пользователя через домен LDAP в метаданные пользователя заполняются следующие свойства:
Поле | Описание |
| Уникальное имя пользователя. |
| Уникальное имя каждой из групп, разрешенных для пользователя (независимо от того, были ли эти группы сопоставлены с ролью). |
Эти метаданные возвращаются в API authenticate API и могут использоваться с шаблонными запросами в ролях.
Дополнительные поля могут быть включены в метаданные пользователя путем настройки параметра metadata в домене LDAP. Эти метаданные доступны для использования с API сопоставления ролей или в шаблонных запросах ролей.
Распределение нагрузки и резервирование
Параметр load_balance.type на уровне домена можно использовать для настройки взаимодействия функций безопасности с несколькими серверами LDAP. Функции безопасности поддерживают режимы резервирования и распределения нагрузки.
Шифрование связи между Elasticsearch и LDAP
Для защиты учетных данных пользователя, отправляемых для аутентификации в домене LDAP, настоятельно рекомендуется шифровать связь между Elasticsearch и сервером LDAP. Подключение через SSL/TLS гарантирует аутентификацию личности сервера LDAP перед передачей учетных данных пользователя Elasticsearch и шифрование содержимого соединения. Клиенты и узлы, подключающиеся через TLS к серверу LDAP, должны иметь сертификат сервера LDAP или корневой сертификат удостоверяющего центра сервера в своем хранилище ключей или хранилище доверия.
Дополнительную информацию см. в разделе Аутентификация пользователей LDAP.
-
Настройте параметры TLS домена на каждом узле, чтобы доверять сертификатам, подписанным тем же центром сертификации, что и сертификаты вашего сервера LDAP. Следующий пример демонстрирует, как доверять сертификату CA,
cacert.pem, находящемуся в каталоге конфигурации Elasticsearch пути расположения конфигурационных файлов:xpack: security: authc: realms: ldap: ldap1: order: 0 url: "ldaps://ldap.example.com:636" ssl: certificate_authorities: [ "cacert.pem" ]В примере выше сертификат CA должен быть закодирован в формате PEM.
Также поддерживаются файлы PKCS#12 и JKS — см. описание
ssl.truststore.pathв параметрах домена LDAP.Вы также можете указать отдельные сертификаты сервера вместо сертификата CA, но это рекомендуется только в случае одного сервера LDAP или если сертификаты самоподписанные.
- Установите параметр
urlв конфигурации домена, чтобы указать протокол LDAPS и номер безопасного порта. Например,url: ldaps://ldap.example.com:636. - Перезапустите Elasticsearch.
По умолчанию, когда вы настраиваете Elasticsearch для подключения к серверу LDAP с использованием SSL/TLS, он пытается проверить имя хоста или IP-адрес, указанный параметром url в конфигурации домена, с значениями в сертификате. Если значения в сертификате и конфигурации домена не совпадают, Elasticsearch не разрешает подключение к серверу LDAP. Это делается для защиты от атак «человек посередине». При необходимости можно отключить это поведение, установив свойство ssl.verification_mode в значение certificate.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/ldap-realm.html