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-секреты.
Как это работает
- Хранилище: все секреты зашифрованы и хранятся в backend’е (файловая система, Consul, S3 и др.);
- Secrets Engines: определяют, как обрабатываются запросы — хранилище, генерация, проксирование;
- Auth Methods: определяют, кто и как может получить доступ (Kubernetes, LDAP, AppRole, GitHub и др.);
- Policies (ACL): управляют, кто имеет право читать, писать или создавать секреты;
- 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
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
default
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-интеграции, но не требует поддержки сервера.