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

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

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

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

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

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

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

Категория ПО

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

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

Версия

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

Описание

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

Да

ОС Альт 8 СП

9 и выше

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

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

Red Hat Enterprise Linux

8.8.1 и выше

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

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

Среда контейнеризации

Да

Kubernetes

1.26 и выше

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

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

Java-машина

Да

OpenJDK

17.0.12.0.7-2 и выше до потери обратной совместимости (в рамках 17 версии)

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

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

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

Да

NodeJS

18.20.4-1 и выше до потери обратной совместимости (в рамках 18 версии)

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

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

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

Нет

СУДИР

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

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

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

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

Нет

Kafka

3.4.1 и выше

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

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

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

Нет

HashiCorp Vault

1.15.0 и выше

Опционально

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

Secret Management System

1.16.1 и выше до потери обратной совместимости

Опционально

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

Браузер

Да

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

19.1.3.281 и выше

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

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

Сервис интеграции и оркестрации микросервисов в облаке

Да

Istio

1.12 и выше

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

ISTIO - это платформа для управления трафиком и обеспечения безопасности микросервисных приложений

Примечание

*

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

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

**

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

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

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

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

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

Код

Версия

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

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

Описание

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

Platform V IAM SE

IAM

1.8.12 и выше до потери обратной совместимости

AUTH IAM Proxy

Нет

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

СУДИР

Platform V SberLinux OS Server

SLO

9.4.2 и выше до потери обратной совместимости

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

Да

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

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

Platform V Corax

KFK

10.340.2 и выше до потери обратной совместимости

KFKA Corax

Нет

Программный брокер сообщений, представляющий собой распределенную, отказоустойчивую, реплицированную и легко масштабируемую систему передачи сообщений, рассчитанную на высокую пропускную способность. Данная инсталляция Platform V Corax не входит в состав компонента SRHX, принадлежит провайдеру аудита и необходима для передачи событий аудита. Если нет необходимости в передачи событий провайдеру аудита, то настройка взаимодействия с инсталляцией Platform V Corax не требуется. При необходимости передачи данных из Kafka (Platform V Corax) в компонент Поисковый движок (SRHX) используйте сервис DataPrepper, доступный в дистрибутиве компонента SRHX.

Kafka

Platform V DropApp

K8S

2.1.0 и выше до потери обратной совместимости

K8SC K8S Core

Да

Дистрибутив Kubernetes со встроенными механизмами мультитенантности и бессерверным исполнением

Kubernetes

Platform V Synapse Service Mesh

SSM

4.3 и выше до потери обратной совметимости

IGEG Граничный и сервисный прокси

Да

Synapse Service Mesh предназначен для установки и подключения к namespace (проекту)

Istio

Примечание

***

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

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

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

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

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

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

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

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

Количество

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

Search-KNN

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

Search-custom-codecs

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

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

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

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

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

  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
    

Установка java#

Установите последнюю доступную в репозитории Java 17. Удалите директорию /usr/share/opensearch/jdk, если существует. Выполните symlink из /etc/alternatives/jre в /usr/share/opensearch/jdk.

ln -s /etc/alternatives/jre /usr/share/opensearch/jdk

Добавление переменных для работы компонента 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
    
  2. Проверьте, что параметр для пользователя задан верно и его значение равно установленному в предыдущем пункте. Проверка возможна только под пользователем, для которого применяли значение:

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

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

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

Название

Описание

/usr/share/opensearch

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

/etc/opensearch

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

/var/log/opensearch

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

/var/lib/opensearch

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

/etc/opensearch/secman/certs

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

/etc/opensearch/usertoken

Директория для перекладки wrapped-токена компонента SRHX

/usr/share/opensearch-dashboards

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

/etc/opensearch-dashboards

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

/var/log/opensearch-dashboards

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

/etc/opensearch-dashboards/secman/certs

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

/etc/opensearch-dashboards/usertoken

Директория для перекладки wrapped-токена Dashboards

Создайте пустые файлы для переменных компонента 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.5.0-*-distrib.zip -d /tmp && cd /tmp/srhx/
    
  2. Выполните следующие команды из директории, где находятся распакованные файлы.

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

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

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

Описание

search-server-1.5.0

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

opensearch-security-1.5.0

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

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

opensearch-index-management-1.5.0,
opensearch-job-scheduler-1.5.0,
opensearch-notifications-1.5.0,
opensearch-notifications-core-1.5.0,
prometheus-exporter-1.5.0,
search-healthcheck-plugin-1.5.0,
opensearch-sql-1.5.0,
opensearch-knn-1.5.0,
opensearch-custom-codecs-1.5.0

dashboard-1.5.0

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

security-dashboards-1.5.0

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

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

index-management-dashboards-1.5.0,
queryWorkbenchDashboards-1.5.0
notifications-dashboards-1.5.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 opensearch-knn-*.zip opensearch-custom-codecs-*.zip /usr/share/opensearch/

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

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

    sudo unzip -q ./search-server-1.5.0.zip -d /usr/share/opensearch/
    
  2. Переместите конфигурационные файлы из /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/
    
  3. Укажите директории в конфигурационном файле 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"
    
  4. Переместите плагины в домашнюю директорию компонента Поисковый движок (SRHX):

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

Установка Dashboards#

Примечание

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

Внимание!

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

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

sudo unzip -q ./dashboards-*.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 ./dashboards-1.5.0.zip -d /usr/share/opensearch-dashboards/
    
  2. Переместите плагины для opensearch-dashboards к нему в домашнюю директорию:

    sudo mv security-dashboards-1.5.0.zip queryWorkbenchDashboards-1.5.0.zip index-management-dashboards-1.5.0.zip notifications-dashboards-1.5.0.zip /usr/share/opensearch-dashboards/
    
  3. Переместите конфигурационные файлы /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 750 -R /var/log/opensearch
sudo chmod 750 /etc/opensearch
sudo chmod 0700 -R /etc/opensearch/secman
sudo chmod 770 -R /etc/opensearch/usertoken

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-dashboards/secman
sudo chmod 770 -R /etc/opensearch-dashboards/usertoken

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

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

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

Описание

search-server-1.5.0

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

opensearch-security-1.5.0

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

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

opensearch-index-management-1.5.0

opensearch-job-scheduler-1.5.0

opensearch-notifications-1.5.0

opensearch-notifications-core-1.5.0

prometheus-exporter-1.5.0

search-healthcheck-plugin-1.5.0

opensearch-sql-1.5.0

opensearch-knn-1.5.0

opensearch-custom-codecs-1.5.0

dashboard-1.5.0

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

security-dashboards-1.5.0

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

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

index-management-dashboards-1.5.0

queryWorkbenchDashboards-1.5.0

