Перейти к содержанию

🔐 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 (не коммитить).

Вопросы

В разработке..