Руководство по установке#

В руководстве приведены инструкции по установке компонента Поисковый движок (SRHX) продукта Platform V Search (SRH).

Расшифровку основных понятий см. в перечне "Термины и определения".

Системные требования#

Настройки безопасности окружения и перечень платформенных (дополнительных внешних) продуктов, используемых для установки, настройки и контроля в конечной информационной системе (далее — ИС), выбираются при разработке конечной ИС, исходя из характера обрабатываемой в ней информации и иных требований информационной безопасности (далее — ИБ), предъявляемых к ней.

Системное программное обеспечение#

Ниже представлены категории системного программного обеспечения (далее — ПО), которые обязательны или опциональны для установки, настройки, контроля и функционирования компонента SRHX. В каждой категории перечислены все поддерживаемые продукты сторонних правообладателей. Отдельно обозначены варианты, которые рекомендует АО «СберТех» (маркировка «Рекомендовано» в столбце «Продукт, функциональная совместимость с которым подтверждена»). Клиенту необходимо выбрать один из продуктов в каждой категории, исходя из условий использования конечной ИС.

Категория ПО

Обязательность установки*

Наименование ПО

Версия

Продукт, функциональная совместимость с которым подтверждена**

Описание

Операционная система

Да

ОС Альт 8 СП

8.2 и выше

Опционально. Правообладателем АО «СберТех» также рекомендован компонент Операционная система INST продукта Platform V SberLinux OS Server SLO, см. раздел «Платформенные зависимости»

Среда для запуска модулей компонента

Red Hat Enterprise Linux

8 и выше

Опционально. Правообладателем АО «СберТех» также рекомендован компонент Операционная система INST продукта Platform V SberLinux OS Server SLO, см. раздел «Платформенные зависимости»

Среда для запуска модулей компонента

Java-машина

Да

OpenJDK

11 и выше

Рекомендовано

Окружение для работы модулей компонента

Программная платформа

Да

NodeJS

14.21.3 и выше

Рекомендовано

Среда выполнения JS

Система управления доступом к информационным ресурсам

Нет

СУДИР

любая актуальная версия

Опционально. Правообладателем АО «СберТех» также рекомендован компонент IAM Proxy продукта Platform V IAM SE, см. раздел «Платформенные зависимости»

Сервис управления доступом и информационными ресурсами

Брокер сообщений

Нет

Kafka

2.7.0 и выше

Опционально. Правообладателем АО «СберТех» также рекомендован брокер сообщений, основанный на Kafka, – Platform V Corax, см. раздел «Платформенные зависимости»

Событийный обмен сообщениями между модулями компонента

Система создания, хранения и распространения секретов

Нет

HashiCorp Vault

1.7.0 и выше

Рекомендовано

Система, обеспечивающая безопасный и надежный способ создания, хранения и распространения секретов

Secret Management System

1.7.0 и выше

Опционально

Система управления аутентификационными данными сервисных аккаунтов или учетных записей

Браузер

Да

Яндекс Браузер

19.1.3.281 и выше

Рекомендовано

Браузер для входа в UI

Примечание

*

  • Да — категория ПО обязательна для функционирования сервиса (это означает, что сервис не может выполнять свои базовые функции без установки данной категории ПО).

  • Нет — категория ПО необязательна для функционирования сервиса (это означает, что сервис может выполнять свои базовые функции без установки данной категории ПО).

**

  • Рекомендовано — рекомендованный правообладателем АО «СберТех» продукт.

  • Опционально — альтернативный по отношению к рекомендованному правообладателем АО «СберТех» продукт.

Платформенные зависимости#

Для настройки, контроля и функционирования компонента реализована интеграция с программными продуктами, правообладателем которых является АО «СберТех»:

Наименование продукта

Код

Версия

Код и наименование компонента

Обязательность установки (да/нет)***

Описание

Аналог других производителей****

Platform V IAM SE

IAM

1.3 и выше

AUTH IAM Proxy

Нет

Сервис управления доступом и информационными ресурсами

СУДИР

Platform V SberLinux OS Server

SLO

8.8 и выше

INST Операционная система

Да

Операционная система на базе ядра Linux для запуска контейнеризированных приложений

Red Hat Enterprise Linux, ОС Альт 8 СП

Platform V Corax

KFK

7.272.2 и выше

KFKA Corax

Нет

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

Kafka

Примечание

***

  • Да — компонент или продукт необходим для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данного компонента).

  • Нет — необязательный для функционирования сервиса компонент или продукт (это означает, что сервис может выполнять свои основные функции без установки данного компонента).

**** Рекомендуется установка программного продукта, правообладателем которого является АО «СберТех», при этом не исключена возможность (допускается правообладателем) использования аналога других производителей. Аналоги, в отношении которых продукт успешно прошел испытания и подтвердил свою работоспособность, указаны в разделе «Системное программное обеспечение».

Аппаратные требования#

Расчет потребности в физическом оборудовании происходит на основе коэффициентов повторной подписки, применяемых к требованиям по виртуальным ресурсам для каждого из стендов.

Для установки компонента требуется следующая конфигурация аппаратного обеспечения:

Название компонента

ПО среды функционирования

Количество

CPU (кол-во ядер)

ОЗУ (ГБ)

Внутренние диски (ГБ)

Горизонтальное масштабирование

SRHX

x86_vm

3 node

16

64

200

Да

Требования к окружению для установки программного компонента#

Компонент SRHX не выдвигает требований к настройкам безопасности окружения.

Состав дистрибутива#

Элемент дистрибутива

Описание

Search-server

Компонент SRHX, управляемый посредством REST

Search-dashboard

Компонент серверной части, отвечающий за аутентификацию

Search-healthcheck

Проверка работоспособности компонента SRHX

Search-notifications

Управление уведомлениями от плагинов компонента SRHX

Search-security

Безопасность, шифрование и авторизация компонента SRHX

Search-index-management

Автоматизация действия по управлению индексами

Search-job-scheduler

Создание расписаний для общих задач, выполняемых в кластере

Search-Prometheus-exporter

Сбор и отправка метрик в формате prometheus

Search-audit

Сбор и отправка событий аудита

Search-sql

Плагин, позволяющий использовать SQL синтаксис

Search-queryWorkbenchDashboards

Плагин, позволяющий использовать SQL синтаксис в Dashboards

Выбор способа установки#

Единственным и целевым способом установки является ручной способ.

Подготовка окружения#

Создание пользователей на сервере#

  1. Создайте пользователей.

  • opensearch – для сервера opensearch;

  • opensearch-dashboards – для сервера opensearch-dashboards, в том случае, если он будет устанавливаться на данном сервере.

  1. Добавьте созданных пользователей в необходимые группы.

Ниже представлен пример, когда пользователи созданы с таким же паролем, как и их имя. Возможно изменить значения после "passwd -1" на необходимые:

sudo useradd -p $(openssl passwd -1 opensearch) opensearch
sudo useradd -p $(openssl passwd -1 opensearch-dashboards) opensearch-dashboards
sudo usermod -aG opensearch-dashboards opensearch
sudo usermod -aG opensearch opensearch-dashboards

Добавление переменных для работы компонента SRHX#

  1. Пропишите системные переменные в файл ".bashrc". Переменные пользователей, под которыми будет выполнен запуск компонента SRHX:

  • "OPENSEARCH_JAVA_HOME";

  • "OPENSEARCH_PATH_CONF";

  • "OSD_PATH_CONF".

  1. Примените обновленный файл командой source.

Ниже описан алгоритм для пользователей opensearch и opensearch-dashboards:

sudo sh -c "echo -e 'export OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk\nexport OPENSEARCH_PATH_CONF=/etc/opensearch\nexport OSD_PATH_CONF=/etc/opensearch-dashboards' >> /home/opensearch/.bashrc && source /home/opensearch/.bashrc"
sudo sh -c "echo -e 'export OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk\nexport OPENSEARCH_PATH_CONF=/etc/opensearch\nexport OSD_PATH_CONF=/etc/opensearch-dashboards' >> /home/opensearch-dashboards/.bashrc && source /home/opensearch-dashboards/.bashrc"
  • OPENSEARCH_JAVA_HOME – путь до JAVA, который будет использовать компонент SRHX. При использовании JAVA вместе с дистрибутивом, заранее укажите путь, где будет находиться Java, после распаковки дистрибутива.

  • OPENSEARCH_PATH_CONF и OSD_PATH_CONF – пути до каталога с конфигурационными файлами для сервера opensearch-dashboards.

Изменение параметров компонента SRHX#

  1. Установите значение системных параметров "vm.max_map_count = 262144" и "vm.swappiness=0" в файле "/etc/sysctl.conf".

  2. Примените обновленные значения командой "sysctl -p".

  3. Отключите использование swap:

sudo swapoff -a
sudo sh -c "echo -e 'vm.swappiness=0\nvm.max_map_count=262144' >> /etc/sysctl.conf && sysctl -p"

Внимание! Обязательно проверьте значения в данном файле. Если они уже присутствуют, то их необходимо изменить вручную. После применения команды, указанной выше, произойдет дублирование параметров, если они уже существуют. Команда "swapoff -a" работает только до перезагрузки.

  1. Проверьте текущее значение или примененные изменения командой:

cat /proc/sys/vm/max_map_count

Изменение лимитов пользователей#

Повысьте лимиты для пользователей, которые будут выполнять запуск компонента SRHX. Это позволит в дальнейшем запускать программы вручную и не получать ошибки от компонента SRHX.

  1. Создайте файлы "/etc/security/limits.d/opensearch.conf" и "/etc/security/limits.d/opensearch-dashboards.conf" и внесите в них данные, используя следующие команды:

#для создания файлов /etc/security/limits.d/opensearch.conf , /etc/security/limits.d/opensearch-dashboards.conf и установки лимитов SRHX
sudo sh -c "echo -e 'opensearch      -       nproc   65535\nopensearch      -       nofile  500000\nopensearch      -       memlock unlimited' >> /etc/security/limits.d/opensearch.conf"
sudo sh -c "echo -e 'opensearch-dashboards   -       nproc   8096\nopensearch-dashboards   -       nofile  8096' >> /etc/security/limits.d/opensearch-dashboards.conf"

После исполнения команд файлы должны иметь вид:

#для /etc/security/limits.d/opensearch.conf
opensearch - nofile 500000
opensearch - nproc 65535
opensearch - memlock unlimited
 
 
#для /etc/security/limits.d/opensearch-dashboards.conf
opensearch-dashboards - nofile 8096
opensearch-dashboards - nproc 8096
  1. Проверьте, что параметр для пользователя задан верно и его значение равно установленному в предыдущем пункте. Проверка возможна только под пользователем, для которого применяли значение:

sudo su opensearch -c 'ulimit -u -n -l'
sudo su opensearch-dashboards -c 'ulimit -u -n'
  1. Посмотрите полный список лимитов:

sudo su opensearch -c 'ulimit -a'
sudo su opensearch-dashboards -c 'ulimit -a'

Создание необходимых директорий#

Создайте необходимые директории для распаковки дистрибутива:

sudo mkdir /usr/share/opensearch \
sudo mkdir -p /etc/opensearch/secman/certs \
sudo mkdir /var/log/opensearch \
sudo mkdir /var/lib/opensearch
 
#если на данную виртуальную машину устанавливается opensearch-dashboards
sudo mkdir /usr/share/opensearch-dashboards \
sudo mkdir -p /etc/opensearch-dashboards/certs \
sudo mkdir /var/log/opensearch-dashboards

Подробное описание директорий

Название

Описание

/usr/share/opensearch

Директория, куда будет установлен компонент SRHX

/etc/opensearch

Директория, где будут размещены конфигурационные файлы компонента SRHX

/var/log/opensearch

Директория для хранения логов компонента SRHX, которую нужно указать в настройках "opensearch.yml"

/var/lib/opensearch

Директория для данных кластера, которую нужно указать в настройках "opensearch.yml"

/usr/share/opensearch-dashboards

Директория, куда будет установлен "opensearch-dashboards"

/etc/opensearch-dashboards

Директория, где будут размещены конфигурационные файлы "opensearch-dashboards"

/var/log/opensearch-dashboards

Директория для хранения логов "opensearch-dashboards", которую нужно указать в настройках "opensearch_dashboards.yml"

/etc/opensearch/secman

Директория, где будут храниться зашифрованные JKS-архивы с сертификатами, получаемые из Secret Management System

Создайте пока пустые файлы для переменных компонента SRHX, которые он считывает при запуске. Ссылаться на эти файлы нужно в Unit service:

sudo touch /etc/sysconfig/opensearch
 
#если на данную виртуальную машину устанавливается opensearch-dashboards
sudo touch /etc/sysconfig/opensearch-dashboards

Повышение привилегий пользователя#

Выдайте права пользователю opensearch на управление unit-сервисом, который будет создан далее.

Примечание

Это может понадобиться только для удобства работы под пользователем "opensearch".

sudo nano /etc/sudoers.d/opensearch

Добавьте:

opensearch ALL=(ALL) NOPASSWD: /bin/systemctl start opensearch.service, /bin/systemctl start opensearch
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl restart opensearch.service, /bin/systemctl restart opensearch
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl stop opensearch.service, /bin/systemctl stop opensearch
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl enable opensearch.service, /bin/systemctl enable opensearch
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl disable opensearch.service, /bin/systemctl disable opensearch
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl start opensearch-dashboards.service, /bin/systemctl start opensearch-dashboards
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl restart opensearch-dashboards.service, /bin/systemctl restart opensearch-dashboards
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl stop opensearch-dashboards.service, /bin/systemctl stop opensearch-dashboards
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl enable opensearch-dashboards.service, /bin/systemctl enable opensearch-dashboards
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl disable opensearch-dashboards.service, /bin/systemctl disable opensearch-dashboards
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl daemon-reload