notifications-dashboards-1.5.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-knn-1.5.0.zip \
    file:///usr/share/opensearch/opensearch-custom-codecs-1.5.0.zip \
    file:///usr/share/opensearch/opensearch-sql-1.5.0.zip \
    file:///usr/share/opensearch/opensearch-security-1.5.0.zip \
    file:///usr/share/opensearch/opensearch-job-scheduler-1.5.0.zip \
    file:///usr/share/opensearch/opensearch-index-management-1.5.0.zip \
    file:///usr/share/opensearch/opensearch-notifications-core-1.5.0.zip \
    file:///usr/share/opensearch/opensearch-notifications-1.5.0.zip \
    file:///usr/share/opensearch/search-healthcheck-plugin-1.5.0.zip \
    file:///usr/share/opensearch/prometheus-exporter-1.5.0.zip'
    

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

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

  • 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.5.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.5.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.5.0.zip'
    sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/queryWorkbenchDashboards-1.5.0.zip'
    

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

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

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

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

    [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
    
  4. Создайте точки монтирования в RAM для Dashboards:

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

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

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

    [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
    Environment=KNN_LIB_DIR=/usr/share/opensearch/plugins/opensearch-knn/lib
    Environment=LD_LIBRARY_PATH=/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib:/usr/share/opensearch/plugins/opensearch-knn/lib
    
    WorkingDirectory=/usr/share/opensearch
    ExecStartPre=/usr/share/opensearch/bin/init_script.sh
    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
    
  8. Создайте Unit services для Dashboards (Если на данном сервере установлен opensearch-dashboards):

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

    [Unit]
    Description=Platform V Search Dashboard
    Wants=network-online.target
    After=network-online.target etc-opensearch\\x2ddashboards-secman-secrets.mount  
    
    [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/
    ExecStartPre=/usr/share/opensearch-dashboards/bin/init_script.sh
    ExecStart=/bin/bash -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards &> /var/log/opensearch-dashboards/stdout.log'
    ExecStopPost=/usr/share/opensearch-dashboards/bin/saving-dashboards-secman-data.sh  
    
    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
    
  10. Выполните перезагрузку systemd:

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

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

    sudo systemctl enable opensearch.service --now
    
  13. Добавьте 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=<Common Name вашего сертификата администратора>, OU=<Подразделение организации>, O=<Наименование организации, выдавшей сертификат>, STREET=<Наименование улицы, на которой располагается организация>, L=<Населенный пункт, в котором расположена организация>, ST=<Наименование региона, в котором расположен сертификат>, C=<Наименование страны, в которой расположена организация>'

Сертификаты должны быть в формате 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: /var/lib/opensearch
path.logs: /var/log/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 вашего сертификата администратора>, OU=<Подразделение организации>, O=<Наименование организации, выдавшей сертификат>, STREET=<Наименование улицы, на которой располагается организация>, L=<Населенный пункт, в котором расположена организация>, ST=<Наименование региона, в котором расположен сертификат>, C=<Наименование страны, в которой расположена организация>' 
plugins.security.nodes_dn:
  - 'CN=<Common Name межкластерного сертификата/Параметр указанный в plugins.security.secman.transport.cn>, OU=<Подразделение организации>, O=<Наименование организации, выдавшей сертификат>, STREET=<Наименование улицы, на которой располагается организация>, L=<Населенный пункт, в котором расположена организация>, ST=<Наименование региона, в котором расположен сертификат>, C=<Наименование страны, в которой расположена организация>'

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.keystore_filepath: «/etc/opensearch/secman/certs/http.jks»

Путь к месту хранения сертификатов для HTTP-уровня

plugins.security.ssl.http.truststore_filepath: «/etc/opensearch/secman/certs/httptrust.jks»

Путь к месту хранения цепочки сертификатов HTTP-уровня

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.keystore_filepath: «/etc/opensearch/secman/certs/transport.jks»

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

plugins.security.ssl.transport.truststore_filepath: «/etc/opensearch/secman/certs/transport.jks»

Путь к месту хранения цепочки сертификатов транспортного уровня

plugins.security.ssl.transport.extended_key_usage_enabled:false

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

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

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

plugins.security.nodes_dn

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

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

plugins.security.secman.enabled: true

Включение интеграции с Secret Management System

Настройка 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
    
  2. Отредактируйте параметры в файле с настройками 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#

Внимание!

Выполнение данного пункта для компонента Поисковый движок (SRHX) требуется для обеспечения работы при недоступности Secret Management System. Обратите внимание, что Dashboards имеет свой собственный Keystore – opensearch-dashboards-keystore. Его настройка отличается и описана в пункте Добавление параметров в opensearch-dashboards-keystore.

Создайте keystore с помощью параметра create.

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

Внимание!

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

Opensearch-keystore используется для сохранения сертификатов на случай недоступности Secret Management System и для сокрытия чувствительных данных (например логин/пароль) в компоненте Поисковый движок (SRHX). Хранение логина и пароля выполняется в opensearch.yml.

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

Параметр

Описание

help

Список доступных команд

create

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

add

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

list

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

remove

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

Настройка параметров в 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 текущего хоста>"
server.port: 15601
server.ssl.enabled: true 
server.ssl.keystore.path: /etc/opensearch-dashboards/secman/certs/http.p12
server.ssl.truststore.path: /etc/opensearch-dashboards/secman/certs/trust.p12 

# Настройки для соединения dashboards с сервером OpenSearch
opensearch.hosts:
    - https://<FQDN или IP node 1 в кластере>:ХХХХХ
    - https://<FQDN или IP node 2 в кластере>:ХХХХХ
    - https://<FQDN или IP node 3 в кластере>:ХХХХХ
 
opensearch.ssl.alwaysPresentCertificate: true
opensearch.ssl.verificationMode: full
opensearch.ssl.keystore.path: /etc/opensearch-dashboards/secman/certs/transport.p12
opensearch.ssl.truststore.path: /etc/opensearch-dashboards/secman/certs/trust.p12  

opensearch.requestHeadersAllowlist:
  - authorization
  - securitytenant
 
# Настройки логирования
logging.dest: /var/log/opensearch-dashboards/opensearch-dashboards.log
logging.json: false
logging.verbose: true
 
# Настройки плагина Security
opensearch_security.auth.type: "basicauth"
opensearch_security.cookie.secure: true
opensearch_security.session.keepalive: true
 
# Указанны значения в миллисекундах
opensearch_security.cookie.ttl: 86400000
opensearch_security.session.ttl: 1200000
 
i18n.locale: "ru"

secman.enabled: true

#Настройка метрик в Dashboards
prometheus.metrics.job_name: opensearch_dashboards
prometheus.metrics.path: _prometheus/metrics

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

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

Описание

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

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

server.port: 15601

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

server.ssl.enabled: true

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

server.ssl.keystore.path: /etc/opensearch-dashboards/secman/certs/http.p12

Путь к сертификату для HTTP-уровня.

server.ssl.truststore.path: /etc/opensearch-dashboards/secman/certs/trust.p12

Путь к цепочке сертификата HTTP-уровня.

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.keystore.path: /etc/opensearch-dashboards/secman/certs/transport.p12

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

opensearch.ssl.truststore.path: /etc/opensearch-dashboards/secman/certs/trust.p12

Путь к цепочке сертификата транспортного уровня.

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

secman.enabled: false

Параметр, отвечающий за активацию интеграции с Secret Management System. Необязательный параметр. По умолчанию - false

prometheus.metrics.job_name: opensearch_dashboards

Параметр обозначающий префикс для метрик, котрые откидывает сервис dashboards. В примере метрики будут с префиксом opensearch_dashboards

prometheus.metrics.path: _prometheus/metrics

Путь по умолчанию, может быть параметризирован.

opensearch_security.auth.anonymous_auth_enabled: false

Включает или отключает анонимную аутентификацию. Анонимный доступ должен быть запрещён!

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

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

Внимание!

Выполнение данного пункта для Dashboards требуется для обеспечения работы при недоступности Secret Management System.

Для работы с 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

Создайте 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'

На этом настройка сервера может быть завершена. Для первого запуска можно использовать ролевую модель по умолчанию с пользователями из 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'
    
  2. После загрузки скрипта он будет ожидать ввода пароля, который будет зашифрован. В примере используйте пароль der_parol.

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

    $2y$12$MnTVuoi0Ue.Bbn47Np.xFuPjNcGGrazvgAZDkfSDMzSSd69Y3H6SW
    

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

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

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

    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
    
  2. Добавьте:

     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
    
  2. Добавьте:

    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.5.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

Установка Data Prepper#

Сборка Docker образа#

В директории с Data Prepper расположены следующие файлы:

  • data-prepper-jdk-2.8.0-linux-x64.tar.gz – архив с Data Prepper;

  • папка config – pipeline.yaml конфигурации по настройке pipeline обработки данных и data-prepper-config.yaml конфигурационный файл настройки сервера;

  • Dockerfile – файл с описанием образа.

В данной директории соберите Dockerfile.

Ниже представлено описание Dockerfile:

FROM '<path-to-image>'

ARG PIPELINE_FILEPATH=/usr/share/data-prepper/pipelines
ARG CONFIG_FILEPATH=/usr/share/data-prepper/config
ARG ARCHIVE_NAME=opensearch-data-prepper-jdk-2.8.0-SNAPSHOT-linux-x64
ARG ARCHIVE_FILE=$ARCHIVE_NAME.tar.gz
ARG ARCHIVE_FILE_UNPACKED=$ARCHIVE_NAME

ENV DATA_PREPPER_PATH /usr/share/data-prepper
ENV ENV_CONFIG_FILEPATH=$CONFIG_FILEPATH/data-prepper-config.yaml
ENV ENV_PIPELINE_FILEPATH=$PIPELINE_FILEPATH/pipelines.yaml

RUN mkdir -p /var/log/data-prepper
ADD $ARCHIVE_FILE /usr/share
RUN mv /usr/share/$ARCHIVE_FILE_UNPACKED /usr/share/data-prepper

COPY config/data-prepper-config.yaml $ENV_CONFIG_FILEPATH
COPY config/pipeline.yaml $ENV_PIPELINE_FILEPATH

WORKDIR $DATA_PREPPER_PATH
CMD ["bin/data-prepper"]
  1. Соберите образ с помощью команды и укажите тэг с registry.

     docker build -t `<path-to-registry>`/data-prepper:latest .
    
  2. Загрузите образ в nexus.

     docker push `<path-to-registry>`/data-prepper:latest
    

После выполнения данных команд будет создан готовый образ Data Prepper.

Пример

pipelines.yaml: |
    main-pipeline:
       source:
         kafka:
           encryption:
             type: none
           bootstrap_servers:
             - your-server-host
           topics:
             - name: dataprepper
               group_id: dataprepperGroup
       buffer:
         bounded_blocking:
           buffer_size: 1024
           batch_size: 256
       processor:
         - parse_json:
             source: message
         - grok:
             grok_when: '(/fields != null and /fields != "") and contains(/fields/app_name, "merchant_profile")'
             match:
               message: [ '\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{LOGLEVEL:level}\s?\] [-] UnPrs \[%{GREEDYDATA:unparsedMerchantName}\] \[%{GREEDYDATA:city}\] \[%{GREEDYDATA:country}\] \[%{GREEDYDATA:merchantId}\] \[%{GREEDYDATA:mccCode}\] \[%{GREEDYDATA:isCategoryParsed}\]' ]
         - add_entries:
             entries:
               - key: "uniqueMerchantNameStat"
                 value_expression: /unparsedMerchantName
                 add_when: '/timestamp != null'
         - grok:
             grok_when: '/timestamp == null'
             match:
               message: [ '\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{LOGLEVEL:level}\s?\] [-] Prs \[%{GREEDYDATA:parsedMerchantName}\] \[%{GREEDYDATA:city}\] \[%{GREEDYDATA:country}\] \[%{GREEDYDATA:merchantId}\] \[%{GREEDYDATA:mccCode}\] \[%{GREEDYDATA:brandName}\] \[%{GREEDYDATA:logoFilename}\] \[%{GREEDYDATA:address}\] \[%{GREEDYDATA:location}\] \[%{GREEDYDATA:feedbackAllowed}\] \[%{GREEDYDATA:isCategoryLogo}\] \[%{GREEDYDATA:isCategoryParsed}\] \[%{GREEDYDATA:isFullSearchMatched}\]' ]
         - add_entries:
             entries:
               - key: "uniqueMerchantNameStat"
                 value_expression: /parsedMerchantName
                 add_when: '/timestamp != null'
         - grok:
             grok_when: '/timestamp == null'
             match:
               message: [ '\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{LOGLEVEL:level}\s?\] [-] Prs \[%{GREEDYDATA:parsedMerchantName}\] \[%{GREEDYDATA:city}\] \[%{GREEDYDATA:country}\] \[%{GREEDYDATA:merchantId}\] \[%{GREEDYDATA:mccCode}\] \[%{GREEDYDATA:brandName}\] \[%{GREEDYDATA:logoFilename}\] \[%{GREEDYDATA:isCategoryLogo}\] \[%{GREEDYDATA:isCategoryParsed}\]' ]
         - add_entries:
             entries:
               - key: "uniqueMerchantNameStat"
                 value_expression: /parsedMerchantName
                 add_when: '/timestamp != null'
               - key: "address"
                 value_expression: "false"
                 add_when: '/timestamp != null'
               - key: "location"
                 value: "false"
                 add_when: '/timestamp != null'
               - key: "isFullSearchMatched"
                 value: "false"
                 add_when: '/timestamp != null'
         - grok:
             grok_when: '/timestamp == null'
             match:
               message: [ '\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{LOGLEVEL:level}\s?\] [-] PrsDup \[%{GREEDYDATA:duplicateMerchantName}\] \[%{GREEDYDATA:city}\] \[%{GREEDYDATA:country}\] \[%{GREEDYDATA:merchantId}\] \[%{GREEDYDATA:mccCode}\] \[%{GREEDYDATA:brandName}\] \[%{GREEDYDATA:logoFilename}\] \[%{GREEDYDATA:isCategoryLogo}\] \[%{GREEDYDATA:isCategoryParsed}\]' ]
         - add_entries:
             entries:
               - key: "parsedMerchantName"
                 value_expression: /duplicateMerchantName
                 add_when: '/timestamp != null'
               - key: "address"
                 value: "false"
                 add_when: '/timestamp != null'
               - key: "location"
                 value: "false"
                 add_when: '/timestamp != null'
         - grok:
             grok_when: '/timestamp == null'
             match:
               message: [ '\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{LOGLEVEL:level}\s?\] [-] PrsDupIn \[%{GREEDYDATA:parsedMerchantName}\] \[%{GREEDYDATA:city}\] \[%{GREEDYDATA:country}\] \[%{GREEDYDATA:merchantId}\] \[%{GREEDYDATA:mccCode}\] \[%{GREEDYDATA:brandName}\] \[%{GREEDYDATA:logoFilename}\] \[%{GREEDYDATA:isCategoryLogo}\] \[%{GREEDYDATA:isCategoryParsed}\]' ]
         - add_entries:
             entries:
               - key: "address"
                 value: "false"
                 add_when: '/timestamp != null'
               - key: "location"
                 value: "false"
                 add_when: '/timestamp != null'     
               - key: "isFullSearchMatched"
                 value: "false"
                 add_when: '/timestamp != null'         
       route:
         - alpha: '/fields/app_name != null and /fields/app_name != ""'
         - beta: '/level != null and /level == "INFO"'
       sink:
         - opensearch:
             routes:
               - alpha
             connection:
               insecure: true
             hosts: [ "your-opensearch-host-1" ]
             index: "logs-${/fields/app_name}-datastream"
             username: "{{ search_username }}"
             password: "{{ search_password }}"
         - opensearch:
             routes:
               - beta
             connection:
               insecure: true
             hosts: [ "your-opensearch-host-2" ]
             index: fallback
             username: "{{ search_username }}"
             password: "{{ search_password }}"
         - stdout:

Deploy приложения в DropApp#

  1. Для deploy приложения понадобится создать 4 манифеста:

    • Config map для описания конфигурации приложения (data-prepper-config);

    • Service для приложения (data-prepper-server);

    • Service для метрик приложения (data-prepper-metrics);

    • Deployment для описания deploy приложения (data-prepper).

Создайте директорию k8s с помощью команды (выбор пути для создания директории опционален):

 mkdir -p /usr/share/k8s 

Перейдите в данную директорию:

 cd /usr/share/k8s

Создайте в ней файлы, представленные ниже.

Примеры манифестов:

В Config map можно переопределить pipeline.yaml и data-prepper-config.yaml. Config map монтируется в volume в разделе deployment.

  • Config map для описания конфигурации приложения (cm-data-prepper.yml):

     apiVersion: v1
     kind: ConfigMap
     metadata:
     labels:
         app: data-prepper
     name: data-prepper-config
     data:
     pipelines.yaml: |
         simple-sample-pipeline:
         workers: 2 # the number of workers
         delay: 5000 # in milliseconds, how long workers wait between read attempts
         source:
             random:
         buffer:
             bounded_blocking:
             buffer_size: 1024 # max number of records the buffer accepts
             batch_size: 256 # max number of records the buffer drains after each read
         processor:
             - string_converter:
                 upper_case: true
         sink:
             - stdout:
     data-prepper-config.yaml: |
         ssl: false

- Service для приложения (svc-data-prepper-server.yml):

     apiVersion: v1
     kind: Service
     metadata:
     labels:
         app: data-prepper
     name: data-prepper-server
     spec:
     clusterIP: None
     ports:
         - name: "21890"
         port: 21890
         targetPort: 21890
     selector:
         app: data-prepper

- Service для метрик (svc-data-prepper-metrics.yml):

     apiVersion: v1
     kind: Service
     metadata:
     labels:
         app: data-prepper
     name: data-prepper-metrics
     spec:
     type: NodePort
     ports:
         - name: "4900"
         port: 4900
         targetPort: 4900
     selector:
         app: data-prepper

- Deployment для приложения (dc-data-prepper.yml)

     apiVersion: apps/v1
     kind: Deployment
     metadata:
     labels:
         app: data-prepper
     name: data-prepper
     spec:
     replicas: 1
     selector:
         matchLabels:
         app: data-prepper
     strategy:
         type: Recreate
     template:
         metadata:
         labels:
             app: data-prepper
         spec:
         containers:
             - args:
                 - bin/data-prepper
                 - /etc/data-prepper/pipelines.yaml
                 - /etc/data-prepper/data-prepper-config.yaml 
             image: `<path-to-registry>`/data-prepper:latest 
             name: data-prepper
             ports:
                 - containerPort: 2021
             resources: {}
             volumeMounts:
                 - mountPath: /etc/data-prepper
                 name: prepper-configmap-claim0
         imagePullSecrets:
             - name: nexuscred
         restartPolicy: Always
         serviceAccountName: ""
         volumes:
             - name: prepper-configmap-claim0
             configMap:
                 name: data-prepper-config

  1. В директории k8s с манифестами примените команду:

     kubectl apply -f .
    
  2. Проверьте корректность deploy.

В namespace в разделе workloads появится pod с data-prepper, в логах контейнера будут указаны сгенерированные сообщения.

Безопасная конфигурация Data Prepper в корпоративной среде#

Чтобы настроить mTLS между DataPrepper и внешними компонентами (далее в качестве примера будут рассмотрены Search и Kafka) выполните следующие действия:

  1. В первую очередь на кластере Kubernetes установите Synapse Service Mesh или Istio.

  2. Далее включите его в namespace, где размещен DataPrepper:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: data-prepper
      labels:
        pod-security.kubernetes.io/enforce: restricted
        istio-injection: enabled
        istio.io/rev: istio-system
    
  3. Создайте секрет для подключения к Kafka, где будут находиться клиентская пара сертификат-ключ и сертификат УЦ:

    kind: Secret
    apiVersion: v1
    metadata:
      name: kafka-secret
      namespace: data-prepper
    data:
      root.crt: <сертификат удостоверяющего центра в base64>
      tls.crt: <сертификат клиента в base64>
      tls.key: <ключ клиента в base64>
    type: Opaque
    
  4. Создайте секрет для подключения к Search:

    kind: Secret
    apiVersion: v1
    metadata:
      name: pvs-secret
      namespace: data-prepper
    data:
      root.crt: <сертификат удостоверяющего центра в base64>
      tls.crt: <сертификат клиента в base64>
      tls.key: <ключ клиента в base64>
    type: Opaque
    
  5. Cоздайте экземпляр istio-egressgateway в том же пространстве имен:

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: istio-egressgateway
      namespace: data-prepper
      labels:
        app: istio-egressgateway
        istio: egressgateway
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: istio-egressgateway
          istio: egressgateway
      template:
        metadata:
          labels:
            app: istio-egressgateway
            istio: egressgateway
          annotations:
            istio.io/rev: istio-system
            sidecar.istio.io/inject: 'false'
        spec:
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext:
            runAsNonRoot: true
            runAsUser: 1002120000
            runAsGroup: 1002120000
            fsGroup: 1002120000
            seccompProfile:
              type: RuntimeDefault
          serviceAccountName: default
          terminationGracePeriodSeconds: 60
          containers:
            - resources:
                limits:
                  cpu: '2'
                  memory: 1Gi
                requests:
                  cpu: 100m
                  memory: 128Mi
              readinessProbe:
                httpGet:
                  path: /healthz/ready
                  port: 15021
                  scheme: HTTP
                initialDelaySeconds: 1
                timeoutSeconds: 1
                periodSeconds: 2
                successThreshold: 1
                failureThreshold: 30
              terminationMessagePath: /dev/termination-log
              name: istio-proxy
              env:
                - name: PROXY_CONFIG
                  value: >
                    {"discoveryAddress":"istiod-istio-system.istio-system.svc:15012","drainDuration":"61s","terminationDrainDuration":"59s"}
                - name: JWT_POLICY
                  value: third-party-jwt
                - name: PILOT_CERT_PROVIDER
                  value: istiod
                - name: CA_ADDR
                  value: 'istiod-istio-system.istio-system.svc:15012'
                - name: NODE_NAME
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: spec.nodeName
                - name: POD_NAME
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: metadata.name
                - name: POD_NAMESPACE
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: metadata.namespace
                - name: INSTANCE_IP
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: status.podIP
                - name: HOST_IP
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: status.hostIP
                - name: ISTIO_CPU_LIMIT
                  valueFrom:
                    resourceFieldRef:
                      resource: limits.cpu
                      divisor: '0'
                - name: SERVICE_ACCOUNT
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: spec.serviceAccountName
                - name: ISTIO_META_WORKLOAD_NAME
                  value: istio-egressgateway
                - name: ISTIO_META_OWNER
                  value: >-
                    kubernetes://apis/apps/v1/namespaces/data-prepper/deployments/istio-egressgateway
                - name: ISTIO_META_MESH_ID
                  value: cluster.local
                - name: TRUST_DOMAIN
                  value: cluster.local
                - name: ISTIO_META_UNPRIVILEGED_POD
                  value: 'true'
                - name: ISTIO_META_CLUSTER_ID
                  value: Kubernetes
                - name: ISTIO_META_NODE_NAME
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: spec.nodeName
              securityContext:
                capabilities:
                  drop:
                    - ALL
                privileged: false
                readOnlyRootFilesystem: true
                runAsNonRoot: true
                runAsUser: 1002120000
                runAsGroup: 1002120000
                fsGroup: 1002120000
                allowPrivilegeEscalation: false
                seccompProfile:
                  type: RuntimeDefault
              ports:
                - containerPort: 15021
                  protocol: TCP
                - containerPort: 8080
                  protocol: TCP
                - containerPort: 8443
                  protocol: TCP
                - name: http-envoy-prom
                  containerPort: 15090
                  protocol: TCP
              imagePullPolicy: Always
              volumeMounts:
                - name: kafka-secret
                  mountPath: /etc/istio/kafka-secret
                  readOnly: true
                - name: pvs-secret
                  mountPath: /etc/istio/pvs-secret
                  readOnly: true
                - name: workload-socket
                  mountPath: /var/run/secrets/workload-spiffe-uds
                - name: credential-socket
                  mountPath: /var/run/secrets/credential-uds
                - name: workload-certs
                  mountPath: /var/run/secrets/workload-spiffe-credentials
                - name: istio-envoy
                  mountPath: /etc/istio/proxy
                - name: config-volume
                  mountPath: /etc/istio/config
                - name: istiod-ca-cert
                  mountPath: /var/run/secrets/istio
                - name: istio-token
                  readOnly: true
                  mountPath: /var/run/secrets/tokens
                - name: istio-data
                  mountPath: /var/lib/istio/data
                - name: podinfo
                  mountPath: /etc/istio/pod
                - name: egressgateway-certs
                  readOnly: true
                  mountPath: /etc/istio/egressgateway-certs
                - name: egressgateway-ca-certs
                  readOnly: true
                  mountPath: /etc/istio/egressgateway-ca-certs
              terminationMessagePolicy: File
              image: istio/proxyv2:1.20.2
              args:
                - proxy
                - router
                - '--domain'
                - $(POD_NAMESPACE).svc.cluster.local
                - '--proxyLogLevel=info'
                - '--proxyComponentLogLevel=misc:error'
                - '--log_output_level=default:info'
          volumes:
            - name: kafka-secret
              secret:
                secretName: kafka-secret
            - name: pvs-secret
              secret:
                secretName: pvs-secret
            - name: workload-socket
              emptyDir: {}
            - name: credential-socket
              emptyDir: {}
            - name: workload-certs
              emptyDir: {}
            - name: istiod-ca-cert
              configMap:
                name: istio-ca-root-cert
                defaultMode: 256
            - name: podinfo
              downwardAPI:
                items:
                  - path: labels
                    fieldRef:
                      apiVersion: v1
                      fieldPath: metadata.labels
                  - path: annotations
                    fieldRef:
                      apiVersion: v1
                      fieldPath: metadata.annotations
                defaultMode: 256
            - name: istio-envoy
              emptyDir: {}
            - name: istio-data
              emptyDir: {}
            - name: istio-token
              projected:
                sources:
                  - serviceAccountToken:
                      audience: istio-ca
                      expirationSeconds: 3600
                      path: istio-token
                defaultMode: 256
            - name: config-volume
              configMap:
                name: istio-istio-system
                defaultMode: 256
                optional: true
            - name: egressgateway-certs
              secret:
                secretName: istio-egressgateway-certs
                defaultMode: 256
                optional: true
            - name: egressgateway-ca-certs
              secret:
                secretName: istio-egressgateway-ca-certs
                defaultMode: 256
                optional: true
          dnsPolicy: ClusterFirst
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxUnavailable: 25%
          maxSurge: 100%
      revisionHistoryLimit: 10
      progressDeadlineSeconds: 600
    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: istio-egressgateway
      namespace: data-prepper
      labels:
        app: istio-egressgateway
        istio: egressgateway
    spec:
      ports:
        - name: http2
          protocol: TCP
          port: 80
          targetPort: 8080
        - name: https
          protocol: TCP
          port: 443
          targetPort: 8443
        - name: pvs
          protocol: TCP
          port: 19200
          targetPort: 19200
        - name: kafka
          protocol: TCP
          port: 9093
          targetPort: 9093
      internalTrafficPolicy: Cluster
      selector:
        app: istio-egressgateway
    
  6. Для создания доступа к кластеру Kafka из 3 узлов через Istio для начала создайте объект шлюза - Gateway:

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: istio-egressgateway-kafka
      namespace: data-prepper
    spec:
      selector:
        istio: egressgateway
      servers:
        - hosts:
            - <FQDN узла #1>
            - <FQDN узла #2>
            - <FQDN узла #3>
          port:
            name: kafka
            number: 9093
            protocol: tcp
    

    Для каждого узла кластера Kafka, указанного в Gateway, по примеру ниже создайте VirtualService, ServiceEntry и DestinationRule:

    ---
    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: vs-external-kafka-1
      namespace: data-prepper
    spec:
      gateways:
        - mesh
        - istio-egressgateway-kafka
      hosts:
        - <FQDN узла #1>
      tcp:
        - match:
            - gateways:
                - mesh
              port: 9093
          route:
            - destination:
                host: istio-egressgateway.data-prepper.svc.cluster.local
                port:
                  number: 9093
        - match:
            - gateways:
                - istio-egressgateway-kafka
              port: 9093
          route:
            - destination:
                host: <FQDN узла #1>
                port:
                  number: 9093
              weight: 100
      exportTo:
        - "."
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: ServiceEntry
    metadata:
      name: se-external-kafka-1
      namespace: data-prepper
    spec:
      addresses:
        - <IP-адрес узла #1>
      exportTo:
        - .
      hosts:
        - <FQDN узла #1>
      location: MESH_EXTERNAL
      ports:
        - name: tcp
          number: 9093
          protocol: TLS
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: dsr-external-kafka-1
      namespace: data-prepper
    spec:
      host: <FQDN узла #1>
      trafficPolicy:
        portLevelSettings:
          - port:
              number: 9093
            tls:
              mode: MUTUAL
              caCertificates: /etc/istio/kafka-secret/root.crt
              clientCertificate: /etc/istio/kafka-secret/tls.crt
              privateKey: /etc/istio/kafka-secret/tls.key
      exportTo:
        - "."
    
  7. Схожим образом настройте Istio для Search — 1 Gateway и по одному VirtualService, ServiceEntry и DestinationRule для каждого узла, но уже с сертификатами для Search:

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: istio-egressgateway-pvs
      namespace: data-prepper
    spec:
      selector:
        istio: egressgateway
      servers:
        - hosts:
            - <FQDN узла #1>
            - <FQDN узла #2>
            - <FQDN узла #3>
          port:
            name: pvs-http
            number: 19200
            protocol: http
    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: vs-external-pvs-1
      namespace: data-prepper
    spec:
      hosts:
        - <FQDN узла #1>
      gateways:
        - mesh
        - istio-egressgateway-pvs
      http:
        - match:
            - gateways:
                - mesh
              port: 19200
          route:
            - destination:
                host: istio-egressgateway.data-prepper.svc.cluster.local
                port:
                  number: 19200
        - match:
            - gateways:
                - istio-egressgateway-pvs
              port: 19200
          route:
            - destination:
                host: <FQDN узла #1>
                port:
                  number: 19200
              weight: 100
      exportTo:
        - "."
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: ServiceEntry
    metadata:
      name: se-external-pvs-1
      namespace: data-prepper
    spec:
      hosts:
        - <FQDN узла #1>
      addresses:
        - <IP-адрес узла #1>
      endpoints:
        - address: <IP-адрес узла #1>
      ports:
        - name: pvs-http
          number: 19200
          protocol: HTTP
      resolution: DNS
      location: MESH_EXTERNAL
      exportTo:
        - "."
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: dsr-external-pvs-1
      namespace: data-prepper
    spec:
      host: <FQDN узла #1>
      trafficPolicy:
        portLevelSettings:
          - port:
              number: 19200
            tls:
              mode: MUTUAL
              caCertificates: /etc/istio/pvs-secret/root.crt
              clientCertificate: /etc/istio/pvs-secret/tls.crt
              privateKey: /etc/istio/pvs-secret/tls.key
      workloadSelector:
        matchLabels:
          app: istio-egressgateway
          istio: egressgateway
      exportTo:
        - "."
    

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

При старте сервиса компонент Поисковый движок (SRHX) проверяет наличие в директории /etc/opensearch/audit/ файла с настройками аудита audit.yml и при наличии файла применяет его настройки на кластер. Из других директорий применение данного файла невозможно.

Важно

Применение настроек аудита кластера возможно только через файл audit.yml, изменение настроек через файл opensearch.yml, REST-запросы или с помощью скрипта securityadmin.sh заблокировано.

Если файл не найден, то применяются настройки по умолчанию, соответствующие файлу audit.yml ниже

_meta:
  type: "audit"
  config_version: 2
config:
  # enable/disable audit logging
  enabled: true
  audit:
    # Enable/disable REST API auditing
    enable_rest: true
    # Categories to exclude from REST API auditing
    disabled_rest_categories:
    # Enable/disable Transport API auditing
    enable_transport: true
    # Categories to exclude from Transport API auditing
    disabled_transport_categories:
    # Users to be excluded from auditing. Wildcard patterns are supported. Eg:
    # ignore_users: ["test-user1", "test-user2"]
    ignore_users:
    # Requests to be excluded from auditing. Wildcard patterns are supported. Eg:
    # ignore_requests: ["indices:data/read/*", "SearchRequest"]
    ignore_requests: []
    # Log individual operations in a bulk request
    resolve_bulk_requests: true
    # Include the body of the request (if available) for both REST and the transport layer
    log_request_body: true
    # Logs all indices affected by a request. Resolves aliases and wildcards/date patterns
    resolve_indices: true
    # Exclude sensitive headers from being included in the logs. Eg: Authorization
    exclude_sensitive_headers: true
  compliance:
    # enable/disable compliance
    enabled: true
    # Log updates to internal security changes
    internal_config: true
    # Log external config files for the node
    external_config: true
    # Log only metadata of the document for read events
    read_metadata_only: false
    # Map of indexes and fields to monitor for read events. Wildcard patterns are supported for both index names and fields. Eg:
    # read_watched_fields: {
    #   "twitter": ["message"]
    #   "logs-*": ["id", "attr*"]
    # }
    read_watched_fields: {"*": ["*"]}
    # List of users to ignore for read events. Wildcard patterns are supported. Eg:
    # read_ignore_users: ["test-user", "employee-*"]
    read_ignore_users:
    # Log only metadata of the document for write events
    write_metadata_only: false
    # Log only diffs for document updates
    write_log_diffs: true
    # List of indices to watch for write events. Wildcard patterns are supported
    # write_watched_indices: ["twitter", "logs-*"]
    write_watched_indices: ["*"]
    # List of users to ignore for write events. Wildcard patterns are supported. Eg:
    # write_ignore_users: ["test-user", "employee-*"]
    write_ignore_users:

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

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

Описание

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

config.enabled

Включение/отключение регистрации событий аудита

true

config.audit.enable_rest

Включение/отключение регистрации событий аудита REST-уровня

true

config.audit.disabled_rest_categories

Перечень типов событий аудита REST-уровня, которые не нужно регистрировать

-

config.audit.enable_transport

Включение/отключение регистрации событий аудита Transport-уровня

true

config.audit.disabled_transport_categories

Перечень типов событий аудита Transport-уровня, которые не нужно регистрировать

-

config.audit.ignore_users

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

-

config.audit.ignore_requests

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

-

config.audit.resolve_bulk_requests

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

true

config.audit.log_request_body

Параметр, отвечающий за наличие тела запроса в событии аудита

true

config.audit.resolve_indices

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

true

config.audit.exclude_sensitive_headers

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

true

config.compliance.enabled

Включение/отключение регистрации событий аудита, связанных с изменением настроек индексов и конфигурационных файлов

true

config.compliance.internal_config

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

true

config.compliance.external_config

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

true

config.compliance.read_metadata_only

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

false

config.compliance.read_watched_fields

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

{_: [_]}

config.compliance.read_ignore_users

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

-

config.compliance.write_metadata_only

Параметр, отвечающий за наличие в событии аудита метаданных запроса записи

true

config.compliance.write_log_diffs

Параметр, отвечающий за наличие в событии аудита новых и предыдущих метаданных

true

config.compliance.write_watched_indices

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

[_]

config.compliance.write_ignore_users

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

true

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

Настройка интеграции с 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 параметры role_id и secret_id при помощи API. secret_id и role_id являются данными для доступа к созданным engine в Secret Management System.

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

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

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

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

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

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

# Блок параметров для авторизации в Secman
# Адрес сервера SecMan-а
plugins.security.secman.address: https://secman.host:secman.port
# Пространство имён SecMan-а (HashiCorp enterprise feature)
plugins.security.secman.namespace: YOUR_NAME_FOR_NAMESPACE
# Значение идентификатора Approle, настроенной в App Role authentication backend
plugins.security.secman.role_id: 11111111-1111-1111-1111-111111

# Блок параметров для wrapped-token
# Имя файла с wrapped-token-ом
plugins.security.secman.wrapped_token.path: /etc/opensearch/secman/approle_wrapped_secret_id

# Блок параметров для KV (Получение траст-сертификатов)
# Тип сертификатов, получаемых из KV
plugins.security.secman.kv.cert.type: pem
# Версия KV движка
plugins.security.secman.kv.engine_version: 1
# Путь до KV движка
plugins.security.secman.kv.mount.path: NAMESPACE/KV/MOUNT/PATH/KV
# Наименование папки в KV, где находится ключ(параметр), в котором лежит цепочка трастовых сертификатов
plugins.security.secman.kv.dir.path: dir_in_your_kv
# Название ключа, в котором находится цепочка трастовых сертификатов в папке "plugins.security.secman.kv.dir.path"
plugins.security.secman.kv.truststore_key: key_name_in_your_kv_dir_for_trust_cert

# Блок параметров для PKI (Генерация сертификатов для PVS)
# Тип сертификатов, получаемых из PKI
plugins.security.secman.pki.cert.type: pem
# Путь до PKI-движка
plugins.security.secman.pki.fetch.mount.path: path_to_PKI_engine
# SberCA-роль для выпуска клиент-серверных сертификатов с проверкой CN по DNS
plugins.security.secman.pki.fetch.role: PKI-client-server-DNS-role-name

# Блок по сертификатам
# Common name для транспортных сертификатов
plugins.security.secman.transport.cn: vm-fqdn
# Common name для сертификата
plugins.security.secman.http.cn: vm-fqdn

# Блок по сертификатам для audit-а
# Common name для сертификата
plugins.security.secman.audit.cn: cn_for_audit_certs
# SberCA-роль для выпуска клиентских сертификатов
plugins.security.secman.audit.pki.role: PKI-client-role-name
# Путь, где будут сохранены клиентские-сертификаты для аудита на диске
plugins.security.ssl.audit.keystore_filepath: /etc/opensearch/secman/certs/audit.jks
# Путь где будут сохранены траст-сертификаты для аудита на диске
plugins.security.ssl.audit.kv.truststore_path: /etc/opensearch/secman/certs/audittrust.jks

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

Параметр

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

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

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

plugins.security.secman.address

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

Да

-

plugins.security.secman.namespace

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

Да

-

plugins.security.secman.role_id

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

Да

-

plugins.security.secman.role_id.path

Путь к значению role_id в файле, если его значение не указано в параметре plugins.security.secman.role_id.

Нет

Должен быть заполнен либо plugins.security.secman.role_id.path либо plugins.security.secman.role_id. Если заполнены оба параметра, то по умолчанию используется параметр plugins.security.secman.role_id.

plugins.security.secman.wrapped_token.path

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

Да

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

Путь до PKI-engine

Нет

PKI

plugins.security.secman.pki.fetch.role

Наименование роли PKI движка Secret Management System, которая позволяет выпускать и обновлять сертификаты

Да

plugins.security.secman.pki.fetch.client_role

Имя клиентской роли для доступа к SberCA

Нет

Параметры для использования клиент и серверной роли по отдельности, при невозможности использования клиент-серверной роли. В opensearch.yml должен быть указан параметр «plugins.security.ssl.transport.extended_key_usage_enabled» со значением «true». Нельзя одновременно указывать plugins.security.secman.pki.fetch.role и эти параметры.При включении параметров будут автоматически подставлены роли для следующих уровней:
- transport - client и server
- http - server
- audit - client

plugins.security.secman.pki.fetch.server_role

Имя серверной роли для доступа к SberCA

Нет

Параметры для использования клиент и серверной роли по отдельности, при невозможности использования клиент-серверной роли. В opensearch.yml должен быть указан параметр «plugins.security.ssl.transport.extended_key_usage_enabled» со значением «true». Нельзя одновременно указывать plugins.security.secman.pki.fetch.role и эти параметры.При включении параметров будут автоматически подставлены роли для следующих уровней:
- transport - client и server
- http - server
- audit - client

plugins.security.secman.pki.alt_names

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

Да

plugins.security.secman.pki.cert.type

Формат PKI сертификатов. Возможные значения pem, pkcs12 и jks.

Нет

pkcs12

plugins.security.secman.kv.mount.path

Путь до KV engine

Да

plugins.security.secman.kv.engine_version

Версия KV engine. Возможные варианты заполнения: «1» или «2». Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

1

plugins.security.secman.kv.dir.path

Путь до каталога с секретами в KV engine. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если параметр не заполнен, то для каждого сертификата используется его собственное значение пути, указанное в параметрах …filepath

plugins.security.secman.kv.truststore_key

Ключ к цепочке KV сертификатов. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если параметр не заполнен, то для каждого сертификата используется его собственное значение пути, указанное в параметрах …truststore_key

plugins.security.secman.kv.password_key

Ключ от пароля к цепочке KV сертификатов. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если параметр не заполнен, то для каждого сертификата используется его собственное значение пути, указанное в параметрах …password_key

plugins.security.secman.kv.cert.type

Формат KV сертификатов. Возможные значения pem, pkcs12 и jks. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

pkcs12

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-токена в секундах

Нет

По умолчанию 10/35 периода обновления токена на сервере Secret Management System

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 серверу в случае ошибок. По умолчанию 6 попыток

Нет

6

plugins.security.secman.retries.interval.ms

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

Нет

По умолчанию время ожидания между повторами увеличивается экспоненциально с каждой попыткой. Начальное значение - 1с

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.alias.certificate

Alias клиентского (keystore) сертификата

Нет

ee

plugins.security.secman.alias.root

Alias корневого сертификата

Нет

root

plugins.security.secman.alias.chain

Alias цепочки сертификатов

Нет

private_key

plugins.security.secman.base64_certs

Параметр, отвечающий за необходимость раскодирования сертификатов из кодировки Base64. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

true

plugins.security.secman.base64_passwords

Параметр, отвечающий за необходимость раскодирования паролей от сертификатов из кодировки Base64. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

false

plugins.security.secman.auth_method

Путь к движку аутентификации по approle

Нет

approle

plugins.security.secman.ssl.verify

Параметр, отвечающий за проверку сертификата Secret Management System для установки доверительного соединения

Нет

false

plugins.security.secman.ssl.truststore_filepath

Место расположение сертификатов, которые позволяют установить доверительное соединение с Secret Management System

Да, если plugins.security.secman.ssl.verify равен true

-

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

Параметр

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

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

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

plugins.security.secman.transport.cn

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

Да

plugins.security.secman.transport.pki.role

Наименование роли PKI движка Secret Management System для transport уровная

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.pki.fetch.role). Если не заполнен, то значение роли определяется по значению параметра plugins.security.secman.pki.fetch.role

plugins.security.secman.transport.pki.alt_names

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

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.pki.alt_names). Если не заполнен, то значение alt names сертификата определяется по значению параметра plugins.security.secman.pki.alt_names

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

Параметр

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

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

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

plugins.security.secman.http.cn

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

Да

-

plugins.security.secman.http.pki.role

Наименование роли PKI движка Secret Management System для http уровная

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.pki.fetch.role). Если не заполнен, то значение роли определяется по значению параметра plugins.security.secman.pki.fetch.role

