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

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

  1. Определите, какой режим вы хотите использовать. Область ldap поддерживает два режима работы: поиск пользователей и режим со специфическими шаблонами для DN пользователей.

    Поиск пользователей LDAP — это наиболее распространенный режим работы. В этом режиме используется конкретный пользователь с разрешением на поиск в каталоге LDAP для поиска DN аутентифицируемого пользователя на основе предоставленного имени пользователя и атрибута LDAP. После нахождения пользователь аутентифицируется путем попытки привязки к серверу LDAP с использованием найденного DN и предоставленного пароля.

    Если ваша среда LDAP использует несколько специфических стандартных условий именования для пользователей, вы можете использовать шаблоны DN пользователей для настройки области. Преимущество этого метода заключается в том, что для поиска DN пользователя не требуется выполнение поиска. Однако для нахождения правильного DN пользователя может потребоваться несколько операций привязки.

  2. Для настройки области ldap с поиском пользователей:

    1. Добавьте конфигурацию области в 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, необходимо включить их в цепочку областей.

  3. Для настройки области ldap с шаблонами DN пользователей:

    1. Добавьте конфигурацию области в 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 выполняются от имени аутентифицированного пользователя.

  4. (Необязательно) Настройте взаимодействие функций безопасности с несколькими серверами LDAP.

    Параметр load_balance.type можно использовать на уровне области. Функции безопасности Elasticsearch поддерживают режимы работы с отказоустойчивостью и балансировкой нагрузки. См. Настройки области LDAP.

  5. (Необязательно) Для защиты паролей зашифруйте связь между Elasticsearch и сервером LDAP.
  6. Перезапустите Elasticsearch.
  7. Сопоставьте группы 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 поддерживает области авторизации как альтернативу сопоставлению ролей.

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

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

    В приведенном ниже примере общее имя пользователя (cn) включается как дополнительное поле в их метаданные.

    xpack:
      security:
        authc:
          realms:
            ldap:
              ldap1:
                order: 0
                metadata: cn
  9. Настройте SSL для шифрования связи между Elasticsearch и LDAP. См. Шифрование связи между Elasticsearch и LDAP.

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

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

Поле

Описание

ldap_dn

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

ldap_groups

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

Эти метаданные возвращаются в API authenticate API и могут использоваться с шаблонными запросами в ролях.

Дополнительные поля могут быть включены в метаданные пользователя путем настройки параметра metadata в домене LDAP. Эти метаданные доступны для использования с API сопоставления ролей или в шаблонных запросах ролей.

Распределение нагрузки и резервирование

Параметр load_balance.type на уровне домена можно использовать для настройки взаимодействия функций безопасности с несколькими серверами LDAP. Функции безопасности поддерживают режимы резервирования и распределения нагрузки.

См. Распределение нагрузки и резервирование.

Шифрование связи между Elasticsearch и LDAP

Для защиты учетных данных пользователя, отправляемых для аутентификации в домене LDAP, настоятельно рекомендуется шифровать связь между Elasticsearch и сервером LDAP. Подключение через SSL/TLS гарантирует аутентификацию личности сервера LDAP перед передачей учетных данных пользователя Elasticsearch и шифрование содержимого соединения. Клиенты и узлы, подключающиеся через TLS к серверу LDAP, должны иметь сертификат сервера LDAP или корневой сертификат удостоверяющего центра сервера в своем хранилище ключей или хранилище доверия.

Дополнительную информацию см. в разделе Аутентификация пользователей LDAP.

  1. Настройте параметры 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 или если сертификаты самоподписанные.

  2. Установите параметр url в конфигурации домена, чтобы указать протокол LDAPS и номер безопасного порта. Например, url: ldaps://ldap.example.com:636.
  3. Перезапустите 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

Spec-Zone.ru

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