Перейти к основному содержимому
Версия: 5.2

Настройка LDAP и LDAPS

Условные обознначения

  • $OS_HOME - домашняя директория установки OpenSearch, обычно /app/opensearch
  • $OS_CONFIG - директория конфигурационных файлов OpenSearch, обычно ${OS_HOME}/config

Создание резервной копии

Все действия, описанные в статье, следует выполнять на том сервере кластера, где размещены сертификат и закрытый ключ пользователя admin (обычно это первый узел кластера). Конфигурация обычно расположена в директории $OS_CONFIG/opensearch-security/config/yml.

Обратите внимание!

Сделайте резервную копию текущей конфигурации следующей командой:

JAVA_HOME=$OS_HOME/jdk/ $OS_HOME/plugins/opensearch-security/tools/securityadmin.sh -h 127.0.0.1 \
-cacert $OS_CONFIG/ca-cert.pem \
-cert $OS_CONFIG/admin-cert.pem \
-key $OS_CONFIG/admin-key.pem \
--accept-red-cluster -nhnv -icl \
-backup $OS_CONFIG/opensearch-security/

Резервная копия будет сохранена в директории $OS_CONFIG/opensearch-security.

Подробнее про утилиту securityadmin можно прочитать в документации плагина Security.

Настройка LDAP

Active Directory и LDAP могут использоваться как для аутентификации, так и для авторизации (разделы конфигурации authc и authz соответственно). Аутентификация проверяет, ввел ли пользователь действительные учетные данные. Авторизация извлекает все серверные роли для пользователя. В большинстве случаев требуется настроить как аутентификацию, так и авторизацию. Вы также можете использовать только аутентификацию и сопоставить пользователей, полученных из LDAP, непосредственно с ролями системы. Все изменения производятся в конфигурационном файле config.yml.

В разделе authc и authz требуется заполнить параметры конфигурации ldap, перечисленные в таблице ниже.

Обратите внимание!

Не указывайте пароли в открытом виде в файлах конфигурации. Приведенные ниже примеры используют your_actual_password_here только для демонстрации. В реальной среде используйте один из безопасных методов.

1 метод

Способ 1: Настройка через systemd

  1. Для редактирования настроек сервиса выполните:
sudo systemctl edit opensearch.service
  1. Добавьте следующие строки, заменив your_actual_password_here на реальный пароль:
[Service]
Environment="LDAP_PASSWORD=your_actual_password_here"
  1. Перезагрузите daemon systemd и перезапустите opensearch.service:
sudo systemctl daemon-reload
sudo systemctl restart opensearch.service

Способ 2: Использование файла окружения

  1. Добавьте переменную в файл $OS_CONFIG/environment:
LDAP_PASSWORD=your_actual_password_here
  1. Перезапустите opensearch.service:
sudo systemctl restart opensearch.service

Общие шаги для обоих способов:

  1. В файле $OS_CONFIG/opensearch-security/config.yml замените строку с паролем password: "your_actual_password_here" на password: "${env.LDAP_PASSWORD}"

  2. Примените конфигурацию с помощью securityadmin.sh:

JAVA_HOME=$OS_HOME/jdk/ $OS_HOME/plugins/opensearch-security/tools/securityadmin.sh
-h <host_os>
-icl
-nhnv
-cacert $OS_CONFIG/ca-cert.pem
-cert $OS_CONFIG/admin-cert.pem
-key $OS_CONFIG/admin-key.pem
-t config
-f $OS_CONFIG/opensearch-security/config.yml

2 метод

  1. Экспортируйте переменную окружения:
export LDAP_PASSWORD=<your_actual_password_here>
  1. В файле config.yml используйте ссылку на переменную::
password: "${env.LDAP_PASSWORD}"

Применяя конфигурацию, используйте флаг --resolve-env-vars (или -rev). Этот флаг подставит актуальное значение переменной в файл конфигурации перед его отправкой в кластер. Это означает, что пароль будет виден в самом файле конфигурации внутри кластера.

Обратите внимание!

При создании резервной копии конфигурации безопасности (security) учтите, что пароль будет виден.

