Stronghold разработан на основе HashiCorp Vault. Как указано в истории изменений, первая версия Stronghold (v1.0, февраль 2024) основана на Vault v1.14.x. Поэтому Stronghold сохраняет модель данных, HTTP API, формат конфигурации и CLI HashiCorp Vault и дополняет их собственными возможностями.
Stronghold основан на Vault OSS 1.14.8 — последней версии под лицензией MPL 2.0. Нумерация версий Stronghold (1.19) не совпадает с нумерацией Vault: возможности более новых версий Vault в Stronghold не переносятся автоматически.
Базовый Stronghold соответствует Vault CE. Часть возможностей, которые в HashiCorp Vault доступны только в Vault Enterprise, в Stronghold входит в редакцию Stronghold EE. Сравнение редакций приведено на странице «Редакции».
Совместимость API
HTTP API Stronghold совместим с API Vault:
- запросы выполняются к тем же путям с префиксом
/v1/(/v1/sys/...,/v1/auth/...,/v1/<MOUNT>/...); - токен передаётся в заголовке
X-Vault-Token; - форматы запросов и ответов механизмов секретов и методов аутентификации совпадают с Vault;
- шифртекст механизма
Transitимеет форматvault:v<KEY_VERSION>:..., поэтому данные, зашифрованные в Vault, остаются в привычном формате; - API хранилищ
KV1/KV2совместим с Vault настолько, что Stronghold может реплицировать KV-хранилища из Vault CE, Vault Enterprise или любого хранилища с совместимым Vault KV/KV2 API.
Пример запроса к API:
curl --header "X-Vault-Token: ${STRONGHOLD_TOKEN}" "${STRONGHOLD_ADDR}/v1/sys/health"Полное описание эндпоинтов приведено в справочнике API.
CLI
CLI Stronghold повторяет команды и флаги CLI vault. Отличается только способ вызова:
| Окружение | Команда | Пример |
|---|---|---|
| HashiCorp Vault | vault <COMMAND> | vault kv get -mount=secret app |
| Stronghold в Deckhouse Platform (DP), через Deckhouse CLI | d8 stronghold <COMMAND> | d8 stronghold kv get -mount=secret app |
| Stronghold в Linux (standalone) | stronghold <COMMAND> | stronghold kv get -mount=secret app |
Подкоманды, флаги и их поведение описаны в разделе «d8 stronghold».
Переменные окружения
Клиентские переменные окружения в документации Stronghold используют префикс STRONGHOLD_:
| Stronghold | Аналог в Vault | Назначение |
|---|---|---|
STRONGHOLD_ADDR | VAULT_ADDR | Адрес сервера |
STRONGHOLD_TOKEN | VAULT_TOKEN | Токен клиента |
STRONGHOLD_CACERT | VAULT_CACERT | Путь к CA-сертификату для проверки TLS-сертификата сервера |
Работают оба префикса. При запуске stronghold и d8 stronghold копируют значение каждой переменной STRONGHOLD_* в переменную VAULT_* с тем же окончанием имени, например STRONGHOLD_TOKEN в VAULT_TOKEN. Если заданы обе переменные, значение STRONGHOLD_* переопределяет значение VAULT_*.
Это относится и к переменным окружения, которые переопределяют параметры конфигурации сервера, например VAULT_API_ADDR, VAULT_CLUSTER_ADDR, VAULT_RAFT_PATH, VAULT_RAFT_NODE_ID и VAULT_ENABLE_FILE_PERMISSIONS_CHECK: их тоже можно задать с префиксом STRONGHOLD_. Список этих переменных приведён в разделе «Настройка».
Конфигурация сервера и агента
Сервер и Stronghold Agent используют форматы конфигурации Vault:
- Конфигурационный файл сервера использует формат HCL или JSON и те же секции, что и Vault:
listener,storage,seal,telemetry,uiи другие. Описание секций приведено в разделе «Настройка». - Stronghold Agent берёт параметры подключения к серверу из секции
strongholdилиvault. Эти секции — синонимы и работают как со Stronghold, так и с HashiCorp Vault: задайте только одну из них. Параметры секции описаны в разделе «Основные настройки».
Инструменты экосистемы
Поскольку API совместим, большинство инструментов экосистемы Vault можно направить на Stronghold, указав его адрес. Статус совместимости:
| Инструмент | Способ подключения | Статус |
|---|---|---|
Модуль DP secrets-store-integration (CSI-драйвер, env-injector) | Нативная интеграция | Поддерживается |
| Stronghold Agent | Нативная интеграция | Поддерживается |
| Ansible, Terraform | Провайдеры и модули для Vault | Поддерживается, подробнее — на странице «Редакции» |
| External Secrets Operator | Провайдер vault | Не подтверждено тестами |
| cert-manager | Issuer типа vault | Не подтверждено тестами |
| Jenkins (HashiCorp Vault Plugin), GitLab CI, GitHub Actions | Плагины и действия для Vault, JWT-аутентификация | Описаны в разделе «Примеры использования» |
Клиентские SDK (Go github.com/hashicorp/vault/api, Python hvac и другие) | Клиентские библиотеки Vault | Не подтверждено тестами |
Способы доставки секретов в Kubernetes сравниваются на странице «Доставка секретов в поды Kubernetes».
Возможности, которых нет в HashiCorp Vault
| Возможность | Редакция | Описание |
|---|---|---|
| Репликация KV1/KV2 | Stronghold EE | Pull-репликация отдельных KV-хранилищ по API, в том числе из Vault CE и Vault Enterprise |
| Механизм секретов GitOps | Stronghold EE | Управление конфигурацией Stronghold через кворум подписей Git-коммитов |
Встроенный плагин trdl | Stronghold EE | Управление сборкой и подписью артефактов через кворум подписей Git-коммитов |
Seal inner-cluster | Stronghold EE, Stronghold CSE | Встроенное автоматическое распечатывание: распечатанные узлы кластера распечатывают другие узлы без внешнего KMS |
Seal yandexcloudkms | Stronghold EE | Автоматическое распечатывание и защита root-ключа с помощью Yandex Cloud KMS (только standalone) |
| ГОСТ-криптография | Stronghold EE | TLS 1.3 с ГОСТ-шифрованием Магма и Кузнечик, сертификаты ГОСТ 34.10 в PKI, ГОСТ-алгоритмы в Transit |
CryptoPro seal wrapper | Stronghold EE | Seal wrapper для сценариев с российской криптографией. Доступен в сборке для Linux с поддержкой HSM |
| Managed Keys с Yandex KMS | Stronghold EE | Работа с ключевым материалом в Yandex KMS и PKCS #11-устройствах из Transit, PKI и SSH |
| Блокировка пространств имён через веб-интерфейс | Stronghold EE | Блокировка и разблокировка Namespace API |
Команды stronghold bootstrap | Stronghold EE | Генерация скрипта установки сервиса Linux, Helm-чарта и Docker-образа |
| Веб-интерфейс на русском языке, управление ролями и политиками в веб-интерфейсе | Интерфейс на русском языке — все; управление ролями и политиками — Stronghold EE | Локализованный веб-интерфейс с расширенными возможностями администрирования |
| Развёртывание модулем DP | Все | Автоматическая инициализация, распечатывание и интеграция с Dex. Подробнее — в разделе «Настройка Stronghold» |
Возможности Vault Enterprise, которые доступны в Stronghold EE: пространства имён, performance-репликация (PR) и репликация для аварийного восстановления (DR), performance standby, автоматические снимки, seal wrap, HSM (PKCS #11), Managed Keys и аутентификация SAML. При миграции с Vault Enterprise конфигурация автоматических снимков сохраняется.
Отличия и ограничения
Stronghold отличается от HashiCorp Vault следующим:
- Из внешних облачных KMS для
sealподдерживается только Yandex Cloud KMS. Конфигурацииawskms,gcpckms,azurekeyvault,ocikmsиalicloudkmsне поддерживаются;transitseal поддерживается. - Работа с HSM (
seal "pkcs11") иseal "yandexcloudkms"поддерживается только при standalone-установке. - В DP модуль
strongholdподдерживает режимыAutomatic(по умолчанию) иManualи инлетыIngress(по умолчанию),GatewayAPI,LoadBalancer,NodePortиNone. В режимеAutomaticинициализацию и распечатывание выполняет модуль. Параметры модуля описаны в разделе «Настройка Stronghold». - В Stronghold
seal wrapможно отключить для всех данных, кроме root-ключа, параметромdisable_sealwrap = true. - Sentinel (политики RGP/EGP), KMIP, механизм секретов Transform и механизм секретов Key Management в Stronghold не реализованы: соответствующие эндпоинты закрыты лицензией даже в Stronghold EE. Control Groups реализованы в Stronghold EE. Подсистема Login MFA (
identity/mfa/*: методы TOTP, Okta, Duo, PingID и Multifactor, login enforcement) входит во все редакции; устаревший Enterprise MFA (sys/mfa) доступен в Stronghold EE.
Миграция с HashiCorp Vault
Порядок переноса данных и конфигурации из HashiCorp Vault в Stronghold описан в руководстве «Миграция с HashiCorp Vault».