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

Цель выполнения#

Обеспечение безопасного хранения и управления конфиденциальными данными (сертификаты, ключи, пароли, токены) для компонента Основной модуль визуализации (GRAF) путем интеграции с системой управления секретами SecMan.
Настройка доступа GRAF к зашифрованным секретам через механизм wrapped-токенов и организация автоматизированного получения критичной информации в защищенном режиме в соответствии с политиками информационной безопасности.

Принцип работы wrapped_token#

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

Механизм Wrapped AppRole (одноразовые токены).#

Обеспечивает безопасную доставку пары role_id и secret_id от процесса установки (например, Jenkins) до узлов DB.

Runner AppRole — используется процессом установки (например, Jenkins). Обладает правами: На получение role_id и генерацию secret_id для Worker AppRole.

Worker AppRole — используется Grafana. Обладает правами: На чтение необходимых секретов, используя role_id и secret_id.

Процесс авторизации (Wrapped Workflow)#

Runner AppRole (например, Jenkins) аутентифицируется в SecMan. В ответ возвращается короткоживущий токен, дающий право:

  • Получить role_id для Worker AppRole.

  • Сгенерировать secret_id.

  • Runner AppRole делает запрос на:

  • Получение role_id.

  • Генерацию secret_id в обернутом виде (wrapped token).

SecMan возвращает:

  • role_id в открытом виде.

  • secret_id — как wrapped token.

Runner доставляет пару (role_id, wrapped secret_id) на целевой сервер, где развернут узел Grafana.

Grafana при старте:

  • Загружает wrapped token из файла.

  • Выполняет unwrap-запрос в SecMan.

SecMan возвращает открытое значение secret_id.

Grafana использует role_id и secret_id для аутентификации.

В ответ она получает короткоживущий Vault-токен, с которым выполняет обращения к секретам в SecMan (например, получение TLS-сертификатов для межсерверного шифрования).

Rewrap-механизм (периодическое обновление)#

Для поддержания доступа к Secman без перезапуска Grafana периодически:

  • Считывает wrapped token из локального файла.

  • Делает unwrap → получает secret_id.

  • Аутентифицируется (role_id + secret_id) → получает Vault-токен.

  • Делает новый wrap для secret_id и сохраняет его в файл.

Это обеспечивает бесшовную ротацию секрета и постоянный доступ к Vault. Для авторизации через wrapped-token используется путь к файлу токена: secman.token.path Внутри файла — одноразовый wrapped token. После unwrap Grafana получает secret_id и выполняет логин.

Последовательность действий#

Шаг 1. Зарегистрировать в SecMan#

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

Шаг 2. Создать раздел в Secman для хранения критичной информации#

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

  • Внутри SecMan создайте новое хранилище (Vault) и настроенный движок типа KV (Key-Value) или KVv2 (обновленный Key-Value).

Шаг 3. Подготовьте в SecMan доступ к движку PKI#

Осуществляется с помощью создания сервисной заявки.

Шаг 4. Выполнить настройку конфигурационного файла#

Необходимо скорректировать в файле sbt_inventory.yml следующие параметры:

Параметр

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

Описание выполняемой функции

secman_url

https://xx-view-xxxx-01.xxxxxx.xxx:8882/secman/

Адрес SecMan

secman_role_id

xx4-0x22-53xf

role_id SecMan

secman_wrapped_token_path

/opt/grafana/wrapped_secrets/wrapped_token.sec

путь до wrapped_token_path

secman_secret_id_path

/opt/grafana/wrapped_secrets/secret_id.sec

путь до secret_id

secman_namespace

DEV_XXX

namespace в SecMan

secman_mount_point

A/XXXX/XXXXXXX/XXXX/KV/gse

точка подключения mount_point

Шаг 5. Выполнить настройки подключения БД к SecMan#

Указать пути до сертификатов БД, подробнее описано в инструкции Настройка интеграции c Pangolin