Необходимый софт на сервере#

Внимание!

Установить:

  • node.js – требуется для работы и запуска dashboards;

  • unzip (если не установлен по умолчанию в системе);

  • nano (или любой другой редактор текста).

Установка#

Ручная установка сервиса#

Перед началом установки убедитесь, что выполнена подготовка окружения.

Распаковка дистрибутива#

Внимание!

Название и версии дистрибутива будут различаться, внимательно проверьте и укажите необходимые.

  1. Загрузите полученный дистрибутив на сервер, распакуйте его и перейдите в созданную директорию:

unzip srhx-1.3-*-distrib.zip -d /tmp && cd /tmp/srhx/
  1. Выполните следующие команды из директории, где находятся распакованные файлы.

[user@vm-name srhx]$ pwd
/tmp/srhx/
[user@vm-name srhx]$ ls -l
-rw-r--r-- 1 root     root       5812205 Mar  5 21:46 audit.zip
-rw-r--r-- 1 user     root     327821009 Mar  5 20:54 dashboard-1.3.0.zip
-rw-r--r-- 1 root     root       2045982 Mar  5 20:47 index-management-dashboards-1.3.0.zip
-rw-r--r-- 1 root     root        756487 Mar  5 20:45 notifications-dashboards-1.3.0.zip
-rw-r--r-- 1 root     root      14842422 Mar  5 21:54 opensearch-index-management-1.3.0.zip
-rw-r--r-- 1 root     root       9198790 Mar  5 22:04 opensearch-job-scheduler-1.3.0.zip
-rw-r--r-- 1 root     root       4919467 Mar  5 21:59 opensearch-notifications-1.3.0.zip
-rw-r--r-- 1 root     root      10896680 Mar  5 21:59 opensearch-notifications-core-1.3.0.zip
-rw-r--r-- 1 root     root     101699727 Mar  5 21:40 opensearch-security-1.3.0.zip
-rw-r--r-- 1 root     root      44754603 Mar  5 22:11 opensearch-sql-1.3.0.zip
-rw-r--r-- 1 root     root        150311 Mar  5 22:07 prometheus-exporter-1.3.0.zip
-rw-r--r-- 1 root     root       2700708 Mar  5 20:47 queryWorkbenchDashboards-1.3.0.zip
-rw-r--r-- 1 root     root          7771 Mar  5 21:50 search-healthcheck-plugin-1.3.0.zip
-rw-r--r-- 1 root     root     232892620 Mar  5 20:29 search-server-1.3.0.zip
-rw-r--r-- 1 root     root       1170157 Mar  5 20:44 security-dashboards-1.3.0.zip

Краткое описание распакованных компонентов

Название компонента

Описание

search-server-1.3.0

Дистрибутив компонента Поисковый движок SRHX

opensearch-security-1.3.0

Плагин безопасности для компонента Поисковой движок SRHX

Дополнительные плагины для компонента Поисковый движок SRHX

opensearch-index-management-1.3.0,
opensearch-job-scheduler-1.3.0,
opensearch-notifications-1.3.0,
opensearch-notifications-core-1.3.0,
prometheus-exporter-1.3.0,
search-healthcheck-plugin-1.3.0,
audit
opensearch-sql-1.3.0

dashboard-1.3.0

UI для компонента Поисковый движок SRHX

security-dashboards-1.3.0

Плагин безопасности для Dashboards

Дополнительные плагины для Dashboards

index-management-dashboards-1.3.0,
queryWorkbenchDashboards-1.3.0
notifications-dashboards-1.3.0

Установка компонента SRHX#

Выполните команды для распаковки дистрибутива:

