Управление секретами — одна из наиболее критичных задач в корпоративной ИТ-инфраструктуре. От того, насколько надежно и централизованно хранятся ключи API, пароли, токены и сертификаты, зависит не только безопасность сервисов, но и устойчивость всего бизнеса.

С ростом популярности отечественных решений особое внимание уделяется возможности интеграции с российскими СУБД. В этом материале команда «Онланты» делится опытом тестирования StarVault — системы управления секретами — в связке с Postgres Pro в лабораторных условиях.

Цель эксперимента — проверить, насколько Postgres Pro подходит для использования в качестве внешнего хранилища StarVault, оценить производительность и устойчивость конфигурации, а также проработать сценарии аварийного восстановления.

Описание инфраструктуры

Для проведения испытаний была развернута тестовая инфраструктура, включающая два экземпляра StarVault, различающихся типом хранилища данных. Первый экземпляр использует выделенное хранилище на базе Postgres Pro, второй — встроенное Raft-хранилище, применяемое для сравнительного анализа производительности и стабильности системы.

Оба экземпляра работали в Standalone-конфигурации без настройки отказоустойчивости, что позволило сфокусироваться на чистых метриках взаимодействия компонентов. Все серверы функционировали в среде виртуализации zVirt под управлением Astra Linux Special Edition 1.8.1.UU1 (Орел) с установленной версией StarVault 1.0.4.

Каждый узел тестовой среды имел по 4 виртуальных процессорных ядра и 16 ГБ оперативной памяти, а также дисковую подсистему с производительностью не ниже 3000 IOPS при случайной записи. Для сетевого взаимодействия использовались интерфейсы 1 Гбит/с. Один сервер выполнял роль базы данных Postgres Pro, другой — экземпляра StarVault с внешним хранилищем, третий — StarVault с интегрированным Raft-хранилищем.

Методика и результаты тестирования производительности

Для оценки производительности StarVault применялась утилита HashiCorp Vault Benchmark, позволяющая моделировать нагрузку на систему при работе с различными механизмами управления секретами — от аутентификации (AppRole, UserPass) до операций с KV-хранилищами, шифрованием (Transit) и выпуском сертификатов (PKI).

Тестирование проводилось с помощью утилиты на выделенном сервере и включало три этапа.

  1. Быстрые базовые тесты на запись и чтение (по 3 минуты), оценивающие реакцию системы при массовых операциях с KV-секретами.

  2. Комплексный сценарий длительностью 30 минут, объединяющий все типы операций — аутентификацию, чтение и запись данных, шифрование, верификацию и генерацию сертификатов.

  3. Сравнение выполнялось для двух экземпляров StarVault: одного с хранилищем на Postgres Pro, другого — с интегрированным Raft-хранилищем.

  4. Перечень используемых сценариев тестирования утилиты Vault Benchmark

Результаты показали стабильную работу StarVault с Postgres Pro, без функциональных отклонений от классической конфигурации PostgreSQL. При этом вариант с Raft-хранилищем продемонстрировал более высокую производительность:

  • в среднем на 20–25% быстрее в комплексных сценариях,

  • и до трех раз быстрее при выполнении операций на запись.

Конфигурация Postgres Pro использовалась без дополнительного тюнинга; предполагается, что оптимизация параметров СУБД способна повысить ее производительность в последующих испытаниях.

Результаты производительности

Утилизация ресурсов во время комплексных тестов

Во время комплексных тестов также производился замер утилизации системных ресурсов (память, процессор, диск). Ниже представлены данные по утилизации.

Сервер SV01

CPU

Процент загрузки CPU

Оперативная память

Свободная оперативная память (в Гб)

Дисковая подсистема

Использование диска (в Мебибайт/сек)

Использование диска (операций в секунду)

Сервер DB01

CPU

Процент загрузки CPU

Оперативная память

Свободная оперативная память (в Гб)

Дисковая подсистема

Использование диска (в Мебибайт/сек)