plugins.security.ssl.http.kv.truststore_filepath

Наименование папки http.truststore в KV. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если не указано значение, то используется значение параметра plugins.security.secman.kv.dir.path

plugins.security.ssl.http.kv.truststore_key

Ключ к цепочке KV http.truststore. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если не указано значение, то используется значение параметра plugins.security.secman.kv.truststore_key

plugins.security.ssl.http.kv.truststore_template

Шаблон для валидации сертификата из KV. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.kv.base64_certs). Если не заполнен, то необходимость раскодирования определяется по значению параметра plugins.security.secman.kv.base64_certs

plugins.security.ssl.http.kv.password_filepath

Путь к хранилищу пароля для KV http.truststore. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если не указано значение, то используется значение параметра plugins.security.secman.kv.dir.path

plugins.security.ssl.http.kv.password_key

Ключ к паролю http.truststore. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если не указано значение, то используется значение параметра plugins.security.secman.kv.password_key

plugins.security.ssl.http.kv.password_template

Шаблон для валидации пароля сертификата из KV. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.base64_passwords). Если не заполнен, то необходимость раскодирования определяется по значению параметра plugins.security.secman.base64_passwords

plugins.security.secman.http.pki.alt_names

alt names сертификата http уровня

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.pki.alt_names). Если не заполнен, то значение alt names сертификата определяется по значению параметра plugins.security.secman.pki.alt_names

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