sudo unzip -q ./search-server-*.zip -d /usr/share/opensearch/
sudo mv /usr/share/opensearch/config/* /etc/opensearch/ && sudo rm -rf /usr/share/opensearch/config/
sudo sh -c "echo -e 'path.data: /var/lib/opensearch\npath.logs: /var/log/opensearch' >> /etc/opensearch/opensearch.yml"
sudo mv opensearch-security-*.zip opensearch-sql-*.zip opensearch-index-management-*.zip opensearch-job-scheduler-*.zip opensearch-notifications-*.zip opensearch-notifications-core-*.zip prometheus-exporter-*.zip search-healthcheck-plugin-*.zip /usr/share/opensearch/

Описание общего списка команд#

  1. Распакуйте сервер в директорию "/usr/share/opensearch":

sudo unzip -q ./search-server-1.3.0.zip -d /usr/share/opensearch/
  1. Переместите конфигурационные файлы из "/usr/share/opensearch/config" в заранее созданную директорию, для конфигурационных файлов компонента Поискового движка SRHX – "/etc/opensearch" и удалите пустую директорию "/usr/share/opensearch/config":

sudo mv /usr/share/opensearch/config/* /etc/opensearch/ && sudo rm -rf /usr/share/opensearch/config/
  1. Укажите директории в конфигурационном файле OpenSearch, где он будет хранить данные кластера (path.data) и логи (path.logs). Данные кластера хранятся по пути "/var/lib/opensearch", а логи в "/var/log/opensearch".

sudo sh -c "echo -e 'path.data: /var/lib/opensearch\npath.logs: /var/log/opensearch' >> /etc/opensearch/opensearch.yml"
  1. Переместите плагины в домашнюю директорию компонента Поисковый движок (SRHX):

sudo mv \
opensearch-sql-*.zip
opensearch-security-*.zip \
opensearch-index-management-*.zip \
opensearch-job-scheduler-*.zip \
opensearch-notifications-*.zip \
opensearch-notifications-core-*.zip \
prometheus-exporter-*.zip \
search-healthcheck-plugin-*.zip \
/usr/share/opensearch/

Установка Dashboards#

Примечание

Dashboards используется один на весь кластер. Не устанавливайте Dashboards на каждый сервер, где стоит компонент Поисковый движок SRHX.

Внимание!

Используйте команды ниже, только если требуется установить Dashboards на сервер, с которым работаете в данный момент.

Общий список выполняемых команд для распаковки дистрибутива:

sudo unzip -q ./dashboard-*.zip -d /usr/share/opensearch-dashboards/
sudo mv security-dashboards-*.zip queryWorkbenchDashboards-*.zip index-management-dashboards-*.zip notifications-dashboards-*.zip /usr/share/opensearch-dashboards/
sudo mv /usr/share/opensearch-dashboards/config/* /etc/opensearch-dashboards/ && sudo rm -rf /usr/share/opensearch-dashboards/config/

Описание общего списка команд выше#

  1. Распакуйте сервер в директорию "/usr/share/opensearch-dashboards":

sudo unzip -q ./dashboard-1.3.0.zip -d /usr/share/opensearch-dashboards/
  1. Переместите плагины для opensearch-dashboards к нему в домашнюю директорию:

sudo mv security-1.3.0.zip queryWorkbenchDashboards-1.3.0.zip index-management-dashboards-1.3.0.zip notifications-dashboards-1.3.0.zip /usr/share/opensearch-dashboards/
  1. Переместите конфигурационные файлы "/usr/share/opensearch-dashboards/config" в заранее созданную директорию для конфигурационных файлов компонента Поискового движка SRHX - "/etc/opensearch-dashboards" и удалите пустую директорию "/usr/share/opensearch-dashboards/config":

sudo mv /usr/share/opensearch-dashboards/config/* /etc/opensearch-dashboards/ && sudo rm -rf /usr/share/opensearch-dashboards/config/

Установка прав. Наделение правами владельца#

После распаковки измените владельцев директорий и выставите необходимые права.

sudo chown -R opensearch:opensearch /usr/share/opensearch
sudo chown -R opensearch:opensearch /var/log/opensearch
sudo chown -R opensearch:opensearch /var/lib/opensearch
sudo chown -R opensearch:opensearch /etc/opensearch
sudo chown opensearch:opensearch /etc/sysconfig/opensearch
sudo chown -R opensearch-dashboards:opensearch-dashboards /usr/share/opensearch-dashboards
sudo chown -R opensearch-dashboards:opensearch-dashboards /var/log/opensearch-dashboards
sudo chown -R opensearch-dashboards:opensearch-dashboards /etc/opensearch-dashboards
sudo chown opensearch-dashboards:opensearch-dashboards /etc/sysconfig/opensearch-dashboards
 
sudo chmod 740 /var/lib/opensearch
sudo chmod 750 /usr/share/opensearch
sudo chmod 750 /usr/share/opensearch/logs
sudo chmod 750 -R /usr/share/opensearch/bin
sudo chmod 750 -R /usr/share/opensearch/plugins
sudo chmod 775 -R /usr/share/opensearch/jdk/
sudo chmod 750 -R /var/log/opensearch
sudo chmod 750 /etc/opensearch
sudo chmod 750 /usr/share/opensearch-dashboards
sudo chmod 750 -R /usr/share/opensearch-dashboards/bin
sudo chmod 750 -R /usr/share/opensearch-dashboards/plugins
sudo chmod 750 -R /var/log/opensearch-dashboards
sudo chmod 750 /etc/opensearch-dashboards
sudo chmod 0700 -R /etc/opensearch/secman

Установка плагинов#

Команды по установке плагинов могут быть применены, только в том случае, если валидно заполнен файл opensearch.yml.

Название компонента

Описание

search-server-1.3.0

Дистрибутив компонента Поисковой движок SRHX

opensearch-security-1.3.0

Плагин безопасности для компонента Поисковой движок SRHX

Дополнительные плагины для компонента Поисковой движок SRHX

opensearch-index-management-1.3.0

opensearch-job-scheduler-1.3.0

opensearch-notifications-1.3.0

opensearch-notifications-core-1.3.0

prometheus-exporter-1.3.0

search-healthcheck-plugin-1.3.0

audit

opensearch-sql-1.3.0

dashboard-1.3.0

UI для компонента Поисковый движок SRHX

security-dashboards-1.3.0

Плагин безопасности для Dashboards

Дополнительные плагины для Dashboards

index-management-dashboards-1.3.0

queryWorkbenchDashboards-1.3.0

notifications-dashboards-1.3.0

Установка плагинов от пользователя opensearch на opensearch-server#
  1. При распаковке дистрибутива все плагины перемещены в корневую директорию программы "/usr/share/opensearch/". Далее при установке плагинов будет использоваться указанный путь.

  2. Если плагины находятся в другом месте, укажите полный путь до них и проверьте, имеется ли доступ туда у пользователя opensearch.

Внимание! Установку плагинов выполните от пользователя, под которым запускается компонент SRHX. Для компонента Поисковый движок (SRHX) используйте пользователя – "opensearch".(Не устанавливайте плагины из под root!) Название и версии плагинов могу различаться, внимательно проверьте и укажите необходимые.

sudo su - opensearch -c 'yes | /usr/share/opensearch/bin/opensearch-plugin install \
file:///usr/share/opensearch/opensearch-sql-1.3.0.zip \
file:///usr/share/opensearch/opensearch-security-1.3.0.zip \
file:///usr/share/opensearch/opensearch-job-scheduler-1.3.0.zip \
file:///usr/share/opensearch/opensearch-index-management-1.3.0.zip \
file:///usr/share/opensearch/opensearch-notifications-core-1.3.0.zip \
file:///usr/share/opensearch/opensearch-notifications-1.3.0.zip \
file:///usr/share/opensearch/search-healthcheck-plugin-1.3.0.zip \
file:///usr/share/opensearch/prometheus-exporter-1.3.0.zip'

Возможна установка плагинов по одиночке:

sudo su - opensearch -c 'yes | /usr/share/opensearch/bin/opensearch-plugin install file:///usr/share/opensearch/opensearch-security-1.3.0.zip'
  1. После установки плагина безопасности появятся скрипты:

  • securityadmin.sh;

  • hash.sh;

  • audit_config_migrater.sh,

которые находятся по пути "/usr/share/opensearch/plugins/opensearch-security/tools". Необходимо сделать их исполняемыми.

sudo chmod +x \
/usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh \
/usr/share/opensearch/plugins/opensearch-security/tools/hash.sh \
/usr/share/opensearch/plugins/opensearch-security/tools/audit_config_migrater.sh
  1. После установки плагина безопасности потребуется настройка шифрования. Для тестового запуска можно временно отключить плагин безопасности, и проверить работоспособность программы. Для этого в файл "/etc/opensearch/opensearch.yml" добавьте строку 'plugins.security.disabled: true'.

sudo sh -c "echo -e 'plugins.security.disabled: true' >> /etc/opensearch/opensearch.yml"
Установка плагинов от пользователя opensearch-dashboards на opensearch-dashboards#
  1. При распаковке дистрибутива все плагины перемещены в корневую директорию программы "usr/share/opensearch-dashboards/". Далее при установке плагинов будет использоваться указанный путь.

  2. Если плагины находятся в другом месте, укажите полный путь до них и проверьте, имеется ли доступ туда у пользователя opensearch-dashboards.

Внимание! Установку плагинов выполните от пользователя, под которым запускается компонент SRHX. Для компонента Поисковый движок (SRHX) используйте пользователя – "opensearch-dashboards".(Не устанавливайте плагины из под root!) Название и версии плагинов могу различаться, внимательно проверьте и укажите необходимые.

sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/security-dashboards-1.3.0.zip'
sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/notifications-dashboards-1.3.0.zip'
sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/index-management-dashboards-1.3.0.zip'
sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/queryWorkbenchDashboards-1.3.0.zip'

Создание Unit services и их запуск#

  1. Убедитесь, что все пути указаны корректно.

  2. Создайте точку монтирования в RAM:

sudo nano /etc/systemd/system/etc-opensearch-secman-secrets.mount
  1. Добавьте:

[Unit]
Description=Mount /etc/opensearch/secman/secrets
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
 
[Mount]
What=tmpfs
Where=/etc/opensearch/secman/secrets
Type=tmpfs
Options=mode=0700,uid=opensearch,gid=opensearch,size=100m
ForceUnmount=true
 
[Install]
WantedBy=multi-user.target shutdown.target reboot.target halt.target
  1. Создайте Unit services для Server:

sudo nano /etc/systemd/system/opensearch.service
  1. Добавьте:

[Unit]
Description=Platform V Search
Wants=network-online.target
After=network-online.target etc-opensearch-secman-secrets.mount
 
[Service]
Type=forking
RuntimeDirectory=opensearch
PrivateTmp=true
 
Environment=MAX_LOCKED_MEMORY=unlimited
Environment=OPENSEARCH_PATH_CONF=/etc/opensearch
EnvironmentFile=-/etc/sysconfig/opensearch
Environment=PID_DIR=/var/run/opensearch
 
WorkingDirectory=/usr/share/opensearch
ExecStart=/usr/share/opensearch/bin/opensearch -d -p ${PID_DIR}/opensearch.pid
ExecStopPost=/usr/share/opensearch/bin/saving-secman-data.sh
 
User=opensearch
Group=opensearch
 
StandardOutput=journal
StandardError=inherit
 
# Service restart - 5 times with an interval of 30 seconds for 200 seconds
Restart=on-failure
RestartSec=30
StartLimitInterval=200
StartLimitBurst=5
 
# Unlimited memory lock for service
LimitMEMLOCK=infinity
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65535
# Specifies the maximum number of processes
LimitNPROC=4096
# Specifies the maximum size of virtual memory
LimitAS=infinity
# Specifies the maximum file size
LimitFSIZE=infinity
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0
# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM
# Send the signal only to the JVM rather than its control group
KillMode=process
# Java process is never killed
SendSIGKILL=no
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143
# Allow a slow startup before the systemd notifier module kicks in to extend the timeout
TimeoutStartSec=75
 
[Install]
WantedBy=multi-user.target
  1. Создайте Unit services для Dashboards (Если на данном сервере установлен opensearch-dashboards):

sudo nano /etc/systemd/system/opensearch-dashboards.service
  1. Добавьте

[Unit]
Description=Platform V Search Dashboard
Wants=network-online.target
After=network-online.target
 
[Service]
Type=simple
User=opensearch-dashboards
Group=opensearch-dashboards
 
Environment=OSD_PATH_CONF=/etc/opensearch-dashboards
EnvironmentFile=-/etc/sysconfig/opensearch-dashboards
WorkingDirectory=/usr/share/opensearch-dashboards/
ExecStart=/bin/bash -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards &> /var/log/opensearch-dashboards/stdout.log'
 
StandardOutput=journal
StandardError=inherit
 
# Service restart - 5 times with an interval of 30 seconds for 200 seconds
Restart=on-failure
RestartSec=30
StartLimitInterval=200
StartLimitBurst=5 
 
[Install]
WantedBy=multi-user.target
  1. Выполните перезагрузку systemd:

sudo systemctl daemon-reload
  1. Добавьте точку монтирования в автозагрузку и запустите:

sudo systemctl enable etc-opensearch-secman-secrets.mount --now
  1. Добавьте opensearch-services в автозагрузку и запустите:

sudo systemctl enable opensearch.service --now
  1. Добавьте opensearch-dashboards-services в автозагрузку и запустите:

sudo systemctl enable opensearch-dashboards.service --now

Настройка компонента SRHX#

Настройка параметров в opensearch.yml#

Большинство настроек компонента SRHX описываются в файле "/etc/opensearch/opensearch.yml" и считываются при запуске.

Внимание!

Для настройки кластера подготовьте два сертификата с разными CN и подписанные одним УЦ. Один сертификат используется для межкластерного шифрования и шифрования http-уровня. Второй, сертификат администратора, для доступа с правами администратора.

Сертификаты администратора — это обычные клиентские сертификаты с повышенными правами внутри компонента SRHX, для выполнения административных задач. Сертификат администратора необходим для изменения конфигурации плагина безопасности с помощью "plugins/opensearch-security/tools/securityadmin.sh" или REST API. Сертификаты администратора настраиваются в opensearch.yml путем указания их DN:

plugins.security.authcz.admin_dn:
  CN=admin, O=SBT
  • Сертификаты должны быть в формате PKCS#8. Замените все содержимое файла (удалите весь текст в существующем фале) "/etc/opensearch/opensearch.yml".

### Шаблон безопасной конфигурации сервера.
### Подставьте свои значения там, где требуется.
### Символы < > указывают значения, которые требуется заменить. При подстановке своих значений символы < > использовать не нужно.

bootstrap.memory_lock: true

# Настройки хоста
network.host: <FQDN или IP текущего хоста>
http.port: <Необходимо выбрать один любой порт выше 10000 (например: 19200 )>
transport.port: <Необходимо выбрать один любой порт выше 10000 (например: 19301)>

# Настройки кластера
cluster.name: <ваше имя кластера>
node.name: <ваше имя текущей node>
node.roles:
  - cluster_manager
  - data
cluster.initial_cluster_manager_nodes:
  - <node.name node 1 в кластере>
  - <node.name node 2 в кластере>
  - <node.name node 3 в кластере>
discovery.seed_hosts:
  - <FQDN или IP node 1 в кластере>:<Значение указанное в параметре "transport.port">
  - <FQDN или IP node 2 в кластере>:<Значение указанное в параметре "transport.port">
  - <FQDN или IP node 3 в кластере>:<Значение указанное в параметре "transport.port">

# Настройки для хранения данных и логов текущей node
path.data: /SRHX/data/opensearch
path.logs: /SRHX/logs/opensearch

  # Настройки плагина Security

#############################################################
## Не отключаемые параметры.
plugins.security.disabled: false
plugins.security.secman.enabled: true
plugins.security.ssl.http.enabled: true
plugins.security.ssl.transport.enabled: true

plugins.security.ssl.http:
  keystore_filepath: "/etc/opensearch/secman/certs/http.jks"
  truststore_filepath: "/etc/opensearch/secman/certs/httptrust.jks"
  enabled_protocols: ["TLSv1.2", "TLSv1.3"]
  enabled_ciphers: ["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"]
  clientauth_mode: REQUIRE

plugins.security.ssl.transport:
  keystore_filepath: "/etc/opensearch/secman/certs/transport.jks"
  truststore_filepath: "/etc/opensearch/secman/certs/transport.jks"
  enabled_protocols: ["TLSv1.2", "TLSv1.3"]
  enabled_ciphers: ["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"]
  enforce_hostname_verification: true

plugins.security.authcz.admin_dn:
  - 'CN=<Common Name вашего сертификата администратора>'
plugins.security.nodes_dn:
  - 'CN=<Common Name межкластерного сертификата/Параметр указанный в plugins.security.secman.transport.cn>,O=<Наименование организации из параметров сертификата>'

plugins.security.audit.type: ru.sbt.audit.PlatformVAuditSink

plugins.security.allow_default_init_securityindex: true
plugins.security.restapi.roles_enabled: "all_access"
plugins.security.system_indices:
  enabled: true
  indices: [".plugins-ml-model", ".plugins-ml-task", ".opendistro-alerting-config", ".opendistro-alerting-alert*", ".opendistro-anomaly-results*", ".opendistro-anomaly-detector*", ".opendistro-anomaly-checkpoints", ".opendistro-anomaly-detection-state", ".opendistro-reports-*", ".opensearch-notifications-*", ".opensearch-notebooks", ".opensearch-observability", ".opendistro-asynchronous-search-response*", ".replication-metadata-store"]
plugins.security.cache.ttl_minutes: 120
## Не отключаемые параметры.
#############################################################

Описание всех параметров указанных в примере opensearch.yml приведены в таблице ниже.

Имя параметра

Описание

bootstrap.memory_lock: true

Позволяет программе блокировать на сервере определенное количество оперативной памяти, которое указанно в файле "jvm.options" в парамтреах "-Xms" и "-Xmx". Необходимо предварительно настроить параметры "-Xms" и "-Xmx" в "jvm.options" (производится в следующих пунктах). По умолчанию false

network.host: <FQDN или IP текущего хоста>

Сетевой адрес текущего хоста, на котором будет доступен сервер

http.port: ХХХХХ

Порт, на котором будет доступен API сервера. Используется для доступа к серверу по HTTP. По умолчанию 9200

transport.port: ХХХХХ

Порт, на котором будет доступен сервер на транспортном уровне. Используется для связи серверов между собой в кластере. По умолчанию 9300

cluster.name: <ваше имя кластера>

Произвольное имя текущего кластера в котором будет находится данная node

node.name: <ваше имя текущей node>

Произвольное имя текущего сервера в кластере

node.roles:
- cluster_manager
- data

Роли данной node в кластере.
cluster_manager - означает, что данная node участвует в кворуме при выборе нового мастера, если потерян текущий и может стать новым мастером. Оставляйте данную роль на всех серверах. Мастер всегда будет только один.
data - означает, что текущая node хранит и обрабатывает данные

cluster.initial_cluster_manager_nodes:
- <имя вашей node 1>
- <имя вашей node 2>
- <имя вашей node 3>

Перечисление всех заданных ранее имен node (node.name) в кластере

discovery.seed_hosts:
- <FQDN или IP node 1 в кластере>:ХХХХХ
- <FQDN или IP node 2 в кластере>:ХХХХХ
- <FQDN или IP node 3 в кластере>:ХХХХХ

Перечисление адресов и портов всех node, которые будут находится в кластере

path.data: /var/lib/opensearch

Директория для хранения данных node

path.logs: /var/log/opensearch

Директория для хранения логов node

plugins.security.disabled: false

Принудительное включение плагина безопасности

plugins.security.ssl.http.enabled: true

Включение шифрования http-уровня

plugins.security.ssl.http.pemcert_filepath: "<путь к сертификату для шифрования http-уровня и rest-запросов>"
plugins.security.ssl.http.pemkey_filepath: "<путь к приватному ключу от сертификата для шифрования http-уровня и rest-запросов>"
plugins.security.ssl.http.pemtrustedcas_filepath: "<путь к корневому сертификату, для шифрования http-уровня и rest-запросов>"

Путь к сертификату для шифрования http-уровня, rest-запросов и корневой сертификат. Для раскрытия запароленного приватного ключа от сертификата, необходимо добавить параметр "plugins.security.ssl.http.pemkey_password_secure" в opensearch-keystore и указать в нем пароль от приватного ключа

plugins.security.ssl.http.enabled_protocols: ["TLSv1.2", "TLSv1.3"]

Позволяет использовать только указанные методы шифрования для http-уровня

plugins.security.ssl.http.enabled_ciphers: ["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"]

Позволяет использовать только указанные шифры для http-уровня

plugins.security.ssl.http.clientauth_mode: REQUIRE

Режим проверки сертификатов при запросах к серверу, запросы без сертификатов блокируются. По умолчанию OPTIONAL – ожидать сертификаты, но не требовать их

plugins.security.ssl.transport.enabled: true

Включение шифрования транспортного уровня

plugins.security.ssl.transport.pemcert_filepath: "<путь к сертификату для межкластерного шифрования>"
plugins.security.ssl.transport.pemkey_filepath: "<путь к приватному ключу от сертификата для межкластерного шифрования>"
plugins.security.ssl.transport.pemtrustedcas_filepath: "<путь к корневому сертификату, для межкластерного шифрования>"

Путь к сертификату для межкластерного шифрования и корневой сертификат

plugins.security.ssl.transport.enabled_protocols: ["TLSv1.2", "TLSv1.3"]

Позволяет использовать только указанные методы шифрования для транспортного уровня

plugins.security.ssl.transport.enabled_ciphers: ["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"]

Позволяет использовать только указанные шифры для транспортного уровня

plugins.security.ssl.transport.enforce_hostname_verification: true

Проверка имени хоста на транспортном уровне. Необязательный. По умолчанию true

plugins.security.authcz.admin_dn:
- '<CN админского сертификата>'

Здесь необходимо указать CN сертификата, который будет использоваться для доступа с правами полного администратора. В основном используется для применения изменений методов аутентификации/авторизации и ролевой модели, указывается при вызове скрипта securityadmin.sh.
Внимание! На всех серверах в кластере данный параметр должен быть идентичен

plugins.security.nodes_dn:
- '<CN межкластерного сертификата>'

Здесь необходимо указать CN сертификата, который будет использоваться для межкластерного шифрования между node и доступа к API сервера. Все REST запросы необходимо осуществлять с данными сертификатами.
Внимание! На всех серверах в кластере данный параметр должен быть идентичен

plugins.security.audit.type: internal_opensearch

Метод хранения данных аудита. "internal_opensearch" - все данные хранятся на node во внутреннем журнале сервера

plugins.security.audit.config.disabled_rest_categories: NONE

Принудительно включить запись всех событий http-уровня в журнал аудита

plugins.security.audit.config.disabled_transport_categories: NONE

Принудительно включить запись всех событий транспортного уровня в журнал аудита

plugins.security.allow_default_init_securityindex: true

Позволяет инициализировать системные индексы, если они не были созданы

plugins.security.restapi.roles_enabled: "all_access"

Имя роли, которая может осуществлять системные вызовы через REST-запросы к API сервера. "all_access" - системная роль, которая изначально присвоена только пользователю admin

plugins.security.system_indices.enabled: true

Включить защиту системных индексов указанных в следующем параметре "plugins.security.system_indices.indices"

plugins.security.system_indices.indices: [".plugins-ml-model", ".plugins-ml-task", ".opendistro-alerting-config", ".opendistro-alerting-alert*", ".opendistro-anomaly-results*", ".opendistro-anomaly-detector*", ".opendistro-anomaly-checkpoints", ".opendistro-anomaly-detection-state", ".opendistro-reports-", ".opensearch-notifications-", ".opensearch-notebooks", ".opensearch-observability", ".opendistro-asynchronous-search-response*", ".replication-metadata-store"]

Доступ к данным индексам будет ограничен

plugins.security.cache.ttl_minutes: 120

Время хранения данных кеша пользователей в минутах. При использовании внешних систем аутентификации/авторизации необходимо установить "0"

Настройка JVM Heap Size параметров#

Для быстрой и стабильной работы рекомендуется выделять компоненту SRHX 50 процентов оперативной памяти сервера.

Для этого:

  1. Unit services компонент SRHX в Linux должен содержать параметры: "Environment=MAX_LOCKED_MEMORY=unlimited" и "LimitMEMLOCK=infinity" (прописывается при создании unit service). В лимитах для пользователя "opensearch" – должен быть установлен параметр "opensearch - memlock unlimited" (описано в разделе Изменение лимитов пользователей данного документа).

  2. В "opensearch.yml" должен быть прописан параметр "bootstrap.memory_lock:" со значением "true".

Укажите нужное значение в параметрах Java. Для этого откройте файл "/etc/opensearch/jvm.options", найдите параметры -Xms и -Xmx и укажите значение в гигабайтах, равное половине оперативной памяти текущего сервера, но не более 32766 Мб.

  1. Узнайте размер оперативной памяти на текущем сервере с помощью команды:

free -g | grep Mem: | awk '{print $2}'
23
  1. Отредактируйте параметры в файле с настройками JVM и укажите округленные значения, равные половине числа, полученного в предыдущей команде.

sudo nano /etc/opensearch/jvm.options
# JVM configuration
 
################################################################
## IMPORTANT: JVM heap size
################################################################
 
 
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
 
-Xms11g
-Xmx11g

Добавление параметров в opensearch-keystore#

Данный раздел следует пропустить, если включена интеграция с Secret Management System. Для сокрытия чувствительных данных (например логин/пароль) в компоненте SRHX существует opensearch-keystore. Хранение логина и пароля выполняется в opensearch.yml. Для работы с opensearch-keystore нужно запустить /usr/share/opensearch/bin/opensearch-keystore <параметр> (–help, чтобы увидеть все доступные параметры).

Список часто используемых параметров

Параметр

Описание

create

Создание нового keystore хранилища (дополнительный параметр -p позволит создать keystore, защищенный паролем)

add

Добавление нового параметра в созданный keystore

list

Просмотр параметров, которые хранятся в данный момент в keystore

remove

Удалить существующий параметр из текущего keystore

Для продолжения установки добавьте в opensearch-keystore пароли от приватных ключей для сертификатов. Это будут параметры:

  • plugins.security.ssl.http.pemkey_password_secure. Пароль для приватного ключа от сертификата используемого для шифрования http-уровня.

  • plugins.security.ssl.transport.pemkey_password_secure. Пароль для приватного ключа от сертификата используемого для шифрования транспортного-уровня.

Внимание! opensearch-keystore будет создан для пользователя linux, от которого будут запускаться команды. Не выполняйте команды из под "root"! Используйте для этого пользователя "opensearch".

Создайте keystore с помощью параметра "create". Добавьте необходимые параметры при помощи параметра "add".

#создайе хранилище, если оно еще не существует
sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore create'
 
sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore add plugins.security.ssl.http.pemkey_password_secure'
#после команды будет ожидать ввода данных
sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore add plugins.security.ssl.transport.pemkey_password_secure'
#после команды будет ожидать ввода данных

Настройка параметров в opensearch_dashboards.yml#

Большинство настроек компонента SRHX описываются в файле "/etc/opensearch-dashboards/opensearch_dashboards.yml" и считываются при запуске компонента SRHX.

Внимание!

Должны быть подготовлены сертификаты для межкластерного шифрования и шифрования http-уровня. Здесь используются те же сертификаты, которые были установлены ранее.

Замените все содержимое файла (удалите весь текст в существующем фале) "/etc/opensearch-dashboards/opensearch_dashboards.yml" текстом указанным в готовом образце opensearch_dashboards.yml, изменив значения на необходимые.

Готовый образец opensearch_dashboards.yml

### Шаблон безопасной конфигурации dashboards для использования в компании.
### Подставьте необходимые значения там, где требуется.
### Символы < > указывают значения, которые требуется заменить. При подстановке необходимых значений символы < > использовать не нужно.
 
# Настройки для самого dashboards
server:
  host: "<FQDN или IP текущего хоста>"
  port: 15601
  ssl:
    enabled: true
    certificate: <путь к сертификату, который будет использоваться для шифрования соединений к самому dashboards>
    key: <путь к приватному ключу от сертификата для шифрования соединений к самому dashboards>
    certificateAuthorities: <путь к корневому сертификату>
  
# Настройки для соединения dashboards с сервером OpenSearch
opensearch:
  hosts:
    - https://<FQDN или IP node 1 в кластере>:ХХХХХ
    - https://<FQDN или IP node 2 в кластере>:ХХХХХ
    - https://<FQDN или IP node 3 в кластере>:ХХХХХ
  ssl:
    alwaysPresentCertificate: true
    verificationMode: full
    certificate: <путь к межкластерному сертификату, который будет использоваться для соединения dashboards с сервером>
    key: <путь к приватному ключу от сертификата для соединения dashboards с сервером>
    certificateAuthorities: <путь к корневому сертификату>
  requestHeadersAllowlist:
    - authorization
    - securitytenant
   
# Настройки логгирования
logging:
  dest: /var/log/opensearch-dashboards/opensearch-dashboards.log
  json: false
  verbose: true
 
# Настройки плагина Security
opensearch_security:
  auth.type: "basicauth"
  cookie.secure: true
  session.keepalive: true
# Указанны значения в миллисекундах
opensearch_security.cookie.ttl: 86400000
opensearch_security.session.ttl: 1200000

Описание всех параметров указанных в примере opensearch_dashboards.yml представлено в таблице ниже.

Имя параметра

Описание

server.host: <FQDN или IP текущего хоста>

Сетевой адрес текущего хоста, на котором будет доступен сервер

server.port: 15601

Порт, на котором будет доступен API сервера. Используется для доступа к серверу по HTTP. По умолчанию 5601

server.ssl.enabled: true

Включить HTTP шифрование

server.ssl.certificate: <путь к сертификату для запуска на https>
server.ssl.key: <путь к ключу от сертификата для шифрования соединения>
server.ssl.certificateAuthorities: <путь к корневому сертификату>

Путь до сертификата для шифрования и корневого.
Для раскрытия запароленного приватного ключа от сертификата, необходимо добавить параметр "server.ssl.keyPassphrase" в opensearch-dashboards-keystore и в нем указать пароль от ключа сертификата

opensearch.hosts:
- https://<FQDN или IP node 1 в кластере>:ХХХХХ
- https://<FQDN или IP node 1 в кластере>:ХХХХХ
- https://<FQDN или IP node 1 в кластере>:ХХХХХ

Перечисление адресов и портов всех серверов в кластере. Порт по умолчанию 9200

opensearch.requestHeadersAllowlist:
- authorization
- securitytenant

Перечисление заголовков, которые сервер будет считывать, при отправке запросов к нему

opensearch.ssl.alwaysPresentCertificate: true

Всегда передавать сертификат при запросах к компоненту SRHX

opensearch.ssl.verificationMode: full

Тип проверки при аутентификации соединения с сервером. "full" – требовать сертификат и проверять, содержится ли имя хоста в сертификате

opensearch.ssl.certificate: <путь до межкластерного сертификата>
opensearch.ssl.key: <путь к ключу от сертификата для шифрования соединения>
opensearch.ssl.certificateAuthorities: <путь к корневому сертификату>

Путь до сертификата для шифрования и корневого.
Для раскрытия запароленного приватного ключа от сертификата, необходимо добавить параметр "opensearch.ssl.keyPassphrase" в opensearch-dashboards-keystore и в нем указать пароль от ключа сертификата

logging:
dest: /var/log/opensearch-dashboards/opensearch-dashboards.log
json: false
verbose: true

Директория для хранения логов и настройка параметров логгирования

opensearch_security.auth.type: "basicauth"

Тип аунтентификации. "basicauth" - использование пары логин/пароль

opensearch_security.cookie.secure: true

Шифрование cookies. Необходимо при включении HTTPS

opensearch_security.session.keepalive: true

Поддерживать сессию, пока действуют cookies.
Логическое значение. Если установлено значение true, время жизни сеанса (opensearch_security.session.ttl) продлевается при каждом запросе. По умолчанию: true

#specified values are in milliseconds
opensearch_security.cookie.ttl: 86400000

Время хранения cookies в миллисекундах. Может быть равно 0 для сессии cookie. По умолчанию – 1 час

opensearch_security.session.ttl: 1200000
#specified values are in milliseconds

Время жизни установленной сессии с пользователем. Если установлено, пользователю будет предложено снова войти в систему через заданное время, независимо от файла cookie. По умолчанию: 1 час

i18n.locale: ru

Выбранный язык локализации. Необязательный параметр. По умолчанию - en

Добавление параметров в opensearch-dashboards-keystore#

Для сокрытия чувствительных данных (например логин/пароль) в компоненте SRHX существует "opensearch-dashboards-keystore".

Для работы с "opensearch-dashboards-keystore" запустите "/usr/share/opensearch-dashboards/bin/opensearch-dashboards-keystore <параметр> (–help, чтобы увидеть все доступные параметры)".

Список часто используемых параметров

Параметр

Описание

create

Создание нового keystore хранилища (дополнительный параметр -p позволит создать keystore, защищенный паролем)

add

Добавление нового параметра в созданный keystore

list

Просмотр параметров, которые хранятся в данный момент в keystore

remove

Удалить существующий параметр из текущего keystore

Для продолжения установки добавьте в opensearch-dashboards-keystore логин и пароль для соединения с компонентом SRHX, так же пароли от сертификатов. Это будут параметры:

Параметр

Описание

opensearch.username

Логин пользователя. Должен присутствовать в "internal_users.yml". Стандартное значение "kibanaserver"

opensearch.password

Пароль от логина, указанного в предыдущем пункте. Должен присутствовать в "internal_users.yml". Стандартное значение "kibanaserver"

opensearch.ssl.keyPassphrase

Пароль для приватного ключа от сертификата

server.ssl.keyPassphrase

Пароль для приватного ключа от сертификата

Внимание! Параметры "opensearch.ssl.keyPassphrase" и "server.ssl.keyPassphrase" при добавлении в "opensearch-dashboards-keystore" необходимо вводить в кавычках. Иначе возможно получить ошибку неправильного типа данных.

Создайте keystore с помощью параметра "create". Добавьте необходимые параметры при помощи параметра "add".

Внимание! "opensearch-dashboards-keystore" будет создан для пользователя, который будет запускать команды. Не выполняйте команды из под "root"! Используйте для этого пользователя "opensearch-dashboards".

#Создайте хранилище, если оно еще не существует
sudo su - opensearch-dashboards -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards-keystore create'

sudo su - opensearch-dashboards -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards-keystore add opensearch.username'

#После команды будет ожидать ввода данных
sudo su - opensearch-dashboards -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards-keystore add opensearch.password'

#После команды будет ожидать ввода данных
sudo su - opensearch-dashboards -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards-keystore add opensearch.ssl.keyPassphrase'

#После команды будет ожидать ввода данных
sudo su - opensearch-dashboards -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards-keystore add server.ssl.keyPassphrase'

На этом настройка сервера может быть завершена. Для первого запуска можно использовать ролевую модель по умолчанию с пользователями из internal_users.yml.

Настройка методов аутентификации/авторизации и ролевой модели#

В разделе приведена информация для ознакомления с возможностями ролевой модели компонента SRHX.

  1. Ролевая модель настраивается в файлах "internal_users.yml", "roles.yml", "roles_mapping.yml", которые находятся в "/etc/opensearch/opensearch-security/".

  2. Методы аутентификации настраиваются в файле "config.yml", который находятся в "/etc/opensearch/opensearch-security/".

При старте компонента SRHX в первый раз подгружаются данные из этих файлов. Поэтому на сервере уже будут стандартные пользователи из этих файлов и метод аутентификации "basicauth", который указан в "config.yml". Редактирование файлов выполняется при необходимости.

Создание шифрованного пароля для пользователя#

Все пароли в "internal_users.yml" хранятся в зашифрованном виде. Для шифрования пароля есть скрипт "hash.sh".

  1. Запустите скрипт от пользователя "opensearch".

sudo su - opensearch -c '/usr/share/opensearch/plugins/opensearch-security/tools/hash.sh'
  1. После загрузки скрипта он будет ожидать ввода пароля, который будет зашифрован. В примере используйте пароль "der_parol".

**************************************************************************
** This tool will be deprecated in the next major release of OpenSearch **
**************************************************************************
[Password:]
  1. После ввода данных и нажатия Enter, получите введенный пароль в зашифрованном виде.

$2y$12$MnTVuoi0Ue.Bbn47Np.xFuPjNcGGrazvgAZDkfSDMzSSd69Y3H6SW

Создание пользователя#

  1. В файл "internal_users.yml" добавьте блок нового пользователя:

sudo nano /etc/opensearch/opensearch-security/internal_users.yml
  1. Добавьте, подставив необходимые данные:

pvs_admin:
hash: "$2y$12$MnTVuoi0Ue.Bbn47Np.xFuPjNcGGrazvgAZDkfSDMzSSd69Y3H6SW"
reserved: false
description: "Demo pvs_admin user, using internal role mapping"

Создание роли#

  1. Создайте роль с возможностями администрирования в файле "roles.yml".

sudo nano /etc/opensearch/opensearch-security/roles.yml
  1. Добавьте:

super_administrator:
cluster_permissions:
- 'cluster:admin/*'
- 'cluster:monitor/*'
index_permissions:
- index_patterns:
- '*'
allowed_actions:
- 'indices:admin/*'
- 'indices:data/*'
- 'indices:monitor/*

Связывание созданной роли и пользователя#

  1. Присвойте роль созданному пользователю в файле "roles_mapping.yml".

sudo nano /etc/opensearch/opensearch-security/roles_mapping.yml
  1. Добавьте:

super_administrator:
reserved: false
users:
- "pvs_admin"
description: "Maximum access to everything"

Применение данных к кластеру#

Внимание! После применения новой конфигурации к кластеру, предыдущие параметры будут перезаписаны без возможности восстановления. Для сохранения текущих параметров используйте опцию "-backup".

После редактирования данных в файлах примените их к кластеру.

Запустите скрипт "securityadmin.sh", который находится по пути "/usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh".

При запуске этого скрипта укажите дополнительные параметры.

Параметры

Описание

-backup my-backup-directory

Необязательно. Создание копии текущих настроек сервера

-icl

Игнорировать имя кластера (не использовать вместе с парамтером -cn)

-nhnv

Отключить проверку имени host'a

-cd

Путь до конфигурационных файлов opensearch-security

-h

FQDN или IP-адрес хоста для подключения

-p

API-Порт подключения

-cacert

Путь до корневого сертификата

-cert

Путь до сертификата администратора

-key

Путь до приватного ключа для сертификата администратора

-keypass

Пароль от приватного ключа для сертификата администратора

Параметры для работы с хранилищем сертификатов p12 или jks. Нельзя использовать вместе с параметрами для обычных сертификатов.

Параметры

Описание

-ks

Путь до keystore с сертификатом администратора

-kspass

Пароль от keystore с сертификатом администратора

-ts

Путь до keystore с корневым сертификатом администратора

-tspass

Пароль от keystore с корневым сертификатом администратора

Пример запуска скрипта от пользователя "opensearch":

sudo su - opensearch -c '/usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh \
-icl \
-nhnv \
-cd /etc/opensearch/opensearch-security/ \
-h "<адрес вашего хоста, где запущен компонент SRHX>" \
-p "ХХХХХ" \
-cacert "/etc/opensearch/certs/<имя вашего корневого сертификата>" \
-cert "/etc/opensearch/certs/<имя вашего сертификата администратора>" \
-key "/etc/opensearch/certs/<имя вашего приватного ключа для сертификата администратора>" \
-keypass "<пароль от приватного ключа для сертификата администратора>"'

Пример вывода успешного выполнения скрипта. В конце должна быть надпись "Done with success"

Security Admin v7
Will connect to <адрес вашего хоста, где запущен SRHX>:ХХХХХ ... done
Connected as "CN=<CN вашего админ-сертификата>,O=<имя вашего УЦ>"
OpenSearch Version: 1.3.0
Contacting opensearch cluster 'opensearch' and wait for YELLOW clusterstate ...
Clustername: <название вашего кластера>
Clusterstate: GREEN
Number of nodes: 3
Number of data nodes: 3
.opendistro_security index already exists, so we do not need to create one.
Populate config from /etc/opensearch/opensearch-security/
Will update '/config' with /etc/opensearch/opensearch-security/config.yml
   SUCC: Configuration for 'config' created or updated
Will update '/roles' with /etc/opensearch/opensearch-security/roles.yml
   SUCC: Configuration for 'roles' created or updated
Will update '/rolesmapping' with /etc/opensearch/opensearch-security/roles_mapping.yml
   SUCC: Configuration for 'rolesmapping' created or updated
Will update '/internalusers' with /etc/opensearch/opensearch-security/internal_users.yml
   SUCC: Configuration for 'internalusers' created or updated
Will update '/actiongroups' with /etc/opensearch/opensearch-security/action_groups.yml
   SUCC: Configuration for 'actiongroups' created or updated
Will update '/tenants' with /etc/opensearch/opensearch-security/tenants.yml
   SUCC: Configuration for 'tenants' created or updated
Will update '/nodesdn' with /etc/opensearch/opensearch-security/nodes_dn.yml
   SUCC: Configuration for 'nodesdn' created or updated
Will update '/whitelist' with /etc/opensearch/opensearch-security/whitelist.yml
   SUCC: Configuration for 'whitelist' created or updated
Will update '/audit' with /etc/opensearch/opensearch-security/audit.yml
   SUCC: Configuration for 'audit' created or updated
Will update '/allowlist' with /etc/opensearch/opensearch-security/allowlist.yml
   SUCC: Configuration for 'allowlist' created or updated
SUCC: Expected 10 config types for node {"updated_config_types":["allowlist","tenants","rolesmapping","nodesdn","audit","roles","whitelist","internalusers","actiongroups","config"],"updated_config_size":10,"message":null} is 10 (["allowlist","tenants","rolesmapping","nodesdn","audit","roles","whitelist","internalusers","actiongroups","config"]) due to: null
Done with success

Настройка интеграции#

Настройка интеграции с Secret Management System#

Для включения интеграции с Secret Management System:

  1. Создайте группу Active Directory экземпляра компонента Поисковый движок (SRHX) в Secret Management System.

  2. Активируйте KV-engine и PKI-engine.

  3. Разместите в KV-engine корневой сертификат.

  4. Выпустите PKI-engine роль с привилегиями:

  • Allow IP Subject Alternative Names;

  • Use CSR Subject Alternative Names;

  • Enforce hostnames;

  • Require Common Name;

  • Use CSR Common Name;

  • Allow localhost;

  • Allow bare domains;

  • Allow subdomains;

  • Server flag;

  • Client flag.*

  1. Получите доступ к методу аутентификации Approle.

  2. Получите из Secret Management System параметры roleID и SecretID при помощи API. SecretID и roleID являются данными для доступа к созданным engine в Secret Management System.

  3. Параметр SecretID отправьте по методу wrap Secret Management System с ключом secret_id для получения wrapped-токен. Wrapped-токен - это одноразовый токен (wrapped-token) в виде файла, который необходим для получения SecretID. SecretID и roleID являются данными для доступа к созданному хранилищу в Secret Management System.

  4. Разместите wrapped-токен на файловой системе компонента Поисковый движок (SRHX).

  5. Заполните в файле opensearch.yml параметры:

  • plugins.security.secman.enabled значением true;

  • Параметры plugins.security.ssl.*

  1. Заполните файл secman.yml. Большинство настроек сервера описываются в файле "/etc/opensearch/secman.yml" и считываются при запуске программы. Ниже пример готового файла.

### Подставьте необходимые значения.
 
plugins.security.secman.address: https://secman.host:secman.port
plugins.security.secman.namespace: YOUR_NAME_FOR_NAMESPACE
plugins.security.secman.role_id: 11111111-1111-1111-1111-111111
plugins.security.secman.pki.fetch.role: role-ga-secman-srhx
plugins.security.secman.kv.mount.path: NAMESPACE/KV/MOUNT/PATH/KV2
plugins.security.secman.pki.alt_names: FQDN1,FQDN2,FQDN3
plugins.security.secman.wrapped_token.path: /etc/opensearch/secman/token.key
 
plugins.security.secman.transport.cn: cn.for.transport.certs
 
plugins.security.secman.http.cn: cn.for.http.certs
plugins.security.ssl.http.kv.truststore_filepath: http_path_in_your_kv
plugins.security.ssl.http.kv.truststore_key: jksContent
plugins.security.ssl.http.kv.truststore_template: {{ .jksContent | b64dec }}
plugins.security.ssl.http.kv.password_filepath: http_password_in_your_kv
plugins.security.ssl.http.kv.password_key: jksPassword
plugins.security.ssl.http.kv.password_template: {{ .jksPassword }}
 
plugins.security.secman.audit.cn: cn.for.audit.certs
plugins.security.ssl.audit.keystore_filepath: /etc/opensearch/secman/certs/audit.jks
plugins.security.ssl.audit.kv.truststore_filepath: audit_path_in_your_kv
plugins.security.ssl.audit.kv.truststore_key: jksContent
plugins.security.ssl.audit.kv.truststore_path: /etc/opensearch/secman/certs/audittrust.jks
plugins.security.ssl.audit.kv.truststore_template: {{ .jksContent | b64dec }}
plugins.security.ssl.audit.kv.password_filepath: audit_password_in_your_kv
plugins.security.ssl.audit.kv.password_key: jksPassword
plugins.security.ssl.audit.kv.password_template: {{ .jksPassword }}

Описание всех возможных параметров файла secman.yml

Параметр

Описание параметра

Обязательность

Значение по умолчанию

plugins.security.secman.address

Хост и порт - Адрес Secret Management System

Да

-

plugins.security.secman.namespace

Используемый namespace

Да

-

plugins.security.secman.role_id

RoleID хранилища Secret Management System

Да

-

plugins.security.secman.wrapped_token.path

Место хранения wrapped-токена для получения SecretID

Да

plugins.security.secman.pki.fetch.mount.path

Путь до PKI-engine

Нет

PKI

plugins.security.secman.pki.fetch.role

Имя роли для доступа к PKI

Да

plugins.security.secman.kv.mount.path

Путь до KV engine

Да

plugins.security.secman.kv.engine_version

Версия KV engine. Возможные варианты заполнения: "1" или "2"

Нет

2

plugins.security.secman.token.ttl.sec

Время жизни wrapped-токена. По умолчанию - 86400 секунд (24 часа). ВАЖНО: если в параметре указано значение больше, чем указано на сервере Secret Management System - SRHX будет использовать значение, которое приходит от сервера Secret Management System. Если в параметре указано значение меньше, чем на сервере Secret Management System - SRHX использует значение в параметре plugins.security.secman.token.ttl.sec

Нет

86400s

plugins.security.secman.token.refresh.period.sec

Период обновления wrapped-токена в секундах. По умолчанию 2/3 периода обновления токена на сервере Secret Management System

Нет

По умолчанию 2/3 периода обновления токена на сервере Secman

plugins.security.secman.token.secret.key

Ключ wrapped-токена

Нет

secret_id

plugins.security.secman.open.timeout.sec

Connection timeout при отправке запроса на Secret Management System сервер. По умолчанию 5 секунд

Нет

5

plugins.security.secman.read.timeout.sec

Read timeout при отправке чтении ответа от Secret Management System сервера. По умолчанию 5 секунд

Нет

5

plugins.security.secman.retries.max

Максимальное количество повторов каждого запроса к Secret Management System серверу в случае ошибок. По умолчанию 5 попыток

Нет

5

plugins.security.secman.retries.interval.ms

Время ожидания между повторами в миллисекундах. По умолчанию 200 мс

Нет

200

plugins.security.secman.cert.ttl.sec

Время жизни сертификата в секундах. По умолчанию - 2592000 секунд (1 месяц)
ВАЖНО:
1. Если в параметре указано значение больше, чем указано на сервере Secret Management System – SRHX будет использовать значение, которое приходит от сервера.
2. Если в параметре указано значение меньше, чем на сервере – SRHX использует значение в параметре plugins.security.secman.cert.ttl.sec

Нет

2592000s

plugins.security.secman.cert.refresh.period.sec

Период запуска проверки обновления сертификата. По умолчанию 3600 секунд (1 час). Как часто SRHX проверяет, не наступил ли момент времени для обновления сертификата равный значению "Даты истечения сертификата" в секундах минус значение параметра plugins.security.secman.cert.refresh.before.sec

Нет

3600s (если plugins.security.secman.cert.ttl.sec больше данного параметра) иначе 2/3 от значения параметра plugins.security.secman.cert.ttl.sec

plugins.security.secman.cert.refresh.before.sec

Интервал времени перед моментом устаревания текущего сертификата, в течении которого производятся попытки обновления сертификата. По умолчанию 86400 секунд (24 часа). Интервал времени в секундах, за который необходимо инициировать процесс обновления сертификата до даты его истечения

Нет

24h

plugins.security.secman.pki.alt_names

Массив alt names сертификатов

Да

Настройка сертификата для шифрования внутрикластерного взаимодействия

Параметр

Описание параметра

Обязательность

Значение по умолчанию

plugins.security.secman.transport.cn

CN сертификата транспортного уровня

Да

Настройки сертификата для шифрования внешнего взаимодействия с кластером

Параметр

Описание параметра

Обязательность

Значение по умолчанию

plugins.security.secman.http.cn

CN сертификата http-уровня

Да

-

plugins.security.ssl.http.kv.truststore_filepath

Наименование папки http.truststore в KV

Да

-

plugins.security.ssl.http.kv.truststore_key

Ключ к цепочке KV http.truststore

Да

-

plugins.security.ssl.http.kv.truststore_template

Шаблон для валидации сертификата из KV

Да

-

plugins.security.ssl.http.kv.password_filepath

Путь к хранилищу пароля для KV http.truststore

Да

-

plugins.security.ssl.http.kv.password_key

Ключ к паролю http.truststore

Да

-

plugins.security.ssl.http.kv.password_template

Шаблон для валидации пароля сертификата из KV

Да

-

Настройка сертификата для взаимодействия с провайдером аудита

ВАЖНО: Параметры ниже заполняются только в случае, если настроена интеграция с внешним провайдером аудита согласно пункту "Настройка интеграции с внешним провайдером аудита". Если интеграция не настроена, то удалите параметры ниже из файла secman.yml.

Параметр

Описание параметра

Обязательность

Значение по умолчанию

plugins.security.secman.audit.cn

CN сертификата для шифрования соединения с провайдером аудита

Да

-

plugins.security.ssl.audit.keystore_filepath

Путь к хранилищу сертификата аудита

Да

-

plugins.security.ssl.audit.kv.truststore_path

Путь к хранилищу audit.truststore сертификата аудита

Да

-

plugins.security.ssl.audit.kv.truststore_filepath

Наименование папки audit.truststore в KV

Да

-

plugins.security.ssl.audit.kv.truststore_key

Ключ к цепочке KV сертификата аудита

Да

-

plugins.security.ssl.audit.kv.truststore_template

Шаблон для валидации сертификата аудита

Да

-

plugins.security.ssl.audit.kv.password_filepath

Путь к хранилищу пароля для KV сертификата аудита

Да

-

plugins.security.ssl.audit.kv.password_key

Ключ к паролю сертификата аудита

Да

-

plugins.security.ssl.audit.kv.password_template

Шаблон для валидации пароля KV сертификата аудита

Да

-

Сертификаты для Dashboards не управляются с помощью интеграции с Secret Management System, поэтому их нужно вручную расположить в директории /etc/opeseracn-dashboards/certs и указать ссылки на сертификаты в файле opensearch_dashboards.yml. Владельцем сертификатов пользователь opensearch-dashboards, у него должны быть права на запись в директорию /etc/opeseracn-dashboards/certs.

Настройка интеграции с внешним провайдером аудита#

Установка плагина Аудита#

В составе дистрибутива есть архив с плагином аудита "audit.zip". Распакуйте его содержимое во временную директорию и переместите файлы в нужные директории.

unzip audit.zip -d /tmp/audit && cd /tmp/audit

Содержание архива:

Название компонента

Описание

plugin_audit-1.0-SNAPSHOT.jar

Плагин аудита

plugin-security.policy

Файл с привилегиями для Security-plugin

Файлы указанные выше переместите в плагин Security. "/usr/share/opensearch/plugins/opensearch-security/"

Название компонента

Описание

audt-appl.properties

Файл с настройками аудита

audt-appl.properties переместите в директорию с файлами конфигурации для opensearch. "/etc/opensearch/

Переместите распакованные файлы и измените владельца на opensearch.

sudo cp plugin_audit-1.0-SNAPSHOT.jar plugin-security.policy /usr/share/opensearch/plugins/opensearch-security/ && cp audt-appl.properties /etc/opensearch/
 
sudo chown opensearch:opensearch \
/usr/share/opensearch/plugins/opensearch-security/plugin_audit-1.0-SNAPSHOT.jar \
/usr/share/opensearch/plugins/opensearch-security/plugin-security.policy \
/etc/opensearch/audt-appl.properties
Настройка внешнего провайдера Аудита#

Включение Аудита в SRHX

Для включения аудита и для того, что бы opensearch начал использовать плагин аудита, в opensearch.yml добавьте/измените параметр типа аудита "plugins.security.audit.type" на "ru.sbt.audit.PlatformVAuditSink".

sudo nano /etc/opensearch/opensearch.yml

Пропишите:

plugins.security.audit:
  type: ru.sbt.audit.PlatformVAuditSink
  config.disabled_rest_categories: NONE
  config.disabled_transport_categories: NONE

Настройка параметров Аудита

Большинство настроек Аудита описываются в файле "/etc/opensearch/audt-appl.properties" и считываются при запуске программы.

Замените все содержимое файла (удалите весь текст в существующем фале) "/etc/opensearch/audt-appl.properties" текстом указанным в готовом образе audt-appl.properties, изменив необходимые значения.

Готовый образец audt-appl.properties

#Шаблон конфигурации аудита для использования в компании
#Подставьте необходимые значения там, где требуется.
#Символы < > указывают значения, которые требуется заменить. При подстановке необходимых значений символы < > использовать не нужно.

#Метод балансировки между группами.
#STD - для переключения на вторую группу, при отказе первой. DUP - всегда писать в обе группы одновременно.
union-audit.circuit-breaker.mode=<STD/DUP>

#Код подсистемы
UFS_SUBSYSTEM_CODE=<PLATFORM_V_SEARCH>

#Имя приложения, которое пишет события
EAR_NAME=<PLATFORM_V_SEARCH>

#Версия приложения, которое пишет события
EAR_VERSION=<R1.2>

#Заполнять в соответствии с вашим стендом
CHANNEL=<SUPPORT>
SECTOR=<DICT>

#Если события аудита нужно писать в формате UNION
#Кластер kafka 1
union-audit.kafka.kafka_1.bootstrap.servers=<sample-efs-kafka-server-01:9093>,<sample-efs-kafka-server-02:9093>
union-audit.kafka.kafka_1.security.protocol=SSL
union-audit.kafka.kafka_1.ssl.enabled.protocols=TLSv1.2
union-audit.kafka.kafka_1.request.timeout.ms=1500
union-audit.kafka.kafka_1.delivery.timeout.ms=1500
union-audit.kafka.kafka_1.topic.audit-events-crit-in=<your.events_topic>
union-audit.kafka.kafka_1.topic.audit-events-uncrit-in=<your.events_topic>
union-audit.kafka.kafka_1.topic.audit-metamodel-in=<your.metamodel_topic>

union-audit.balance_group.union_audit.main=true
union-audit.balance_group.union_audit.priority=-1
union-audit.balance_group.union_audit.eventProtocol=UNION
union-audit.balance_group.union_audit.balanceMode=RR
union-audit.balance_group.union_audit.providers=kafka_1
union-audit.balance_group.union_audit.circuit_breaker.failureThreshold=1

#Если события аудита нужно писать в формате AVRO
# Кластер kafka 2
union-audit.kafka.kafka_2.bootstrap.servers=<sample-union-kafka-server-01:9093>
union-audit.kafka.kafka_2.security.protocol=SSL
union-audit.kafka.kafka_2.ssl.enabled.protocols=TLSv1.2
union-audit.kafka.kafka_2.request.timeout.ms=1500
union-audit.kafka.kafka_2.delivery.timeout.ms=1500
union-audit.kafka.kafka_2.topic.audit-events-crit-in=<your.events_topic>
union-audit.kafka.kafka_2.topic.audit-events-uncrit-in=<your.events_topic>
union-audit.kafka.kafka_2.topic.audit-metamodel-in=<your.metamodel_topic>

union-audit.balance_group.union_audit_2.main=false
union-audit.balance_group.union_audit_2.priority=-1
union-audit.balance_group.union_audit_2.eventProtocol=AVRO
union-audit.balance_group.union_audit_2.balanceMode=RR
union-audit.balance_group.union_audit_2.providers=kafka_2
union-audit.balance_group.union_audit_2.circuit_breaker.failureThreshold=1


#Если события аудита нужно писать в формате UFS
# Кластер kafka 3
union-audit.kafka.kafka_3.bootstrap.servers=<sample-kafka-3-server-01:9093>,<sample-kafka-3-server-02:9093>
union-audit.kafka.kafka_3.security.protocol=SSL
union-audit.kafka.kafka_3.ssl.enabled.protocols=TLSv1.2
union-audit.kafka.kafka_3.request.timeout.ms=1500
union-audit.kafka.kafka_3.delivery.timeout.ms=1500
union-audit.kafka.kafka_3.topic.audit-events-crit-in=<your.events_topic>
union-audit.kafka.kafka_3.topic.audit-events-uncrit-in=<your.events_topic>
union-audit.kafka.kafka_3.topic.audit-metamodel-in=<your.metamodel_topic>

# Группа для отправки сообщений в формате AVRO
union-audit.balance_group.union_audit_3.main=false
union-audit.balance_group.union_audit_3.priority=0
union-audit.balance_group.union_audit_3.eventProtocol=UFS
union-audit.balance_group.union_audit_3.balanceMode=RR
union-audit.balance_group.union_audit_3.providers=kafka_3
union-audit.balance_group.union_audit_3.circuit_breaker.failureThreshold=1

**Настройки ниже идут по умолчанию в продукте Platform V Search**

#Если нужно изменить данные настройки, то укажите их в файле audt-appl.properties как показано ниже
#Максимальное количество отправляемых сообщений уровня WARN
#Quota.Threshold.Warn.Count=50000
#Максимальное значение общего размера отправляемых событий уровня WARN
#Quota.Threshold.Warn.TotalSize=50000
#Максимальное количество отправляемых сообщений уровня ERROR
#Quota.Threshold.Error.count=100000
#Максимальное значение общего размера отправляемых событий уровня ERROR
#Quota.Threshold.Error.TotalSize=100000
#Время эскалации с уровня WARN до уровня ERROR в секундах
#Quota.Escalation.Period=2
#Количество попыток отправки batch сообщений уровня WARN
#Batch.Send.Timeout.Warning.Quota=1
#Количество попыток отправки batch сообщений уровня ERROR
#Batch.Send.Timeout.Error.Quota=2
#Максимальное количество асинхронно выполняемых задач отправки событий аудита
#MAX_ASYNC_SEND_TASKS=1001

Описание всех параметров указанных в примере audt-appl.properties:

Имя параметра

Описание

circuit-breaker.mode

Режим отправки событий (стандартный - STD /дублированный - DUP)

UFS_SUBSYSTEM_CODE

Код подсистемы

EAR_NAME

Имя приложения, которое пишет события

EAR_VERSION

Версия приложения, которое пишет события

Kafka (union-audit.kafka.)

Максимальное количество асинхронно выполняемых задач отправки событий аудита

kafka-1.bootstrap.servers

Имя хоста и порт для подключения к главному кластеру 1

kafka-2.bootstrap.servers

Имя хоста и порт для подключения к резервному кластеру 2

kafka_1.ssl.endpoint.identification.algorithm

Алгоритм идентификации кластера 1

kafka_2.ssl.endpoint.identification.algorithm

Алгоритм идентификации кластера 2

kafka_1.security.protocol

Протокол безопасности подключения к кластеру 1

kafka_2.security.protocol

Протокол безопасности подключения к кластеру 2

kafka_1.ssl.enabled.protocols

Список протоколов кластеру кластера 1, поддерживающихся SSL

kafka_2.ssl.enabled.protocols

Список протоколов кластеру кластера 2, поддерживающихся SSL

kafka_1.request.timeout.ms

Максимальное время (в миллисекундах), в течение которого клиент будет ждать ответа от сервера для кластера 1. Если сервер не ответит в течение этого времени, запрос будет считаться неудачным

kafka_2.request.timeout.ms

Максимальное время (в миллисекундах), в течение которого клиент будет ждать ответа от сервера для кластера 2. Если сервер не ответит в течение этого времени, запрос будет считаться неудачным

kafka_1.delivery.timeout.ms

Максимальное время (в миллисекундах), в течение которого запись будет пытаться доставиться перед тем, как будет считаться неудачной в кластера 1

kafka_2.delivery.timeout.ms

Максимальное время (в миллисекундах), в течение которого запись будет пытаться доставиться перед тем, как будет считаться неудачной в кластера 2

kafka_1.topic.audit-events-crit-in

Наименование topic с событиями уровня CRITICAL для кластера 1

kafka_2.topic.audit-events-crit-in

Наименование topic с событиями уровня CRITICAL для кластера 2

kafka_1.topic.audit-events-uncrit-in

Наименование topic с событиями уровня UNCRITICAL для кластера 1

kafka_2.topic.audit-events-uncrit-in

Наименование topic с событиями уровня UNCRITICAL для кластера 2

kafka_1.topic.audit-metamodel-in

Наименование topic регистрации метамоделей для кластера 1

circuit-breaker.mode

Наименование topic регистрации метамоделей для кластера 2

Группы балансировки (union-audit.balance_group.)

Наименование topic регистрации метамоделей для кластера 2

union_audit.main

Признак основного провайдера аудита. По умолчанию true

union_audit_2.main

Признак основного провайдера аудита. По умолчанию false

union_audit.providerClass, union_audit_2.providerClass

Класс провайдера

union_audit.priority, union_audit_2.priority

Приоритет отправки сообщений. По умолчанию - 1

union_audit.eventProtocol, union_audit_2.eventProtocol

Формат отправки сообщений. (OPM AC Единый аудит - параметр UNION, back - параметр UFS, front - параметр AVRO)

union_audit.balanceMode, union_audit_2.balanceMode

Метод балансировки. По умолчанию - RR. (RR - round robin, WRR - weighted round robin)

union_audit.circuit_breaker.recoveryTimeout, union_audit_2.circuit_breaker.recoveryTimeout

Время восстановления соединения

union_audit.circuit_breaker.successThreshold, union_audit_2.circuit_breaker.successThreshold

Максимальное количество попыток отправки сообщений

union_audit.circuit_breaker.mode, union_audit_2.circuit_breaker.mode

Режим работы circuit breaker. По умолчанию - ERROR_WINDOW

union_audit.circuit_breaker.failureThreshold, union_audit_2.circuit_breaker.failureThreshold

Минимальное количество попыток отправки событий

union_audit.providers, union_audit_2.providers

Провайдер, к которому применяются настройки.(Значения kafka_1 или kafka_2)

Режим отправки сообщений (union-audit.)

Провайдер, к которому применяются настройки.(Значения kafka_1 или kafka_2)

Quota.Threshold.Warn.Count

Максимальное количество отправляемых сообщений уровня WARN

Quota.Threshold.Warn.TotalSize

Максимальное значение общего размера отправляемых событий уровня WARN

Quota.Threshold.Error.count

Максимальное количество отправляемых сообщений уровня ERROR

Quota.Threshold.Error.TotalSize

Максимальное значение общего размера отправляемых событий уровня ERROR

Quota.Escalation.Period

Время эскалации с уровня WARN до уровня ERROR в секундах

Batch.Send.Timeout.Warning.Quota

Количество попыток отправки batch сообщений уровня WARN

Batch.Send.Timeout.Error.Quota

Количество попыток отправки batch сообщений уровня ERROR

MAX_ASYNC_SEND_TASKS

Максимальное количество асинхронно выполняемых задач отправки событий аудита

Настройка SSL соединения#

При подключении по протоколу SSL, укажите плагин месторасположение сертификатов и паролей от них в виде аргументов для java машины в файле "/etc/opensearch/audt-appl.properties".

Параметры необходимые для работы плагина аудита по SSL:

# Полный путь до кейстора с сертификатами для подключения к kafka
audit.kafka.ssl.keystore.location=/etc/opensearch/secman/certs/keystore.jks
# Полный путь до кейстора с корневым сертификатом для подключения к kafka
audit.kafka.ssl.keystore.location=/etc/opensearch/secman/certs/keystore.jks

Для этого откройте файл "/etc/opensearch/audt-appl.properties", и укажите в нем эти переменные, заменив значения на необходимые.

sudo nano /etc/opensearch/audt-appl.properties
audit.kafka.ssl.keystore.location=/etc/opensearch/secman/certs/keystore.jks
audit.kafka.ssl.truststore.location=/etc/opensearch/secman/certs/truststore.jks

Добавление параметров в opensearch-keystore

Для сокрытия чувствительных данных (например логин/пароль) в компоненте SRHX существует opensearch-keystore. Добавьте в opensearch-keystore пароли от keystore с сертификатами шифрования Аудита. Это будут параметры:

  • plugins.security.ssl.audit.keystore_password_secure. Пароль от keystore с сертификатом для шифрования соединения Аудита. (сертификаты для подключения к kafka).

  • plugins.security.ssl.audit.truststore_password_secure. Пароль от keystore с корневым сертификатом для шифрования соединения Аудита.

Внимание! "opensearch-keystore" будет создан для пользователя linux, от которого будут запускаться команды. Не выполняйте команды из под "root"! Используйте для этого пользователя "opensearch".

Создайте keystore с помощью параметра "create", если он еще не был создан до этого. Если keystore был создан при конфигурации сервера, перейдите к шагу добавления параметров.

Создание нового хранилища

#создаем хранилище, если оно еще не существует
sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore create'

Добавьте необходимые параметры при помощи параметра "add".

sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore add plugins.security.ssl.audit.keystore_password_secure'
#после команды будет ожидать ввода данных
sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore add plugins.security.ssl.audit.truststore_password_secure'
#после команды будет ожидать ввода данных

Внимание!

Подраздел актуален если интеграция с Security Managment System не настроена.

Настройка интеграции с компонентом IAM Proxy/СУДИР (опционально)#

Методы аутентификации настраиваются в файле "config.yml", который находятся в "/etc/opensearch/opensearch-security/".

Пример стандартного config.yml

---
_meta:
  type: "config"
  config_version: 2
 
config:
  dynamic:
    #do_not_fail_on_forbidden: false
    http:
      anonymous_auth_enabled: false
      xff:
        enabled: false
        internalProxies: '192\.168\.0\.10|192\.168\.0\.11' # regex pattern
        #internalProxies: '.*' # trust all internal proxies, regex pattern
        #remoteIpHeader:  'x-forwarded-for'
    authc:
      basic_internal_auth_domain:
        description: "Authenticate via HTTP Basic against internal users database"
        http_enabled: true
        transport_enabled: true
        order: 0
        http_authenticator:
          type: basic
          challenge: true
        authentication_backend:
          type: intern
      proxy_auth_domain:
        description: "Authenticate via proxy"
        http_enabled: false
        transport_enabled: false
        order: 1
        http_authenticator:
          type: proxy
          challenge: false
          config:
            user_header: "x-proxy-user"
            roles_header: "x-proxy-roles"
        authentication_backend:
          type: noop
      jwt_auth_domain:
        description: "Authenticate via Json Web Token"
        http_enabled: false
        transport_enabled: false
        order: 2
        http_authenticator:
          type: jwt
          challenge: false
          config:
            signing_key: "base64 encoded HMAC key or public RSA/ECDSA pem key"
            jwt_header: "Authorization"
            jwt_url_parameter: null
            jwt_clock_skew_tolerance_seconds: 30
            roles_key: null
            roles_sub_key: null
            subject_key: null
        authentication_backend:
          type: noop
      clientcert_auth_domain:
        description: "Authenticate via SSL client certificates"
        http_enabled: false
        transport_enabled: false
        order: 3
        http_authenticator:
          type: clientcert
          config:
            username_attribute: cn #optional, if omitted DN becomes username
          challenge: false
        authentication_backend:
          type: noop

Описание основных используемых параметров указанных в примере config.yml:

Имя параметра

Описание

config.dynamic: do_not_fail_on_forbidden: false

Не показывать ошибку или отказ пользователю, если у него нет прав доступа к обращаемому адресу/полю/сегменту

config.dynamic.http: anonymous_auth_enabled: false

Разрешить доступ неавторизованным пользователям. По умолчанию false.
Используется только для работы плагина HealthCheck. Для работы плагина необходимо установить значение "true" и создать роль "anonymous" без каких-либо прав

config, dynamic, authc

Здесь происходит перечисление тех методов аутентификации, которые будут использоваться в данном кластере

basic_internal_auth_domain:

Имя метода

description: "Authenticate via HTTP Basic against internal users database"

Краткое описание метода

http_enabled: true

Включить работу метода на http-уровне

transport_enabled: true

Включить работу метода на транспортном-уровне

order: 4

Порядок вызова данного метода.
Если включено сразу несколько методов аунтентификации, то у них должен быть настроен порядок вызова. Сервер сначала будет пробовать метод, у которого данный параметр меньше. Если он не сработает, то сервер попробует метод со следующим числом

http_authenticator:

Блок настройки параметров данного метода аутентификации

type: basic

Тип используемой аутентификации. "basic" - по логин/паролю

challenge: true

Требовать запрос данных при каждом запросе. Сервер будет ожидать заголовки аутентификации в запросе

authentication_backend:

Блок настройки проверки аутентифкационных данных

type: intern

Тип проверки. "intern" - проверка происходит по внутренней базе компонента SRHX

Настройка аутентификации с IAM/СУДИР без проверки токена#

Внимание! Для соединения с компонентом IAM Proxy в компоненте SRHX должны использоваться сертификаты, подписанные тем же УЦ, что и сертификаты в "Proxy".

  1. Замените все содержимое файла "/etc/opensearch/opensearch-security/config.yml" на текст, указанный ниже:

config.yml для Proxy

_meta:
  type: "config"
  config_version: 2
 
config:
  dynamic:
    http:
      anonymous_auth_enabled: false
      xff:
        enabled: true
        remoteIpHeader: "x-forwarded-for"
        internalProxies: "SRHX-ip-address"
 
    authc:
      proxy_auth_domain:
        description: "Authenticate via proxy"
        http_enabled: true
        transport_enabled: true
        order: 0
        http_authenticator:
          type: proxy
          challenge: false
          config:
            user_header: "x-proxy-user"
            roles_header: "x-proxy-roles"
        authentication_backend:
          type: noop
      basic_internal_auth_domain:
        description: "Authenticate via HTTP Basic against internal users database"
        http_enabled: true
        transport_enabled: true
        order: 1
        http_authenticator:
          type: basic
          challenge: false
        authentication_backend:
          type: intern
  1. При заполнении используйте следующие параметры.

Имя параметра

Описание

xff:

remoteIpHeader

В данном заголовке передаются все адреса серверов прокси, которые будут использоваться. Все остальные адреса, которые не будут здесь указаны, система будет считать клиентскими.
"x-forwarded-for" - стандартное название. Точное значение параметра уточните у владельца прокси

internalProxies

Вместо указывается IP-адрес, на котором запущен компонент SRHX. ВНИМАНИЕ! Обязательно указывать именно IP адрес

proxy_auth_domain.http_authenticator:

user_header

Должно быть указано имя заголовка http-запроса, в котором будет содержаться логин пользователя

roles_header

Должно быть указано имя заголовка http-запроса, в котором будут содержаться роли пользователя. Роли отправляются самим прокси

"x-proxy-user" и "x-proxy-roles" – стандартные названия заголовков. Точное значение параметра уточните у владельца прокси.

Внимание! После редактирования файла "config.yml", примените новые значения, с помощью запуска скрипта "securityadmin.sh". Этот процесс подробно описан в разделе Настройка методов аутентификации/авторизации и ролевой модели в пункте Применение данных к кластеру данного документа.

  1. Добавьте в файл "opensearch_dashboards.yml" следующие параметры:

Пример заполнения файла opensearch_dashboards.yml:

opensearch_dashboards.yml для Proxy

server:
  host: "имя хоста"
  port: порт
  basePath: /pvs
  rewriteBasePath: true
  ssl:
    enabled: true
    keystore.path: /etc/opensearch/certs/keystore.p12
 
opensearch:
  hosts:
    - https://имя хоста SRHX сервера:порт
  ssl:
    alwaysPresentCertificate: true
    verificationMode: full
    certificateAuthorities: /etc/opensearch/certs/keystore.p12
    keystore.path: /etc/opensearch/certs/keystore.p12
  requestHeadersAllowlist:
    - authorization
    - securitytenant
    - x-forwarded-for
    - x-proxy-user
    - x-proxy-roles
 
logging:
  dest: /var/log/opensearch-dashboards.log
  json: false
  verbose: true
 
opensearch_security:
  auth.type: "proxy"
  proxycache:
    user_header: "x-proxy-user"
    roles_header: "x-proxy-roles"
  cookie.secure: true
  1. Для настройки соединения заполните следующие параметры:

Имя параметра

Описание

opensearch.requestHeadersAllowlist

В данном параметре перечисляются имена заголовков, которые будут считываться из HTTP-запроса.
Должны быть указаны дополнительные значения "x-forwarded-for","x-proxy-user","x-proxy-roles".
Например: opensearch.requestHeadersAllowlist: ["authorization", "security_tenant", "x-forwarded-for","x-proxy-user","x-proxy-roles"]

opensearch_security.auth.type

Отвечает за разрешенные типы аутентификации - данный параметр должен иметь значение "proxy"

opensearch_security.proxycache.user_header

Должно быть указано имя заголовка http-запроса, в котором будет содержаться логин пользователя

opensearch_security.proxycache.roles_header

Должно быть указано имя заголовка http-запроса, в котором будут содержаться роли пользователя. Роли отправляются самим прокси

Если подключение происходит к прокси, у которого существует несколько ответвлений, то дополнительно должны быть заполнены следующие параметры:

Имя параметра

Описание

server.basePath

Данный параметр должен содержать адрес ответвления. Например, если ответвление на IAM находится по адресу "https://:/example", то в параметре basePath должно быть указано значение /example

server.rewriteBasePath

Данный параметр позволяет вырезать указанный выше дополнительный адрес из запросов к серверу. Должен быть в значении "true"

Внимание! После внесенных изменений перезагрузите компонент SRHX.

Настройка аутентификации с IAM Proxy/СУДИР с проверкой токена#

  1. Замените все содержимое вашего файла "/etc/opensearch/opensearch-security/config.yml" на текст, указанный ниже:

config.yml для JWT

_meta:
  config_version: 2
  type: config
  
config:
  dynamic:
    http:
      anonymous_auth_enabled: false
      xff:
        enabled: false
    authc:
      openid_auth_domain:
        description: Authenticate via proxy
        http_enabled: true
        transport_enabled: true
        order: 0
        http_authenticator:
          type: openid
          challenge: false
          config:
            openid_connect_url: https://your-iam-proxy/auth/realms/PlatformAuth/.well-known/openid-configuration
            openid_connect_idp:
              enable_ssl: true
              verify_hostnames: false
              pemtrustedcas_filepath: /etc/opensearch/certs/ca.crt
            jwks_uri: https://your-iam-proxy/auth/realms/PlatformAuth/protocol/openid-connect/certs
            subject_key: sub
            roles_key: groups
        authentication_backend:
          type: noop
      basic_internal_auth_domain:
        description: "Authenticate via HTTP Basic against internal users database"
        http_enabled: true
        transport_enabled: true
        order: 1
        http_authenticator:
          type: basic
          challenge: false
        authentication_backend:
          type: intern
  1. Заполните:

Имя параметра

Описание

openid_connect_url

Должна быть указана ссылка на параметры конфигурации OIDC. Обычно ссылка имеет вид "http(s)://:/auth/realms//.well-known/openid-configuration"

openid_connect_idp.pemtrustedcas_filepath

Должен быть указан путь к корневому сертификату, который использует провайдер

jwks_uri

Должна быть указана ссылка на место хранения публичных ключей конфигурации OIDC

subject_key

Должно быть установлено значение параметра токена с логином пользователя

roles_key

Должно быть установлено значение параметра токена с ролями пользователя

Внимание!

После редактирования файла "config.yml", примените новые значения, с помощью запуска скрипта "securityadmin.sh". Этот процесс подробно описан в разделе Настройка методов аутентификации/авторизации и ролевой модели в пункте Применение данных к кластеру данного документа.

  1. Добавьте в файл "opensearch_dashboards.yml" следующие параметры:

Пример заполнения файла opensearch_dashboards.yml:

opensearch_dashboards.yml для JWT

server:
  host: "имя хоста"
  port: порт
  basePath: /pvs
  rewriteBasePath: true
  ssl:
    enabled: true
    keystore.path: /etc/opensearch/certs/keystore.p12
  
opensearch:
  hosts:
    - https://имя хоста SRHX сервера:порт
  ssl:
    alwaysPresentCertificate: true
    verificationMode: full
    certificateAuthorities: /etc/opensearch/certs/keystore.p12
    keystore.path: /etc/opensearch/certs/keystore.p12
  requestHeadersAllowlist:
    - authorization
    - securitytenant
  
logging:
  dest: /var/log/opensearch-dashboards.log
  json: false
  verbose: true
  
opensearch_security:
  auth.type: "jwt"
  jwt.enabled: true
#  jwt.url_param: "url_param"
  cookie.secure: true
  1. Для настройки соединения заполните следующие параметры:

Имя параметра

Описание

opensearch.requestHeadersAllowlist

В данном параметре перечисляются имена заголовков, которые сервис будет считывать из HTTP-запроса.
Должны быть добавлены значения "authorization" и "security_tenant". Например: opensearch.requestHeadersAllowlist: ["authorization", "security_tenant"]

opensearch_security.auth.type

Отвечает за разрешенные типы авторизации - данный параметр должен иметь значение "jwt"

opensearch_security.jwt.enabled

Должен быть в значении "true"

opensearch_security.jwt.url_param

Если токен передается не в http-заголовке, а как параметр URL, то нужно указать этот параметр здесь

Внимание! После внесенных изменений перезагрузите компонент SRHX.

Обновление#

Для обновления на новую версию или переустановки компонента SRHX:

  1. Очистите директорию "/usr/share/opensearch/*".

  2. Распакуйте новую версию компонента SRHX в эту директорию.

  3. Измените владельца и права на директорию и файлы.

  4. Установите плагины для компонента SRHX. Каталог "/etc/opensearch" нет необходимости изменять, даже при обновлении версии компонента SRHX. Все настройки сохраняются и автоматически будут обновлены.

Удаление#

Удаление дополнительных средств защиты информации осуществляется в соответствии с документацией к ним. Для удаления компонента SRHX необходимо удалить главную папку opensearch и opensearch-dashboards:

sudo rm -rf /usr/share/opensearch /usr/share/opensearch-dashboards

Проверка работоспособности#

Учетная запись под которой осуществляется проверка, должна иметь достаточно прав, для этих действий. В стандартной ролевой модели можно использовать "admin/admin".

После настройки шифрования работает https, необходимо подставить используемые сертификаты на сервере в запрос.

Пример запроса через curl с сертификатами:

curl -XGET https://host:ХХХХХ/_cluster/health \
--cacert /etc/opensearch/certs/root.crt \
--cert /etc/opensearch/certs/pvs.crt \
--key /etc/opensearch/certs/pvs.key \
-u admin:admin

Проверка жизнеспособности кластера cluster/health#

GET https://host:ХХХХХ/_cluster/health 

Пример ответа:

Проверка доступности компонента SRHX#

GET https://host:ХХХХХ/

Пример ответа:

Проверка наличия плагинов#

После успешной установки компонента необходимо проверить, что плагины были установлены.

Проверить в пришедшем списке присутствие всех устанавливаемых плагинов на каждой node.

GET https://host:ХХХХХ/_cat/plugins?v

Пример ответа:

Внимание!

Для работы HealthCheck-плагина необходимо включить возможность анонимных запросов. Это настраивается в "config.yml" и применяется с помощью скрипта "securityadmin.sh".

Параметр:

config:
  dynamic:
    http:
      anonymous_auth_enabled: true

Плагин HealthCheck отвечает за периодическую отправку запросов к компоненту, проверяющих жизнеспособность. Проверьте, что данный Endpoint работоспособен.

Перейдите в браузере по адресу "https://host:ХХХХХ/ufs-healthcheck/test" или выполните запрос к healthcheck:

GET https://host:ХХХХХ/ufs-healthcheck/<любой англ текст>

Пример ответа:

Проверка работоспособности плагина Prometheus-exporter#

Плагин Prometheus-exporter отвечает за сбор метрик кластера и создания endpoint с доступом к собранным данными в формате prometheus. Проверьте, что данный endpoint работоспособен.

GET https://host:ХХХХХ/_prometheus/metrics

Пример ответа:

Проверка корректной работоспособности аудита#

  1. Настройте стенд компонента SRHX с плагином Audit.

  2. Выполните запрос на проверку включения аудита.

  3. Проверьте, что параметр "enabled": true и параметр "enabled": true в объекте compliance

GET https://host:port/_opendistro/_security/api/audit

Basic Auth: admin/admin

Пример ответа:

{
    "_readonly": [],
    "config": {
        "compliance": {
            "enabled": true,
            "write_log_diffs": false,
            "read_watched_fields": {},
            "read_ignore_users": [
                 "kibanaserver"
            ],
            "write_watched_indices": [],
            "write_ignore_users": [
                "kibanaserver"
            ],
            "read_metadata_only": true,
            "write_metadata_only": true,
            "external_config": false,
            "internal_config": true
        },
        "enabled": true,
        "audit": {
            "ignore_users": [
                "kibanaserver"
            ],
            "ignore_requests": [],
            "disabled_rest_categories": [
                "AUTHENTICATED",
                "GRANTED_PRIVILEGES"
            ],
            "disabled_transport_categories": [
                "AUTHENTICATED",
                "GRANTED_PRIVILEGES"
            ],
            "log_request_body": true,
            "resolve_indices": true,
            "resolve_bulk_requests": false,
            "exclude_sensitive_headers": true,
            "enable_transport": true,
            "enable_rest": true
        }
    }
}
  1. Выполните запрос на создание индекса "test_audit" и загрузку в него документа через пользователя "admin".

PUT https://host:port/_bulk

Body:

{ "index" : { "_index" : "test_audit", "_id" : "0001" } }
{ "technic": "ноут это моя жизнь в этом мире","furniture": "стол, стул","companies": "Сбертех","date": "2023-06-13T10:30:00","specialists": "лидер разработчик","rating": 2,"status": true,"colors": "Багровый красный изотоп","age": 1,"phrases": "Шёл по лесу и увидел дуб"}

Basic Auth: admin/admin

p.s. Для Postman или аналогичных по, в запросе требуется оставлять последнюю строчку пустой

Ответ 200 ОК

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "test_audit"
}
  1. Перейдите в kafka и найдите событие "REST_AUTHENTICATED" по наименованию индекса "test_audit".

Пример события в kafka:

{
"createdAt": 1700747748148,
"id": "4b8ce32c-fd36-4d9a-a52a-3a3d8e715c27",
"metamodelVersion": "589F77C656B584E63087FD87C8AC0E6F32B47DC52B8773C186D79B47F8BA0997",
"metamodelHash": "3F9F54E6444A91F5BBBABF2D0AC746F5E6E81C55B117952D8C252197AC20D7D9",
"module": "PLATFORM_V_SEARCH",
"name": "SEARCH_PLUGIN_AUDIT_REST_AUTHENTICATED",
"nodeId": "",
"requestId": null,
"userName": "",
"userLogin": "admin",
"userNode": "{значение}",
"session": "NO SESSION",
"sourceSystem": "UFS",
"tags": [],
"params": [
{
"name": "CLUSTER_NAME",
"value": "srhx_mono_cluster"
},
{
"name": "IS_ADMIN_DN",
"value": "false"
},
{
"name": "NODE_HOST_ADDRESS",
"value": "{значение}"
},
{
"name": "NODE_HOST_NAME",
"value": "{значение}"
},
{
"name": "NODE_ID",
"value": "Y_MN0sMuT7iRe_fXsbjrlg"
},
{
"name": "NODE_NAME",
"value": "{значение}"
},
{
"name": "REQUEST_BODY",
"value": "{ \"index\" : {\"_id\" : \"0001\" } }\n{ \"technic\": \"Ноут\",\"furniture\": \"стол, стул\",\"companies\": \"Сбертех\",\"trees\": \"Дуб\",\"specialists\": \"лидер разработчик\",\"games\": \"Прятки\",\"sports\": \"Футбол\",\"colors\": \"Багровый красный\",\"age\": 1,\"phrases\": \"Шёл по лесу и увидел дуб\",\"location\":\"34.423,58.432\"}\n{ \"index\" : {\"_id\" : \"0002\" } }\n{ \"technic\": \"Комп\",\"furniture\": \"Диван\",\"companies\": \"Сбертехи\",\"trees\": \"Дубы\",\"specialists\": \"Тестировщик\",\"games\": \"Догонялки\",\"sports\": \"Баскетбол\",\"colors\": \"Багровый\",\"age\":\"1\",\"phrases\": \"На холме росла высокая липа\",\"location\":\"36.683,54.983\"}\n"
},
{
"name": "REQUEST_EFFECTIVE_USER",
"value": "admin"
},
{
"name": "REQUEST_INITIATING_USER",
"value": "admin"
},
{
"name": "REQUEST_LAYER",
"value": "REST"
},
{
"name": "REST_REQUEST_HEADERS",
"value": "{Accept\u003d[*/*], User-Agent\u003d[PostmanRuntime/7.31.3], Connection\u003d[keep-alive], Postman-Token\u003d[0b355216-27ca-427b-83a1-e18f7d441049], Host\u003d[ADDRESS:19200], Accept-Encoding\u003d[gzip, deflate, br], Content-Length\u003d[742], Content-Type\u003d[application/json]}"
},
{
"name": "REST_REQUEST_METHOD",
"value": "PUT"
},
{
"name": "REST_REQUEST_PARAMS",
"value": "{index\u003dtest_audit}"
},
{
"name": "REST_REQUEST_PATH",
"value": "/test_audit/_bulk"
},
{
"name": "UTC_TIMESTAMP",
"value": "2023-11-23T13:55:48.147+00:00"
},
{
"name": "ufs.auditContextUUID",
"value": "8146cb89-dc1b-4303-954d-384394847cdf"
},
{
"name": "ufs.categoryCode",
"value": "OTHER"
},
{
"name": "ufs.channel",
"value": "PVS"
},
{
"name": "ufs.criticality",
"value": "UNCRITICAL"
},
{
"name": "ufs.earName",
"value": "PLATFORM_V_SEARCH"
},
{
"name": "ufs.earVersion",
"value": "R1.2"
},
{
"name": "ufs.employeeLogin",
"value": null
},
{
"name": "ufs.gosbCode",
"value": null
},
{
"name": "ufs.groupCode",
"value": "SEARCH_PLUGIN_AUDIT"
},
{
"name": "ufs.isInitContext",
"value": "true"
},
{
"name": "ufs.isSuccess",
"value": "true"
},
{
"name": "ufs.orgUid",
"value": null
},
{
"name": "ufs.osbCode",
"value": null
},
{
"name": "ufs.sector",
"value": "XXX"
},
{
"name": "ufs.serverLocation",
"value": "{значение}"
},
{
"name": "ufs.terBankCode",
"value": null
},
{
"name": "ufs.vspCode",
"value": null
}
],
"changedParams": []
}