JAVA_HOME=$OS_HOME/jdk/ $OS_HOME/plugins/opensearch-security/tools/securityadmin.sh  
-h <host_os>
-icl
-nhnv
-cacert $OS_CONFIG/ca-cert.pem
-cert $OS_CONFIG/admin-cert.pem
-key $OS_CONFIG/admin-key.pem
-t config
-f $OS_CONFIG/opensearch-security/config.yml
--resolve-env-vars
  1. Удалите переменную из окружения:
unset LDAP_PASSWORD
ПараметрОписаниеЗначение по умолчанию
http_enabledВключает или отключает аутентификацию на уровне REST.true
transport_enabledВключает или отключает аутентификацию на транспортном уровне.true
hostsИспользуется для того, чтобы настроить имя хоста и порт серверов Active Directory.[]
bind_dnУчетная запись для подключения к Active Directory.
passwordПароль учетной записи для подключения к Active Directory. Если в пароле используются спецсимволы, он должен быть указан в одинарных кавычках.
userbaseФильтр, используемый в LDAP-запросе при выгрузке пользователей.
skip_usersСписок пользователей, которых следует пропустить при получении ролей. Поддерживаются подстановочные знаки и регулярные выражения.[]

Применение конфигурации

Пример заполненного config.yml
authc:
basic_internal_auth_domain:
description: Authenticate via HTTP Basic against internal users database
http_enabled: true
transport_enabled: true
order: 1
http_authenticator:
type: basic
challenge: true
authentication_backend:
type: intern
ldap:
description: Authenticate via LDAP or Active Directory
http_enabled: true
transport_enabled: true
order: 2
http_authenticator:
type: basic
challenge: false
authentication_backend:
type: ldap
config:
enable_ssl: false
enable_start_tls: false
enable_ssl_client_auth: false
verify_hostnames: false
hosts:
- 'primary.ldap.example.com:389'
- 'secondary.ldap.example.com:389'
bind_dn: admin@example.com
password: p@ssword
userbase: 'ou=people,dc=example,dc=com'
usersearch: '(sAMAccountName={0})'
username_attribute: sAMAccountName
skip_users:
- kibanaserver
- 'cn=Jane Doe,ou*people,o=TEST'
- /\S*/

Для применения новой конфигурации требуется запустить securityadmin.sh. Установите свои значения для OPENSEARCH_NODE и CLUSTER_NAME.

JAVA_HOME=$OS_HOME/jdk/ $OS_HOME/plugins/opensearch-security/tools/securityadmin.sh \
-cacert $OS_CONFIG/ca-cert.pem \
-cert $OS_CONFIG/admin-cert.pem \
-key $OS_CONFIG/admin-key.pem \
--accept-red-cluster --clustername <CLUSTER_NAME> \
-f $OS_CONFIG/opensearch-security/config.yml \
-t config -h <OPENSEARCH_NODE>
примечание

Будет обновлена конфигурация только типа config из файла config.yml.

Настройка LDAPS

предупреждение

При настройке отдельного корневого центра сертификации для LDAPS обязательно включите этот параметр во все экземпляры настроек LDAP, в том числе в параметры authc и authz.

Для настройки подключения к LDAP, используя SSL, требуется заполнить параметры конфигурации ldap, перечисленные в таблице ниже.

ПараметрОписаниеЗначение по умолчанию
enable_sslВключает или отключает SSL для LDAP (LDAPS).false
enable_start_tlsВключает или отключает STARTTLS. Невозможно использовать в сочетании с LDAPS.false
enable_ssl_client_authОпределяет, отправлять ли сертификат клиента на сервер LDAP.false
verify_hostnamesОпределяет, следует ли проверять имена хостов сертификата сервера.false

Проверка сертификатов

По умолчанию, плагин Security проверяет сертификат серверов LDAP на соответствие корневому центру сертификации, настроенному в opensearch.yml (plugins.security.ssl.transport.pemtrustedcas_filepath и plugins.security.ssl.transport.truststore_filepath).

