Руководство администратора информационной безопасности Спектр Rel.1.7

1 Описание межкомпонентного и межсистемного взаимодействия#

1.1 Схема межкомпонентного и межсистемного взаимодействия#

1.2 Перечень компонентов#

  1. Описание протоколов межкомпонентного взаимодействия
Наименование Описание Используемый порт
Web-интерфейс “Спектра” Предоставляет пользователю интерфейс для управления МБД.П 8092
nginx Маршрутизация входящего от конечных пользователей трафика до ядра “Спектра”, отдача статических веб-страниц. 8092
spectrum-api Ядро “Спектра”, предоставляет REST API для остальных компонентов “Спектра”. 8000
spectrum-tasks Служба выполнения фоновых заданий (операций), созданных пользователем. -
spectrum-scheduler Служба фонового обновления информации об объектах управления. -
PostgreSQL СУБД, используемая служебной spectrum-api для постоянного хранения информации об объектах управления и их статусе. 5432
“Геном.БР” Предоставляет REST API для получения информации о кластерах PostgreSQL в МБД.П. 50888
“Визион” Предоставляет REST API для получения метрик, используемых для отображения дашбордов в “Спектре”. 8092
Система аутентификации и авторизации (Keycloak / Avanpost FAM) Используется для аутентификации и авторизации пользователей веб-интерфейсов “Спектра”, “Генома”, “Визиона”. Определяется инсталляционной картой.
Агент “Спектра” Служба на узлах кластера, используемая “Спектром” для управления кластером, получения информации о кластере и формирования метрик для “Визиона”. 9000
Pacemaker / Corosync Служба, управляющая кластером PostgreSQL в МБД.П. Используется “Спектром” для управления кластером.
Экземпляр PostgreSQL СУБД в кластере МБД.П, является объектом управления с точки зрения “Спектра”. Определяется инсталляционной картой, по умолчанию 5432.

1.3 Описание протоколов межкомпонентного взаимодействия#

Инициатор Цель Протокол Средство аутентификации
Конечный пользователь (браузер) nginx HTTPS Логин / пароль. Вводятся на странице внешней системы аутентификации, используется Authorization code flow. Client secret для spectrum-api хранится на узле “Спектра” в зашифрованном виде.
spectrum-api Keycloak / Avanpost FAM HTTPS Логин / пароль. Вводятся на странице внешней системы аутентификации, используется Authorization code flow. Client secret для spectrum-api хранится на узле “Спектра” в зашифрованном виде.
nginx spectrum-api HTTP -
spectrum-api postgresql “Спектра” протокол Postgres Логин / пароль. Доступ только для локальных подключений.
spectrum-api spectrum-agent HTTPS Bearer token, опционально – проверка сертификата клиента.
spectrum-api “Визион” HTTPS Bearer token, опционально – проверка сертификата клиента.
spectrum-api “Геном” HTTPS Bearer token, опционально – проверка сертификата клиента.
spectrum-api postgresql в Кластере протокол Postgres Логин / пароль.
spectrum-task-daemon spectrum-api HTTP Отсутствует, используется только локальное взаимодействие внутри узла “Спектра”.
spectrum-task-daemon spectrum-agent HTTPS Bearer token, опционально – проверка сертификата клиента.
spectrum-task-daemon postgresql в Кластере протокол Postgres Логин / пароль.
spectrum-scheduler spectrum-api HTTP Отсутствует, используется только локальное взаимодействие внутри узла “Спектра”.
spectrum-scheduler spectrum-agent HTTPS Bearer token, опционально – проверка сертификата клиента.
spectrum-scheduler postgresql в Кластере протокол Postgres Логин / пароль.
spectrum-agent postgresql в Кластере протокол Postgres Логин / пароль.
spectrum-agent Pacemaker / Corosync Запуск shell-команд, только локально на узле МБД.П под пользователем с ограниченными привилегиями (postgres).
spectrum-agent postgresql в Кластере протокол Postgres Логин / пароль.

2 Аутентификация при межкомпонентном взаимодействии#

2.1 Аутентификация для пользователей веб-интерфейса “Спектра”#

Для аутентификации и авторизации пользователей в ПО Скала^р Спектр используется внешние системы аутентификации и авторизации, совместимые с OpenID Connect.

Поддерживаемые системы аутентификации и авторизации:

Keycloak;

Avanpost FAM.

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

Ролевая модель

Пользователи Спектра могут обладать ролями “Читатель” (spectrum-ro) либо “Писатель” (spectrum-rw). Пользователи с ролью “Читатель” могут войти в веб-интерфейс “Спектра”, просматривать информацию об объектах управления и их статусе, но не могут выполнять никаких действий над объектами управления.

Пользователи с ролью “Писатель” могут войти в веб-интерфейс “Спектра”, просматривать информацию об объектах управления и их статусе, а также выполнять любые действия над объектами управления, предусмотренные ПО Скала^р Спектр.

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

2.2.1 Настройка пользователей#
ℹ Примечание
Пользовательский интерфейс консоли администратора KeyCloak может отличаться от приведенного в данном руководстве.

Для работы со "Спектром" при включённой авторизации необходимо настроить пользователей в KeyCloak.

Сначала необходимо выбрать нужный Realm (рабочее пространство) в выпадающем списке над меню или создать новый (на примере ниже выбрано значение "test-docs-realm").

После задания нужного Realm перейти в раздел "Клиенты" (Clients) и нажать на кнопку "Создать клиента" (Create client):