Проверка работоспособности internal users при настроенной аутентификации OIDC (JWT)#

  1. Произведите настройку в opensearch-security/config.yml в соответствии с разделом Настройка аутентификации с IAM Proxy/СУДИР с проверкой токена данного руководства.

Если доступ отсутствует, то обратитесь к администратору стенда, чтобы он настроил параметры для конфигурационных параметров сервера.

  1. Выполните запрос к серверу без выбора параметра авторизации.

GET https://host:port/ No Auth

Ответ 401

Отображается ошибка о том что пользователь не авторизован.

  1. Выполните запрос к серверу с выбором Basic Auth авторизации и пользователем IAM.

GET https://host:port/

Basic Auth

user IAM / password IAM

Ответ 401

Отображается ошибка о том что пользователь не авторизован, так как пользователь не существует на сервере.

  1. Выполните запрос для проверки, что internal user может отправить запрос на сервер.

GET https://host:port/

Basic Auth: admin / admin

Ответ 200 ОК

Отображается информация о сервере.

Проверка работоспособности internal users при настроенной аутентификации IAM Proxy#

  1. Произведите настройку в opensearch-security/config.yml в соответствии с разделом Настройка аутентификации с IAM/СУДИР без проверки токена данного руководства.

  2. Выполните запрос к серверу без выбора параметра авторизации.