Если ваш сервер использует сертификат, подписанный другим центром сертификации, импортируйте этот центр сертификации в свое хранилище доверенных сертификатов или добавьте его в файл доверенного центра сертификации на каждом узле:

  • pemtrustedcas_filepath - абсолютный путь к файлу PEM, содержащему корневые центры сертификации вашего сервера Active Directory
  • pemtrustedcas_content - содержимое корневого центра сертификации вашего сервера Active Directory, не используется вместе с параметром pemtrustedcas_filepath

Аутентификация клиента

Если вы используете аутентификацию клиента TLS, плагин безопасности отправляет сертификат PEM-узла, как настроено в opensearch.yml. Установите один из следующих параметров конфигурации:

  • pemkey_filepath - абсолютный путь к файлу, содержащему закрытый ключ вашего сертификата, используется в паре с параметрами pemkey_password и pemcert_filepath
  • pemkey_password - пароль вашего закрытого ключа, если таковой имеется
  • pemcert_filepath - абсолютный путь к сертификату клиента, используется в паре с параметрами pemkey_password и pemkey_filepath
  • pemkey_content - содержимое закрытого ключа вашего сертификата, используется в паре с параметрами pemkey_password и pemcert_content, не используется вместе с параметром pemkey_filepath
  • pemcert_content - содержимое сертификата клиента, используется в паре с параметрами pemkey_password и pemkey_content, не используется вместе с параметром pemkey_filepath

Включенные шифры и протоколы

Вы можете ограничить разрешенные шифры и протоколы TLS для соединения LDAP. Например, вы можете разрешить только надежные шифры и ограничить версии TLS самыми последними с помощью настройки следующих параметров:

  • enabled_ssl_ciphers - список с включенными шифрами TLS в формате Java
  • enabled_ssl_protocols - список со включенными протоколами TLS в формате Java

Применение конфигурации

Пример заполненного config.yml
authc:
basic_internal_auth_domain:
description: Authenticate via HTTP Basic against internal users database
http_enabled: true
transport_enabled: true
order: 1
http_authenticator:
type: basic
challenge: true
authentication_backend:
type: intern
ldap:
description: Authenticate via LDAP or Active Directory
http_enabled: true
transport_enabled: true
order: 2
http_authenticator:
type: basic
challenge: false
authentication_backend:
type: ldap
config:
enable_ssl: true
enable_start_tls: true
enable_ssl_client_auth: true
verify_hostnames: true
pemtrustedcas_filepath: /app/opensearch/config/trusted_cas.pem
pemkey_filepath: /app/opensearch/config/private.key.pem
pemkey_password: p@ssword
pemcert_filepath: /app/opensearch/config/certificate.pem
enabled_ssl_ciphers:
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
enabled_ssl_protocols:
- TLSv1.1
- TLSv1.2
hosts:
- 'primary.ldap.example.com:389'
- 'secondary.ldap.example.com:389'
bind_dn: admin@example.com
password: p@ssword
userbase: 'ou=people,dc=example,dc=com'
usersearch: '(sAMAccountName={0})'
username_attribute: sAMAccountName
skip_users:
- kibanaserver
- 'cn=Jane Doe,ou*people,o=TEST'
- /\S*/

Для применения новой конфигурации требуется запустить securityadmin.sh. Установите свои значения для OPENSEARCH_NODE и CLUSTER_NAME.

JAVA_HOME=$OS_HOME/jdk/ $OS_HOME/plugins/opensearch-security/tools/securityadmin.sh \
-cacert $OS_CONFIG/ca-cert.pem \
-cert $OS_CONFIG/admin-cert.pem \
-key $OS_CONFIG/admin-key.pem \
--accept-red-cluster --clustername <CLUSTER_NAME> \
-f $OS_CONFIG/opensearch-security/config.yml \
-t config -h <OPENSEARCH_NODE>
примечание

Будет обновлена конфигурация только типа config из файла config.yml.

Назначение ролей

Для назначения ролей пользователям требуется:

  1. Перейти в раздел Параметры системы - Настройки безопасности - Роли.
  2. Выберите существующую роль или создайте новую.
  3. Перейти во вкладку Назначенные пользователи - Управлять назначением ролей и добавить доменного пользователя или группу безопасности в параметр Backend роли.
  4. Сохранить новые параметры.