What Vault is and why teams adopt it
HashiCorp Vault is a server that sits between your applications and the credentials they need. Instead of a password in an environment variable that lives for years, a service asks Vault, proves who it is, and receives a secret that is scoped, logged and often short-lived. That shift from storing secrets to brokering them is the reason to run it.
Teams usually arrive after an incident or an audit: a key committed to Git, a CI variable shared by twenty repositories, or a question nobody can answer about who can read the production database password. Vault gives you one place to enforce policy and one audit trail. As a HashiCorp Vault consulting partner we focus on getting that value without creating a new single point of failure or a new gate that developers resent.
It is not always the right answer. We cover when to pick something simpler near the end.
How we run Vault in production
Topology and storage
For most clients we deploy three nodes using integrated Raft storage, one per availability zone, behind an internal load balancer. Five nodes suit larger or stricter environments. Raft removes the need to operate a separate storage backend, but it means snapshots become your primary backup, so they are automated and copied to storage outside the cluster.
Auto-unseal with your cloud KMS avoids a human with key shares being needed after every restart. The trade-off is that your KMS key and its permissions become part of Vault’s security boundary, so we restrict and monitor them accordingly. Where it fits your platform, we run Vault on Kubernetes with the official Helm chart, with anti-affinity and a disruption budget. Some clients prefer dedicated instances so that Vault does not depend on the cluster it is serving. We will tell you which suits your size.
Authentication without static tokens
The weakest Vault deployments authenticate with a long-lived token pasted into a pipeline. We use workload identity instead:
- Kubernetes pods use the Kubernetes auth method, bound to a namespace and service account.
- Cloud workloads use IAM or managed identity roles.
- CI jobs present an OIDC token from the platform, for example GitHub Actions, and receive a role scoped to one repository and branch.
Policy and configuration as code
Mounts, auth methods, roles and policies are defined in Terraform and applied through a reviewed pipeline. A policy for a payments service looks like this:
path "database/creds/payments-readonly" {
capabilities = ["read"]
}
path "kv/data/payments/*" {
capabilities = ["read"]
}
path "sys/leases/renew" {
capabilities = ["update"]
}
One policy per application and environment, with no wildcard on kv/*, is the habit that keeps blast radius small. Our deliverable pages describe the pipeline side in more detail, including secrets management with Vault in CI/CD.
Rolling out without blocking developers
Developers resist a secrets platform when it slows them down. We avoid that in four ways.
- Start with pain, not completeness. Migrate the secrets that are shared, long-lived or sensitive first. Leave low-risk configuration where it is.
- Make the paved road easy. A template and a shared library or sidecar mean a team can onboard a service in an afternoon, not a sprint.
- Run old and new in parallel. Nothing is cut over until reads on the old path stop, so a mistake is a rollback, not an outage.
- Give self-service within guardrails. Teams request a role through a pull request against the Terraform repository. Review is fast because the policy is small and templated.
Tuning: leases, rotation and noise
Dynamic credentials are only useful if lease lengths match reality. Very short leases cause renewal storms and failures when a pod is briefly cut off; very long ones defeat the purpose. We start with moderate durations, watch renewal errors, and adjust per workload. We also decide early who owns rotation for static secrets that Vault cannot generate, such as third-party API keys, because those still need a human process.
Audit logs are voluminous. We ship them to your logging stack, alert on a small set of events (root token use, policy changes, repeated denied requests) and avoid alerting on every read.
Honest limits and failure modes
- Operational burden. Upgrades, unseal behaviour, snapshots and policy hygiene need an owner. Without one, Vault decays into an expensive key-value store.
- Availability coupling. If applications fetch secrets only at startup, an outage can block scaling or deploys. We design caching and fallbacks deliberately.
- Secret sprawl moves, it does not vanish. A secret delivered into an environment variable or a Kubernetes Secret is still exposed to anything that can read that object. Vault reduces lifetime and improves audit; it does not make a compromised pod safe.
- Licensing and forks. Vault’s licence changed in 2023, and the OpenBao fork exists. Check what your legal and procurement teams require.
- Root and break-glass access. These need a documented, tested procedure and alerts, or they become a hidden backdoor.
When not to use Vault
If you run a handful of services on one cloud and your needs are static secrets with IAM-based access, AWS Secrets Manager or Azure Key Vault is usually the better choice. If your only goal is getting secrets into Kubernetes, the External Secrets Operator or Sealed Secrets may be enough. We would rather tell you that than sell you a cluster to maintain.
Working with us
We typically start with a short assessment of where secrets live and what an incident would expose, then deploy a pilot and migrate in waves. Vault pairs naturally with Trivy and Checkov in the pipeline, and with our Kubernetes consulting and managed DevOps work if you want us to keep operating it. To talk it through, book a consultation.
Official documentation: developer.hashicorp.com/vault