Использование диска (тысяч операций в секунду)

Сервер SV03

CPU

Процент загрузки CPU

Оперативная память

Свободная оперативная память (в Гб)

Дисковая подсистема

Использование диска (в Мебибайт/сек)

Использование диска (тысяч операций в секунду)

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

Для оценки устойчивости системы были рассмотрены типовые сценарии инцидентов, разделенные на две группы — в зависимости от архитектуры StarVault.

  1. StarVault с интегрированным локальным хранилищем Raft;

  2. StarVault с выделенным хранилищем на базе PostgreSQL / Postgres Pro.

1.     Сценарии для конфигурации с Raft-хранилищем

Тестировались три варианта отказа:

  • полный выход из строя сервера с доступной резервной копией виртуальной машины;

  • отказ при наличии только копий конфигурационного файла и данных хранилища;

  • отказ при наличии лишь резервной копии хранилища.

Во всех случаях процедура восстановления была успешной. Самый сложный случай (отказ при наличии лишь резервной копии хранилища) включал установку нового сервера, развертывание StarVault требуемой версии, ручное восстановление конфигурации и сертификатов, восстановление данных хранилища из резервных копий, проверку состояния сервиса и последующее «распечатывание» хранилища (unseal) через CLI или web-интерфейс. С подробным порядком действий можно ознакомиться ниже.

1.  Установить новый сервер StarVault с таким же именем и IP-адресом.

2.  Выполнить инсталляцию StarVault (с такой же версией, как у вышедшего из строя сервера) из репозитория или локального пакета.

3.  Создать файл конфигурации в стандартной директории /etc/starvault.d/starvault.hcl. Убедиться, что у пользователя starvault имеется доступ на чтение и запись конфигурационного файла. Пример конфигурационного файла:

ui        	= true

cluster_addr  = "https://<starvault_ip>:8201"

api_addr  	= "https://<starvault_ip>:8200"

disable_mlock = true

 

storage "raft" {

path = "/path/to/raft/data"

node_id = "raft_node_id"

}

 

listener "tcp" {

address   	= "<starvault_ip>:8200"

tls_cert_file = "/path/to/full-chain.pem"

tls_key_file  = "/path/to/private-key.pem"

}

4.  Перенести файлы сертификата и файлы хранилища в соответствующие директории (указаны в конфигурационном файле). Убедиться, что у пользователя starvault имеется доступ на чтение и запись к файлам.

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

6.  Выполнить запуск сервиса StarVault:

systemctl enable starvault.service

В случае проблем с запуском службы – отследить и устранить ошибки запуска сервиса:

journalctl -eu starvault.service

7.  Проверить статус службы StarVault командой starvault status:

Key            	Value

---            	-----

Seal Type      	shamir

Initialized    	true

Sealed         	true

Total Shares   	5

Threshold      	3

Unseal Progress	0/3

Unseal Nonce   	n/a

Version     	   1.0.4

Build Date     	2025-03-14T20:50:17Z

Storage Type   	file

HA Enabled     	false

В статусе отображается, что служба инициализирована, а хранилище запечатано.

8.  Провести процедуру распечатывания хранилища.

Через Cli:

  • Последовательно ввести необходимое количество ключей для распечатывания хранилища с помощью команды:

starvault operator unseal
  • После успешного распечатывания будет выведен статус службы StarVault.

Key         	Value
---         	-----
Seal Type   	shamir
Initialized	 true
Sealed      	false
Total Shares	5
Threshold   	3
Version     	1.0.4
Build Date  	2025-03-14T20:50:17Z
Storage Type	file
Cluster Name	vault-cluster-37c1a3ef
Cluster ID  	8acadd3b-107b-c17a-2232-68eb8f04b65e
HA Enabled  	false

В статусе отображается, что служба инициализирована и хранилище распечатано.

Через Web:

