Regularly rotating credentials — even without a known compromise — limits the impact window of any undetected exposure. This guide covers building a practical, sustainable rotation process.
Why Rotate Without a Known Compromise
Credentials can be exposed in ways you're never aware of — a log that briefly captured a secret before you noticed and fixed it, a former team member's laptop, an undetected breach — regular rotation limits how long any such undetected exposure remains exploitable.
What to Rotate
- Database passwords
- API keys (both your own service's issued keys and third-party service credentials you use)
- SSH keys, particularly for shared/service accounts
- SSL/TLS certificates (though these often auto-rotate via Let's Encrypt automation)
- Encryption keys for data at rest
Setting a Rotation Schedule
Different credential types warrant different rotation frequencies based on sensitivity and exposure risk — highly sensitive production database credentials might warrant more frequent rotation than a lower-risk internal tool's API key; there's no single universal schedule.
Building Rotation Into Your Deployment Process
Rather than treating rotation as a separate, disruptive manual event, integrate it into your normal deployment workflow where feasible — a credential rotation that requires the same deployment process as any other configuration change is far more likely to actually happen regularly.
Using a Secrets Manager to Simplify Rotation
See Docker Secrets Management: Handling Sensitive Data in Containers and dedicated secrets management tools — a proper secrets manager can significantly simplify rotation, sometimes supporting automated rotation directly, compared to manually updating scattered environment variables across multiple systems.
Database Password Rotation Example
ALTER USER myapp_user WITH PASSWORD 'new_generated_password';
Update the database credential, then update your application's configuration/secrets store to match, and restart/redeploy the application to pick up the new credential — coordinate timing to avoid a gap where old and new don't match.
Avoiding Downtime During Rotation
For zero-downtime rotation, some systems support having both old and new credentials valid briefly during a transition window — check whether your specific service supports this pattern; otherwise, plan rotation during a brief acceptable maintenance window.
Rotating Third-Party API Keys
For external services you depend on, check whether they support generating a new key while the old remains valid briefly (allowing graceful transition) versus immediate old-key invalidation — plan your rotation process accordingly for each specific service's supported approach.
Tracking Rotation Status
Maintain a simple record of what credentials exist, their last rotation date, and next scheduled rotation — without this tracking, rotation schedules tend to slip or be forgotten entirely over time.
Automating Where Possible
See How to Set Up systemd Timers as a Cron Alternative — for credentials with straightforward rotation processes, automate the rotation itself rather than relying on manual, schedule-dependent human action, which is more prone to being deferred or forgotten.
Common Errors
Rotation breaks production due to a missed reference to the old credential — before rotating, audit all locations where a given credential is actually used/referenced; a rotation that misses one config file or service can cause a partial, confusing outage.
Continue Reading
- How to Manage Environment Variables and Secrets on a VPS
- How to Secure API Keys and Prevent Credential Leakage
- Docker Secrets Management: Handling Sensitive Data in Containers
Browse more articles in Advanced Security & Compliance.