Важно

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

Параметр

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

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

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

plugins.security.secman.audit.cn

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

Да

-

plugins.security.secman.audit.pki.role

Наименование роли PKI движка Secret Management System для сертификата аудита

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.pki.fetch.role). Если не заполнен, то значение роли определяется по значению параметра plugins.security.secman.pki.fetch.role

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.secman.kv.dir.path

plugins.security.ssl.audit.kv.truststore_key

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

Нет

Если не указано значение, то используется значение параметра plugins.security.secman.kv.truststore_key

plugins.security.ssl.audit.kv.truststore_template

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

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.kv.base64_certs). Если не заполнен, то необходимость раскодирования определяется по значению параметра plugins.security.secman.kv.base64_certs

plugins.security.ssl.audit.kv.password_filepath

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

Нет

Если не указано значение, то используется значение параметра plugins.security.secman.kv.dir.path

plugins.security.ssl.audit.kv.password_key

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

Нет

Если не указано значение, то используется значение параметра plugins.security.secman.kv.password_key

plugins.security.ssl.audit.kv.password_template

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

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.base64_passwords). Если не заполнен, то необходимость раскодирования определяется по значению параметра plugins.security.secman.base64_passwords

plugins.security.secman.audit.pki.alt_names

alt names сертификата аудита

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.pki.alt_names). Если не заполнен, то значение alt names сертификата определяется по значению параметра plugins.security.secman.pki.alt_names

