Настройка интеграции 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 |
|
|
role_id SecMan |
|
|
путь до wrapped_token_path |
|
|
путь до secret_id |
|
|
namespace в SecMan |
|
|
точка подключения mount_point |
Шаг 5. Выполнить настройки подключения БД к SecMan#
Указать пути до сертификатов БД, подробнее описано в инструкции Настройка интеграции c Pangolin
Шаг 6. Выполнить настройки пути для сертификатов сервера#
Необходимо скорректировать в файле sbt_inventory.yml следующие параметры:
Параметр |
Значение по умолчанию |
Описание выполняемой функции |
|---|---|---|
|
|
Путь до server_cert_file |
|
|
Путь до server_key_file |
|
|
Путь до ca_cert_file |
|
|
Путь до cert_file grafana |
|
|
Путь до key_file grafana |
|
|
Путь до 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 следующие параметры:
Параметр |
Значение по умолчанию |
Описание выполняемой функции |
|---|---|---|
|
|
Путь до client_ca_cert Kafka |
|
|
Путь до tls_client_cert Kafka |
|
|
Путь до 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 считается настроенной корректно.