GET https://host:port/

No Auth

Ответ 401

Отображается ошибка о том, что пользователь не авторизован.

  1. Выполните запрос к серверу с выбором Basic Auth авторизации и пользователя IAM.

GET https://host:port/

Basic Auth

Если доступ отсутствует, то обратитесь к администратору стенда.

Ответ 401

Отображается ошибка о том, что пользователь не авторизован, так как пользователь не существует на сервере.

  1. Выполните запрос к серверу используя "Basic Auth" и пользователя admin.

GET https://host:port/

Basic Auth: admin / admin

Ответ 200 ОК

Отображается информация о сервере.

Откат#

Автоматической процедуры отката нет.

  1. Откат к предыдущей версии компонента SRHX представляет собой удаление и установку последней стабильной версии компонента SRHX.

  2. Для отката необходимо выполнить установку предыдущей стабильной версии компонента SRHX в соответствии с разделом Установка текущего документа.

Часто встречающиеся проблемы и пути их устранения#

При возникновении проблемы с отображением страницы конкретного шаблона индекса рекомендуется:

  • открыть файл .i18nrc.json вызвав команду sudo nano /usr/share/opensearch-dashboards/.i18nrc.json;

  • в параметре translations (в стандартном файле - 76 строка) убрать значение в двойных кавычках: Было "translations": ["translations/ru.json"]; Стало "translations": [];

  • сохранить файл .i18nrc.json;

  • перезагрузить сервис dashboards, чтобы применить изменения.

Чек-лист валидации установки#

  1. Убедитесь, что выполнена подготовка окружения согласно разделу Подготовка окружения данного документа.

  2. Выполните проверку работоспособности компонента SRHX согласно разделу Проверка работоспособности настоящего документа.