Настройка ролей и авторизации
Если вам нужно получать роли пользователей из системы, которая не поддерживается по умолчанию, или система авторизации, предоставляемая функциями безопасности Elasticsearch, не отвечает вашим потребностям, можно реализовать расширение безопасности, загружаемое через SPI, для настройки получения ролей и/или системы авторизации. Расширение безопасности, загружаемое через SPI, является частью обычного плагина Elasticsearch.
Реализация пользовательского поставщика ролей
Чтобы создать пользовательского поставщика ролей:
- Реализуйте интерфейс
BiConsumer<Set<String>, ActionListener<Set<RoleDescriptor>>>. То есть, реализация состоит из одного метода, который принимает набор строк, представляющих имена ролей для разрешения, и ActionListener, которому в качестве ответа передаётся набор описателей разрешённых ролей. - Реализация пользовательского поставщика ролей должна уделять особое внимание тому, чтобы не блокировать операции ввода-вывода. Реализация отвечает за обеспечение асинхронного поведения и безблокирующих вызовов, что упрощается тем, что для отправки ответа, когда роли были разрешены и ответ готов, предоставляется
ActionListener.
Чтобы упаковать пользовательского поставщика ролей в виде плагина:
-
Реализуйте класс-расширение для своего поставщика ролей, реализующий
org.elasticsearch.xpack.core.security.SecurityExtension. Там вам нужно переопределить один или несколько из следующих методов:@Override public List<BiConsumer<Set<String>, ActionListener<Set<RoleDescriptor>>>> getRolesProviders(Settings settings, ResourceWatcherService resourceWatcherService) { ... }Метод
getRolesProvidersиспользуется для предоставления списка пользовательских поставщиков ролей, которые будут использоваться для разрешения имён ролей, если имена ролей не удалось разрешить с помощью зарезервированных ролей или встроенных хранилищ ролей. Список должен возвращаться в порядке вызова пользовательских поставщиков ролей для разрешения ролей. Например, еслиgetRolesProvidersвозвращает два экземпляра поставщиков ролей, и оба они могут разрешить рольA, то описание разрешённой роли, которое будет использоваться для ролиA, будет тем, которое разрешил первый поставщик ролей в списке.
Реализация движка авторизации
Чтобы создать движок авторизации, вам необходимо:
- Реализовать интерфейс
org.elasticsearch.xpack.core.security.authz.AuthorizationEngineв классе с желаемым поведением авторизации. - Реализовать интерфейс
org.elasticsearch.xpack.core.security.authz.Authorization.AuthorizationInfoв классе, содержащем необходимую информацию для авторизации запроса.
Чтобы упаковать движок авторизации в виде плагина:
-
Реализуйте класс-расширение для своего движка авторизации, расширяющий
org.elasticsearch.xpack.core.security.SecurityExtension. Там вам нужно переопределить следующий метод:@Override public AuthorizationEngine getAuthorizationEngine(Settings settings) { ... }Метод
getAuthorizationEngineиспользуется для предоставления реализации движка авторизации.
Пример кода, иллюстрирующий структуру и реализацию пользовательского движка авторизации, представлен в репозитории Elasticsearch на GitHub. Вы можете использовать этот код в качестве отправной точки для создания собственного движка авторизации.
Реализация плагина Elasticsearch
Для регистрации расширения безопасности для пользовательского поставщика ролей или движка авторизации также необходимо реализовать плагин Elasticsearch, который содержит расширение:
- Реализуйте класс плагина, расширяющий
org.elasticsearch.plugins.Plugin - Создайте файл конфигурации сборки для плагина; мы рекомендуем Gradle.
- Создайте файл
plugin-descriptor.properties, как описано в Справке по авторам плагинов. - Создайте файл описания
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-extension-plugin-1.0.zip
-
Добавьте любые параметры конфигурации для реализаций в расширении в файл
elasticsearch.yml. Параметры не имеют пространства имён, и вы можете получить доступ к любым параметрам при создании расширений, хотя рекомендуется использовать соглашение об именовании пространства имён для расширений, чтобы сделать вашу конфигурациюelasticsearch.ymlлёгкой для понимания.Например, если у вас есть пользовательский поставщик ролей, который разрешает роли, считывая блок в ведре S3 в AWS, то вы указали параметры в
elasticsearch.yml, такие как:custom_roles_provider.s3_roles_provider.bucket: roles custom_roles_provider.s3_roles_provider.region: us-east-1 custom_roles_provider.s3_roles_provider.secret_key: xxx custom_roles_provider.s3_roles_provider.access_key: xxx
Эти параметры передаются в качестве аргументов методам в интерфейсе
SecurityExtension. - Перезапустите 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-roles-authorization.html