Плагин OpenSearch ищет индексы, потоки данных, поля и кластер и управляет политиками доступа в терминах самого OpenSearch: чтение полей, индексирование, удаление, создание и администрирование индексов, а также операции самого кластера, с маскированием полей и фильтрами строк индексов. Идентификатор плагина и тип сервиса — opensearch. Сервисный плагин работает на сервере GrantForge; агент OpenSearch, сервис рядом с кластером, применяет политики с помощью собственных ролей, безопасности на уровне полей, маскированных полей и безопасности на уровне документов плагина безопасности.
Интеграционные тесты Testcontainers в репозитории покрывают OpenSearch 2.19, 3.3, 3.6 и 3.9 с плагином безопасности; это не означает сертификацию всех остальных версий.
Установка
Дистрибутив включает плагин в plugins/opensearch. Убедитесь, что opensearch включён в Управление платформой → Плагины; после обновления каталога плагинов пересканируйте его. Плагин обращается к узлам через собственный низкоуровневый REST-клиент OpenSearch в отдельном загрузчике классов.
Добавление сервиса данных
- Откройте Права на данные → Сервисы данных, добавьте сервис и выберите OpenSearch (
opensearch). - Укажите узел в виде URL или несколько узлов.
- Выберите, как входит пользователь для поиска, введите его учётные данные, проверьте подключение и сохраните сервис. Проверка входит и описывает кластер: версию OpenSearch и имя кластера, пользователя, под которым выполнен вход, и число индексов и потоков данных. Кластер без плагина безопасности проверку не проходит, так как агент применяет политики через него.
Пользователь для поиска позволяет GrantForge находить ресурсы; он отделён от пользователей, которые читают и пишут данные. Успешная проверка подключения не означает, что доступ уже подчиняется политикам.
| Параметр | Назначение |
|---|---|
opensearch.hosts |
Обязательно: узел в виде URL, например https://opensearch1.example.com:9200; несколько через запятую, по очереди, если один недоступен. Без схемы узел считается https, порт по умолчанию 9200; узлы одного сервиса либо все http, либо все https |
authentication |
password (по умолчанию) или certificate: клиентский TLS-сертификат, который плагин безопасности сопоставляет с пользователем |
username, password |
password: пользователь для поиска и его пароль, хранится в зашифрованном виде |
ssl.verificationMode |
Как в OpenSearch Dashboards: full (по умолчанию) проверяет сертификаты и имена узлов, certificate — только сертификаты, none — ничего |
ssl.certificateAuthorities |
Путь на сервере GrantForge к PEM-сертификатам CA, которыми проверяются узлы; пусто — используются сертификаты JVM |
ssl.certificate, ssl.key |
certificate: пути на сервере GrantForge к клиентскому PEM-сертификату и его закрытому ключу, PKCS #8 или старой формы OpenSSL; требуют узлов https |
ssl.keyPassphrase |
certificate: парольная фраза зашифрованного закрытого ключа, хранится в зашифрованном виде |
timeout |
Сколько могут занимать подключение и запрос, по умолчанию 30000, диапазон 1..600000 миллисекунд |
Параметры одного способа входа отклоняются для другого, поэтому сервис точно указывает, как он входит. Отклонённые входы, недостающие права, недоступные узлы и непроверяемые сертификаты сообщаются как таковые.
Что видит пользователь для поиска
Пользователь для поиска должен иметь право читать то, что он перечисляет: API resolve OpenSearch для индексов и потоков данных, возможности полей (field capabilities) для полей и описание кластера для его имени. Встроенная роль readall даёт первые два; пользователь без cluster:monitor/main всё равно проходит проверку подключения, которая тогда не называет версию. Индексы и потоки данных, имена которых начинаются с точки, — скрытые и системные — перечисляются, только если введённое начинается с точки; опорные индексы потоков данных перечисляются через их поток. Поля — это поля документов: собственные служебные поля OpenSearch, объекты и мультиполя, которые ещё раз индексируют поле, например name.keyword, не показываются, так как безопасность на уровне полей показывает или скрывает их вместе с их полем.
Ресурсы и типы доступа
| Уровень | Сопоставление | Типы доступа |
|---|---|---|
index |
Подстановочные знаки, с учётом регистра; имя индекса или потока данных | index, delete, create_index, manage_aliases, monitor, manage |
field |
Подстановочные знаки, с учётом регистра; внутри индекса, путь поля, например address.city |
read |
cluster |
Подстановочные знаки, с учётом регистра; имя кластера | cluster_monitor, manage_snapshots, manage_templates, manage_pipelines |
| Тип доступа | Группа действий плагина безопасности |
|---|---|
read |
read: поиск, получение, подсчёт и подобное |
index |
index: индексирование и обновление документов, в том числе через bulk |
delete |
delete: удаление документов |
create_index |
create_index: создание индексов, в том числе когда их создаёт первая запись |
manage_aliases, monitor |
manage_aliases, indices_monitor |
manage |
manage: любые административные действия с индексом, включая его удаление; подразумевает create_index, manage_aliases и monitor |
cluster_monitor, manage_snapshots |
cluster_monitor, manage_snapshots |
manage_templates, manage_pipelines |
cluster_manage_index_templates, cluster_manage_pipelines |
Чтение решается по полям, так же как безопасность на уровне полей показывает поля документов: политика read называет поля, а * означает все поля. Поэтому политика может разрешить индекс и запретить одно его поле, и пользователь читает все остальные. В значениях политик * соответствует любой последовательности символов, ? — одному символу. Редактор политик подсказывает индексы и потоки данных, поля индексов, названных в политике, и кластер.
Использование того, что разрешает политика, требует в OpenSearch большего: multi-search, multi-get и прокрутки для чтения и bulk для записи. Это не отдельные типы доступа; агент выдаёт вместе с ними составные операции кластера.
Маскирование
Политика маскирования поля показывает пользователю его значения в маскированном виде, как маскированные поля плагина безопасности, и в документах, и в агрегациях:
| Маска | Что видит пользователь |
|---|---|
| Скрыть (Redact) | Заглавные буквы как X, строчные как x, цифры как n |
| Частичная маска: последние 4 / первые 4 | Каждый прочий символ как x |
| Хеш (SHA-256) | SHA-256-хеш значения |
| Хеш с солью кластера (BLAKE2b) | Собственный хеш плагина безопасности с солью кластера в качестве ключа: одинаковые значения остаются одинаковыми, но их нельзя подобрать |
| Своя | Алгоритм хеширования, например SHA-512, или регулярные выражения с заменами, например /[0-9]/::* |
| Без маски | Значение как есть |
Фильтры строк
Политика фильтра строк индекса показывает пользователю только документы, подходящие под запрос. Запрос — это DSL запросов OpenSearch в том виде, в каком его принимает безопасность на уровне документов, например {"term": {"region": "EU"}}, и в нём можно использовать подстановки плагина безопасности, например ${user.name}. Как и в других сервисах, пользователь получает фильтр первой применимой к нему политики. Фильтр строк может проверять только поля, которые пользователь может читать: безопасность на уровне полей скрывает остальные и от запроса.
Пример политик
Пусть в кластере есть индексы 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, field=salary (маскирование) |
Показывать группе hr хеш с солью кластера |
index=hr (фильтр строк) |
Показывать пользователю emea-hr только документы {"term": {"region": "EMEA"}} |
cluster=* |
Разрешить группе ops cluster_monitor |
Когда агент применит новый снимок, участники analysts читают все поля журналов, кроме адреса клиента; logstash сразу пишет завтрашний logs-2026.10.27, создавая его первым документом; участники hr видят зарплаты в виде хеша; emea-hr видит только сотрудников своего региона; участники ops читают состояние и статистику кластера.
Применение политик
Сервисный плагин управляет политиками и ищет ресурсы; для их применения нужен агент OpenSearch на каждый кластер. Развёртывание и проверки описаны в разделе Агент OpenSearch.
