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

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

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

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

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

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

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

Категория ПО

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

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

Версия

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

Описание

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

Да

ОС Альт 8 СП

8.2 и выше

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

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

Red Hat Enterprise Linux

7.8, 7.9

Опционально

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

Java-машина

Да

OpenJDK

11 и выше

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

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

Сервис централизованного хранения репозиториев артефактов (хранилище артефактов)

Да

Nexus-Public

2.5.1 и выше

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

Интегрированная платформа для проксирования, хранения и управления зависимостями Java , образами, а также распространения ПО

Сервис централизованного хранения репозиториев исходного кода

Да

GitLab CE

15.0 и выше

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

Хранение конфигураций при автоматизированной установке

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

Да

Jenkins

2.332.4 и выше

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

Сервер автоматизации, используемый для внедрения непрерывной интеграции и непрерывной доставки (CI/CD) для проектов программного обеспечения

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

Да

NodeJS

14.21.3 и выше

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

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

Примечание

*

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

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

**

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

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

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

У компонента SRHX отсутствуют платформенные зависимости.

У компонента SRHX реализована интеграция со следующими компонентами из состава продукта:

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

Код

Описание

Индексированный поиск

IDXS

Компонент предназначен для эффективного поиска по прикладным и нормативным хранилищам документов с учетом ранжирования и релевантности

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

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

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

CPU

RAM

Диск под систему

run-test

2 ядра

2 GB

HDD: 15GB

minimum

4 ядра

8 GB

HDD: 20GB

medium

8 ядра

16 GB

HDD/SSD: 25GB

optimal

16 ядер

32GB

SSD: 35GB

high-load

32 ядер

64GB

SSD: 35GB

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

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

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

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

Описание

Search-server-{server-version}.zip

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

Security_Plugin-{security-version}.zip

Дистрибутив содержит плагин для серверной части, отвечающий за шифрование, авторизацию и аутентификацию компонента SRHX

search-healthcheck-plugin-{healthcheck-version}.zip

Дистрибутив содержит плагин для серверной части, отвечающий за проверку работоспособности компонента SRHX

Search-notifications

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

Search-security

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

Search-index-management

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

Search-job-scheduler

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

Prometheus-exporter

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

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

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

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

  1. Установите java. Версия java должна быть не меньше 11.0.15. Пропишите системную переменную "$JAVA_HOME" в файл etc/profile:

export JAVA_HOME=java_path_on_your_computer 
export PATH=$JAVA_HOME/bin:$PATH   

Если $JAVA_HOME будет не прописано, то будет использоваться java, которая поставляется с дистрибутивом. Расположена внутри дистрибутива сервера в папке jdk.

  1. Измените настройки Java внутри папки jdk. В каталоге, где находится Java по пути - java_path/lib/security отредактируйте файл default.policy, добавить

//permissions needed by applications using java.desktop module

permission java.lang.RuntimePermission "setContextClassLoader"

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

  1. Установите unzip.

  2. Создайте папки, необходимые для конфигурации:

sudo mkdir /var/log/opensearch
sudo mkdir /var/lib/opensearch
sudo mkdir /var/run/opensearch

  1. Убедитесь, что параметру "vm.max_map_count" задано значение не менее 262 144.

cat /proc/sys/vm/max_map_count

Если значение меньше, отредактируйте данный параметр.

sudo nano /etc/sysctl.conf
vm.max_map_count=262144

  1. Выполните перезагрузку

sudo sysctl -p

  1. Убедитесь, что в параметре на открытие файлов для пользователя задано значение не менее 65536.

ulimit -n

Если значение меньше 65536, добавьте параметр – "nofile" и значение – "65536" в файле limits.conf.

Если указываете soft, то hard обязателен.

Формат каждой строки лимита для пользователя следующий:

<domain>        <type>  <item>  <value>

Описание каждого параметра есть в файле limits.conf.

sudo nano /etc/security/limits.conf

Пример:

  1. Убедитесь, что в параметре максимальное число пользовательских процессов задано не менее 4096.

ulimit -u

Если значение меньше 4096, добавьте параметр – "nproc" и значение – "4096" в файле limits.conf

Если указываете soft, то hard обязателен.

Формат каждой строки лимита для пользователя следующий:

<domain>        <type>  <item>  <value>

Описание каждого параметра указано в файле limits.conf.

sudo nano /etc/security/limits.conf

Данные действия выполняются индивидуально для каждой именованной области среды в пределах каждого стенда.

Пример:

Установка#

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

Установка в узле#

Загрузка и распаковка дистрибутива#
  1. Загрузите дистрибутив на стенд.

  2. Выдайте права на исполнение для архива.

chmod +x <distrib name>
  1. Создайте основную директорию opensearch.

 mkdir opensearch
  1. Перенесите в директорию дистрибутив и распакуйте.