Интеграция сервиса Dashboards компонента Поисковый движок (SRHX) с Secret Management System#

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

  1. Разместите в KV-engine корневой сертификат для Dashboards (если ранее загружали корневые сертификаты для Server, то можно не загружать новые, а использовать корневые сертификаты Server).

  2. Для PKI-engine используйте ранее выпущенную роль для компонента Поисковый движок (SRHX).

  3. Параметр secret_id отправьте по методу wrap Secret Management System с ключом secret_id для получения wrapped-токен.

  4. Разместите wrapped-токен на файловой системе сервиса Dashboards компонента Поисковый движок (SRHX) в каталоге /etc/opensearch-dashboards/secman.

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

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

  • параметры server.ssl.* и opensearch.ssl.*.

  1. Заполните файл secman_dashboards.yml. Большинство настроек интеграции с Secret Management System описываются в файле /etc/opensearch-dashboards/secman_dashboards.yml и считываются при запуске программы. Ниже пример готового файла.

# Блок параметров для авторизации в Secman
# Адрес сервера SecMan-а
secman.address: https://secman.host:secman.port
# Пространство имён SecMan-а (HashiCorp enterprise feature)
secman.namespace: YOUR_NAME_FOR_NAMESPACE
# Значение идентификатора Approle, настроенной в App Role authentication backend
secman.role_id: 11111111-1111-1111-1111-111111

