Comparison: Secrets Management¶
Category: Security Last meaningful update consideration: 2026-03 Verdict (opinionated): HashiCorp Vault for multi-cloud and complex secret lifecycle needs. AWS Secrets Manager for AWS-only shops wanting simplicity. SOPS for git-encrypted secrets in small teams. Sealed Secrets for K8s-native encrypted secrets in git.
Quick Decision Matrix¶
| Factor | HashiCorp Vault | AWS Secrets Manager | Sealed Secrets | SOPS |
|---|---|---|---|---|
| Learning curve | High | Low | Low | Low |
| Operational overhead | High (self-hosted) / Medium (HCP) | None (AWS-managed) | Low | None |
| Cost at small scale | Free (OSS) / HCP ~$0.03/hr | $0.40/secret/month | Free | Free |
| Cost at large scale | HCP moderate / OSS ops cost | Moderate ($0.40/secret + API calls) | Free | Free |
| Community/ecosystem | Massive | AWS ecosystem | Medium (Bitnami/K8s) | Large |
| Hiring | Growing | Easy (AWS) | K8s engineers | Easy |
| Dynamic secrets | Yes (database, cloud creds) | No | No | No |
| Encryption as a service | Yes (Transit engine) | No (KMS is separate) | No | No |
| Rotation | Automatic (lease-based) | Automatic (Lambda-based) | Manual (re-seal) | Manual (re-encrypt) |
| K8s integration | CSI driver, Agent Injector, ESO | CSI driver, ESO | Native (SealedSecret CRD) | Via CI/CD pipeline |
| GitOps compatible | Via External Secrets Operator | Via External Secrets Operator | Yes (encrypted in git) | Yes (encrypted in git) |
| Multi-cloud | Yes | No | Yes (K8s-only) | Yes |
| Access control | Fine-grained policies | IAM policies | K8s RBAC | File-level encryption |
| Audit logging | Comprehensive | CloudTrail | K8s audit log | Git history |
When to Pick Each¶
Pick HashiCorp Vault when:¶
- You need dynamic secrets (auto-generated database credentials, cloud IAM roles, PKI certificates)
- Multi-cloud secret management is required — Vault works everywhere
- You need encryption as a service (Transit engine for application-level encryption)
- Complex access policies are required (path-based, identity-based, time-limited)
- Certificate management (PKI engine) is part of your security requirements
- You have a platform team that can operate Vault or budget for HCP Vault
Pick AWS Secrets Manager when:¶
- You are 100% AWS and want the simplest possible secret storage
- Automatic secret rotation (RDS credentials, etc.) via Lambda is attractive
- IAM-based access control is your existing authorization model
- You want native integration with ECS, Lambda, and other AWS services
- You do not need dynamic secrets, encryption as a service, or multi-cloud
Pick Sealed Secrets when:¶
- You want to store encrypted secrets in git alongside your K8s manifests
- Your team uses GitOps and needs secrets in the same repo as deployments
- Simplicity matters — one controller, one CRD,
kubesealCLI - You do not need dynamic secrets or complex rotation policies
- Your secret count is manageable (dozens, not thousands)
Pick SOPS when:¶
- You want to encrypt secret values in YAML/JSON files while keeping keys visible
- You need to encrypt secrets for multiple backends (AWS KMS, GCP KMS, Azure Key Vault, age, PGP)
- Your secrets live in config files (not just K8s Secrets) and you want them in git
- You want a simple CLI tool without running any server-side component
- Your team reviews secret changes in PRs (SOPS shows which keys changed, not the values)
Nobody Tells You¶
HashiCorp Vault¶
- Vault is operationally demanding. The unsealing process, HA setup, storage backend management (Raft or Consul), and upgrade procedures require dedicated expertise.
- Auto-unseal (using cloud KMS) is practically required. Manual unsealing with Shamir key shares is not operationally sustainable for production.
- The IBM acquisition of HashiCorp and BSL license change means Vault's open-source future is less certain. OpenBao exists as a fork but is early.
- Dynamic secrets are Vault's killer feature but require careful lease management. If applications do not renew leases, credentials expire mid-operation. If they lease too long, the security benefit is reduced.
- The Agent Injector (sidecar that injects secrets into pods) works but adds latency to pod startup and consumes resources. The CSI driver or External Secrets Operator are alternatives with different trade-offs.
- Vault policies use their own path-based ACL language. It is logical but is yet another policy language to learn alongside K8s RBAC, IAM, etc.
- Disaster recovery for Vault is critical and often under-tested. If Vault goes down, every application that relies on dynamic secrets is affected. Ensure secret caching at the application level.
AWS Secrets Manager¶
- The cost model ($0.40/secret/month + $0.05/10,000 API calls) adds up. 100 secrets = $40/month before API calls. For static secrets, SSM Parameter Store (SecureString) is cheaper.
- Rotation requires a Lambda function. AWS provides templates for RDS, but rotating custom secrets requires writing your own Lambda. This Lambda becomes another thing to maintain and monitor.
- Cross-account secret sharing requires resource-based policies and is not as straightforward as it should be.
- There is no built-in versioning UI. Secret versions exist but navigating them in the console is clunky.
- If you accidentally delete a secret, there is a recovery window (7-30 days), but applications fail immediately. The recovery window is for the secret metadata, not for preventing outages.
- AWS Systems Manager Parameter Store (SecureString) is often "good enough" and cheaper. Many teams start with Secrets Manager and realize they should have used Parameter Store.
Sealed Secrets¶
- The Sealed Secrets controller generates a key pair. If you lose the private key (controller pod deleted, cluster rebuilt), you CANNOT decrypt existing SealedSecrets. Back up the key or lose your secrets.
- SealedSecrets are encrypted for a specific cluster's public key. You cannot use the same SealedSecret manifest across dev/staging/prod without re-encrypting for each cluster.
- Secret rotation means creating a new SealedSecret, which generates a new K8s Secret. The old secret value persists in git history. This is technically a secret leak in git — mitigated by the encryption, but the ciphertext is visible.
- The
kubesealCLI requires access to the cluster (or the public cert) to encrypt. CI/CD pipelines that create SealedSecrets need cluster access at encryption time. - Bitnami's maintenance of Sealed Secrets has been consistent but it is a single-maintainer-level project. The blast radius of an unmaintained dependency in your secrets management chain is high.
SOPS¶
- SOPS encrypts values but leaves keys visible. This means file structure, key names, and the number of secrets are visible in git — only values are encrypted. For some threat models, this metadata leakage matters.
- Key rotation (re-encrypting with a new KMS key) requires running
sops updatekeyson every encrypted file. For large teams with many files, this is tedious. - SOPS does not have a server component. There is no centralized audit of who decrypted what. Your audit trail is "who ran sops -d in CI/CD."
- Multi-cloud KMS support is SOPS's strength but also its complexity. Managing KMS keys across AWS, GCP, and Azure adds IAM configuration for each provider.
- SOPS files in git create merge conflicts that are hard to resolve because the encrypted values are opaque. Small changes to encrypted files produce large diffs.
- SOPS works best with age (modern, simple) or cloud KMS. PGP key management is a pain and should be avoided.
Migration Pain Assessment¶
| From → To | Effort | Risk | Timeline |
|---|---|---|---|
| Env vars / hardcoded → Vault | High | Medium | 2-4 months |
| Env vars → AWS Secrets Manager | Low-Medium | Low | 1-3 weeks |
| AWS Secrets Manager → Vault | Medium | Medium | 1-2 months |
| Sealed Secrets → Vault (via ESO) | Medium | Low | 2-4 weeks |
| SOPS → Vault | Medium | Low | 2-4 weeks |
| Vault → AWS Secrets Manager | Medium | Low | 1-2 months |
| K8s Secrets (plain) → Sealed Secrets | Low | Low | 1-2 days |
The highest-value migration is from hardcoded/env-var secrets to any managed solution. Start there. The choice between managed solutions is less critical than getting secrets out of code and config maps.
The Interview Answer¶
"Vault is the gold standard for secrets management because of dynamic secrets — generating short-lived, unique credentials per application instance eliminates the entire class of leaked credential incidents. But Vault is complex to operate, so for AWS-only teams, Secrets Manager with IAM-based access is pragmatic and simple. For teams doing GitOps, SOPS or Sealed Secrets let you store encrypted secrets in git alongside manifests. The key principle is that secrets should be external to application code, rotated automatically, and accessed via identity-based policies — not shared passwords in environment variables."
Cross-References¶
- Topic Packs: Secrets Management, HashiCorp Vault, AWS IAM
- Related Comparisons: Policy Engines, IaC Tools