Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Защитить Elastic Stack ›Авторизация пользователей

Настройка ролей и авторизации

Если вам нужно получать роли пользователей из системы, которая не поддерживается по умолчанию, или система авторизации, предоставляемая функциями безопасности Elasticsearch, не отвечает вашим потребностям, можно реализовать расширение безопасности, загружаемое через SPI, для настройки получения ролей и/или системы авторизации. Расширение безопасности, загружаемое через SPI, является частью обычного плагина Elasticsearch.

Реализация пользовательского поставщика ролей

Чтобы создать пользовательского поставщика ролей:

  1. Реализуйте интерфейс BiConsumer<Set<String>, ActionListener<Set<RoleDescriptor>>>. То есть, реализация состоит из одного метода, который принимает набор строк, представляющих имена ролей для разрешения, и ActionListener, которому в качестве ответа передаётся набор описателей разрешённых ролей.
  2. Реализация пользовательского поставщика ролей должна уделять особое внимание тому, чтобы не блокировать операции ввода-вывода. Реализация отвечает за обеспечение асинхронного поведения и безблокирующих вызовов, что упрощается тем, что для отправки ответа, когда роли были разрешены и ответ готов, предоставляется ActionListener.

Чтобы упаковать пользовательского поставщика ролей в виде плагина:

  1. Реализуйте класс-расширение для своего поставщика ролей, реализующий org.elasticsearch.xpack.core.security.SecurityExtension. Там вам нужно переопределить один или несколько из следующих методов:

    @Override
    public List<BiConsumer<Set<String>, ActionListener<Set<RoleDescriptor>>>>
    getRolesProviders(Settings settings, ResourceWatcherService resourceWatcherService) {
        ...
    }

    Метод getRolesProviders используется для предоставления списка пользовательских поставщиков ролей, которые будут использоваться для разрешения имён ролей, если имена ролей не удалось разрешить с помощью зарезервированных ролей или встроенных хранилищ ролей. Список должен возвращаться в порядке вызова пользовательских поставщиков ролей для разрешения ролей. Например, если getRolesProviders возвращает два экземпляра поставщиков ролей, и оба они могут разрешить роль A, то описание разрешённой роли, которое будет использоваться для роли A, будет тем, которое разрешил первый поставщик ролей в списке.

Реализация движка авторизации

Чтобы создать движок авторизации, вам необходимо:

  1. Реализовать интерфейс org.elasticsearch.xpack.core.security.authz.AuthorizationEngine в классе с желаемым поведением авторизации.
  2. Реализовать интерфейс org.elasticsearch.xpack.core.security.authz.Authorization.AuthorizationInfo в классе, содержащем необходимую информацию для авторизации запроса.

Чтобы упаковать движок авторизации в виде плагина:

  1. Реализуйте класс-расширение для своего движка авторизации, расширяющий org.elasticsearch.xpack.core.security.SecurityExtension. Там вам нужно переопределить следующий метод:

    @Override
    public AuthorizationEngine getAuthorizationEngine(Settings settings) {
        ...
    }

    Метод getAuthorizationEngine используется для предоставления реализации движка авторизации.

Пример кода, иллюстрирующий структуру и реализацию пользовательского движка авторизации, представлен в репозитории Elasticsearch на GitHub. Вы можете использовать этот код в качестве отправной точки для создания собственного движка авторизации.

Реализация плагина Elasticsearch

Для регистрации расширения безопасности для пользовательского поставщика ролей или движка авторизации также необходимо реализовать плагин Elasticsearch, который содержит расширение:

  1. Реализуйте класс плагина, расширяющий org.elasticsearch.plugins.Plugin
  2. Создайте файл конфигурации сборки для плагина; мы рекомендуем Gradle.
  3. Создайте файл plugin-descriptor.properties, как описано в Справке по авторам плагинов.
  4. Создайте файл описания META-INF/services/org.elasticsearch.xpack.core.security.SecurityExtension для расширения, который содержит полное имя класса вашей реализации org.elasticsearch.xpack.core.security.SecurityExtension
  5. Соберите всё в один zip-архив.

Использование расширения безопасности

Чтобы использовать расширение безопасности:

  1. Установите плагин с расширением на каждом узле кластера. Вы запускаете bin/elasticsearch-plugin с подкомандой install и указываете URL, указывающий на zip-архив, содержащий расширение. Например:

    bin/elasticsearch-plugin install file:///<path>/my-extension-plugin-1.0.zip
  2. Добавьте любые параметры конфигурации для реализаций в расширении в файл 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.

  3. Перезапустите 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

Spec-Zone.ru

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