unzip distr-name
Установка Search Server#
  1. Создайте директорию server.

    mkdir server
    
  2. Поместите дистрибутив distr-server-name в директорию server.

  3. Перейдите в директорию server и распакуйте дистрибутив.

    unzip distr-server-name
    
  4. Отредактируйте файл параметров nano ./config/opensearch.yml.

  5. Раскомментируйте строку и проставьте наименование сервера и порта(по-умолчанию 9200) в блоке Network. Проставьте порт xxxx:

network.host: ip-host
http.port: port
  1. Добавьте в блок Discovery:

discovery.type: single-node
  1. Добавьте в блок Paths, если блок Paths, отсутствует, то добавьте его.

path.data: var/lib/opensearch/
path.logs: var/log/opensearch/

Пример:

  1. Сохраните данные.

  2. Проверьте запуск server.

./bin/opensearch
  1. Если при запуске ошибок не выявлено, сервер запустится. Выполните проверку работоспособности сервера запросом: "http://хх.хх.хх.х:ххххх/"

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

{
"name" : "<host name>",
"cluster_name" : "opensearch",
"cluster_uuid" : "D95OFChDQ_mrwj1Xtx5Otw",
"version" : {
"distribution" : "opensearch",
"number" : "3.0.0",
"build_type" : "tar",
"build_hash" : "unknown",
"build_date" : "unknown",
"build_snapshot" : true,
"lucene_version" : "9.4.2",
"minimum_wire_compatibility_version" : "2.4.0",
"minimum_index_compatibility_version" : "2.0.0"
},
"tagline" : "The OpenSearch Project: https://opensearch.org/"
}

Установка Index Management plugin#
  1. Создайте директорию plugins на уровне, где создана директория server.

mkdir plugins
  1. Поместите следующие дистрибутивы в директорию plugins:

  • opensearch-notifications-core;

  • opensearch-notifications;

  • search-job-scheduler;

  • search-index-management.

  1. Вернитесь в основную директорию server. Вызовите следующую команду для установки каждого из вышеописанных дистрибутивов:

./bin/opensearch-plugin install file:home/full_path_to_archive/opensearch-notifications-core.zip
  1. На вопрос: "Continue with installation? [y/N]" - Нажмите y и Enter.

  2. Установите дистрибутивы в следующем порядке:

  • opensearch-notifications-core;

  • opensearch-notifications;

  • search-job-scheduler;

  • search-index-management.

  1. Для проверки запустите следующую команду:

./bin/opensearch-plugin list

Данная программа показывает установленные плагины на сервере.

Установка Prometheus-exporter plugin#
  1. Создайте директорию plugins на уровне, где создана директория server.

mkdir plugins
  1. Поместите дистрибутив distr-prometheus-exporter-name в директорию plugins.

  2. Вернитесь в основную директорию server. Вызовите следующую команду для установки плагина.

./bin/opensearch-plugin install file:home/full_path_to_archive/distr-prometheus-exporter-name.zip
  1. На вопрос: "Continue with installation? [y/N]" - Нажмите y и Enter.

  2. Для проверки запустите следующую команду:

./bin/opensearch-plugin list

Данная программа показывает установленные плагины на сервере.

  1. Выполните проверку работоспособности Prometheus-exporter plugin.

https://host:xxxx/_prometheus/metrics

В ответ получен список метрик в prometheus формате.

Установка Security Search Plugin на сервер#
  1. Создайте директорию plugins на уровне, где создана server.

 mkdir plugins
  1. Поместите дистрибутив distr-security-plugin-name в директорию plugins.

  2. Вернитесь в основную директорию server. Вызовите следующую команду для установки плагина.

 ./bin/opensearch-plugin install file:full_path_to_archive/distr-security-plugin-name.zip

На вопрос: "Continue with installation? [y/N]" - Нажмите y и Enter

Вы должны увидеть: "-> Installed opensearch-security with folder name opensearch-security"

  1. Для проверки запустите следующую команду:

    Данная программа показывает установленные плагины на сервере.

 ./bin/opensearch-plugin list
  1. Настройте плагин Security для работы сервиса по HTTPS и с шифрованием данных.

  2. Загрузите сертификаты, созданные для работы с компонентом в директорию с конфигурацией сервиса.

  3. Отредактируйте файл с конфигурацией сервиса:

sudo nano /opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT/config/opensearch.yml
  1. Для настройки транспортного уровня добавьте вниз файла:

### TRANSPORT LAYER
plugins.security.ssl.transport.enabled: true
plugins.security.ssl.transport.pemcert_filepath: <cert>
plugins.security.ssl.transport.pemkey_filepath: <key>
plugins.security.ssl.transport.pemtrustedcas_filepath: <ca.cert>
plugins.security.ssl.transport.enforce_hostname_verification: false
plugins.security.ssl.transport.enabled_protocols:
  - "TLSv1.2"
# plugins.security.ssl.transport.enabled_ciphers:
#  - "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
#  - "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
  1. Для настройки http уровня добавьте:

### HTTP LAYER
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: <cert-1>
plugins.security.ssl.http.pemkey_filepath: <cert-1-key>
plugins.security.ssl.http.pemtrustedcas_filepath: <ca.cert>
plugins.security.ssl.http.clientauth_mode: REQUIRE
plugins.security.ssl.http.enabled_protocols:
  - "TLSv1.2"
