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.

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

  3. Далее будет предложено ввести пароль, используемый для подключения к узлам кластера по 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
    }
  2. Если токен отсутствует, его можно создать через интерфейс "Визиона".

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

    image$vision token

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

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

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

    В файл с зашифрованными секретами, расположенный на хосте "Спектра" по пути /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
  4. Ввести пароль хранилища, после чего будет открыт текстовый редактор.

    После сохранения файла нужно проверить корректность настройки секции "Визион" в файле конфигурации 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
  5. Перезапустить сервис 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