Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Руководство [7.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/7.17/custom-roles-authorization.html

Spec-Zone.ru

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