plugins.security.ssl.http.enabled_ciphers:
  - "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
  - "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
  1. Добавьте остальные настройки безопасности:

plugins.security.allow_default_init_securityindex: true
plugins.security.authcz.admin_dn:
  - <CN name cert 1>
  - <CN name cert 2>
plugins.security.nodes_dn:
  - <CN name cert>
plugins.security.disabled: false
plugins.security.audit.type: internal_opensearch
plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
plugins.security.system_indices.enabled: true
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"]
node.max_local_storage_nodes: 3
plugins.security.cache.ttl_minutes: 720
Изменение ролевой модели и методов аутентификации#
  1. Удалите данные о пользователе "logstash" из файла "/path/to/opensearch/config/opensearch-security/internal_users.yml".

sudo nano opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT/config/opensearch-security/internal_users.yml

Пример. Найдите и удалите подобные данные, если они имеются в данном файле:

logstash:
 hash: "$2a$12$u1ShR4l4uBS3Uv59Pa2y5.1uQuZBrZtmNfqB3iM/.jL0XoV9sghS2"
 reserved: false
 backend_roles:
 - "logstash"
 description: "Demo logstash user, using external role mapping"
  1. Удалите данные о роли "logstash" из файла "/path/to/opensearch/config/opensearch-security/roles_mapping.yml".

sudo nano opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT/config/opensearch-security/roles_mapping.yml

Пример. Найдите и удалите подобные данные, если они имеются в данном файле:

logstash:
  reserved: false
  backend_roles:
 - "logstash"

Для безопасного использования компонента SRHX рекомендуется удалить всех пользователей, которые не предполагаются к использованию (по аналогии с пользователем logstash). У оставшихся пользователей требуется изменить пароли.

Применение новых настроек ролевой модели

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

  1. Запустите скрипт.

./opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT/bin/opensearch
  1. Запустите скрипт для изменения ролевой модели:

./securityadmin.sh -cd /path/to/config/opensearch-security/ -icl -nhnv -h elk.dev.solution.ххх -cacert /path/to/ca.cert -cert /path/to/cert.crt -key /path/to/cert.key

  1. Скрипт прошёл успешно.

  2. Остановите процесс Server.

  3. Раскомментируйте поле plugins.security.ssl.http.enabled_ciphers и принадлежащие ей значения на транспортном и http уровне.

sudo nano opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT/config/opensearch.yml

Пример:

plugins.security.ssl.transport.enabled_protocols:
  - "TLSv1.2"
plugins.security.ssl.transport.enabled_ciphers:
  - "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
  - "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
### HTTP LAYER
plugins.security.ssl.http.enabled_protocols:
  - "TLSv1.2"
plugins.security.ssl.http.enabled_ciphers:
  - "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
  - "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
  1. Сервер готов. Для проверки запустите server, а затем используйте следующую curl команду. Запуск сервера.

./bin/opensearch
  1. Проверьте работоспособность:

curl -k -XGET https://server_name:xxxx -u 'admin:admin'

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

{
"name" : "<host name>",
"cluster_name" : "opensearch",
"cluster_uuid" : "D95OFChDQ_mrwj1Xtx5Otw",
"version" : {
"distribution" : "opensearch",
"number" : "3.0.0",
"build_type" : "tar",
"build_hash" : "unknown",
"build_date" : "unknown",
"build_snapshot" : true,
"lucene_version" : "9.4.2",
"minimum_wire_compatibility_version" : "2.4.0",
"minimum_index_compatibility_version" : "2.0.0"
},
"tagline" : "The OpenSearch Project: https://opensearch.org/"
}
Установка HealthCheck Plugin на сервер#
  1. Создайте директорию plugins на уровне, где создана директория server.

mkdir plugins
  1. Поместите дистрибутив health-check-plugin-name в директорию plugins.

  2. Вернитесь в основную директорию server. Вызовите следующую команду для установки плагина.

./bin/opensearch-plugin install file:home/full_path_to_archive/health-check-plugin-name.zip
  1. На вопрос: "Continue with installation? [y/N]" - Нажмите y и Enter.

  2. Для проверки запустите следующую команду: Данная программа показывает установленные плагины на сервере.

./bin/opensearch-plugin list
  1. Выполните проверку работоспособности HealthCheck plugin.

https://host:xxxx/ufs-healthcheck/test

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

{"success":true,"body":"ON"}

Создание файла демо для работы Server компонента SRHX.

Внимание! Замените пути до программы в файле с конфигурацией сервиса на необходимые.

  1. Создайте файл opensearch.service.

sudo nano usr/lib/systemd/system/opensearch.service
  1. Заполните файл opensearch.service конфигурацией.

[Unit]
Description=Platform V Search
Wants=network-online.target
After=network-online.target

[Service]
Type=forking
RuntimeDirectory=data
PrivateTmp=true
WorkingDirectory=/path/to/opensearch
ExecStart=/path/to/opensearch/bin/opensearch -d

