Интеграция с другими системами аутентификации
Если вы используете систему аутентификации, которая не поддерживается Elasticsearch по умолчанию, вы можете создать пользовательский домен для взаимодействия с ней и аутентификации пользователей. Вы реализуете пользовательский домен как расширение безопасности SPI, загружаемое как обычный плагин Elasticsearch.
Реализация пользовательского домена
Образец кода, иллюстрирующий структуру и реализацию пользовательского домена, представлен в https://github.com/elastic/elasticsearch/tree/8.17/x-pack/qa/security-example-spi-extension. Вы можете использовать этот код в качестве отправной точки для создания собственного домена.
Для создания пользовательского домена необходимо:
- Расширить
org.elasticsearch.xpack.security.authc.Realmдля взаимодействия с вашей системой аутентификации и аутентификации пользователей. - Реализовать интерфейс
org.elasticsearch.xpack.security.authc.Realm.Factoryв классе, который будет использоваться для создания пользовательского домена. - Расширить
org.elasticsearch.xpack.security.authc.DefaultAuthenticationFailureHandlerдля обработки ошибок аутентификации при использовании вашего пользовательского домена.
Для упаковки пользовательского домена в виде плагина:
-
Реализуйте класс расширения для вашего домена, расширяющий
org.elasticsearch.xpack.core.security.SecurityExtension. Там вам нужно переопределить один или несколько из следующих методов:@Override public Map<String, Factory> getRealms() { ... }Метод
getRealmsиспользуется для предоставления карты имен типов дляFactory, которые будут использоваться для создания домена.@Override public AuthenticationFailureHandler getAuthenticationFailureHandler() { ... }Метод
getAuthenticationFailureHandlerиспользуется для предоставления необязательного пользовательскогоAuthenticationFailureHandler, который будет управлять тем, как Elasticsearch отвечает на определенные события отказа аутентификации.@Override public List<String> getSettingsFilter() { ... }Метод
Plugin#getSettingsFilterвозвращает список имен настроек, которые должны быть отфильтрованы из API настроек, так как они могут содержать конфиденциальные данные. Обратите внимание, что этот метод не является частью интерфейсаSecurityExtension, он доступен в качестве части основного класса плагина elasticsearch. - Создайте файл конфигурации сборки для плагина; мы рекомендуем Gradle.
- Создайте файл дескриптора
META-INF/services/org.elasticsearch.xpack.core.security.SecurityExtensionдля расширения, который содержит полное имя класса вашей реализацииorg.elasticsearch.xpack.core.security.SecurityExtension. - Объедините все в один ZIP-архив.
Использование пользовательского домена для аутентификации пользователей
Для использования пользовательского домена:
-
Установите расширение домена на каждом узле кластера. Вы запускаете
bin/elasticsearch-pluginс подкомандойinstallи указываете URL-адрес, указывающий на ZIP-архив, содержащий расширение. Например:bin/elasticsearch-plugin install file:///<path>/my-realm-1.0.zip
-
Добавьте конфигурацию домена соответствующего типа домена в
elasticsearch.ymlв пространстве именxpack.security.authc.realms. Вы должны определить свой домен в пространстве имен, которое соответствует типу, определенному расширением. Доступные для установки параметры зависят от настроек, предоставленных пользовательским доменом. По меньшей мере, вы должны явно установить атрибутorderдля управления порядком запроса домена во время аутентификации. Вы также должны убедиться, что каждая настроенная область имеет отдельную настройкуorder. В случае, если два или более домена имеют одинаковую настройкуorder, узел не сможет запуститься.При настройке доменов в
elasticsearch.ymlиспользуются только указанные вами домены для аутентификации. Если вы также хотите использовать доменыnativeилиfile, вы должны включить их в цепочку доменов. - Перезапустите Elasticsearch.
© 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/custom-realms.html