# Блок параметров для wrapped-token
# Имя файла с wrapped-token-ом
secman.wrapped_token.path: /etc/opensearch-dashboards/secman/approle_wrapped_secret_id

# Блок параметров для KV (Получение траст-сертификатов)
# Тип сертификатов, получаемых из KV
secman.kv.cert.type: pem
# Версия KV движка
secman.kv.engine_version: 1
# Путь до KV движка
secman.kv.mount.path: NAMESPACE/KV/MOUNT/PATH/KV
# Папка в KV
secman.kv.dir.path: dir_in_your_kv
# Ключ в KV
secman.kv.truststore_key: key_name_in_your_kv_dir_for_trust_cert

# Блок параметров для PKI (Генерация сертификатов для PVS)
# Тип сертификатов, получаемых из PKI
secman.pki.cert.type: pem
# Путь до PKI-движка
secman.pki.fetch.mount.path: path_to_PKI_engine
# PKI-роль для выпуска сертификата
secman.pki.fetch.role: PKI-client-server-DNS-role-name

# Блок по сертификатам для взаимодействия Dashboards с кластером PVS
# Common name для сертификата
secman.dashboard.opensearch.cn: hostname_fqdn

# Блок по сертификатам для взаимодействия Dashboards с клиентом
# Common name для сертификата
secman.dashboard.server.cn: hostname_fqdn

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