User=opensearch
Group=opensearch
StandardOutput=journal
StandardError=inherit

# Specifies the maximum file descriptor number that can be opened by this process

LimitNOFILE=65535

# Specifies the maximum number of processes

LimitNPROC=4096

# Specifies the maximum size of virtual memory

LimitAS=infinity

# Specifies the maximum file size

LimitFSIZE=infinity

# Disable timeout logic and wait until process is stopped

TimeoutStopSec=0

# SIGTERM signal is used to stop the Java process

KillSignal=SIGTERM

# Send the signal only to the JVM rather than its control group

KillMode=process

# Java process is never killed

SendSIGKILL=no

# When a JVM receives a SIGTERM signal it exits with code 143

SuccessExitStatus=143

# Allow a slow startup before the systemd notifier module kicks in to extend the timeout

TimeoutStartSec=75

[Install]
WantedBy=multi-user.target

  1. Выполните следующие команды.

sudo systemctl enable opensearch.service
sudo systemctl daemon-reload

  1. Выполните команду запуска.

sudo systemctl start opensearch.service
  1. Выполните команду на проверку запуска opensearch.service.

sudo systenctl status opensearch.service

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

opensearch.service - opensearch_service
     Loaded: loaded (/usr/lib/systemd/system/opensearch.service; enabled; vendor preset: disabled)
     Active: active (running) since <date>; 23h ago
       Docs: https://www.elastic.co

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

https://host:xxxx/

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

{
  "name" : "<node name>",
  "cluster_name" : "opensearch",
  "cluster_uuid" : "fK3PQhtLR46xjZAce4Qgkg",
  "version" : {
    "distribution" : "opensearch",
    "number" : "3.0.0",
    "build_type" : "tar",
    "build_hash" : "unknown",
    "build_date" : "unknown",
    "build_snapshot" : true,
    "lucene_version" : "9.4.2",
    "minimum_wire_compatibility_version" : "2.4.0",
    "minimum_index_compatibility_version" : "2.0.0"
  },
  "tagline" : "The OpenSearch Project: https://opensearch.org/"
}

Установка в кластере#

Настройка мастер-node#
  1. Создайте пользователя opensearch:

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

sudo nano /etc/sudoers.d/opensearch
  1. Необходимо добавить:

opensearch ALL=(ALL) NOPASSWD: /bin/systemctl start opensearch.service
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl restart opensearch.service
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl stop opensearch.service
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl status opensearch.service
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl enable opensearch.service
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl disable opensearch.service

  1. Создайте daemon-сервис для Server:

sudo nano /usr/lib/systemd/system/opensearch.service

Внимание! Замените пути до программы на необходимые.

  1. Добавьте:


[Unit]
Description=Platform V Search
Wants=network-online.target
After=network-online.target
 
[Service]
Type=forking
RuntimeDirectory=data
PrivateTmp=true
WorkingDirectory=/path/to/opensearch
ExecStart=/path/to/opensearch/bin/opensearch -d
 
User=opensearch
Group=opensearch
StandardOutput=journal
StandardError=inherit
 
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65535
# Specifies the maximum number of processes
LimitNPROC=4096
# Specifies the maximum size of virtual memory
LimitAS=infinity
# Specifies the maximum file size
LimitFSIZE=infinity
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0
# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM
# Send the signal only to the JVM rather than its control group
KillMode=process
# Java process is never killed
SendSIGKILL=no
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143
# Allow a slow startup before the systemd notifier module kicks in to extend the timeout
TimeoutStartSec=75
  
[Install]
WantedBy=multi-user.target
  1. Выполните перезагрузку сервисов:

sudo systemctl daemon-reload
  1. Создайте основную директорию opensearch и выдайте на неё права пользователю opensearch:

mkdir opensearch
sudo chown opensearch:opensearch /opensearch/
  1. Переключитесь на пользователя opensearch:

sudo su - opensearch
  1. Загрузите дистрибутив на стенд.

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

unzip distr-name
Установка Search Server#
  1. Создайте необходимые директории.

mkdir /opensearch/server
mkdir /opensearch/log
mkdir /opensearch/lib
  1. Поместите дистрибутив distr-server-name в директорию server.

  2. Перейдите в директорию server и распакуйте дистрибутив.

unzip distr-server-name
  1. Отредактируйте файл конфигурации nano.

./config/opensearch.yml.
  1. Задайте имя хоста в network.host и укажите порт, который будет использоваться.

network.host: {{ dns-server }}
http.port: xxxx
transport.port: 19301
  1. Задайте имя кластера:

cluster.name: cluster_name
  1. Задайте имя node и укажите её роли в кластере. Минимум одна из node кластера должна иметь роль cluster_manager.

node.name: node_1
node.roles: [ data, cluster_manager ]
  1. Задайте используемые хосты кластера:

discovery.seed_hosts: ["name_host_1", "name_host_2", "name_host_3"]
  1. Удалите строку, если до этого была настроена конфигурация StandAlone.

