GrantForge

    Поисковые движки

    Elasticsearch

    Установить и настроить сервисный плагин Elasticsearch, подключиться к одному или нескольким узлам, входить по паролю, API-ключу или клиентскому TLS-сертификату, искать индексы, потоки данных, поля и кластер и управлять тем, кто что может читать, писать и администрировать, собственными привилегиями Elasticsearch вплоть до полей и документов.

    Плагин Elasticsearch ищет индексы, потоки данных, поля и кластер и управляет политиками доступа в терминах самого Elasticsearch: чтение полей, индексирование и удаление документов, создание, удаление и администрирование индексов, а также операции самого кластера, с фильтрами строк индексов. Идентификатор плагина и тип сервиса — оба elasticsearch. Сервисный плагин работает на сервере GrantForge; агент Elasticsearch, сервис рядом с кластером, применяет политики собственными ролями Elasticsearch, безопасностью на уровне полей и безопасностью на уровне документов.

    Интеграционные тесты Testcontainers в репозитории покрывают Elasticsearch 8.19, 9.3, 9.4 и 9.5 с включённой безопасностью; это не означает сертификацию всех остальных версий.

    Установка

    Дистрибутив включает плагин в plugins/elasticsearch. Убедитесь, что elasticsearch включён в Управление платформой → Плагины; после обновления каталога плагинов пересканируйте его. Плагин обращается к узлам через низкоуровневый REST-клиент Elasticsearch в собственном загрузчике классов.

    Добавление сервиса данных

    1. Откройте Права на данные → Сервисы данных, добавьте сервис и выберите Elasticsearch (elasticsearch).
    2. Укажите узел в виде URL или несколько узлов.
    3. Выберите, как входит пользователь для поиска, введите его учётные данные, проверьте подключение и сохраните сервис. Проверка входит и описывает кластер: версию Elasticsearch и имя кластера, лицензию и то, есть ли в ней безопасность на уровне документов и полей, пользователя, под которым выполнен вход, и число индексов и потоков данных. Кластер без безопасности проверку не проходит, поскольку агент применяет политики ролями Elasticsearch.

    Пользователь для поиска позволяет GrantForge находить ресурсы; он отделён от пользователей, которые читают и пишут данные. Успешная проверка подключения не означает, что доступ уже подчиняется политикам.

    Параметр Назначение
    elasticsearch.hosts Обязательно: узел в виде URL, например https://es1.example.com:9200; несколько через запятую, по очереди, если один недоступен. Без схемы узел считается https, порт по умолчанию 9200; узлы одного сервиса либо все http, либо все https
    authentication password (по умолчанию), api_key или certificate: клиентский TLS-сертификат, который область PKI (realm) сопоставляет с пользователем
    username, password password: пользователь для поиска и его пароль, хранится в зашифрованном виде
    apiKey api_key: закодированный API-ключ в том виде, в каком его возвращает Elasticsearch при создании, хранится в зашифрованном виде
    ssl.verificationMode Как в Kibana: full (по умолчанию) проверяет сертификаты и имена узлов, certificate — только сертификаты, none — ничего
    ssl.certificateAuthorities Путь на сервере GrantForge к PEM-сертификатам CA, которыми проверяются узлы, например http_ca.crt Elasticsearch; пусто — используются сертификаты JVM
    ssl.certificate, ssl.key certificate: пути на сервере GrantForge к клиентскому PEM-сертификату и его закрытому ключу, PKCS #8 или старой формы OpenSSL; требуют узлов https
    ssl.keyPassphrase certificate: парольная фраза зашифрованного закрытого ключа, хранится в зашифрованном виде
    timeout Сколько могут занимать подключение и запрос, по умолчанию 30000, диапазон 1..600000 миллисекунд

    Параметры одного способа входа отклоняются для остальных, поэтому сервис точно указывает, как он входит. Отклонённые входы, отозванные API-ключи, недостающие привилегии, недоступные узлы и непроверяемые сертификаты сообщаются как таковые.

    Что видит пользователь для поиска

    Пользователь для поиска должен иметь право читать то, что он перечисляет: API resolve Elasticsearch для индексов и потоков данных, возможности полей (field capabilities) для полей и описание кластера для его имени. Роль с read и view_index_metadata на индексах даёт первые два; пользователь без кластерной привилегии monitor всё равно проходит проверку подключения, которая тогда не называет ни версию, ни лицензию. Индексы и потоки данных, имена которых начинаются с точки, скрытые и системные, перечисляются, только если введённое начинается с точки; базовые индексы потоков данных перечисляются как их поток данных. Поля — это поля документов: собственные поля метаданных Elasticsearch, объекты и мультиполя, повторно индексирующие поле, например name.keyword, опускаются, поскольку агент выдаёт их вместе с их полем.

    Ресурсы и типы доступа

    Уровень Сопоставление Типы доступа
    index Подстановочные знаки, с учётом регистра; имя индекса или потока данных index, delete, create_index, delete_index, view_index_metadata, monitor, manage
    field Подстановочные знаки, с учётом регистра; внутри индекса путь поля, например address.city read
    cluster Подстановочные знаки, с учётом регистра; имя кластера cluster_monitor, create_snapshot, manage_slm, manage_index_templates, manage_ingest_pipelines, manage_ilm

    Каждый тип доступа — это одноимённая привилегия Elasticsearch, кроме cluster_monitor, который является кластерной привилегией monitor:

    Тип доступа Что разрешает
    read Поиск, получение, подсчёт, multi-search и прокрутку
    index, delete Индексировать и обновлять документы, в том числе через bulk; удалять документы
    create_index, delete_index Создавать индексы, в том числе когда их создаёт первая запись; удалять индексы и потоки данных
    view_index_metadata, monitor Читать отображения (mappings), настройки и псевдонимы; читать статистику и восстановление
    manage Любое административное действие с индексом; включает create_index, delete_index, view_index_metadata и monitor
    cluster_monitor Читать работоспособность, состояние и статистику кластера
    create_snapshot, manage_slm Создавать снимки; управлять политиками жизненного цикла снимков, что включает create_snapshot
    manage_index_templates, manage_ingest_pipelines, manage_ilm Управлять шаблонами индексов, конвейерами приёма и политиками жизненного цикла индексов

    Чтение решается по полям, так же как безопасность на уровне полей показывает поля документов: политика read называет поля, и * — это все поля. Так политика может разрешить индекс и запретить одно его поле, а пользователь читает все остальные. В значениях политик * соответствует любой последовательности символов, а ? — одному символу. Редактор политик подсказывает индексы и потоки данных, поля индексов, названных в политике, и кластер.

    Фильтры строк

    Политика фильтра строк индекса показывает пользователю только документы, подходящие под запрос. Запрос — это DSL запросов Elasticsearch в том виде, в каком его принимает безопасность на уровне документов, например {"term": {"region": "EU"}}, и он может быть шаблоном, например с {{_user.username}}. Как и в других сервисах, пользователь получает фильтр первой применимой к нему политики. Фильтр строк может проверять только поля, которые пользователь может читать: безопасность на уровне полей скрывает остальные и от запроса.

    Elasticsearch не маскирует значения, поэтому тип сервиса не предлагает маскирования.

    Лицензия

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

    Пример политик

    Пусть в кластере с лицензией Platinum есть индексы logs-2026.10.26 и hr. Создайте в том же сервисе данных такие включённые политики:

    Ресурс Правило
    index=logs-*, field=* Разрешить группе analysts read
    index=logs-*, field=client_ip Запретить группе analysts read
    index=logs-* Разрешить пользователю logstash index и create_index
    index=hr, field=* Разрешить группе hr read
    index=hr (фильтр строк) Показывать пользователю emea-hr только документы {"term": {"region": "EMEA"}}
    cluster=* Разрешить группе ops cluster_monitor

    Когда агент применит новый снимок, участники analysts читают все поля журналов, кроме адреса клиента; logstash сразу пишет завтрашний logs-2026.10.27, создавая его первым документом; участники hr читают данные сотрудников; emea-hr видит только сотрудников своего региона; участники ops читают состояние и статистику кластера.

    Применение политик

    Сервисный плагин управляет политиками и ищет ресурсы; для их применения нужен агент Elasticsearch на каждый кластер. Развёртывание и проверки описаны в разделе Агент Elasticsearch.

    Связанные руководства

    Редактировать эту страницу на GitHub