I used to think of secret rotation as a “someday” task — something I’d get to once things settled down. Then I inherited a system where a database password hadn’t been changed in over three years, and half the team didn’t even know where the original value had come from. That experience changed how I think about rotation entirely: it’s not a cleanup task, it’s an ongoing discipline.
In this post, I’ll cover why rotation matters, how often to do it, and how I actually automate it so it doesn’t rely on anyone remembering to do it manually.
Why Secret Rotation Matters
Every credential has a “blast radius” — the potential damage if it’s ever compromised. The longer a secret stays valid, the larger that blast radius becomes, because:
- More systems and people may have touched it over time
- The chance it’s been logged, cached, or copied somewhere increases
- Former employees or contractors may retain access longer than intended
- A compromise that goes undetected has more time to cause damage
Rotation limits the window of exposure. Even if a secret does leak, a strict rotation schedule means the attacker’s access has a built-in expiration date.
flowchart TD
A[Secret Created] --> B[In Active Use]
B --> C{Rotation Trigger?}
C -->|Scheduled interval| D[Generate New Secret]
C -->|Suspected leak| D
C -->|Employee offboarding| D
D --> E[Update all dependent systems]
E --> F[Revoke old secret]
F --> G[Audit and log rotation event]
G --> B
How Often Should You Rotate Secrets?
There’s no single universal answer, but here’s the framework I use based on sensitivity:
| Secret Type | Recommended Rotation Interval |
|---|---|
| Root/admin cloud credentials | 30 days, or immediately after any suspected exposure |
| Database passwords | 60–90 days |
| API keys (payment, admin-level) | 30–90 days |
| Read-only or low-risk API keys | 6–12 months |
| TLS/SSL certificates | Before expiry, typically 90 days for automated certs |
| Employee/service account access | Immediately upon role change or offboarding |
I always lean toward shorter intervals for anything tied to money, infrastructure control, or customer data.
Manual Rotation vs. Automated Rotation
Manual rotation works for small teams with a handful of secrets, but it doesn’t scale, and it’s the first process to break down when things get busy. I automate rotation wherever possible using the native capabilities of tools like:
- AWS Secrets Manager — supports automatic rotation with Lambda functions for RDS, Redshift, and custom secrets
- HashiCorp Vault — dynamic secrets that are generated on demand and expire automatically
- Azure Key Vault — rotation policies tied to certificate and key lifecycles
# Example: enabling automatic rotation in AWS Secrets Manager
aws secretsmanager rotate-secret \
--secret-id prod/database/credentials \
--rotation-lambda-arn arn:aws:lambda:us-east-1:123456789012:function:SecretsManagerRotation \
--rotation-rules AutomaticallyAfterDays=30
Dynamic Secrets: The Best Version of Rotation
The strongest form of rotation isn’t rotating a static secret on a schedule — it’s eliminating static secrets altogether. Tools like Vault can generate dynamic, short-lived credentials on demand, valid only for the duration of a session or task, and automatically revoked afterward.
This shifts rotation from “something I remember to do” to “something that’s structurally impossible to forget,” since the credential simply stops existing after its lease expires.
Handling Dependent Systems During Rotation
The hardest part of rotation isn’t generating a new secret — it’s making sure every system that depends on the old one gets updated without downtime. I follow a dual-secret pattern for anything critical:
- Generate the new secret alongside the old one (both valid simultaneously)
- Update all dependent systems to use the new secret
- Verify functionality across all consumers
- Revoke the old secret only after confirming nothing still relies on it
Skipping step 3 is how I’ve seen rotations cause outages — a forgotten cron job or background worker still using the old credential suddenly starts failing.
Rotation as Incident Response
Rotation isn’t just a scheduled task — it’s also a required response the moment a secret is suspected of being exposed, whether that’s from a Git leak, a compromised CI pipeline, or an offboarded employee who had access. In these cases, I rotate immediately rather than waiting for the next scheduled cycle.
Common Mistakes With Secret Rotation
- Rotating secrets without updating all dependent systems first, causing outages
- Treating “removed from code” as equivalent to “rotated” — the old credential is often still valid
- No rotation policy for service accounts, only human user accounts
- Forgetting to revoke the old secret after rotation, leaving two valid credentials indefinitely
- No audit trail showing when and why a rotation happened
Best Practices Checklist
| Practice | Why It Helps |
|---|---|
| Automate rotation where possible | Removes reliance on human memory |
| Use dynamic, short-lived secrets | Eliminates long-lived exposure windows |
| Rotate immediately after suspected leaks | Minimizes blast radius |
| Dual-secret rollover pattern | Prevents downtime during rotation |
| Audit and log every rotation event | Supports compliance and incident review |
If you’re also working on the broader picture of who has access to what, it pairs well with IAM Best Practices for DevSecOps, since rotation and identity management go hand in hand.
FAQs
Does rotating a secret guarantee an attacker loses access? Only if you also revoke the old secret and confirm no systems are still using cached copies of it. Rotation without revocation just adds a second valid credential.
Can I rotate secrets without any downtime? Yes, using a dual-secret rollover pattern where both old and new secrets are valid briefly during the transition, giving you time to update all dependent systems.
Are dynamic secrets better than scheduled rotation? Generally yes — dynamic, short-lived secrets remove the exposure window almost entirely, since there’s no long-lived static credential to leak in the first place.
What triggers should force an immediate rotation, outside of the schedule? A suspected leak, an employee or contractor offboarding, a compromised CI/CD pipeline, or any anomaly in access logs.
Conclusion
Secret rotation isn’t about picking an arbitrary time interval and moving on — it’s about minimizing the window during which a compromised credential can do damage. Automate what you can, move toward dynamic short-lived secrets where possible, and treat rotation as a required incident response step, not just a calendar reminder. Once rotation becomes structural rather than manual, it stops being a task anyone has to remember at all.