Stronghold — это сервер с HTTP API, который хранит данные в зашифрованном виде и выдаёт их только аутентифицированным клиентам с подходящими политиками. Архитектура Stronghold совместима с HashiCorp Vault: базовый Stronghold соответствует Vault CE.
На этой странице описаны компоненты одного сервера и путь запроса через них. Слои узла Stronghold EE (WAL Backend, Sealwrap), HA-кластер и межкластерная репликация описаны на странице «Архитектура репликации: Stronghold и Stronghold EE».
Компоненты сервера
| Компонент | Назначение |
|---|---|
| HTTP API (listener) | Принимает запросы клиентов, CLI и веб-интерфейса по HTTPS. Все операции Stronghold, включая управление, выполняются через API. |
| Core | Ядро сервера: связывает остальные компоненты, обрабатывает запрос по шагам, управляет состоянием seal и режимом HA. |
| Token store | Хранит токены и сопоставленные с ними политики, TTL и метаданные. Проверяет токен каждого запроса. Подробнее — в разделе «Токен». |
| Policy engine (ACL) | Сравнивает путь и операцию запроса с политиками токена и разрешает или запрещает запрос. Подробнее — в разделе «Политики». |
| Методы аутентификации | Проверяют учётные данные клиента (LDAP, OIDC, JWT, Kubernetes, AppRole, userpass и другие) и выдают токен. Подробнее — в разделе «Аутентификация». |
| Механизмы секретов | Хранят, генерируют или обрабатывают секреты: KV, PKI, Transit, SSH, базы данных и другие. Каждый механизм монтируется по своему пути (mount). |
| Router | Направляет запрос к методу аутентификации или механизму секретов по пути запроса. |
| Expiration manager | Отслеживает аренды (lease) токенов и динамических секретов, продлевает и отзывает их. Подробнее — в разделе «Аренда». |
| Аудит-устройства | Записывают каждый запрос и ответ в журнал (file, syslog, socket). Подробнее — в разделе «Аудит». |
| Криптографический барьер (Security Barrier) | Шифрует всё, что записывается в хранилище, и расшифровывает прочитанное. Использует AES-256-GCM. |
| Бэкенд хранения | Долговременно хранит зашифрованные данные. Для HA используется интегрированное хранилище Raft. |
| Seal | Защищает root-ключ, которым зашифрована связка ключей барьера: доли Shamir, HSM (pkcs11), Yandex Cloud KMS или inner-cluster. Подробнее — в разделе «Запечатывание и распечатывание». |
Путь запроса
Запрос проходит компоненты сервера в определённом порядке. Упрощённая схема для запроса на чтение секрета:

- Клиент подключается к listener по TLS и передаёт токен в заголовке запроса.
- Token store находит токен и связанные с ним политики. Если токена нет, срок его действия истёк или он отозван, запрос отклоняется. Запросы на вход (
auth/<METHOD>/login) выполняются без токена: метод аутентификации проверяет учётные данные и в ответе выдаёт новый токен. - Policy engine проверяет, разрешена ли операция (
read,create,update,delete,listи другие) на пути запроса. По умолчанию всё запрещено; явный запретdenyимеет приоритет над разрешениями. - До выполнения запрос записывается в аудит-устройства. Чувствительные значения в записи хешируются HMAC-SHA256.
- Router выбирает механизм секретов или метод аутентификации, смонтированный по префиксу пути.
- Механизм секретов выполняет операцию. Если он выдаёт динамический секрет или токен, expiration manager регистрирует аренду.
- Все данные, которые механизм записывает или читает, проходят через барьер. Выше барьера данные открыты, ниже — только зашифрованы.
- Бэкенд хранения получает и возвращает только шифртекст. В HA-кластере Raft реплицирует его на остальные узлы.
- Перед отправкой клиенту ответ также записывается в аудит-устройства.
Запись запроса в аудит выполняется после проверки токена и политик, в том числе для отклонённых запросов.
Если запрос пришёл на standby-узел HA-кластера, он перенаправляется на активный узел через кластерный порт. В Stronghold EE performance standby-узлы обслуживают чтения локально. Подробнее — на странице «Архитектура репликации: Stronghold и Stronghold EE».
Аренды и expiration manager
Expiration manager — фоновый компонент core, который ведёт учёт аренд:
- при выдаче динамического секрета или токена создаёт аренду с TTL;
- продлевает аренду по запросу клиента, если это разрешено;
- по истечении TTL отзывает аренду — механизм секретов удаляет выданные учётные данные во внешней системе (например, роль в базе данных);
- при отзыве токена отзывает все аренды, созданные с его помощью, и дочерние токены.
Статические секреты KV не выдают аренд. Подробнее — в разделе «Аренда».
Seal и барьер
При запуске сервер находится в состоянии sealed: он может читать хранилище, но не может расшифровать данные. Доступны только проверка статуса и распечатывание.
Цепочка ключей:

Барьер защищает:
- конфиденциальность данных в хранилище, на диске и в резервных копиях (снимках Raft);
- целостность данных:
AES-GCMобнаруживает изменение шифртекста; - данные при передаче между узлами по Raft и в потоке репликации: они передаются уже зашифрованными барьером.
Барьер не защищает данные выше себя: в памяти распечатанного сервера, в ответах клиентам и в самих внешних системах. Подробнее об этих ограничениях — на странице «Модель угроз».
Ключи барьера можно ротировать: новые записи шифруются новым ключом, старые остаются читаемыми. Подробнее об алгоритмах — в разделе «Криптография».
В Stronghold EE для чувствительных путей доступен второй слой шифрования — seal wrap.