Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Руководство [7.17] ›Защита Elastic Stack ›Аутентификация пользователей

Аутентификация пользователей 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 с ролями в файле сопоставления ролей.

  1. Добавьте конфигурацию домена типа active_directory в elasticsearch.yml в пространстве имён xpack.security.authc.realms.active_directory. Минимально необходимо указать адрес Active Directory domain_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, их необходимо включить в цепочку доменов.

  2. Если вы аутентифицируете пользователей по нескольким доменам в лесу, требуются дополнительные шаги. Существуют небольшие различия в конфигурации и способе аутентификации пользователей.

    Установите параметр 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.

  3. (Необязательно) Настройте, как Elasticsearch должен взаимодействовать с несколькими серверами Active Directory.

    Параметр load_balance.type можно использовать на уровне домена. Поддерживаются два режима работы: резервирование и балансировка нагрузки. См. Настройки домена Active Directory.

  4. (Необязательно) Для защиты паролей зашифруйте связь между Elasticsearch и сервером Active Directory.
  5. Перезапустите Elasticsearch.
  6. (Необязательно) Настройте пользователя для привязки.

    Домен 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.

  7. Сопоставьте пользователей и группы 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) группы admins Active 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) группы users Active Directory.

    Уникальное имя (DN) пользователя John Doe Active 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) группы admins Active Directory.

    Уникальное имя (DN) группы users Active Directory.

    Уникальное имя (DN) пользователя John Doe Active Directory.

    Для получения дополнительной информации см. Сопоставление пользователей и групп с ролями.

  8. (Необязательно) Настройте параметр metadata в домене Active Directory для включения дополнительных свойств в метаданные пользователя.

    По умолчанию, ldap_dn и ldap_groups заполняются в метаданных пользователя. Для получения дополнительной информации см. Метаданные пользователей в доменах Active Directory.

Метаданные пользователя в домене Active Directory

При аутентификации пользователя через домен Active Directory следующие свойства заполняются в метаданных пользователя:

Поле

Описание

ldap_dn

Уникальное имя пользователя.

ldap_groups

Уникальные имена каждой из групп, которые были разрешены для пользователя (независимо от того, были ли эти группы сопоставлены с ролью).

Эти метаданные возвращаются в 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 сервера, установленный в их хранилище ключей или доверенных сертификатов.

  1. Создайте конфигурацию домена для пространства имен xpack.security.authc.realms в файле elasticsearch.yml. См. Настройка домена Active Directory.
  2. Установите атрибут url в конфигурации домена, чтобы указать протокол LDAPS и номер безопасного порта. Например, url: ldaps://ad.example.com:636.
  3. Настройте каждый узел на доверие сертификатам, подписанным центром сертификации (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.

  4. Перезапустите 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API