Vault
HashiCorp Vault — централизованное хранилище секретов: пароли к базам, API-ключи, сертификаты — всё хранится в одном месте, зашифровано, с аудит-логом «кто когда читал».
Проблема без Vault: секреты разбросаны по переменным окружения на десятках серверов, непонятно кто имеет доступ, ротация — вручную на каждой машине.
Как работает:
# Записать секрет
vault kv put secret/myapp db_password=super_secret
# Прочитать секрет
vault kv get secret/myapp
Приложение не хранит пароль — оно запрашивает его у Vault при старте, предъявив свой токен или другой метод аутентификации. Vault проверяет политику и выдаёт секрет.
Динамические секреты — «убийственная фича» Vault: вместо постоянного пароля к базе, Vault может создать временные логин/пароль для конкретного приложения с TTL (например, 1 час). По истечению Vault сам их удаляет.
Копнуть глубже
Spring Vault — интеграция через spring-cloud-vault-config:
# bootstrap.yml
spring:
cloud:
vault:
host: vault.company.com
authentication: TOKEN
token: ${VAULT_TOKEN}
kv:
enabled: true
backend: secret
application-name: myapp
Spring автоматически загружает секреты из Vault в Environment при старте — @Value("${db_password}") работает как обычно, но значение берётся из Vault.
Аутентификация приложения к Vault:
Token— простой статический токен (для разработки)AppRole— специальный ID+Secret для приложений (для продакшена)Kubernetes— Pod может автоматически аутентифицироваться через ServiceAccount Kubernetes — никаких статических токенов, Vault доверяет Kubernetes API
Seal/Unseal механизм. Vault при старте “запечатан” (sealed) — данные зашифрованы и недоступны. Для распечатки нужны части мастер-ключа (схема Shamir’s Secret Sharing): если ключ разделён на 5 частей с порогом 3, любые 3 из 5 владельцев могут вместе распечатать Vault. Это защита от ситуации, когда один сотрудник знает весь ключ и может злоупотребить доступом.
• что такое динамические секреты и зачем они нужны (если дошёл до 2-го слоя).