В поле "Client ID" ввести идентификатор клиента и нажать кнопку "Далее" (Next). Заданный ID клиента будет в дальнейшем использоваться в параметрах конфигурации “Спектра”:

На следующей странице:

  • включить переключатель "Аутентификация клиента" (Client authentication),

  • выставить флаг "Standart Flow",

  • выставить флаг "Direct access grants",

после чего нажать кнопку "Сохранить" (Save).

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

Перейти во вкладку "Настройки" (Settings), в поле "Валидация URI перенаправления" (Valid redirect URIs) добавить IP-адрес "Спектра" в формате:

PROTO://IP:XXXX/*

где

  • PROTO - HTTP или HTTPS, в зависимости от настроек TLS "Спектра";

  • IP – IP-адрес "Спектра";

  • XXXX - порт "Спектра" для доступа к веб-интерфейсу.

Нажать кнопку "Сохранить" (Save).

Во вкладке "Учетные данные" (Credentials) есть поле "Секрет" (Client secret), значение которого будет в дальнейшем использоваться в параметрах конфигурации "Спектра".

Значение можно скопировать в буфер обмена, нажав на соответствующую кнопку возле поля:

Перейти во вкладку "Роли" (Roles), нажать кнопку "Создать роль" (Create role):

На экране создания роли ввести имя роли и нажать "Сохранить" (Save):

В примере, приведенном в данном руководстве, должны быть созданы две роли: spectrum-ro и spectrum-rw.

Перейти в пункт меню "Пользователи" (Users) и на странице "Пользователи" (User list) нажать кнопку "Создать пользователя" (Create new user):

На экране создания пользователя:

  • ввести желаемое имя пользователя,

  • включить "E-mail подтвержден" (Email verified),

  • нажать кнопку "Создать" (Create).

В примере, приведенном в данном руководстве, будет создано два пользователя: sprtest и sprtest-rw.

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

Перейти во вкладку "Учетные данные" (Credentials), нажать на кнопку "Установить пароль" (Set password):

В появившемся окне задать пароль, повторить пароль и выключить признак "Временный" (Temporary), если не требуется смена пароля пользователем при первом входе. Нажать кнопку "Сохранить" (Save):

Перейти во вкладку "Сопоставление ролей" (Role mapping), нажать кнопку "Назначить роль" (Assign role):

На экране назначения ролей:

  1. в выпадающем списке фильтра выбрать "Отсортировать по клиентам" (Filter by client),

  2. ввести полностью или частично имя необходимой роли / общей части имени ролей, созданной ранее,

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

  4. нажать кнопку "Назначить" (Assign).

В примере, приведенном в данном руководстве, пользователю sprtest назначается роль spectrum-ro, а пользователю sprtest-rw - spectrum-ro и spectrum-rw.

После настройки необходимо включить настроенный Realm, если этого не было сделано ранее.

Для этого нужно перейти в пункт меню "Настройки реалма" ("Realm settings") и включить переключатель "Включён" (Enabled):

2.2.2 Настройка конфигурации#

В файле конфигурации spectrum-api заполнить секцию аутентификации согласно примеру:

[auth]
auth_server=https://192.168.1.2:8080 # Адрес хоста, на котором расположен identy provider
realm=spectrum # Название realm, который был выбран в процессе настройки
client_id=spectrum-users # ID клиента, который был создан в процессе настройки
cert=/opt/skala-r/spectrum/certs/keycloak-chain.pem # Путь к файлу сертификата. Опциональный параметр
enabled=1 # Указать 1 для включения аутентификации, 0 для отключения

Также необходимо сохранить значение поля Client secret, полученное после создания клиента, в файл зашифрованного хранилища .vault_store.

Для этого выполнить следующие команды:

source /opt/skala-r/spectrum/python-modules/bin/activate
ansible-vault edit /opt/skala-r/spectrum/.vault_store

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

Добавить следующую строчку, где secret – значение поля Client secret из KeyCloak:

client_secret: secret

и сохранить файл.

Пример файла .vault_store с зашифрованными секретами:

spectrum_db_pass: xx
password_db: x
client_secret: xxx
variable: value

После этого нужно перезапустить сервис API, введя команду:

systemctl restart spectrum-api

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

2.3.1 Настройка пользователей#

ℹ Примечание
Пользовательский интерфейс консоли администратора Avanpost FAM может отличаться от приведенного в данном руководстве.
  1. Создать приложение.

Перейти во вкладку "Приложения" и нажать кнопку “+ Добавить приложение”:

  1. В окнах 1-3 выбрать / указать следующие данные:
  • Выбрать тип Open ID:

Указать secret и необходимые Redirect URLs (их можно будет изменить в дальнейшем):

На шаге 3 выбрать фактор аутентификации Password:

Сохранить приложение:

После сохранения приложения перейти в раздел "Приложения", выбрать созданное приложение и во вкладке "Настройки" задать дополнительные параметры:

  • В разделе "Allowed grant types" активировать пункты "Authorization code", "Refresh token".

  • В разделе "Scope" (default) указать "openid profile email permissions groups".

В результате будет создано приложение, которое отобразится в списке на странице "Приложения".

Пример настроенного приложения Spectrum, с возможностью запускать веб-приложение на localhost:

  1. Нажать на имя приложения и перейти на вкладку "Модель доступа":

Задать следующие параметры:

  • Код;

  • Описание;

  • Права.

Нажать на кнопку "Сохранить".

  1. Перейти на вкладку "Сервис":

  1. Перейти в раздел "Настройки ролей и прав" и нажать кнопку "+ Добавить":

  1. Указать наименование и описание:

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

  1. Создать группы для добавления пользователей.