Шаг 6. Выполнить настройки пути для сертификатов сервера#

Необходимо скорректировать в файле sbt_inventory.yml следующие параметры:

Параметр

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

Описание выполняемой функции

server_cert_file:

$__secman{kv:XXX_XXX/A/KV/test:client}

Путь до server_cert_file

server_key_file:

$__secman{kv:XXX_XXX/A/KV/test:private}

Путь до server_key_file

ca_cert_file:

$__secman{kv:XXX_XXX/A/KV/test:caCert}

Путь до ca_cert_file

grafana_cert_file:

$__secman{kv:XXX_XXX/A/KV/test:client}

Путь до cert_file grafana

grafana_key_file:

$__secman{kv:XXX_XXX/A/KV/test:private}

Путь до key_file grafana

grafana_ca_cert_file:

$__secman{kv:XXX_XXX/A/KV/test:caCert}

Путь до ca_cert_file grafana

Пример настройки сертификатов через PKI для сертификатов сервера#

    server_cert_file: $__secman{pki:XXX_XXX/PKI:role-ga-secman-inda-dev:xxxx-view-grafana-01.xxxxxx.xxx:certificate}
    server_key_file: $__secman{pki:XXX_XXX/PKI:role-ga-secman-inda-dev:xxxx-view-grafana-01.xxxxxx.xxx:private_key}
    ca_cert_file: $__secman{kv:XXX_XXX/A/XXXX/VIEW/GRAF/KV/xxxx_secrets:cert_ca}
    grafana_cert_file: $__secman{pki:XXX_XXX/PKI:role-ga-secman-inda-dev:xxxx-view-grafana-01.xxxxxx.xxx:certificate}
    grafana_key_file: $__secman{pki:XXX_XXX/PKI:role-ga-secman-inda-dev:xxxx-view-grafana-01.xxxxxx.xxx:private_key}
    grafana_ca_cert_file: $__secman{kv:XXX_XXX/A/XXXX/VIEW/GRAF/KV/xxxx_secrets:cert_ca}

Шаг 7. Выполнить настройки путей сертификатов для Kafka#

Необходимо скорректировать в файле sbt_inventory.yml следующие параметры:

Параметр

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

Описание выполняемой функции

kafka_net_tls_client_ca_cert_path

$__secman{kv:XXX_XXX/A/KV/test:caCert}

Путь до client_ca_cert Kafka

kafka_net_tls_client_cert_path

$__secman{kv:XXX_XXX/A/KV/test:client}

Путь до tls_client_cert Kafka

kafka_net_tls_client_private_key_path

$__secman{kv:XXX_XXX/A/KV/test:private}

Путь до client_private_key Kafka

Пример настройки сертификатов через PKI для Kafka#

kafka_net_tls_client_ca_cert_path: $__secman{kv:XXX_XXX/A/xxxx/VIEW/GRAF/KV/xxxx_secrets:cert_ca}
kafka_net_tls_client_cert_path: $__secman{pki:XXX_XXX/PKI:role-ga-secman-inda-dev:xxxx-view-xxxxxxx-01.xxxxxx.xxx:certificate}
kafka_net_tls_client_private_key_path: $__secman{pki:XXX_XXX/PKI:role-ga-secman-inda-dev:xxxx-view-xxxxxxx-01.xxxxxx.xxx:private_key}

Проверка результата#

Для проверки корректности настройки интеграции с SecMan необходимо выполнить следующие шаги:

  • Убедиться, что SecMan доступен по указанному в конфигурации адресу.

  • Внести в приложение параметры подключения к SecMan и выполнить тестовое обращение к секретам из KV, XXXXCA и PG движков.

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

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

  • Выполнить обновление одного из секретов в хранилище и убедиться, что приложение получает актуальную версию. Также проверить отзыв секрета — убедиться, что после отзыва доступ к нему невозможен.

Если все проверки прошли успешно, интеграция с SecMan считается настроенной корректно.