Vault(Система хранения секретов)

⌘K

Vault(Система хранения секретов)

Vault — это высокофункциональная система управления секретами и доступом, разработанная компанией HashiCorp. Она обеспечивает безопасное хранение, выдачу и контроль доступа к конфиденциальной информации: паролям, токенам, API-ключам, сертификатам и другим чувствительным данным, необходимым для работы приложений и инфраструктуры.

Vault поддерживает как статические, так и динамические секреты, позволяя централизованно управлять жизненным циклом данных доступа. Это делает Vault одним из ключевых инструментов в безопасных DevOps- и cloud-native-архитектурах.


Основные возможности Vault

  • Централизованное хранилище секретов с тонкой настройкой политик доступа (ACL/RBAC);
  • Динамическая генерация секретов — временные логины для БД, облаков и API;
  • Шифрование как сервис (Transit Secrets Engine) — шифрование/дешифрование без хранения данных;
  • PKI — выдача и управление TLS-сертификатами;
  • Аудит — запись всех операций в журнал для отслеживания и комплаенса;
  • Интеграция с аутентификацией: LDAP, GitHub, Kubernetes, AWS IAM, JWT;
  • Ротация и TTL — автоматическое истечение и обновление ключей;
  • Secrets Injection — передача секретов в рантайме без сохранения на диск (через sidecar или env-injection).

Примеры того, чем управляет Vault

  • Пароли к базам данных (PostgreSQL, MySQL, MongoDB);
  • Ключи API и OAuth-токены;
  • SSH-ключи для серверов;
  • TLS/SSL-сертификаты для сервисов;
  • AWS access credentials и IAM tokens;
  • Ключи шифрования и JWT-секреты.

Как это работает

  1. Хранилище: все секреты зашифрованы и хранятся в backend’е (файловая система, Consul, S3 и др.);
  2. Secrets Engines: определяют, как обрабатываются запросы — хранилище, генерация, проксирование;
  3. Auth Methods: определяют, кто и как может получить доступ (Kubernetes, LDAP, AppRole, GitHub и др.);
  4. Policies (ACL): управляют, кто имеет право читать, писать или создавать секреты;
  5. Audit Devices: журналируют каждый доступ и операцию — обязательный элемент комплаенса.

Пример: выдача временного пароля PostgreSQL

vault write database/roles/readonly \
  db_name=postgres \
  creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}';" \
  default_ttl="1h" \
  max_ttl="24h"

vault read database/creds/readonly

📌 Vault сам создаёт логин/пароль, действует 1 час, потом истекает. Нет необходимости в постоянных ключах.


Интеграция с Kubernetes

  • Vault Agent Injector: автоматически добавляет в поды секреты через initContainer или sidecar;
  • Kubernetes Auth Method: выдача токенов и доступов на основе serviceAccount;
  • Vault CSI Provider: монтирование секретов как тома.

Типовые сценарии использования

  • DevSecOps: безопасная передача секретов в CI/CD пайплайны;
  • Cloud Security: временные AWS credentials через Vault AWS Engine;
  • Zero Trust архитектура: каждый сервис аутентифицируется и получает только нужные секреты;
  • GitOps и Sealed Secrets: дешифровка secrets на этапе apply без хранения в git.

Преимущества Vault

  • Поддержка сложных сценариев (RBAC, шифрование, логика выдачи);
  • Совместимость с multi-cloud и гибридными средами;
  • Аудит, комплаенс и отслеживаемость всех операций;
  • Гибкая архитектура (self-hosted, HCP Vault, Kubernetes-native);
  • Надёжность: HA-модель, TLS, автоматическое unseal через cloud provider KMS.

HashiCorp Vault — это стандарт управления секретами в облачных и контейнерных средах. Он даёт возможность обеспечить безопасность и автоматизацию доступа к данным даже в самых масштабных и распределённых инфраструктурах.


Практические манифесты и конфигурации для реальной работы с Vault — включая развёртывание в Kubernetes, интеграцию с pod’ами, и использование dynamic secrets.

1. Установка Vault в Kubernetes (через Helm)

helm repo add hashicorp https://helm.releases.hashicorp.com
helm install vault hashicorp/vault \
  --set "server.dev.enabled=true" \
  --set "injector.enabled=true" \
  --namespace vault --create-namespace

📌 Для продакшена замени dev.enabled=true на HA-конфигурацию с backend (например, Consul, S3 или Raft).


2. Настройка Kubernetes Auth Method

vault auth enable kubernetes

vault write auth/kubernetes/config \
  token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
  kubernetes_host="https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT" \
  kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt

📌 Vault теперь может аутентифицировать pod’ы через ServiceAccount.


3. Пример policy (ACL)

# db-readonly-policy.hcl
path "database/creds/readonly" {
  capabilities = ["read"]
}
vault policy write db-readonly db-readonly-policy.hcl

4. Role на основе ServiceAccount

vault write auth/kubernetes/role/db-reader \
  bound_service_account_names=app-sa \
  bound_service_account_namespaces=default \
  policies=db-readonly \
  ttl=1h

📌 Любой под с serviceAccountName: app-sa в namespace default сможет получить временные creds.


5. Vault Agent Injector (sidecar-инъекция в pod)

apiVersion: v1
kind: Pod
metadata:
  name: app-with-secret
  annotations:
    vault.hashicorp.com/agent-inject: "true"
    vault.hashicorp.com/role: "db-reader"
    vault.hashicorp.com/agent-inject-secret-db-creds.txt: "database/creds/readonly"
spec:
  serviceAccountName: app-sa
  containers:
    - name: app
      image: alpine
      command: ["sleep", "3600"]

📌 Секрет будет доступен в /vault/secrets/db-creds.txt внутри контейнера.


6. Dynamic Secret: PostgreSQL

vault secrets enable database

vault write database/config/pg-db \
  plugin_name=postgresql-database-plugin \
  allowed_roles="readonly" \
  connection_url="postgresql://vaultadmin:pass@db.internal.local:5432/postgres?sslmode=disable"

vault write database/roles/readonly \
  db_name=pg-db \
  creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}';" \
  default_ttl="1h" \
  max_ttl="24h"

📌 Секреты генерируются на лету — Vault управляет всем: паролем, сроком действия, ревокацией.


7. Альтернатива: HCP Vault (SaaS)

Если не хочешь управлять инфраструктурой — HashiCorp предоставляет Vault в облаке (HCP Vault). Он поддерживает все функции Vault, включая Kubernetes и Terraform-интеграции, но не требует поддержки сервера.