Перейти на вкладку "Группы" и нажать на кнопку "+ Добавить группу":

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

  1. На вкладке "Роли" выбрать роли, которыми будут обладать пользователи, входящие в создаваемую группу:

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

Перейти на вкладку "Пользователи" и нажать кнопку "+ Добавить пользователя":

Указать следующие данные:

  • Логин;

  • Фамилия;

  • Имя;

  • Адрес электронной почты.

Нажать на кнопку “Сохранить”.

  1. Настроить пароль.

Перейти на вкладку “Пользователи” и нажать на имя требуемого пользователя:

Перейти на вкладку “Безопасность” и нажать на ссылку “Задать новый пароль”:

Ввести новый пароль, подтверждение пароля и нажать на кнопку “Сохранить”:

  1. Добавить пользователя в созданную группу.

Перейти на вкладку “Группы" и нажать на имя созданной группы:

Отобразится вкладка “Пользователи” созданной группы.

Нажать на кнопку “Добавить пользователей”:

Выбрать в списке требуемого пользователя и нажать на кнопку “Сохранить”:

  1. Проверка.

Перейти во вкладки “Приложения” и “Группы и роли” и убедиться, что добавленный пользователь присутствует в созданных в процессе выполнения шагов 1-5 приложении и группе.

2.3.2 Настройка конфигурации#

Шаги по настройке аналогичны шагам п. 2.2.2, за исключением содержания секции аутентификации в файле конфигурации spectrum-api:

[auth]
auth_server=http://192.168.1.3:8080 # Адрес хоста, на котором расположен identy provider
client_id=spectrum-users # ID клиента, который был создан в процессе настройки
enabled=1 # Указать 1 для включения аутентификации, 0 для отключения

В зашифрованном хранилище в поле client_secret нужно указать значение поля secret, совпадающее с заданным при создании “приложения” в Avanpost FAM.

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

В своей работе ядро “Спектра” использует данные от внешних систем, а именно:

  • Агент “Спектра”. Устанавливается на все узлы кластера МБД.П. Используется для управления кластером МБД.П и формирования некоторых метрик для мониторинга.

  • ПО “Визион”. Используется для получения метрик, для отображения данных мониторинга в “Спектре”.

  • ПО “Геном.У”. Используется для получения данных о кластерах в Машине МБД.П

Для безопасной передачи данных между компонентами АС используется протокол HTTPS и аутентификация компонентов.

3.1 Настройка аутентификации в Агенте “Спектра”#

При взаимодействии ядра “Спектра” с Агентом “Спектра” используется аутентификация по токену.

Для настройки аутентификации в агенте “Спектра” нужно выполнить следующие действия:

  1. На узле "Спектра" перейти в каталог распакованного дистрибутива и выполнить команды:
source /opt/skala-r/spectrum/python-modules/bin/activate
python3 spectrum-tools/update_agent_auth_token.py -i путь_к_файлу_inventory

где файл inventory – файл в формате .yml, содержащий данные об узлах кластера, на которых настраивается аутентификация с Агентом "Спектра".

Пример файла можно найти в распакованном дистрибутиве "Спектра" по пути inventory_samples/cluster.yml.

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

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

ℹ Примечание
В результате выполнения этой команды Агенты “Спектра” на указанных узлах будут перезагружены.

На узлах кластера значение токена хранится в защищенном (хэшированном) виде в конфигурационном файле Агента "Спектра" /opt/skala-r/etc/spectrum/spectrum-agent/config.conf.

На хосте Спектра значение токена хранится в зашифрованном файле /opt/skala-r/spectrum/.vault_store и записывается в него автоматически при выполнении команды из п. 1.

Для изменения ранее настроенного токена на новый необходимо повторить процедуру настройки аутентификации в Агенте "Спектра".

3.2 Настройка аутентификации в "Визионе"#

При взаимодействии ядра "Спектра" с API "Визиона" используется аутентификация по токену. Для настройки аутентификации необходимо выполнить следующие действия:

  1. Получить токен аутентификации "Визиона". Для этого нужно выполнить API-запрос с типом POST на адрес:
URL_ВИЗИОНА/vision/api/v1/auth/token/?name=ИМЯ_ТОКЕНА

Имя токена можно выбрать произвольное.

Ответ на успешный запрос должен иметь следующее содержание:

{
  "status": "success",
  "data": {
    "jti": "03a4...",
    "name": "ИМЯ_ТОКЕНА",
    "created_at": "2024-06-04T11:15:05.809707+03:00",
    "token": "ТОКЕН_АУТЕНТИФИКАЦИИ"
  },
  "pagination": null,
  "message": null,
  "error": null
}
  1. Если токен отсутствует, его можно создать через интерфейс "Визиона".

Для создания токена необходимо в интерфейсе пользователя "Визион" перейти в раздел "Безопасность" → "Токены доступа":

Необходимо ввести имя токена и нажать кнопку “Сгенерировать”, которая становится активной после ввода имени токена. Будет отображено поле со значением сгенерированного токена:

Сгенерированный токен необходимо сразу скопировать и использовать в дальнейшем при настройке "Спектра", так как впоследствии он не будет отображаться, в разделе “Токены доступа” будут отображаться только имена созданных токенов.

Подробнее о создании токенов см. Руководство Пользователя "Визион", раздел "Токены для внешних систем → Создание токена".

  1. Сохранить значение токена в файле с секретами.

