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, чтобы обновление сертификатов не требовало ручного вмешательства?

Связанные уроки

  • sec-01
  • sec-18
Vault и управление секретами

0

1

Войти