All posts
Developers·· 11 min read

Secrets Management for Fintech: Vault vs AWS SM vs Doppler

One leaked .env file. Fourteen minutes. $23,000 in fraudulent API calls. Here's how we rebuilt our secrets infrastructure from the ground up.

By AtlasForge Financial Editorial
Secrets Management for Fintech: Vault vs AWS SM vs Doppler

One leaked .env file. Fourteen minutes of attacker dwell time. $23,000 in fraudulent API calls before our anomaly detection caught the spike. That incident — which we'll walk through in detail — is what ended long-lived credentials at AtlasForge Financial and forced us to actually think about secrets management as a first-class engineering discipline, not an afterthought you handle by rotating a key once a quarter and calling it done.

This post is for fintech engineering teams who are past the startup phase but still running on infrastructure that was stitched together fast. We'll compare three tools — HashiCorp Vault, AWS Secrets Manager, and Doppler — across the dimensions that matter in regulated environments: rotation automation, audit density, blast-radius containment, and operational overhead. We'll also share the architectural decisions we made after the incident, including the zero trust secrets model we now enforce across every service in our stack.

The Incident That Changed Everything

In March 2026, a junior contractor on a short-term engagement accidentally pushed a .env file to a public GitHub fork of an internal repository. The file contained a long-lived AWS IAM access key with SecretsManagerReadWrite permissions, a Stripe restricted key scoped to our sandbox environment (which, unfortunately, had broader permissions than intended), and a plaintext database connection string for our staging PostgreSQL instance.

GitHub's secret scanning flagged the push within 47 seconds and sent us an alert. But the attacker — almost certainly an automated credential harvester — had already cloned the repo. By the time we revoked the AWS key manually (a process that took us an embarrassing 11 minutes because the runbook was stale), the attacker had enumerated 214 secrets from our Secrets Manager, exfiltrated 6 of them including a production payment processor webhook signing key, and initiated $23,000 in fraudulent webhook replay attempts against our sandbox-adjacent infrastructure.

The root causes were textbook:

  1. Long-lived credentials with no automatic expiry
  2. Overly broad IAM permissions ("we'll tighten this later" never came)
  3. No break-glass revocation automation
  4. Secrets in version control — even "just for local dev"
  5. A staging environment that shared secrets with production-adjacent services

We brought in an external incident response firm. Their first question: "What is your mean time to rotate after a suspected compromise?" We didn't have a number. We had a Confluence page.

Evaluating the Landscape: What We Actually Tested

After the incident, we ran a 10-week evaluation of three tools against our specific requirements. We are a SOC 2 Type II shop with PCI-DSS Level 2 obligations, a hybrid AWS/on-prem stack, and roughly 340 distinct secrets across 22 microservices. Our evaluation criteria:

  • Rotation automation — Can it rotate without service restart?
  • Dynamic secrets — Does it generate ephemeral credentials per-request?
  • Audit log density — Can we answer "who read what and when" for an examiner?
  • Blast-radius tooling — Can we isolate a compromised service in under 60 seconds?
  • Operational overhead — What does it cost in engineering hours per month to maintain?

HashiCorp Vault

Vault remains the most powerful option and the most operationally demanding. The dynamic secrets engine — particularly for PostgreSQL, AWS IAM, and PKI — is genuinely excellent. In our testing, we configured Vault to issue database credentials with a 15-minute TTL for our most sensitive services. An attacker who exfiltrates one of those credentials has a very narrow window.

The blast-radius story is strong: Vault's token accessor system lets you revoke a specific service's entire secret tree with a single API call. We tested a full "scorched earth" revocation for a compromised service in 8 seconds.

The operational cost is real, though. Vault HA with Raft storage on three nodes, proper unsealing with AWS KMS, Vault Agent sidecars on every ECS task — we estimated 0.4 FTE to operate correctly. If you're a team of six engineers, that's meaningful. Vault also had a rocky period in 2023 when HashiCorp moved to the Business Source License (BSL), which concerned some of our compliance team. OpenBao exists as the community fork, but we weren't ready to bet production on a fork with 18 months of independent history.

AWS Secrets Manager

For teams already deep in AWS, Secrets Manager is the path of least resistance — and it's meaningfully better than it was three years ago. Native rotation via Lambda, tight IAM integration, and CloudTrail audit logs that satisfy most SOC 2 auditors out of the box.

The rotation story has improved. As of early 2026, AWS supports rotation schedules as granular as 4 hours for supported secret types (RDS, Redshift, DocumentDB, and custom Lambda targets). For our RDS PostgreSQL instances, rotation works without downtime using the dual-user rotation strategy that AWS documents well.