В файл с зашифрованными секретами, расположенный на хосте "Спектра" по пути /opt/skala-r/spectrum/.vault_store, необходимо добавить строку:

vision_token: ТОКЕН_АУТЕНТИФИКАЦИИ

Для этого выполнить следующие команды:

source /opt/skala-r/spectrum/python-modules/bin/activate
ansible-vault edit /opt/skala-r/spectrum/.vault_store
  1. Ввести пароль хранилища, после чего будет открыт текстовый редактор.

После сохранения файла нужно проверить корректность настройки секции "Визион" в файле конфигурации spectrum-api /opt/skala-r/etc/spectrum/spectrum-api/config.conf. Секция "Визион" должна иметь вид:

[vision_config]
host=192.168.191.61
port=8088
base_url=/vision/api/v1/tsdb
cert=
;client_cert=/opt/skala-r/spectrum/certs/client.crt
;client_key=/opt/skala-r/spectrum/certs/client.key
  1. Перезапустить сервис spectrum-api с помощью команды:
systemctl restart spectrum-api.service

3.3 Настройка TLS#

"Спектр" поддерживает возможность использования TLS для шифрования данных, передаваемых между хостом "Спектра" и Агентом "Спектра" на узлах кластеров, а также хостами "Генома" и "Визиона". Для корректной работы TLS необходимо предоставить подписанные корневой и серверный с ключами, а также внести изменения в конфигурационные файлы модулей "Спектра", Агента "Спектра" и Агента уведомлений "Спектра".

При использовании TLS при взаимодействии с "Геномом" или "Визионом" потребуется также настроить соответствующее ПО на узлах "Генома" и "Визиона". Инструкция по настройке TLS представлена в документации соответствующих продуктов.

При первой установке "Спектра" генерируются ключ и самоподписанный серверный сертификат для доступа к веб-интерфейсу "Спектра" по протоколу HTTPS.

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

ℹ Примечание
Если серверные сертификаты для “Спектра”, Агентов “Спектра”, “Визиона”, “Генома” были выпущены от общего корневого сертификата, то корневой сертификат, используемый для настройки защищенного взаимодействия с указанными компонентами – это один и тот же файл /opt/skala-r/spectrum/certs/ca.crt.

3.3.1 Настройка TLS для веб-интерфейса “Спектра”#

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

Для настройки TLS на хосте "Спектра" должны присутствовать:

  • серверный сертификат spectrum_server.crt;

  • ключ серверного сертификата spectrum_server.key;

Ключи расположены в директории /etc/nginx/ssl.

Необходимо удостовериться, что в конфигурации файле конфигурации nginx для "Спектра" (/etc/nginx/sites-available.d/spectrum.conf) в блоке server присутствуют следующие директивы с корректно указанными путями:

listen       8092 ssl;
TLS_certificate      /etc/nginx/ssl/spectrum.crt;
TLS_certificate_key  /etc/nginx/ssl/spectrum.key;
TLS_protocols TLSv1.2 TLSv1.3;
TLS_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
TLS_prefer_server_ciphers off;
TLS_ecdh_curve secp384r1;
TLS_session_tickets off;


# Можно убрать т.к. пока нет клиентов API Спектра
#ssl_verify_client optional;
#ssl_client_certificate /opt/skala-r/spectrum/certs/ca.crt;

3.3.2 Настройка TLS для взаимодействия с Агентом "Спектра"#

На узлах кластеров МБД.П должны присутствовать:

  • серверный сертификат node_server.crt;

  • ключ серверного сертификата node_server.key.

ℹ Примечание
Серверные сертификаты и ключи должны быть выписаны от одного корневого сертификата.

В файлах конфигурации Агента "Спектра" /opt/skala-r/etc/spectrum/spectrum-agent/config.conf и Агента уведомлений "Спектра" на узлах кластера должны быть указаны пути к серверному сертификату и ключу.

Пример секции с указанными путями к сертификатам в конфигурации Агента "Спектра":

"cert": {
       "server_cert": "/opt/skala-r/spectrum/certs/server.crt",
       "server_key": "/opt/skala-r/spectrum/certs/server.key",
}

На узле "Спектра" должен присутствовать корневой сертификат, а также в файлах конфигураций для служб spectrum-api, spectrum-tasks, spectrum-scheduler необходимо указать путь к корневому сертификату в секции agent_config.

Пути к файлам конфигураций соответствующих служб на хосте "Спектра":

  • /opt/skala-r/etc/spectrum/spectrum-api/config.conf,

  • /opt/skala-r/etc/spectrum/spectrum-tasks/config.conf,

  • /opt/skala-r/etc/spectrum/spectrum-sheduler/config.conf.

Пример секции с указанными путями к сертификатам в конфигурации spectrum-api:

[agent_config]
port=9000
cert=/opt/skala-r/spectrum/certs/ca.crt

3.3.3 Настройка TLS для взаимодействия с "Визионом"#

Если для "Визиона" настроено использование защищённого взаимодействия для внешних систем, то на стороне "Спектра" необходимо выполнить дополнительные настройки.

  1. На узле "Спектра" разместить в /opt/skala-r/spectrum/certs/ca.crt корневой сертификат, от которого был выписан сертификат "Визиона".

  2. В файле конфигурации службы spectrum-api (/opt/skala-r/etc/spectrum/spectrum-api/config.conf) в секции vision_config указать путь к корневому сертификату.

Пример секции:

[vision_config]
host=172.29.224.179
port=8428
base_url=/vision/victoriametrics/api/v1
cert=/opt/skala-r/spectrum/certs/ca.crt