Параметр

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

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

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

secman.enabled

Включена интеграция Dashboards с Secret Management System

Да

-

secman.address

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

Да

-

secman.namespace

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

Да

-

secman.role_id

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

Да

-

secman.role_id.path

Путь к значению role_id в файле, если его значение не указано в параметре secman.role_id.

Нет

Должен быть заполнен либо secman.role_id.path либо secman.role_id. Если заполнены оба параметра, то по умолчанию берется параметр указанный последним.

secman.wrapped_token.path

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

Да

secman.pki.fetch.mount.path

Путь до PKI-engine

Нет

PKI

secman.pki.fetch.role

Наименование роли PKI движка Secret Management System, которая позволяет выпускать и обновлять сертификаты

Да

secman.pki.cert.type

Формат PKI сертификатов. Возможные значения pem, pkcs12 и jks.

Нет

pkcs12

secman.pki.alt_names

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

Нет

secman.kv.mount.path

Путь до KV engine

Да

secman.kv.engine_version

Версия KV engine. Возможные варианты заполнения: «1» или «2». Если secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

1

secman.kv.dir.path

Путь до каталога с секретами в KV engine. Если secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

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

secman.kv.truststore_key

Ключ к цепочке KV сертификатов. Если secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если параметр не заполнен, то для каждого сертификата используется его собственное значение пути, указанное в параметрах …truststore_key

secman.kv.password_key

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

Нет

Если параметр не заполнен, то для каждого сертификата используется его собственное значение пути, указанное в параметрах …password_key

secman.kv.cert.type

Формат KV сертификатов. Возможные значения pem, pkcs12 и jks. Если secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

pkcs12

secman.token.ttl.sec

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

Нет

86400s

secman.token.refresh.period.sec

Период обновления wrapped-токена в секундах

Нет

По умолчанию 10/35 периода обновления токена на сервере Secret Management System

secman.token.secret.key

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

Нет

secret_id

secman.open.timeout.sec

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

Нет

5

secman.read.timeout.sec

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

Нет

5

secman.retries.max

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

Нет

6

secman.retries.interval.ms

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

Нет

По умолчанию время ожидания между повторами увеличивается экспоненциально с каждой попыткой. Начальное значение - 1с

secman.cert.ttl.sec

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

Нет

2592000s

secman.cert.refresh.period.sec

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

Нет

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

secman.cert.refresh.before.sec

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

Нет

24h

secman.ssl.verify

Параметр, отвечающий за проверку сертификата Secret Management System для установки доверительного соединения

Нет

false

secman.ssl.truststore_filepath

Место расположение сертификатов, которые позволяют установить доверительное соединение с Secret Management System

Да, если secman.ssl.verify равен true

-

secman.kv.base64_certs

Параметр, отвечающий за необходимость раскодирования сертификатов из кодировки Base64. Если secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

true

secman.kv.base64_passwords

Параметр, отвечающий за необходимость раскодирования паролей от сертификатов из кодировки Base64. Если secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

false

secman.auth_method

Путь к движку аутентификации по approle

Нет

approle

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

Параметр

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

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

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

secman.dashboard.opensearch.cn

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

Да

-

secman.dashboard.opensearch.pki.role

Наименование роли PKI движка Secret Management System для внутрикластерного уровня

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.pki.fetch.role). Если не заполнен, то значение роли определяется по значению параметра secman.pki.fetch.role

secman.dashboard.opensearch.kv.truststore_path

Наименование папки transport.truststore в KV. Если secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если не указано значение, то используется значение параметра secman.kv.dir.path

secman.dashboard.opensearch.kv.truststore_key

Ключ к цепочке KV transport.truststore. Если secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если не указано значение, то используется значение параметра secman.kv.truststore_key

secman.dashboard.opensearch.kv.truststore_template

Шаблон для валидации сертификата из KV. Если secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.base64_certs). Если не заполнен, то необходимость раскодирования определяется по значению параметра secman.base64_enabled

secman.dashboard.opensearch.kv.password_path

Путь к хранилищу пароля для KV transport.truststore. Если secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если не указано значение, то используется значение параметра secman.kv.dir.path

secman.dashboard.opensearch.kv.password_key

Ключ к паролю transport.truststore. Если secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если не указано значение, то используется значение параметра secman.kv.password_key

secman.dashboard.opensearch.kv.password_template

Шаблон для валидации пароля сертификата из KV. Если secman.kv.mount.path не заполнен, то парметр не обязательный

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.base64_passwords). Если не заполнен, то необходимость раскодирования определяется по значению параметра secman.base64_enabled

secman.dashboard.opensearch.pki.alt_names

alt names сертификата внутрикластерного уровня

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.pki.alt_names). Если не заполнен, то значение alt names сертификата определяется по значению параметра secman.pki.alt_names

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

Параметр

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

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

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

secman.dashboard.server.cn

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

Да

-

secman.dashboard.server.pki.role

Наименование роли PKI движка Secret Management System для шифрования взаимодействия Dashboards с клиентом

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.pki.fetch.role). Если не заполнен, то значение роли определяется по значению параметра secman.pki.fetch.role

secman.dashboard.server.kv.truststore_path

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

Нет

Если не указано значение, то используется значение параметра secman.kv.dir.path

secman.dashboard.server.kv.truststore_key

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

Нет

Если не указано значение, то используется значение параметра secman.kv.truststore_key

secman.dashboard.server.kv.truststore_template

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

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.base64_certs). Если не заполнен, то необходимость раскодирования определяется по значению параметра secman.base64_enabled

secman.dashboard.server.kv.password_path

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

Нет

Если не указано значение, то используется значение параметра secman.kv.dir.path

secman.dashboard.server.kv.password_key

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

Нет

Если не указано значение, то используется значение параметра secman.kv.password_key

secman.dashboard.server.kv.password_template

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

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.base64_passwords). Если не заполнен, то необходимость раскодирования определяется по значению параметра secman.base64_enabled

secman.dashboard.server.pki.alt_names

alt names сертификата взаимодействия Dashboards с клиентом

Нет

Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.pki.alt_names). Если не заполнен, то значение alt names сертификата определяется по значению параметра secman.pki.alt_names

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

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

Плагин Аудита находится в составе плагина Security и устанавливается вместе с ним.

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

Включение Аудита в 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

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

Большинство настроек Аудита описываются в файле /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.3>

#Заполнять в соответствии с вашим стендом
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
#Параметр, задающий максимальное количество асинхронно выполняемых задач отправки некритичных событий аудита
#Async.SendUncritical.Max.Tasks=1000
#Параметр, задающий таймаут опроса буфера асинхронных задач в мс.
#LocalBuffer.Queue.CheckInterval=50000
#Параметр, задающий размер локального буфера.
#LocalBuffer.Size=52428800
#Параметр, задающий таймаут ожидания асинхронной отправки в мс.
#LocalBuffer.Async.SendTimeout=50000 
#Максимальный размер события аудита
#audit.properties.maxRequestSize=1000000
#Максимамльный размер параметра события аудита
#audit.properties.maxBaseParameterSize=1024
#Максимальное количество потоков в threadpool в кме 
#audit.ufs.client_module.context.pool.parallelism=30
#Использовать ли валидатор КМа для проверки правильности полей и событий аудита 
#ufs.use.validator=false
#Перезаписывать значение userNode значением remote adress
#UserNode.NotOverride=true
#Выключает логи 
#disableLogs=false

