Loading...

Vault vs External Secrets: how to choose

These two are frequently compared and are not substitutes, which is the single most useful thing to know before choosing. Vault is a secret store: it holds secrets, issues dynamic credentials, and enforces policy on access. External Secrets Operator holds nothing — it is a Kubernetes controller that reads from a backend and materialises the result as a native Kubernetes Secret.

That backend is very often Vault. "Vault vs ESO" usually turns out to be "how should Kubernetes consume Vault", and ESO is one valid answer to it. The others are HashiCorp's own Vault Secrets Operator, the Vault Agent injector sidecar, or the application talking to Vault directly.

The genuine trade-off is where the secret ends up. ESO writes a Kubernetes Secret, which means anything with read access to that namespace can read it, and it sits in etcd. Direct Vault integration keeps the secret out of the Kubernetes API and supports short-lived dynamic credentials, at the cost of the application or a sidecar knowing about Vault.

What each one actually is

VaultExternal Secrets Operator
CategorySecret store and identity brokerSynchronisation controller
Stores secretsYes — it is the source of truthNo — reads from a backend you already have
Dynamic credentialsYes: short-lived database, cloud and PKI credentials issued on demandNo — it syncs whatever the backend holds
Where the secret landsIn the app, a sidecar, or a mounted file; not necessarily in etcdA native Kubernetes Secret, stored in etcd
Backends supportedN/A — it is the backendVault, AWS Secrets Manager, Azure Key Vault, GCP Secret Manager and many more
Operational costReal: unsealing, HA, upgrades, policy and auditLow: one controller, no state of its own

The pattern most teams end up with

A common and defensible setup: a cloud provider's secret manager or Vault as the source of truth, ESO syncing the subset that Kubernetes workloads need, and the applications reading ordinary environment variables or files. Nothing in the application knows about the secret backend, which keeps the code portable and the onboarding simple.

Move away from that pattern when you need what only dynamic credentials give you — a database password that exists for an hour and is unique per pod, so a leaked credential is worth almost nothing and revocation is automatic. That requires integrating with Vault properly, through the Vault Secrets Operator, the agent injector, or the application itself. It is more work, and for high-value databases it is usually the right work.

Frequently asked questions

Can I use both together?

Yes, and it is the most common production arrangement. Vault is the source of truth and the policy engine; ESO projects the static secrets that workloads need into Kubernetes. Use direct Vault integration for the credentials that should be short-lived and per-workload, and ESO for the ones that are genuinely static, like a third-party API key.

Is putting secrets in Kubernetes Secrets safe?

Acceptable with care, and worse than not doing it. Enable encryption at rest for etcd, restrict RBAC on Secrets to the namespaces that need them, and remember anyone who can create a pod in a namespace can usually read its secrets. If a secret is valuable enough that this bothers you, that is the signal to use dynamic short-lived credentials instead of protecting a static one better.

Do I need Vault if my cloud has a secret manager?

Often not. AWS Secrets Manager, Azure Key Vault and Google Secret Manager cover storage, rotation and IAM-based access well, and cost far less operational effort than running Vault. Vault earns its keep when you need dynamic credentials across many systems, PKI issuance, encryption as a service, or a single secret plane spanning clouds and on-premises. Running Vault to store static strings in one cloud is usually over-engineering.

What is the difference between ESO and HashiCorp's Vault Secrets Operator?

ESO is backend-agnostic — one controller, many providers — which matters if you use more than one secret store or expect to change. VSO is HashiCorp's own and integrates more deeply with Vault-specific features, including dynamic secrets and their lifecycle. Choose ESO for breadth and a consistent interface, VSO when you are all-in on Vault and want its advanced capabilities.