3.3.4 Настройка TLS для взаимодействия с "Геном.У"#

Если для “Геном.У” настроено использование защищенного взаимодействия для внешних систем, то на стороне "Спектра" также необходимо выполнить дополнительные настройки.

  1. На узле "Спектра" разместить в /opt/skala-r/spectrum/certs/ca.crt корневой сертификат, от которого был выписан сертификат "Геном.У".

  2. В файле конфигурации службы spectrum-api (/opt/skala-r/etc/spectrum/spectrum-api/config.conf) в секции genome_config указать путь к корневому сертификату.

Пример секции:

[genome_config]
host=192.168.190.100
port=52888
base_url=/api/genome/v001/spectrum
username_db=genome
cert=/opt/skala-r/spectrum/certs/ca.crt

3.4 Проверка сертификатов клиента#

В качестве дополнительной меры защиты может использоваться проверка клиентских сертификатов при межкомпонентном взаимодействии. Эта функция по умолчанию отключена.

Для настройки этой функции необходимо получить корневой сертификат и клиентские сертификаты и ключи для каждого компонента, участвующего во взаимодействии, а также выполнить дополнительные настройки в файлах конфигурации "Спектра", Агента "Спектра", а также "Генома" и "Визиона", если проверка клиентских сертификатов выполняется и в них.

ℹ Примечание
Клиентские сертификаты и ключи должны выписываться от общего корневого.

3.4.1 Проверка клиентского сертификата в Агенте "Спектра"#

  • На узлах кластера МБД.П разместить корневой сертификат, который использовался для генерации клиентских сертификатов в /opt/skala-r/spectrum/certs/ca.crt.

В файле конфигурации Агента "Спектра" (/opt/skala-r/etc/spectrum/spectrum-agent/config.conf) в секции auth добавить параметр ca_cert, в котором указать путь к корневому сертификату.

Пример секции auth с настроенным TLS и проверкой клиентских сертификатов:

"cert": {
       "server_cert": "/opt/skala-r/spectrum/certs/server.crt",
       "server_key": "/opt/skala-r/spectrum/certs/server.key",
       "ca_cert": "/opt/skala-r/spectrum/certs/ca.crt"
}

Далее перезапустить службу Агента "Спектра":

systemctl restart spectrum-agent
Внимание!
После активации функции проверки клиентских сертификатов доступ к API Агента будет возможен только с использованием сертификатов клиента.
  • На узле "Спектра" в каталоге /opt/skala-r/spectrum/certs разместить клиентские сертификаты и внести изменения в файлы конфигурации служб spectrum-api, spectrum-scheduler, spectrum-tasks в секции agent_config, указав пути к сертификату и ключу клиента.

Пример секции agent_config для службы spectrum-api:

[agent_config]
port=9000
cert=/opt/skala-r/spectrum/certs/ca.crt
client_cert=/opt/skala-r/spectrum/certs/client.crt
client_key=/opt/skala-r/spectrum/certs/client.key

3.4.2 Проверка клиентского сертификата в "Визионе"#

Если в "Визионе" настроена функция проверки клиентских сертификатов, то на узле "Спектра" необходимо в каталоге /opt/skala-r/spectrum/certs/ разместить клиентские сертификат и ключ для взаимодействия с "Визионом", в файле конфигурации службы spectrum-api (/opt/skala-r/etc/spectrum/spectrum-api/config.conf) в секции vision_config указать пути к этим файлам.

Пример секции vision_config:

[vision_config]
host=172.29.224.179
port=8428
base_url=/vision/victoriametrics/api/v1
cert=/opt/skala-r/spectrum/certs/ca.crt
client_cert=/opt/skala-r/spectrum/certs/vision_client.crt
client_key=/opt/skala-r/spectrum/certs/vision_client.key

3.4.3 Проверка клиентского сертификата в "Геном.У"#

Если в "Геном.У" настроена функция проверки клиентских сертификатов, то на узле "Спектра" необходимо в каталоге /opt/skala-r/spectrum/certs/ разместить клиентские сертификат и ключ для взаимодействия с "Геном.У" и в файле конфигурации службы spectrum-api (/opt/skala-r/etc/spectrum/spectrum-api/config.conf) в секции genome_config указать пути к этим файлам.

Пример секции genome_config:

[genome_config]
host=192.168.190.100
port=52888
base_url=/api/genome/v001/spectrum
username_db=genome
cert=/opt/skala-r/spectrum/certs/ca.crt
client_cert=/opt/skala-r/spectrum/certs/genome_client.crt
client_key=/opt/skala-r/spectrum/certs/genome_client.key

4 Используемые учетные записи#

4.1 Учетные записи ОС#

4.1.1 Учетные записи на узле "Спектра"#

На узле "Спектра" для запуска служб ПО Скала^ Спектр используется учетная запись spectrum, которая создается при установке "Спектра". Пользователь spectrum включается в группы:

  • spectrum,

  • wheel.

Данный пользователь используется только для запуска служб "Спектра" (systemd-сервисов), вход в систему с использованием этой учетной записи невозможен.

Для корректной работы всех функций "Спектра" настраиваются следующие правила повышения привилегий в файле /etc/sudoers.d/80-spectrum:

spectrum ALL=(root) NOPASSWD: /usr/bin/docker ps, /usr/bin/docker exec *

Пользователь spectrum имеет права на чтение и запись к следующим каталогам ОС:

  • /opt/skala-r/spectrum,

  • /opt/skala-r/etc/spectrum,

  • /opt/skala-r/var/log/spectrum.

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

