Плагин Elasticsearch ищет индексы, потоки данных, поля и кластер и управляет политиками доступа в терминах самого Elasticsearch: чтение полей, индексирование и удаление документов, создание, удаление и администрирование индексов, а также операции самого кластера, с фильтрами строк индексов. Идентификатор плагина и тип сервиса — оба elasticsearch. Сервисный плагин работает на сервере GrantForge; агент Elasticsearch, сервис рядом с кластером, применяет политики собственными ролями Elasticsearch, безопасностью на уровне полей и безопасностью на уровне документов.
Интеграционные тесты Testcontainers в репозитории покрывают Elasticsearch 8.19, 9.3, 9.4 и 9.5 с включённой безопасностью; это не означает сертификацию всех остальных версий.
Установка
Дистрибутив включает плагин в plugins/elasticsearch. Убедитесь, что elasticsearch включён в Управление платформой → Плагины; после обновления каталога плагинов пересканируйте его. Плагин обращается к узлам через низкоуровневый REST-клиент Elasticsearch в собственном загрузчике классов.
Добавление сервиса данных
- Откройте Права на данные → Сервисы данных, добавьте сервис и выберите Elasticsearch (
elasticsearch). - Укажите узел в виде URL или несколько узлов.
- Выберите, как входит пользователь для поиска, введите его учётные данные, проверьте подключение и сохраните сервис. Проверка входит и описывает кластер: версию 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.
