🔐 Vault¶
Vault (HashiCorp) — менеджер секретов: пароли, API-ключи, сертификаты и короткоживущие credentials выдаются по политике, а не лежат в git/образах.
Status: Draft
1. Модель
После старта Vault часто sealed: данные на диске есть, API секретов закрыт, пока не сделают unseal (или auto-unseal через KMS/HSM).
| Понятие | Смысл |
|---|---|
| Seal / unseal | Защита master key; без unseal кластер «глухой» |
| Root token | Супертокен при init — беречь, не для приложений |
| Token | Учётка клиента: TTL, политики, renew |
Практика: приложения ходят со своими токенами/ролями, не с root.
2. Storage
Где Vault хранит зашифрованные данные (не «пароли открытым текстом в etcd»).
| Backend | Заметка |
|---|---|
| Integrated Storage (Raft) | Частый выбор для HA без внешнего KV |
| Consul | Классический внешний backend |
| PostgreSQL / MySQL / S3… | Возможны; смотреть docs под версию |
Выбор backend ≠ «где секреты в plaintext» — storage держит ciphertext Vault.
3. Auth
Как клиент доказывает, кто он, и получает token.
| Метод | Когда |
|---|---|
| Token | Уже есть token (человек, CI) |
| AppRole | Сервис вне K8s: role_id + secret_id |
| Kubernetes | Pod по ServiceAccount JWT |
| OIDC / LDAP… | Люди / корпоративный IdP |
Auth method → role → policies на выданном token.
4. Secrets engines
Движки монтируются на path (secret/, database/…).
| Engine | Идея |
|---|---|
| KV | Статичные key→value (v2 — версии) |
| Database | Динамические пароли к БД + TTL / ротация |
| PKI / Transit… | Сертификаты, шифрование as a service |
Для «просто положить пароль» — KV; для «логин в Postgres на час» — Database engine.
5. Политики
Policy — что token может на каких path.
path "secret/data/app/*" {
capabilities = ["read", "list"]
}
Без подходящей policy даже после login vault kv get вернёт permission denied. Least privilege: приложению — только свои path.
6. Kubernetes
Два частых паттерна доставки секретов в кластер:
| Подход | Как |
|---|---|
| Vault Agent Injector | Sidecar/init подставляет секреты в Pod (аннотации) |
| External Secrets Operator | Синк из Vault → Secret в Kubernetes |
Auth: Kubernetes auth method + роль, привязанная к ServiceAccount. Не класть долгоживущий root token в Deployment.
7. CLI
vault status
vault login # или login -method=approle / kubernetes
vault kv get secret/app/config
vault read database/creds/readonly
VAULT_ADDR — URL API; после login token обычно в ~/.vault-token (не коммитить).
Вопросы
В разработке..