passwd spectrum

Команда запросит ввод нового пароля и подтверждение ввода пароля.

ℹ Примечание
Пользователь spectrum создается только для запуска служб “Спектра”, по умолчанию пользователь spectrum создается без пароля и без возможности войти в систему.

4.1.2 Учетные записи на узлах МБД.П#

На узлах МБД.П для запуска Агента "Спектра" используется учетная запись postgres. Пользователь postgres создается при установке ПО СУБД и дополнительно настраивается при установке Агента "Спектра". Пользователь включается в группы:

  • postgres,

  • wheel,

  • haclient.

Для корректной работы всех функций "Спектра" настраиваются следующие правила повышения привилегий в фале /ets/sudoers.d/spectrum:

Cmnd_Alias CLUSTERCTL = /usr/bin/pg_controldata *, /usr/sbin/corosync-quorumtool *, /usr/sbin/pcs *
postgres ALL=(root) NOPASSWD: CLUSTERCTL

Пользователь postgres имеет права на чтение и запись к следующим каталогам ОС:

  • /opt/skala-r/spectrum,

  • /opt/skala-r/etc/spectrum,

  • /opt/skala-r/var/log/spectrum.

а также каталогам, необходимым для корректной работы СУБД Postgres.

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

passwd postgres

Команда запросит ввод нового пароля и подтверждение ввода пароля.

4.2 Учетные записи СУБД#

  • На узле "Спектра" для работы служб ПО Скала^ Спектр используется служебная БД spectrum под управлением СУБД PosgreSQL.

БД создается при установке "Спектра", также для доступа служб "Спектра" в СУБД создается пользователь admin со случайным паролем. Пароль для доступа к СУБД postgres хранится в зашифрованном виде в файле /opt/skala-r/spectrum/.vault_store.

Возможно только локальное подключение к служебной БД "Спектра".

Для доступа к СУБД Кластера МБД.П используется техническая учетная запись genome, которая создается по умолчанию при создании сервисов СУБД при помощи ПО "Геном.БР".

Пароль от учетной записи genome хранится в зашифрованном виде в файле /opt/skala-r/spectrum/.vault_store.

  • На узлах МБД.П Агент "Спектра" также использует учетную запись genome для доступа к СУБД Кластера МБД.П.

Пароль от учетной записи genome хранится в хэшированном виде в файле /opt/skala-r/etc/spectrum/spectrum-agent/config.conf

4.3 Смена паролей учетных записей#

4.3.1 Смена пароля от БД в конфигурации Агента "Спектра" на узле кластера#

В случае изменения пароля от БД на узлах кластера необходимо изменить пароль в конфигурации Агента "Спектра".

Для этого нужно перейти в каталог распакованного дистрибутива "Спектра" и выполнить следующие команды:

source /opt/skala-r/spectrum/python-modules/bin/activate
python3 spectrum-tools/update_agent_db_password.py -i путь_к_файлу_inventory

Файл inventory – файл в формате .yml, содержащий данные об узлах кластера, на которых настраивается аутентификация с Агентом "Спектра".

Пример файла можно найти в распакованном дистрибутиве Спектра по пути inventory_samples/cluster.yml.

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

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

ℹ Примечание
В результате выполнения этой команды Агенты “Спектра” на указанных узлах будут перезагружены.

Также нужно изменить пароль от БД на узлах кластера в файле с зашифрованными секретами, расположенном на хосте "Спектра" по пути /opt/skala-r/spectrum/.vault_store. Для этого нужно выполнить следующие команды:

source /opt/skala-r/spectrum/python-modules/bin/activate
ansible-vault edit /opt/skala-r/spectrum/.vault_store

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

Нужно изменить значение в строке:

password_db: ПАРОЛЬ_ОТ_БД_НА_УЗЛАХ

После сохранения файла нужно перезапустить сервис spectrum-api с помощью команды:

systemctl restart spectrum-api.service

4.3.2 Смена пароля от БД на хосте "Спектра"#

В случае изменения пароля от БД на хосте "Спектра" необходимо изменить пароль в файле с зашифрованными секретами, расположенный на хосте "Спектра" по пути /opt/skala-r/spectrum/.vault_store.

Для этого выполнить следующие команды:

source /opt/skala-r/spectrum/python-modules/bin/activate
ansible-vault edit /opt/skala-r/spectrum/.vault_store

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

Нужно изменить значение в строке:

spectrum_db_pass: ПАРОЛЬ_ОТ_БД_НА_ХОСТЕ_СПЕКТРА

После сохранения файла перезапустить сервис spectrum-api с помощью команды:

systemctl restart spectrum-api.service

5 Журналирование и аудит#

В ПО Скала^р Спектр ведется аудит следующих событий.

Событие Примечание
Вход пользователя в систему Событие аудита записывается после успешного ввода логина и пароля пользователя в системе аутентификации (Keycloak / Avanpost) и перенаправления пользователя на страницу “Спектра”.
Выход пользователя из системы Событие аудита записывается после успешного ввода логина и пароля пользователя в системе аутентификации (Keycloak / Avanpost) и перенаправления пользователя на страницу “Спектра”.
Чтение объекта Событие аудита создается при просмотре детальной информации об объектах: - кластер; - узел; - сервис СУБД.
Изменение объекта Событие аудита записывается при выполнении следующих операций: - редактировании конфигурации Postgres; - редактирование параметров аутентификации; - редактирование параметров pg_proaudit; - смена владельца БД; - переименование БД; - переименование площадки; - редактирование параметров PgBouncer.
Создание объекта Событие аудита записывается при выполнении следующих операций: - импорт кластера; - создание сервиса; - создание резервной копии.
Удаление объекта Событие аудита записывается при выполнении следующих операций: - удаление кластера из “Спектра”; - удаление сервиса; - удаление резервной копии.
Межкомпонентное взаимодействие Событие аудита записывается при выполнении операций, которые запускаются из “Спектра”, но выполняются в “Геном.У”: - создание / удаление сервиса СУБД; - добавление / удаление PgBouncer.