The weaknesses: no dynamic secrets (you're rotating, not generating per-request), cross-account access gets complicated fast, and the blast-radius tooling is weaker — revoking a specific service's access requires IAM policy changes, which have eventual-consistency delays that made us nervous.

Cost: at our scale (~340 secrets, ~4 million API calls/month), we're paying approximately $340/month. Not expensive, but not free.

Doppler

Doppler is the dark horse and the tool we'd recommend to teams under 20 engineers who need to stop shipping secrets in environment variables without hiring a platform engineer. The developer experience is genuinely the best of the three — the CLI, the GitHub Actions integration, the per-environment secret inheritance model. Setup time from zero to production-grade was 2 days for us versus 3 weeks for Vault.

The limitations are real for our use case: no dynamic secrets, the audit log granularity is good but not as dense as CloudTrail + Secrets Manager for a PCI examiner, and Doppler is a SaaS dependency — you're trusting their infrastructure with your secrets. For some fintech compliance postures, that's a non-starter. For others, Doppler's SOC 2 Type II and ISO 27001 certifications are sufficient.

Our verdict: Vault for services requiring dynamic secrets and sub-minute blast-radius containment. AWS Secrets Manager as the default for everything else. Doppler for local developer environments only — no production secrets.

Zero Trust Secrets: The Architecture We Built

The principle is simple: no service should hold a credential longer than it needs it, and no credential should grant more than the minimum permissions for a single operation. Implementation is where it gets interesting.

Our current model across the AtlasForge Financial platform:

Principle 1 — All production credentials are dynamic or short-lived. Vault issues database credentials with 15-minute TTLs. AWS IAM roles use instance profiles and task roles — no access keys. Payment processor API keys rotate every 24 hours via a custom Vault plugin we built against the Stripe API.

Principle 2 — Secret access is logged at the read level, not just the write level. This is the thing most teams miss. AWS CloudTrail logs GetSecretValue calls. Vault logs every token accessor interaction. We ship both to a centralized SIEM (Elastic) and alert on any service reading a secret it has never read before (new-accessor anomaly detection).

Principle 3 — Blast radius is pre-computed, not improvised. For every service, we maintain a "secret dependency graph" — a machine-readable map of which secrets it touches and which downstream services would be affected by rotation. When an incident starts, we run a script that outputs the exact revocation sequence. Our current mean time to isolate a compromised service is 23 seconds.

Principle 4 — Developers never touch production secrets. Local development uses Doppler with a dev environment that contains only synthetic data and sandbox credentials. There is no path from a developer laptop to a production secret. This is enforced by IAM boundaries, not just policy.

Credential Rotation Strategies That Actually Work

Rotation is where teams get tripped up. There are three meaningful strategies:

  1. Scheduled rotation — Rotate on a calendar (daily, weekly). Simple, predictable, but creates a window between rotation and a compromise that was already in progress. AWS Secrets Manager's Lambda-based rotation is the easiest implementation here.

  2. Event-driven rotation — Rotate when a trigger fires: a build pipeline completes, a deployment succeeds, a suspicious API call is detected. More complex but dramatically reduces dwell-time risk. We use this for payment processor credentials.

  3. Dynamic issuance (no rotation needed) — Vault's best feature. Credentials are generated per-request and expire automatically. There is nothing to rotate because nothing persists. This is the gold standard for database credentials and PKI.

The mistake most teams make is treating rotation as a binary (rotated / not rotated) rather than a continuous risk function. A credential rotated every 90 days has a maximum dwell-time exposure of 90 days. A credential with a 15-minute TTL has a maximum exposure of 15 minutes. The math is not subtle.

For teams on AWS, the Federal Reserve's guidance on third-party risk management and the CFPB's supervision framework both increasingly treat credential hygiene as a vendor risk management question — meaning your rotation practices may come up in examination, not just your own audits.

What PCI-DSS 4.0 Actually Requires

PCI-DSS 4.0, which became the mandatory standard in March 2024, introduced Requirement 8.3.9: passwords and passphrases used by system/application accounts must be changed at least once every 12 months, or "if there is any suspicion or knowledge of compromise." That 12-month floor is a ceiling you should be well below.

More relevant for secrets management is Requirement 8.6.1, which mandates that all system accounts and application/service accounts are managed by policies and procedures that include defined access period, periodic review, and disabling or removal of accounts when no longer required.

The practical implication: every secret in your system needs an owner, a review cadence, and an automated deprovisioning path. Vault's lease system handles this natively. Secrets Manager requires you to build it. Most teams haven't built it.

The PCI Security Standards Council documentation is worth reading in full for Requirement 8. The examiner questions have become significantly more specific about automation evidence since 4.0.

What We'd Do Differently From Day One

If we were starting AtlasForge Financial's infrastructure today, knowing what we know:

  • Never issue long-lived credentials — IAM roles everywhere, Vault dynamic secrets for databases from week one
  • Treat the .env file as a legacy format — Use Doppler or AWS SSM Parameter Store even in development
  • Build the revocation runbook before you need it — Automate it, test it quarterly
  • Scope secrets by service, not by team — One service, one IAM role, one set of Vault policies
  • Log reads, not just writes — The incident that matters is when someone reads your secrets, not when they change them
  • Make secret access auditable to a specific deploy — Link Vault tokens to ECS task ARNs or Kubernetes pod identities so you can answer "which version of which service read this secret"

None of this is exotic. It's the infrastructure equivalent of wearing a seatbelt — obvious in retrospect, embarrassing to have skipped.

Putting It Into Practice with AtlasForge

If you're building on top of the AtlasForge Financial API, secrets management isn't optional — it's part of the integration contract. Our API enforces short-lived token issuance at the SDK level, and our webhook signing infrastructure rotates keys automatically every 24 hours with a 2-hour overlap window to prevent replay failures during rotation. Detailed integration guidance, including our recommended Vault policy templates and AWS IAM boundary configurations, lives in the developer documentation.

For teams using Ember360 to power their financial analytics layer, we've published a reference architecture for secrets injection in containerized environments that pairs Ember360's SDK with Vault Agent in sidecar mode — zero secrets in environment variables, full audit trail, rotation-transparent to the application code. You can find the pattern in our engineering blog or reach us directly through the contact page if you want to walk through your specific stack. The incident that cost us $23,000 and two weeks of engineering time was entirely preventable. We'd rather help you skip that chapter entirely.

Further reading

Ready to build on AtlasForge?

Get sandbox API keys in 60 seconds — or install the Safe to Spend 365 app.