Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Secure the Elastic Stack ›User authentication

Аутентификация пользователей 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 не предоставляется сервером Windows DNS, добавьте сопоставление для домена в локальный файл /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 сопоставления ролей:

    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) группы admins в Active Directory.

    resp = client.security.put_role_mapping(
        name="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,
    )
    print(resp)
    const response = await client.security.putRoleMapping({
      name: "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,
    });
    console.log(response);
    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/8.17/active-directory-realm.html

Spec-Zone.ru

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