Также ведётся журнал системных событий:

  • начало работы (запуск) системы;

  • окончание работы (остановка системы).

Файлы с информацией о событиях аудита расположены на узле "Спектра" в каталоге /opt/skala-r/var/log/spectrum/audit. Запись происходит в двух форматах: CEF и JSON.

Имена файлов аудита в формате CEF имеют вид audit_cef-<дата создания файла>.log и ротируются по датам.

Пример записи в файле аудита в формате CEF:

CEF:0|Skala-r|spectrum|1.4.1.159|200|Пользователь admin3 вошел в систему|3|externalId=69 msg=Пользователь admin3 вошел в систему deviceProcessName=spectrum-api outcome=success start=1725455485 suser=admin3 app=http dhost=spectrum-136 dst=192.168.186.136 dpt=8092 src=localhost shost=localhost spt=8000

Имена файлов аудита в формате JSON имеют вид audit-< дата создания файла\ >.log и ротируются по датам.

Пример записи в файле аудита в формате JSON:

{"createdAt":"1726030907701", "userNode": "spectrum-test-stand-0", "metamodelVersion": "1", "module": "spectrum",  "name": "login", "userLogin": "test-rw", "userName": "Test Test", "params": [{"name": "message", "value": "Пользователь test-rw вошел в систему" }, {"name": "serviceVersion", "value": "1.5.0.189"}]}

Файлы с информацией о системных событиях расположены на узле "Спектра" в директории /opt/skala-r/var/log/spectrum/journal. Запись происходит в двух форматах: CEF и syslog.

Имена файлов журналов в формате CEF имеют вид journal_cef-< дата создания файла\ >.log и ротируются по датам.

Пример записи в файле журнала системных событий в формате CEF:

CEF:0|Skala-r|spectrum|1.4.1.157|100|Сервис spectrum-api запущен|3|externalId=0 msg=Сервис spectrum-api запущен deviceProcessName=spectrum-api outcome=success start=1725453183  dhost=spectrum-136

Имена файлов журналов в формате JSON имеют вид journal-< дата создания файла\ >.log и ротируются по датам.

Пример записи в файле журнала системных событий в формате syslog:

024-09-10T17:23:58.022320+03:00 spectrum-test-stand-0 SPR_JOURNAL: info Запущена задача "Подготовка бэкапа 192.168.190.117"

6 Контроль целостности файлов конфигурации "Спектра"#

6.1 РЕД ОС Муром 7.3#

Используется утилита afick в соответствии с https://redos.red-soft.ru/base/manual/redos-manual/safe-redos/afick/ .

Все действия выполняются от имени администратора (root).

6.1.1 Включение контроля целостности#

  1. Установить утилиту контроля целостности dnf install afick.

  2. Добавить список файлов и директорий для контроля в конфигурационный файл /etc/afick.conf в раздел # files to scan с необходимыми опциями.

  3. Запустить утилиту с ключом –update afick –update для обновления и формирования базы контролируемых файлов.

Регулярная проверка целостности обеспечивается запуском cron-задачи. Задача создается при установке утилиты с регулярностью раз в сутки.

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

6.1.2 Периодичность запуска#

Bash-скрипт, отвечающий за проверку целостности и отправки отчета, находится в /etc/cron.daily/afick_cron.

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

6.1.3 Проверка механизма контроля целостности#

Для проверки того, что контроль целостности осуществляется:

  1. Используя команду afick -k провести проверку целостности: ожидаемый результат – отсутствие изменений.

  2. Изменить контролируемый файл или создать новый в контролируемой директории.

  3. Провести повторную проверку: ожидаемый результат – сообщение о нарушении целостности.

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

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

6.2 Альт СП 8 р9 и СП 8 р10#