discovery.type: single-node
  1. Задайте node с ролью cluster_manager (укажите имена всех мастер-node, которые будут в кластере).

cluster.initial_cluster_manager_nodes:
  - <имя node_1 с ролью cluster_manager>
  - <имя node_2 с ролью cluster_manager>
  - <имя node_3 с ролью cluster_manager>
discovery.seed_hosts:
  - name_host_1:xxxx
  - name_host_2:xxxx
  - name_host_3:xxxx
  1. Добавьте в блок Paths. Если блок Paths, отсутствует, то добавьте его.

path.data: var/lib/opensearch/
path.logs: var/log/opensearch/

Пример:

  1. Сохраните данные.

  2. Добавьте привилегии в политику Java:

sudo nano /opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT/jdk/lib/security/default.policy
  1. Добавьте под комментарием:

//permissions needed by applications using java.desktop module

permission java.lang.RuntimePermission "setContextClassLoader"
  1. Настройте автозапуск ранее созданного daemon-сервиса и запустите его:

sudo systemctl enable opensearch.service
sudo systemctl restart opensearch.service
  1. Проверьте работоспособность запущенного daemon-сервиса:

sudo systemctl status opensearch.service

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

opensearch.service - Platform V Search
   Loaded: loaded (/usr/lib/systemd/system/opensearch.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-04-04 17:12:58 MSK; 22h ago
 Main PID: 18827 (bash)
   CGroup: /system.slice/opensearch.service
  1. Выполните проверку работоспособности Server.

https://host:xxxx/

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

{
  "name" : "<node name>",
  "cluster_name" : "opensearch",
  "cluster_uuid" : "fK3PQhtLR46xjZAce4Qgkg",
  "version" : {
    "distribution" : "opensearch",
    "number" : "3.0.0",
    "build_type" : "tar",
    "build_hash" : "unknown",
    "build_date" : "unknown",
    "build_snapshot" : true,
    "lucene_version" : "9.4.2",
    "minimum_wire_compatibility_version" : "2.4.0",
    "minimum_index_compatibility_version" : "2.0.0"
  },
  "tagline" : "The OpenSearch Project: https://opensearch.org/"
}
Установка Security Search Plugin на сервер#

Внимание!

Для настройки шифрования потребуются два сертификата c разными CN в них и корневой сертификат, которым они подписаны. Один сертификат будет использоваться администратором, для применения настроек безопасности. Второй, для остального: шифрование транспортного и REST-уровня самого компонента SRHX, его node. Далее в инструкции используется – имя для общего сертификата – для сертификата администратора и <ca.cert> – для корневого. При создании сертификатов и в блок [altnames] необходимо добавить имена хостов и ip-адреса кластера компонента SRHX.

Пример блока [altnames]:

[alt_names]
DNS.1 = vm-srhx-1.dev.ххх
DNS.2 = vm-srhx-2.dev.ххх
DNS.3 = vm-srhx-3.dev.ххх
DNS.4 = xxx
DNS.5 = xxx
DNS.6 = xxx

Сертификаты должны быть клиент-серверными. Они должны содержать параметр:

extendedKeyUsage=serverAuth, clientAuth

Они могут лежать в любом месте, но для удобства лучше поместить их в /path/to/opensearch/config и ссылаться относительно заполняемого конфигурационного файла.

Установка описана в разделе Установка в узле настоящего документа.

Установка HealthCheck Plugin на сервер#

Выполнение данного шага обязательно. Описание установки приведено выше в разделе Установка в узле настоящего документа.

Установка Index Management plugin#

Выполнение данного шага обязательно. Описание установки приведено выше в разделе Установка в узле настоящего документа.

Установка Prometheus-exporter plugin#

Выполнение данного шага обязательно. Описание установки приведено выше в разделе Установка в узле настоящего документа.

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

Выполнение данного шага обязательно. Описание установки приведено выше в разделе Установка в узле настоящего документа

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

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

  1. Запустите скрипт.

./opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT/bin/opensearch
  1. Запустите скрипт для изменения ролевой модели:

./securityadmin.sh -cd /path/to/config/opensearch-security/ -icl -nhnv -h elk.dev.solution.ххх -cacert /path/to/ca.cert -cert /path/to/cert.crt -key /path/to/cert.key

  1. Скрипт прошёл успешно.

  2. Остановите процесс Server.

  3. Раскомментируйте поле plugins.security.ssl.http.enabled_ciphers и принадлежащие ей значения на транспортном и http уровне.

sudo nano opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT/config/opensearch.yml

Пример

plugins.security.ssl.transport.enabled_protocols:
  - "TLSv1.2"
plugins.security.ssl.transport.enabled_ciphers:
  - "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
  - "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
### HTTP LAYER
plugins.security.ssl.http.enabled_protocols:
  - "TLSv1.2"
plugins.security.ssl.http.enabled_ciphers:
  - "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
  - "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
  1. Запустите daemon-сервис Server.

sudo systemctl restart opensearch.service
  1. Проверьте работоспособность запущенного daemon-сервиса:

sudo systemctl status opensearch.service

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

opensearch.service - Platform V Search
   Loaded: loaded (/usr/lib/systemd/system/opensearch.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-04-04 17:12:58 MSK; 22h ago
 Main PID: 18827 (bash)
   CGroup: /system.slice/opensearch.service
  1. Выполните проверку работоспособности Server.

https://host:xxxx/

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

{
  "name" : "<node name>",
  "cluster_name" : "opensearch",
  "cluster_uuid" : "fK3PQhtLR46xjZAce4Qgkg",
  "version" : {
    "distribution" : "opensearch",
    "number" : "3.0.0",
    "build_type" : "tar",
    "build_hash" : "unknown",
    "build_date" : "unknown",
    "build_snapshot" : true,
    "lucene_version" : "9.4.2",
    "minimum_wire_compatibility_version" : "2.4.0",
    "minimum_index_compatibility_version" : "2.0.0"
  },
  "tagline" : "The OpenSearch Project: https://opensearch.org/"
}
Обязательное ограничение доступа к директории config#
  1. После успешной установки закройте доступ к директории config, где хранится файл с конфигурацией Server и используемые сертификаты.

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

ls -l /opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT

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

drwx------  4 opensearch opensearch   4096 Mar 31 09:39 config
Настройка slave-node#
  1. Создайте пользователя opensearch:

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

sudo nano /etc/sudoers.d/opensearch
  1. Добавьте:

opensearch ALL=(ALL) NOPASSWD: /bin/systemctl start opensearch.service
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl restart opensearch.service
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl stop opensearch.service
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl status opensearch.service
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl enable opensearch.service
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl disable opensearch.service

  1. Создайте daemon-сервис для Server:

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

[Unit]
Description=Platform V Search
Wants=network-online.target
After=network-online.target
  
[Service]
RuntimeDirectory=opensearch
PrivateTmp=true
  
WorkingDirectory=/opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT
  
User=opensearch
Group=opensearch
  
ExecStart=/bin/bash -c '/opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT/bin/opensearch &> /opensearch/log/server.log'
 
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65535
  
# Specifies the maximum number of processes
LimitNPROC=4096
  
# Specifies the maximum size of virtual memory
LimitAS=infinity
  
# Specifies the maximum file size
LimitFSIZE=infinity
  
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0
  
# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM
  
# Send the signal only to the JVM rather than its control group
KillMode=process
  
# Java process is never killed
SendSIGKILL=no
  
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143
  
# Allow a slow startup before the systemd notifier module kicks in to extend the timeout
TimeoutStartSec=75
  
[Install]
WantedBy=multi-user.target
  1. Выполните перезагрузку сервисов:

sudo systemctl daemon-reload
  1. Создайте основную директорию opensearch и выдайте на неё права пользователю opensearch:

mkdir opensearch
sudo chown opensearch:opensearch /opensearch/
  1. Переключитесь на пользователя opensearch:

sudo su - opensearch
  1. Загрузите дистрибутив на стенд.

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

unzip distr-name
Установка Search Server#
  1. Создайте необходимые директории.

mkdir /opensearch/server
mkdir /opensearch/log
mkdir /opensearch/lib
  1. Поместите дистрибутив distr-server-name в директорию server.

  2. Перейдите в директорию server и распакуйте дистрибутив.

unzip distr-server-name
  1. Отредактируйте файл конфигурации nano.

./config/opensearch.yml.
  1. Задайте имя хоста в network.host и укажите порт, который будет использоваться.

network.host: {{ dns-server }}
http.port: xxxx
transport.port: 19301
  1. Задайте имя кластера:

cluster.name: cluster_name
  1. Задайте имя nod и укажите её роли в кластере. Минимум одна из nod кластера должна иметь роль cluster_manager.

node.name: node_1
node.roles: [ data, cluster_manager ]
  1. Задайте используемые хосты кластера:

discovery.seed_hosts: ["name_host_1", "name_host_2", "name_host_3"]
  1. Удалите строку, если до этого была настроена конфигурация StandAlone.

discovery.type: single-node
  1. Задайте node с ролью cluster_manager (укажите имена всех мастер-node, которые будут в кластере)

cluster.initial_cluster_manager_nodes:
  - <имя node_1 с ролью cluster_manager>
  - <имя node_2 с ролью cluster_manager>
  - <имя node_3 с ролью cluster_manager>
discovery.seed_hosts:
  - name_host_1:xxxx
  - name_host_2:xxxx
  - name_host_3:xxxx
  1. Добавьте в блок Paths, Если блок Paths, отсутствует, то добавьте его.

path.data: var/lib/opensearch/
path.logs: var/log/opensearch/
  1. Сохраните данные.

  2. Добавьте привилегии в политику Java:

sudo nano /opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT/jdk/lib/security/default.policy
  1. Добавьте под комментарием:

//permissions needed by applications using java.desktop module

permission java.lang.RuntimePermission "setContextClassLoader"
  1. Настройте автозапуск ранее созданного daemon-сервиса и запустите его:

sudo systemctl enable opensearch.service
sudo systemctl restart opensearch.service

  1. Проверьте работоспособность запущенного daemon-сервиса:

sudo systemctl status opensearch.service

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

opensearch.service - Platform V Search
   Loaded: loaded (/usr/lib/systemd/system/opensearch.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-04-04 17:12:58 MSK; 22h ago
 Main PID: 18827 (bash)
   CGroup: /system.slice/opensearch.service
  1. Выполните проверку работоспособности Server.

https://host:xxxx/

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

{
  "name" : "<node name>",
  "cluster_name" : "opensearch",
  "cluster_uuid" : "fK3PQhtLR46xjZAce4Qgkg",
  "version" : {
    "distribution" : "opensearch",
    "number" : "3.0.0",
    "build_type" : "tar",
    "build_hash" : "unknown",
    "build_date" : "unknown",
    "build_snapshot" : true,
    "lucene_version" : "9.4.2",
    "minimum_wire_compatibility_version" : "2.4.0",
    "minimum_index_compatibility_version" : "2.0.0"
  },
  "tagline" : "The OpenSearch Project: https://opensearch.org/"
Установка HealthCheck Plugin на сервер#

Выполнение данного шага обязательно. Описание установки приведено выше в разделе Установка в кластере.

Установка Security Search Plugin на сервер#
  1. Создайте директорию plugins на уровне, где создана директория server.

mkdir plugins
  1. Поместите дистрибутив distr-security-plugin-name в директорию plugins.

  2. Вернитесь в основную директорию server. Вызовите следующую команду для установки плагина.

   ./bin/opensearch-plugin install file:/full_path_to_archive/distr-security-plugin-name.zip
  1. На вопрос: "Continue with installation? [y/N]" - Нажмите y и Enter. Вы должны увидеть: "-> Installed opensearch-security with folder name opensearch-security"

  2. Для проверки запустите следующую команду:

./bin/opensearch-plugin list

Данная программа показывает установленные плагины на сервере.

  1. Настройте плагин Security для работы сервиса по HTTPS и с шифрованием данных.

  2. Загрузите сертификаты, созданные для работы с компонентом SRHX в директорию с конфигурацией сервиса.

  3. Начните редактирование файла с конфигурацией сервиса:

sudo nano /opensearch/server/search-0.0.2/opensearch-3.0.0-SNAPSHOT/config/opensearch.yml
  1. Для настройки транспортного уровня вниз файла добавьте:

### TRANSPORT LAYER
plugins.security.ssl.transport.enabled: true
plugins.security.ssl.transport.pemcert_filepath: <cert-1>
plugins.security.ssl.transport.pemkey_filepath: <cert-1-key>
plugins.security.ssl.transport.pemtrustedcas_filepath: <ca.cert>
plugins.security.ssl.transport.enforce_hostname_verification: false
plugins.security.ssl.transport.enabled_protocols:
  - "TLSv1.2"
plugins.security.ssl.transport.enabled_ciphers:
  - "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
  - "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
  1. Для настройки http уровня добавьте:

### HTTP LAYER
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: <cert-1>
plugins.security.ssl.http.pemkey_filepath: <cert-1-key>
plugins.security.ssl.http.pemtrustedcas_filepath: <ca.cert>
plugins.security.ssl.http.clientauth_mode: REQUIRE
plugins.security.ssl.http.enabled_protocols:
  - "TLSv1.2"
plugins.security.ssl.http.enabled_ciphers:
  - "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
  - "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
  1. Добавьте остальные настройки безопасности:

plugins.security.allow_default_init_securityindex: true
plugins.security.authcz.admin_dn:
  - <CN name cert 1>
plugins.security.nodes_dn:
  - <CN name cert Dashboard cert>
  - <CN name cert>
plugins.security.disabled: false
plugins.security.audit.type: internal_opensearch
plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
plugins.security.system_indices.enabled: true
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"]
node.max_local_storage_nodes: 3
plugins.security.cache.ttl_minutes: 720
  1. Выполните рестарт Server для применения всех параметров:

sudo systemctl restart opensearch.service
  1. Проверьте работоспособность запущенного daemon-сервиса:

sudo systemctl status opensearch.service

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

opensearch.service - Platform V Search
   Loaded: loaded (/usr/lib/systemd/system/opensearch.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-04-04 17:12:58 MSK; 22h ago
 Main PID: 18827 (bash)
   CGroup: /system.slice/opensearch.service
  1. Выполните проверку работоспособности Server.

https://host:xxxx/

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

{
  "name" : "<node name>",
  "cluster_name" : "opensearch",
  "cluster_uuid" : "fK3PQhtLR46xjZAce4Qgkg",
  "version" : {
    "distribution" : "opensearch",
    "number" : "3.0.0",
    "build_type" : "tar",
    "build_hash" : "unknown",
    "build_date" : "unknown",
    "build_snapshot" : true,
    "lucene_version" : "9.4.2",
    "minimum_wire_compatibility_version" : "2.4.0",
    "minimum_index_compatibility_version" : "2.0.0"
  },
  "tagline" : "The OpenSearch Project: https://opensearch.org/"
}
Установка Index Management plugin#

Выполнение данного шага обязательно. Описание установки приведено выше в разделе Установка в кластере настоящего документа.

Установка Prometheus-exporter plugin#

Выполнение данного шага обязательно. Описание установки приведено выше в разделе Установка в кластере настоящего документа.

Обязательное ограничение доступа к директории config#

Выполнение данного шага обязательно. Описание установки приведено выше в разделе Установка в кластере настоящего документа.

Проверка работоспособности кластера компонента SRHX#
  1. Выполните запрос.

curl -XGET https://host:xxxx/_cat/nodes?v -u 'user:user' --insecure

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

ip          heap.percent ram.percent cpu load_1m load_5m load_15m node.role node.roles           cluster_manager name
10.**.**.1            48          97   4    0.04    0.09     0.12 dm        cluster_manager,data *               node_1
10.**.**.2            52          85   5    0.16    0.14     0.14 dm        cluster_manager,data -               node_2
10.**.**.3            26          90   7    0.17    0.19     0.22 dm        cluster_manager,data -               node_3
Создание Технических Учётных Записей для компонента Индексированный поиск (IDXS) (опционально)#
  1. Создайте роль для технических учётных записей.

PUT  https://host:xxxx/_plugins/_security/api/roles/technical_role
{
    "cluster_permissions": [
        "cluster:admin/*",
        "cluster:monitor/*",
        "indices:data/read/scroll/clear",
        "indices:admin/index_template/put"
    ],
    "index_permissions": [
        {
            "index_patterns": [
                "*"
            ],
            "fls": [],
            "masked_fields": [],
            "allowed_actions": [
                "indices:admin/*",
                "indices:data/*",
                "indices:monitor/*"
            ]
        }
    ],
    "tenant_permissions": []
}
  1. Создайте пользователей для технических учётных записей.

PUT https://host:xxxx/_plugins/_security/api/internalusers/<etl_user>
{
  "password": "<etl_password>"
}

PUT https://host:xxxx/_plugins/_security/api/internalusers/<proxy_user>
{
  "password": "<proxy_password>"
}
  1. Прикрепите созданных пользователей к роли технических учётных записей.

PUT https://host:xxxx/_plugins/_security/api/rolesmapping/technical_role
{
    "users": [
        "<etl_user>",
        "<proxy_user>"
    ]
}

Обновление#

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

Удаление#

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

```bash
rm -rf opensearch
```

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

Убедитесь в зеленом статусе кластера.

Учетная запись для проверки – Auth: admin/admin.

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

Выполните запрос.

GET  https://host:xxxx/_cluster/health

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

Статус 200 Ок

{
"cluster_name": "{имя кластера}",
"status": "green",
"timed_out": false,
"number_of_nodes": {количество node},
"number_of_data_nodes": {количество node},
"active_primary_shards": {количество primary shards},
"active_shards": {количество активных shards},
"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": {процент количества активных shards}
}

Доступность сервера

Запрос на проверку жизнеспособности компонента SRHX:

GET https://localhost:xxxx

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

Статус 200 Ок

{
    "name" : "hostname-here",
    "cluster_name" : "opensearch",
    "cluster_uuid" : "7Nqtr0LrQTOveFcBb7Kufw",
    "version" : {
       "distribution" : "opensearch",
       "number" : "2.4.0",
       "build_type" : "zip",
       "build_hash" : "77ef9e304dd6ee95a600720a387a9735bbcf7bc9",
       "build_date" : "2022-11-05T05:50:15.404072800Z",
       "build_snapshot" : false,
       "lucene_version" : "9.4.1",
       "minimum_wire_compatibility_version" : "7.10.0",
       "minimum_index_compatibility_version" : "7.0.0"
    },
    "tagline" : "The OpenSearch Project: https://opensearch.org/"
 }
 

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

После успешной установки компонента SRHX необходимо:

  • проверить, что плагин HealthCheck был установлен;

  • проверить в списке пришедших плагинов наличие плагина HealthCheck;

  • выполнить запрос в Server на получение списка установленных плагинов:

GET https://localhost:xxxx/_cat/plugins?v

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

Статус 200 Ок

name

component

version

srv-32-8.xxx.dev.ххх

opensearch-security

3.0.0.0-SNAPSHOT

srv-32-8.xxx.dev.ххх

search-healthcheck-plugin

1.0.0

Проверка работоспособности плагина HealthCheck

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

Выполните запрос healthcheck:

GET https://localhost:xxxx/ufs-healthcheck/

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

Статус 200 Ок

{
"success": true,
"body": "ON"
}

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

Выполните запрос на получение списка плагинов в кластере компонента SRHX:

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

GET https://host:xxxx/_cat/plugins

Статус 200 Ок

name

component

version

srv-32-8.xxx.dev.ххх

opensearch-security

3.0.0.0-SNAPSHOT

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

Откат#

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

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

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

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

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

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