HashiCorp Vault
Хранилище секретов для приложений: выдаёт пароли, ключи и сертификаты по запросу, с ограниченным сроком жизни и полным аудитом обращений.
Что такое HashiCorp Vault
Vault — система управления секретами от HashiCorp. Секрет — это всё, что даёт доступ: пароль к базе, API-ключ, приватный ключ сертификата, токен платёжного шлюза. Vault хранит их в зашифрованном виде и выдаёт приложениям по запросу — после проверки, кто спрашивает, и с записью в журнал аудита.
Проблема, которую он решает, знакома всем: пароль от продовой базы лежит в .env, тот попал в репозиторий, а сменить его теперь страшно, потому что непонятно, кто им пользуется. Vault превращает это в управляемый процесс.
Сразу важное разграничение: Vault — не менеджер паролей для людей. Это хранилище для машин. Людям — Bitwarden, сервисам — Vault.
Что он умеет сверх «зашифрованного хранилища»
- KV-хранилище — то, чего все ждут: положить секрет по пути, забрать по пути. Версия v2 хранит историю изменений.
- Динамические секреты — главная фича. Vault сам создаёт учётку в PostgreSQL на 30 минут под конкретное приложение и сам удаляет её по истечении. Постоянного пароля, который можно украсть, просто не существует.
- PKI — Vault работает как внутренний удостоверяющий центр и выпускает SSL-сертификаты для внутренних сервисов по запросу.
- Transit — шифрование как сервис: приложение отправляет данные, получает шифротекст, ключ при этом не покидает Vault. Так шифруют поля в БД, не доверяя приложению ключ.
- Аудит — каждое обращение к каждому секрету пишется в лог. При инциденте это единственный способ понять, что именно утекло.
Ключевые понятия
| Понятие | Что это |
|---|---|
| Secrets engine | модуль, отвечающий за тип секретов: kv, database, pki, transit |
| Auth method | как доказать, кто ты: AppRole, Kubernetes, OIDC, LDAP, token |
| Policy | правила доступа к путям, описанные в HCL |
| Lease | срок жизни выданного секрета; по истечении — отзыв |
| Seal / Unseal | запечатанное и распечатанное состояние хранилища |
Модель прав в Vault строится на путях, а не на объектах — по сути это RBAC поверх дерева путей:
path "database/creds/app-readonly" {
capabilities = ["read"]
}
path "secret/data/app/*" {
capabilities = ["read", "list"]
}
Seal и unseal — то, что удивляет новичков
После старта Vault запечатан: он не может расшифровать собственное хранилище и не отвечает на запросы, пока его не распечатают. Мастер-ключ при инициализации разбивается по схеме Шамира на несколько частей, и для распечатывания нужно предъявить не все, а заданный порог — например, три ключа из пяти. Части раздают разным людям.
Смысл в том, что ни один администратор в одиночку не поднимет Vault и не прочитает секреты. Оборотная сторона — после каждого перезапуска нужны живые люди с ключами. Поэтому в продакшене включают auto-unseal через облачный KMS или HSM: Vault сам распечатывается ключом, который хранится вне его.
Это же — главный операционный риск: Vault становится единой точкой отказа. Он лёг — приложения не получат пароли к базам. Разворачивают его кластером из нескольких узлов (штатное хранилище — Integrated Storage на Raft), и бэкап снапшотов Raft должен существовать до того, как понадобится.
Как приложение получает секрет
# аутентификация по AppRole: role_id + secret_id -> токен
vault write auth/approle/login \
role_id="$ROLE_ID" secret_id="$SECRET_ID"
# запрос временной учётки к БД
vault read database/creds/app-readonly
# username v-approle-app-x9k2...
# password A1a-BcD3fG...
# lease_duration 30m
В Kubernetes это делается прозрачнее: под аутентифицируется своим service account, а Vault Agent подкладывает секрет в файл — приложение вообще не знает про Vault. Аналогично в CI/CD, где Vault заменяет вечные переменные окружения в настройках раннера.
Порт по умолчанию — 8200.
Лицензия и альтернативы
В 2023 году HashiCorp сменила лицензию своих продуктов с MPL на BSL — исходники остались открытыми, но использование в конкурирующем продукте запретили. В ответ сообщество сделало форк OpenBao под эгидой Linux Foundation. Для внутреннего использования в компании BSL ничего не меняет, для тех, кто продаёт Vault как услугу, — меняет всё.
Другие варианты: Infisical (проще, современнее), SOPS и sealed-secrets (шифрование секретов прямо в Git, подход GitOps), облачные AWS Secrets Manager и аналоги. Vault сложнее почти всех, но динамические секреты, PKI и transit в одном продукте больше не даёт никто.
Связанные термины
- Bitwarden — то же для людей, а не для приложений
- HSM — аппаратное хранение мастер-ключа при auto-unseal
- Криптография и СКЗИ — на чём построено шифрование хранилища
- RBAC и ACL — модель доступа к путям
- Keycloak — сосед по контуру: аутентификация людей, а не выдача секретов
- SSL-сертификат — что выпускает PKI-движок
Готовы запустить GPU-задачу?
Запустить GPU-сервер