Используется утилита osec в соответствии с руководством по комплексу средств защиты от «Базальт СПО» (”Руководство по комплексу средств защиты.pdf"). Если утилита не установлена, установка производится командой:

apt-get install osec

Все действия выполняются от имени администратора (root).

6.2.1 Включение контроля целостности#

  1. Проверить, что сервис контроля целостности при загрузке активирован (enabled). Для этого выполнить команду:
# systemctl is-enabled integalert

Если в результате запуска команды будет получен ответ "disabled", выполнить команду для активации сервиса контроля целостности:

# systemctl enable integalert*
  1. Определить каталоги для проверки целостности osec (см. п. 6.2.2 "Определение каталогов для контроля целостности").

  2.  Выполнить запуск osec:

  • выполнить команду:
 # integalert fix
  • или сформировать контрольные суммы для измененных / новых объектов и занести их в базу данных. Для этого выполнить команду:
 # osec -f /etc/osec/dirs.conf -D /var/lib/osec/
  1. Для фиксации изменений и проверки конфигурации выполнить команду:
 # systemctl restart osec

Проверка целостности системы при помощи osec выполняется командой integalert.

При необходимости можно настроить / изменить периодичность запуска osec.

6.2.2 Определение / изменение каталогов для проверки целостности#

По умолчанию отслеживаются изменения в папках /bin, /sbin, /usr/bin, /usr/sbin.

Для того, чтобы определить или изменить список каталогов для проверки целостности, например, /bin, /sbin, /lib, /lib64, нужно отредактировать список каталогов, который хранится в файле /etc/osec/dirs.conf (строки, начинающиеся со знака «#», игнорируются):

# vim /etc/osec/dirs.conf

После внесения изменений в файл /etc/osec/dirs.conf необходимо выполнить запуск osec.

6.2.3 Периодичность запуска osec#

Кроме пакета программного комплекса osec в систему устанавливается пакет osec-timerunit. Он позволяет задать способ и периодичность запуска osec (файлы /lib/systemd/system/osec.service, /lib/systemd/system/osec.timer). В пакете osec-timerunit есть файл с заданием для демона cron и конфигурационные файлы (dirs.conf).

Для проверки статуса периодического контроля целостности выполнить команду:

# systemctl status osec.timer

Для активации периодического контроля целостности выполнить команды:

# systemctl enable osec.timer
# systemctl start osec.timer

По умолчанию в osec.timer задан запуск проверки ежедневно в полночь.

Если необходимо задавать другие периоды запуска osec, то необходимо создать файл /etc/systemd/system/osec.timer с измененными периодами и перезагрузить демон systemd:

# cp /lib/systemd/system/osec.timer /etc/systemd/system/osec.timer
# vim /etc/systemd/system/osec.timer
# systemctl daemon-reload

6.2.4 Проверка механизма контроля целостности#

Для проведения теста необходимо авторизоваться в системе от имени администратора.

  1. Подготовить каталог для базы данных:
# mkdir /tmp/base
# chown osec:osec /tmp/base
# cp -ar /var/lib/osec/* /tmp/base
  1. Сформировать контрольные суммы объектов (список путей к ним хранится в файле /etc/osec/dirs.conf) и занести их в базу данных /tmp/base.

  2. Результат работы osec выводится на консоль, поэтому для перенаправления вывода результата в текстовый файл /tmp/report1 нужно выполнить команду:

# osec -f /etc/osec/dirs.conf -D /tmp/base/ –r >/tmp/report1
  1. Не производя никаких изменений в системе, запустить osec повторно и вывести результат работы в текстовый файл /tmp/report2:
# osec -f /etc/osec/dirs.conf -D /tmp/base/ -r >/tmp/report2
  1. Сравнить два результирующих файла /tmp/report1 и /tmp/report2:
 # diff -u0 /tmp/report1 /tmp/report2

Два отчета должны совпадать, в консоли не должно быть выведено никаких различий.

  1. Выполнить изменения в контролируемых файлах / директориях (добавить, удалить и т.д.)

  2. Запустить osec в режиме «только чтение» и перенаправить вывод в текстовый файл /tmp/report3:

# osec -f /etc/osec/dirs.conf -D /tmp/base/ -r > /tmp/report3
  1. Сравнить два результирующих файла /tmp/report2 и /tmp/report3:
# diff -u0 /tmp/report2 /tmp/report3

Ожидаемые результаты: сведения об изменениях, сделанных выше с конфигурационными файлами, должны выводиться на консоль.

6.2.5 Порядок восстановления целостности системы#

В случае выявления нарушения целостности:

  • при проверке целостности системы командой integalert;

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

Порядок восстановления:

  1. От имени администратора (root) выполнить просмотр лога аудита и найти нарушение целостности.

  2. Восстановить объект с нарушенной целостностью – заменить на эталон / переустановить или пропустить при подтверждении корректности внесенного в объект изменения.

  3. Запустить восстановление целостности системы. Если система контроля целостности IMA / EVM не инициализирована, выполнить команду:

# integalert fix

или сформировать контрольные суммы для измененных / новых объектов и занести их в базу данных. Для этого выполнить команду:

# osec -f /etc/osec/dirs.conf –D /var/lib/osec
  1. Перезагрузить систему.
Внимание!
После настройки и постановки файлов на контроль целостности любые изменения конфигурации компонентов должны происходить через службу ИБ с последующим обновлением внутренней БД утилиты.

6.3 Перечень файлов и директорий "Спектра" для контроля целостности#

Директория Примечание
/opt/skala-r/spectrum/.vault_store
/opt/skala-r/etc/spectrum/
/opt/skala-r/spectrum/certs
/etc/nginx/ /etc/systemd/system/multi-user.target.wants/nginx.service /usr/sbin/nginx /etc/systemd/system/multi-user.target.wants/nginx.service символическая ссылка на: · в Astra - /lib/systemd/system/nginx.service · в Alt - /lib/systemd/system/nginx.service · в RedOS - /usr/lib/systemd/system/nginx.service
/var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_ident.conf Для Altlinux Server 8 СП p9, Altlinux Server 8 СП p10, RedOS 7.3
/usr/bin/postgres /etc/systemd/system/multi-user.target.wants/postgresql.service /etc/systemd/system/multi-user.target.wants/postgresql.service символическая ссылка на: · в Astra - /lib/systemd/system/postgresql.service · в Alt - /lib/systemd/system/postgresql.service · в RedOS - /usr/lib/systemd/system/postgresql.service
/etc/systemd/system/spectrum-api.service /etc/systemd/system/spectrum-tasks.service /etc/systemd/system/spectrum-scheduler.service /etc/systemd/system/spectrum-agent.service