Описание всех возможных настроек параметров в 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

kafka_2.topic.audit-metamodel-in

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

kafka_1/kafka_2.batch.size

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

kafka_1/kafka_2.buffer.memory

Максимально допустимый объем памяти в байтах, которое КМ кластера 1/2 может использовать для буферизации сообщений, ожидающих отправки на сервер

kafka_1/kafka_2.compression.type

Тип сжатия для всех данных для кластера 1/2 (none, gzip, snappy, lz4, zstd)

kafka_1/kafka_2.connections.max.idle.ms

Время в миллисекундах, спустя которое будут закрыты все бездействующие соединения для кластера 1/2

kafka_1/kafka_2.linger.ms

Время задержки перед отправкой пакета событий в миллисекундах для кластера 1/2. За это время в пакет могут добавиться дополнительные события

kafka_1/kafka_2.max.block.ms

Эта настройка определяет время блокировки методов Kafka кластера 1/2

kafka_1/kafka_2.max.request.size

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

kafka_1/kafka_2.metadata.max.age.ms

Интервал в миллисекундах, после которого происходит принудительное обновление метаданных, для раннего обнаружения новых брокеров и разделов кластера 1/2

kafka_1/kafka_2.receive.buffer.bytes

Размер TCP-буфера для получения данных для кластера 1/2. Если установлено значение -1, будет использоваться значение по умолчанию для операционной системы.

kafka_1/kafka_2.send.buffer.bytes

Размер TCP-буфера для отправки данных для кластера 1/2. Если установлено значение -1, будет использоваться значение по умолчанию для операционной системы.

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

-

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.circuit_breaker.failureRateThreshold, union_audit_2.circuit_breaker.failureRateThreshold

Максимальный процент ошибок в потоке запросов, после превышения которого Circuit breaker перейдет в режим OPEN - поток запросов будет прерван

union_audit.maxMsgSizeBytes, union_audit_2.maxMsgSizeBytes

Максимальный размер сообщения

union_audit.providers, union_audit_2.providers

Провайдер, к которому применяются настройки.(Значения 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

Async.SendUncritical.Max.Tasks

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

POOL_PARALLELISM

Размер пула для асинхронной отправки некритичных сообщений. Минимальное значение - 1. Если указать значение меньше минимального, то будет применено значение по умолчанию (16)

LocalBuffer.Queue.CheckInterval

Параметр, задающий таймаут опроса буфера асинхронных задач в мс.

LocalBuffer.Size

Параметр, задающий размер локального буфера.

LocalBuffer.Async.SendTimeout

Параметр, задающий таймаут ожидания асинхронной отправки в мс.

audit.properties.maxRequestSize

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

audit.properties.maxBaseParameterSize

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

audit.ufs.client_module.context.pool.parallelism

Максимальное количество потоков в threadpool в кме

ufs.use.validator

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

UserNode.NotOverride

Перезаписывать значение userNode значением remote adress

disableLogs

Выключает логи

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

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

Внимание!

Выполнение данного пункта для компонента SRHX требуется для обеспечения работы при недоступности Secret Management System.

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

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

Добавьте в 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'
#после команды будет ожидать ввода данных

Настройка интеграции с компонентом 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

http_authenticator:config:roles_sub_key

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

Настройка аутентификации с 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
    
  2. При заполнении используйте следующие параметры.

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

Описание

xff:

remoteIpHeader

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

internalProxies

Вместо <SRHX-ip-address> указывается 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
    
  2. Для настройки соединения заполните следующие параметры:

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

Описание

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://<server>:<port>/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
             insider_jwt_field: null
             insider_jwt_value: null
             insider_jwt_role: null 
             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
    
  2. Заполните:

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

Описание

openid_connect_url

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

openid_connect_idp.pemtrustedcas_filepath

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

jwks_uri

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

insider_jwt_field

Должен быть указан ключ JWT токена, в котором содержится описание дополнительной роли (если применимо)

insider_jwt_value

Должно быть указано значение поля JWT токена, при котором применяется дополнительная роль (если применимо)

insider_jwt_role

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

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
    
  2. Для настройки соединения заполните следующие параметры:

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

Описание

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.

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

Для работы плагина KNN установите пакет openblas.

sudo yum install openblas

Обновление#

Для обновления на новую версию или переустановки компонента 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:ХХХХХ/

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

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

systemctl status opensearch
systemctl status opensearch-dashboards

Если будут ошибки, то сервис будет в статусе failed.

Системные ошибки можно увидеть в самом статусе или выполнив следующую команду:

cat /var/log/messages

Для Dashboards так же доступен файл /SRHX/logs/opensearch-dashboards/stdout.log.

Ошибки программы можно увидеть в файле:

  • для компонента Search - /SRHX/logs/opensearch/<имя_кластера>.log;

  • для компонента Search-Dashboards - /SRHX/logs/opensearch-dashboards/opensearch-dashboards.log.

Если все сервисы успешно запущены, то проверить работоспособность Search можно следующими способами:

  1. Через компонент Search-Dashboards. Во вкладке Инструменты разработки (dev tools) отправьте необходимые запросы к серверу.

  2. Отправьте rest-запросы напрямую к Search, например через insomnia или curl, обязательно подставив в запрос сертификаты и логин/пароль пользователя внутри Search. По умолчанию это пользователь admin с паролем, указанным на форме заказа. Сертификаты можно использовать любые, подписанные тем же УЦ, что и сертификаты Search.

Выполните запросы GET _cluster/health и GET _cat/nodes?v и убедитесь, что доступны все node и кластер имеет статус green.

Пример вывода запроса.

Запрос GET _cluster/health

{
  "cluster_name": "DEV_SRHX_TEST",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 13,
  "number_of_data_nodes": 10,
  "discovered_master": true,
  "discovered_cluster_manager": true,
  "active_primary_shards": 73,
  "active_shards": 155,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100
}

Запрос GET _cat/nodes?v

ip          heap.percent ram.percent cpu load_1m load_5m load_15m node.role node.roles      cluster_manager name
ip_node_1              15          91   5    0.43    0.37     0.37 m         cluster_manager *               master-node-02
ip_node_2              42          99  19    3.96    4.43     4.21 d         data            -               data-node-02
ip_node_3              46          98  26    4.23    4.70     4.86 d         data            -               data-node-05
ip_node_4              10          98   5    0.81    0.74     0.66 m         cluster_manager -               master-node-01
ip_node_5              25          99  23    6.69    5.20     4.63 d         data            -               data-node-04
ip_node_6              16          98  31    3.79    3.94     3.99 d         data            -               data-node-07
ip_node_7              31          99  22    2.60    3.11     3.68 d         data            -               data-node-10
ip_node_8              74          86   5    0.50    0.42     0.37 m         cluster_manager -               master-node-03
ip_node_9              50          96  17    4.55    5.40     5.09 d         data            -               data-node-01
ip_node_10             42          97  19    2.36    3.79     4.11 d         data            -               data-node-03
ip_node_11             23          99  23    6.01    5.53     5.30 d         data            -               data-node-06
ip_node_12             16          98  20    4.58    3.81     3.82 d         data            -               data-node-09
ip_node_13             12          97  23    4.70    4.49     4.52 d         data            -               data-node-08

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

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

Проверить в пришедшем списке присутствие всех устанавливаемых плагинов на каждой 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 с плагином Security.

  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
            }
        }
    }
    
  4. Выполните запрос на создание индекса test_audit и загрузку в него документа через пользователя admin.

    PUT https://host:port/_bulk

    Body:

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

    Basic Auth: admin/admin

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

    Ответ 200 ОК

    {
        "acknowledged": true,
        "shards_acknowledged": true,
        "index": "test_audit"
    }
    
  5. Перейдите в 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\": \"mycompany\",\"trees\": \"Дуб\",\"specialists\": \"лидер разработчик\",\"games\": \"Прятки\",\"sports\": \"Футбол\",\"colors\": \"Багровый красный\",\"age\": 1,\"phrases\": \"Шёл по лесу и увидел дуб\",\"location\":\"34.423,58.432\"}\n{ \"index\" : {\"_id\" : \"0002\" } }\n{ \"technic\": \"Комп\",\"furniture\": \"Диван\",\"companies\": \"mycompany\",\"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

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

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

    GET https://host:port/
    

    Basic Auth

    user IAM / password IAM

    Ответ 401

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

  3. Выполните запрос для проверки, что 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

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

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

    GET https://host:port/
    

    Basic Auth

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

    Ответ 401

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

  4. Выполните запрос к серверу, используя 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 согласно разделу Проверка работоспособности настоящего документа.