o В браузере открыть веб-страницу StarVault (например, https://<FQDN>:8200) и ввести ключи для распечатывания хранилища.

9.  Включить автоматический запуск службы StarVault

systemctl enable starvault.service

 2.     Сценарии для конфигурации с PostgreSQL / Postgres Pro

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

Восстановление сервиса включает следующие основные шаги:

  • развертывание/восстановление экземпляра StarVault и/или Postgres Pro с исходными параметрами (имя, IP-адрес, версия ПО);

  • восстановление конфигурационных файлов, сертификатов и данных хранилища;

  • запуск и проверку статуса сервиса.

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

1.  Установить новый сервер PostgreSQL\Postgres Pro с таким же именем и IP-адресом.

2.  Выполнить инсталляцию PostgreSQL\Postgres Pro.

3.  Создать пользователя, базу данных и назначить необходимые разрешения. Пример:

sudo -u postgres psql

 CREATE USER vaultuser WITH PASSWORD 'StrongPasswordHere';
CREATE DATABASE vaultdb OWNER vaultuser;
GRANT ALL PRIVILEGES ON DATABASE vaultdb TO vaultuser;

4.  В файле “pg_hba.conf” предоставить разрешение на подключение к базе для пользователя с сервера StarVault:

host vaultdb vaultuser <starvault_ip>/32 md5

5.   Перезапустить службу PostgreSQL\Postgres Pro, проверить журнал на наличие ошибок.

6.  Проверить возможность подключения к базе пользователя:

psql -U vaultuser -d vaultdb

7.  На сервере StarVault проверить возможность подключения к СУБД:

nc -zv <database ip> <database port>
или
telnet <database ip> <database port>

8. На сервере StarVault перезапустить службу StarVault. Посмотреть журнал службы и убедиться, что пропали ошибки подключения к хранилищу. Пример ошибки:

[ERROR] auth.approle.auth_approle_1492e257.tidy: error tidying global secret IDs: error="failed to connect to host=10.0.8.197 user=vaultuser database=vaultdb: dial error (dial tcp 10.0.8.197:5432: connect: connection refused)"

9.  Провести процедуру распечатывания хранилища.

Через Cli:

  • Последовательно ввести необходимое количество ключей для распечатывания хранилища с помощью команды:

starvault operator unseal
  • После успешного распечатывания будет выведен статус службы StarVault.

Key         	Value
---         	-----
Seal Type   	shamir
Initialized 	true
Sealed      	false
Total Shares	5
Threshold   	3
Version     	1.0.4
Build Date  	2025-03-14T20:50:17Z
Storage Type	postgresql
Cluster Name	vault-cluster-e39e2ae3
Cluster ID  	0da342ad-5e4c-c7ea-8ff2-b1e109b27cb5
HA Enabled  	false

В статусе отображается, что служба инициализирована и хранилище распечатано.

Через Web:

  • В браузере открыть веб-страницу StarVault (например, https://<FQDN>:8200) и ввести ключи для распечатывания хранилища.

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

  • Вариант с Raft-хранилищем обеспечивает более простое и быстрое восстановление за счет встроенного механизма хранения.

  • Конфигурация с Postgres Pro требует большего числа действий, но обеспечивает гибкость и масштабируемость, характерные для классических СУБД.

Вывод

Результаты испытаний показали, что связка StarVault + Postgres Pro является технологически состоятельным и безопасным решением для управления секретами в корпоративной инфраструктуре. Использование Postgres Pro в качестве внешнего хранилища обеспечивает стабильность, совместимость и предсказуемость поведения системы при рабочих нагрузках, а также полностью соответствует требованиям по технологическому суверенитету.

При этом встроенное Raft-хранилище продемонстрировало преимущество в производительности и простоте восстановления, что делает его подходящим вариантом для компактных и автономных развертываний. Конфигурация с Postgres Pro, напротив, лучше адаптируется под крупные инфраструктуры, где критичны масштабирование, аудит и централизованное управление данными.

Комментарии (0)