DevOps
Vault и управление секретами
В 2020 году SolarWinds атака обнажила критическую проблему: статические credentials в исходном коде и CI/CD. 18000 организаций пострадали включая US Treasury и Pentagon. HashiCorp Vault с dynamic secrets и автоматической ротацией - это архитектурный ответ на этот класс атак: даже при компрометации одного credential, ущерб ограничен часами а не годами.
- **Adobe** использует HashiCorp Vault для управления секретами 30000+ сервисов - dynamic database credentials означают что утечка одного сервиса не даёт доступ к БД других команд
- **Cloudflare** выдаёт TLS сертификаты для своих внутренних сервисов со сроком 24 часа через внутренний CA - компрометированный сертификат устаревает без необходимости manual revocation
- **PagerDuty** полностью автоматизировал ротацию всех production credentials через Vault - последний manual secret rotation был в 2021 году
HashiCorp Vault
HashiCorp Vault - централизованное хранилище секретов с audit logging, fine-grained access control и dynamic secrets. Отличие от AWS Secrets Manager: работает в любом окружении (on-premise, multi-cloud), поддерживает dynamic secrets (генерирует временные DB credentials на лету), имеет богатую экосистему auth methods.
Vault Auth Methods: AppRole (для приложений), Kubernetes (Pod получает токен из K8s SA), AWS IAM, LDAP, GitHub. Dynamic Secrets Engines: Database (временные PostgreSQL/MySQL credentials), AWS (временные IAM credentials), PKI (X.509 сертификаты). Secret Engines: KV v2 (versioned key-value), Transit (шифрование как сервис).
Главное преимущество Vault Dynamic Secrets для базы данных?
Sealed Secrets в Kubernetes
Kubernetes Secret в base64 - не зашифрован, нельзя хранить в git. Sealed Secrets (Bitnami) решает это: kubeseal шифрует Secret публичным ключом кластера, создаёт SealedSecret - его можно безопасно коммитить в git. Только controller в кластере с приватным ключом может расшифровать.
Альтернативы Sealed Secrets: External Secrets Operator (ESO) - синхронизирует секреты из Vault/AWS SM/GCP SM в K8s Secrets; Vault Agent Injector - монтирует секреты как файлы в Pod; Secrets Store CSI Driver - монтирует из внешних хранилищ как volume. ESO + AWS Secrets Manager - наиболее распространённая схема на AWS.
Почему обычный K8s Secret (base64) нельзя хранить в git?
Ротация секретов
Ротация секретов - регулярная замена credentials для ограничения window of compromise. Автоматическая ротация: AWS Secrets Manager ротирует RDS passwords через Lambda функцию (встроена для поддерживаемых БД), Vault ротирует static secrets по schedule, Let's Encrypt сертификаты обновляет cert-manager каждые 60 дней.
Ключевая сложность ротации: zero-downtime. Паттерн для DB password: 1) создать новый пароль, 2) обновить в БД (теперь оба пароля валидны), 3) обновить в Secrets Manager, 4) перезапустить приложения (они возьмут новый пароль), 5) удалить старый пароль. AWS SM делает это автоматически через двухшаговую ротацию Lambda.
Как обеспечить zero-downtime при ротации пароля базы данных?
PKI и TLS сертификаты
PKI (Public Key Infrastructure) управляет TLS сертификатами. cert-manager в Kubernetes автоматически выпускает и обновляет сертификаты от Let's Encrypt (публичные) или внутреннего CA (private). Vault PKI Engine - внутренний CA для mTLS между сервисами: выдаёт сертификаты сроком 24h с автоматическим обновлением через Vault Agent.
Типичная PKI стратегия: Let's Encrypt для public endpoints (wildcard *.myapp.com через DNS-01 challenge), Vault PKI для internal service-to-service mTLS (сертификаты живут 24h - компрометация минимальна), AWS ACM для ALB/CloudFront (автоматическое обновление, нельзя экспортировать private key). cert-manager поддерживает все три источника через Issuer ресурсы.
HashiCorp Vault и AWS Secrets Manager решают одну задачу - выбирай что удобнее
AWS Secrets Manager - managed сервис, оптимален для AWS-native workloads: автоматическая ротация RDS паролей, нативная интеграция с IAM. Vault - портативный, работает везде (on-premise, multi-cloud), поддерживает dynamic secrets для любой БД, PKI CA, Transit encryption. Vault сложнее в операции но мощнее
Vault требует управления кластером (HA, unsealing, backup), AWS SM полностью managed. Для чистого AWS - SM проще; для hybrid/multi-cloud - Vault незаменим
Почему Vault PKI выдаёт internal сертификаты сроком 24 часа, а не 1 год как Let's Encrypt?
Ключевые идеи
- **Vault Dynamic Secrets** - временные credentials (1h TTL) для каждого приложения отдельно; компрометация одного не раскрывает других
- **Sealed Secrets / ESO** - безопасное хранение K8s секретов в git (зашифрованы) или синхронизация из AWS SM/Vault через External Secrets Operator
- **Ротация + PKI** - двухшаговая zero-downtime ротация паролей; короткоживущие (24h) TLS сертификаты от Vault PKI для внутренних сервисов
Связанные темы
Управление секретами является основой безопасной инфраструктуры:
- DevSecOps — Secret scanning в CI/CD предотвращает попадание секретов в git; Vault обеспечивает правильное хранение и ротацию
- Service Mesh: Istio, Linkerd — Vault PKI Engine выдаёт сертификаты для mTLS между сервисами; Istio Citadel также является PKI CA
Вопросы для размышления
- Если 50 микросервисов используют один shared DB пароль - как мигрировать на Vault dynamic secrets без downtime?
- Когда Sealed Secrets лучше External Secrets Operator для Kubernetes, и наоборот?
- Как организовать PKI для 200 микросервисов с mTLS, чтобы обновление сертификатов не требовало ручного вмешательства?