Аутентификация пользователей Active Directory
Вы можете настроить функции безопасности Elastic Stack для взаимодействия с Active Directory, чтобы аутентифицировать пользователей. См. Настройка домена Active Directory.
Функции безопасности используют LDAP для взаимодействия с Active Directory, поэтому домены active_directory аналогичны ldap доменам. Как и LDAP-каталоги, Active Directory хранит пользователей и группы иерархически. Иерархия каталога построена из контейнеров, таких как организационная единица (ou), организация (o) и контроллер домена (dc).
Путь к записи — это отличительное имя (DN), которое однозначно идентифицирует пользователя или группу. Имена пользователей и групп обычно имеют атрибуты, такие как общее имя (cn) или уникальный идентификатор (uid). DN задаётся как строка, например, "cn=admin,dc=example,dc=com" (пробелы игнорируются).
Функции безопасности поддерживают только группы безопасности Active Directory. Вы не можете сопоставлять распределительные группы с ролями.
При использовании Active Directory для аутентификации ожидается, что имя пользователя, введённое пользователем, будет соответствовать sAMAccountName или userPrincipalName, а не общему имени.
Домен Active Directory аутентифицирует пользователей с помощью запроса связывания LDAP. После аутентификации пользователя домен ищет запись пользователя в Active Directory. После того, как пользователь найден, домен Active Directory извлекает членство пользователя в группах из атрибута tokenGroups в записи пользователя в Active Directory.
Настройка домена Active Directory
Для интеграции с Active Directory необходимо настроить домен active_directory и сопоставить пользователей и группы Active Directory с ролями в файле сопоставления ролей.
-
Добавьте конфигурацию домена типа
active_directoryвelasticsearch.ymlв пространстве имёнxpack.security.authc.realms.active_directory. Минимально необходимо указать адрес Active Directorydomain_name. Если вы настраиваете несколько доменов, также необходимо явно задать атрибутorderдля управления порядком их проверки при аутентификации.См. Настройки домена Active Directory для просмотра всех доступных параметров для домена
active_directory.Подключение к Active Directory завершится ошибкой, если имя домена не настроено в DNS. Если DNS не предоставляется сервером DNS Windows, добавьте сопоставление домена в локальный файл
/etc/hosts.Например, следующая конфигурация домена настраивает Elasticsearch для подключения к
ldaps://example.com:636для аутентификации пользователей через Active Directory:xpack: security: authc: realms: active_directory: my_ad: order: 0 domain_name: ad.example.com url: ldaps://ad.example.com:636Порядок доменов определяет порядок проверки настроенных доменов при аутентификации пользователя.
Если URL не указан, он устанавливается по умолчанию в
ldap:<domain_name>:389.При настройке доменов в
elasticsearch.ymlиспользуются только указанные вами домены для аутентификации. Если вы также хотите использовать доменыnativeилиfile, их необходимо включить в цепочку доменов. -
Если вы аутентифицируете пользователей по нескольким доменам в лесу, требуются дополнительные шаги. Существуют небольшие различия в конфигурации и способе аутентификации пользователей.
Установите параметр
domain_nameв имя корневого домена леса.Также необходимо установить параметр
url, поскольку аутентификация должна выполняться против глобального каталога, который использует другой порт и может не работать на каждом контроллере домена.Например, следующая конфигурация домена настраивает Elasticsearch для подключения к определённым контроллерам домена на порту глобального каталога с именем домена, установленным как корневой домен леса:
xpack: security: authc: realms: active_directory: my_ad: order: 0 domain_name: example.com url: ldaps://dc1.ad.example.com:3269, ldaps://dc2.ad.example.com:3269 load_balance: type: "round_robin"Параметр
domain_nameустанавливается в имя корневого домена в лесу.Значение
url, используемое в этом примере, содержит URL-адреса двух различных контроллеров домена, которые также являются серверами глобального каталога. Порт 3268 — это порт по умолчанию для нешифрованного взаимодействия с глобальным каталогом; порт 3269 — порт по умолчанию для SSL-соединений. Подключаемые серверы могут находиться в любом домене леса, если они также являются серверами глобального каталога.Для выбора поведения при подключении к серверу предоставляется параметр балансировки нагрузки.
В этой конфигурации пользователям потребуется использовать полное имя принципала пользователя (UPN) или имя входа более старой версии. UPN обычно представляет собой конкатенацию имени пользователя и
@<DOMAIN_NAME, например,johndoe@ad.example.com. Имя входа более старой версии представляет собой имя NetBIOS-домена, за которым следуют\и имя пользователя, например,AD\johndoe. Использование имени входа более старой версии требует подключения к обычным портам LDAP (389 или 636) для запроса контейнера конфигурации, чтобы получить имя домена из имени NetBIOS. -
(Необязательно) Настройте, как Elasticsearch должен взаимодействовать с несколькими серверами Active Directory.
Параметр
load_balance.typeможно использовать на уровне домена. Поддерживаются два режима работы: резервирование и балансировка нагрузки. См. Настройки домена Active Directory. - (Необязательно) Для защиты паролей зашифруйте связь между Elasticsearch и сервером Active Directory.
- Перезапустите Elasticsearch.
-
(Необязательно) Настройте пользователя для привязки.
Домен Active Directory аутентифицирует пользователей с помощью запроса привязки LDAP. По умолчанию все операции LDAP выполняются пользователем, от имени которого Elasticsearch выполняет аутентификацию. В некоторых случаях обычные пользователи могут не иметь доступа ко всем необходимым элементам в Active Directory, и требуется пользователь для привязки. Пользователь для привязки может быть настроен и используется для выполнения всех операций, кроме запроса привязки LDAP, который необходим для аутентификации предоставленных пользователем учетных данных.
Использование пользователя для привязки позволяет использовать функцию выполнения от имени других пользователей с доменом Active Directory и возможность поддержания набора пулов соединений с Active Directory. Эти пулы соединений уменьшают количество ресурсов, которые необходимо создавать и уничтожать при каждой аутентификации пользователя.
Следующий пример демонстрирует настройку пользователя для привязки с помощью параметров
bind_dnиsecure_bind_password:xpack: security: authc: realms: active_directory: my_ad: order: 0 domain_name: ad.example.com url: ldaps://ad.example.com:636 bind_dn: es_svc_user@ad.example.comЭто пользователь, от имени которого выполняются все запросы поиска Active Directory. Без настроенного пользователя для привязки все запросы выполняются от имени пользователя, аутентифицирующегося с Elasticsearch.
Пароль пользователя
bind_dnдолжен быть настроен путём добавления соответствующего параметраsecure_bind_passwordв хранилище ключей Elasticsearch. Например, следующая команда добавляет пароль для указанного выше домена:bin/elasticsearch-keystore add \ xpack.security.authc.realms.active_directory.my_ad.secure_bind_password
При настройке пользователя для привязки включение пула соединений включено по умолчанию. Пул соединений можно отключить, используя параметр
user_search.pool.enabled. -
Сопоставьте пользователей и группы Active Directory с ролями.
Неотъемлемой частью процесса аутентификации по домену является разрешение ролей, связанных с аутентифицированным пользователем. Роли определяют привилегии пользователя в кластере.
Так как с доменом
active_directoryпользователи управляются внешне на сервере Active Directory, ожидается, что их роли также будут управляться там. Фактически, Active Directory поддерживает понятие групп, которые часто представляют роли пользователей для различных систем в организации.Домен
active_directoryпозволяет сопоставлять пользователей Active Directory с ролями через их группы Active Directory или другую метаданные. Это сопоставление ролей можно настроить с помощью API сопоставления ролей или с помощью файла, хранящегося на каждом узле. Когда пользователь аутентифицируется по домену Active Directory, привилегии этого пользователя являются объединением всех привилегий, определённых ролями, к которым этот пользователь привязан.В определении сопоставления вы указываете группы, используя их уникальные имена. Например, следующая конфигурация сопоставления отображает группу Active Directory
adminsв ролиmonitoringиuser, отображает группуusersв ролиuserи отображает пользователяJohn Doeв ролиuser.Настройка через API сопоставления ролей:
PUT /_security/role_mapping/admins { "roles" : [ "monitoring" , "user" ], "rules" : { "field" : { "groups" : "cn=admins,dc=example,dc=com" } }, "enabled": true }Уникальное имя (DN) группы
adminsActive Directory.PUT /_security/role_mapping/basic_users { "roles" : [ "user" ], "rules" : { "any": [ { "field" : { "groups" : "cn=users,dc=example,dc=com" } }, { "field" : { "dn" : "cn=John Doe,cn=contractors,dc=example,dc=com" } } ] }, "enabled": true }Уникальное имя (DN) группы
usersActive Directory.Уникальное имя (DN) пользователя
John DoeActive Directory.Или, как альтернатива, настройка через файл сопоставления ролей:
monitoring: - "cn=admins,dc=example,dc=com" user: - "cn=users,dc=example,dc=com" - "cn=admins,dc=example,dc=com" - "cn=John Doe,cn=contractors,dc=example,dc=com"
Имя роли.
Уникальное имя (DN) группы
adminsActive Directory.Уникальное имя (DN) группы
usersActive Directory.Уникальное имя (DN) пользователя
John DoeActive Directory.Для получения дополнительной информации см. Сопоставление пользователей и групп с ролями.
-
(Необязательно) Настройте параметр
metadataв домене Active Directory для включения дополнительных свойств в метаданные пользователя.По умолчанию,
ldap_dnиldap_groupsзаполняются в метаданных пользователя. Для получения дополнительной информации см. Метаданные пользователей в доменах Active Directory.
Метаданные пользователя в домене Active Directory
При аутентификации пользователя через домен Active Directory следующие свойства заполняются в метаданных пользователя:
Поле | Описание |
| Уникальное имя пользователя. |
| Уникальные имена каждой из групп, которые были разрешены для пользователя (независимо от того, были ли эти группы сопоставлены с ролью). |
Эти метаданные возвращаются в API аутентификации и могут использоваться с шаблонизированными запросами в ролях.
Дополнительные метаданные могут быть извлечены из сервера Active Directory путем настройки параметра metadata в домене Active Directory.
Загрузка баланса и резервное копирование
Параметр load_balance.type может использоваться на уровне домена для настройки взаимодействия функций безопасности с несколькими серверами Active Directory. Поддерживаются два режима работы: резервное копирование и балансировка нагрузки.
Шифрование коммуникаций между Elasticsearch и Active Directory
Для защиты учетных данных пользователей, отправляемых для аутентификации, настоятельно рекомендуется шифровать коммуникации между Elasticsearch и сервером Active Directory. Подключение через SSL/TLS гарантирует, что идентичность сервера Active Directory аутентифицирована до того, как Elasticsearch передаёт учетные данные пользователя, а имена пользователей и пароли шифруются во время передачи.
Клиенты и узлы, подключающиеся через SSL/TLS к серверу Active Directory, должны иметь сертификат сервера Active Directory или сертификат корневого CA сервера, установленный в их хранилище ключей или доверенных сертификатов.
- Создайте конфигурацию домена для пространства имен
xpack.security.authc.realmsв файлеelasticsearch.yml. См. Настройка домена Active Directory. - Установите атрибут
urlв конфигурации домена, чтобы указать протокол LDAPS и номер безопасного порта. Например,url: ldaps://ad.example.com:636. -
Настройте каждый узел на доверие сертификатам, подписанным центром сертификации (CA), который подписал сертификаты вашего сервера Active Directory.
Следующий пример демонстрирует, как доверять сертификату CA (
cacert.pem), который находится в каталоге конфигурации:xpack: security: authc: realms: active_directory: ad_realm: order: 0 domain_name: ad.example.com url: ldaps://ad.example.com:636 ssl: certificate_authorities: [ "ES_PATH_CONF/cacert.pem" ]Сертификат CA должен быть закодирован в формате PEM.
Дополнительную информацию об этих настройках см. в разделе Настройки домена Active Directory.
- Перезапустите Elasticsearch.
По умолчанию, когда вы настраиваете Elasticsearch для подключения к Active Directory с помощью SSL/TLS, он пытается проверить имя хоста или IP-адрес, указанный атрибутом url в конфигурации домена, с значениями в сертификате. Если значения в сертификате и конфигурации домена не совпадают, Elasticsearch не разрешает подключение к серверу Active Directory. Это делается для защиты от атак «человек посередине». При необходимости вы можете отключить это поведение, установив свойство 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/7.17/active-directory-realm.html