Opsgenie shuts down April 2027 - migrate to Pagerly in one click
PagerlyPagerly
← All postsEngineering

Credential Rotation Outages: The On-Call Blind Spot

A credential rotation outage kills auth, not traffic. How to detect, route and fix it before certificate lifetimes shrink again.

Pagerly blog cover: Credential Rotation Outages, The On-Call Blind Spot

A credential rotation outage is the most avoidable kind of production failure and one of the hardest to page correctly. Nothing spikes. Traffic looks normal. Your capacity dashboards are green. Then every write in a subsystem starts returning errors at once, because a secret that two services used to agree on no longer exists on both sides. In August 2026, Cloudflare published a postmortem for exactly this failure in R2, its object storage service: writes failed completely for roughly an hour after a routine credential rotation put the new secret in the wrong environment. If you run on-call for anything with machine identities in it, and everyone does now, this is a failure class worth rehearsing before it finds you.

What makes rotation incidents worth a full teardown is not that one large provider had a bad night. It is that the shape of the failure is identical everywhere, the frequency is about to increase sharply because certificate lifetimes are collapsing, and most on-call rotations are still structured to catch traffic problems rather than identity problems. Below is what happened, why the category is growing, and a concrete playbook for detecting, routing, and resolving these incidents.

What actually happened in the Cloudflare R2 credential rotation outage

According to Cloudflare's own writeup and reporting on it, the incident ran from 21:38 to 22:45 UTC, about one hour and seven minutes. During that window roughly 100 percent of write operations to R2 failed and about 35 percent of reads failed. That asymmetry is a clue in itself, and we will come back to it.

A missing flag, a deleted secret, and a gateway with no way in

The team was rotating credentials used by the R2 Gateway, the API frontend that sits between callers and the backend storage. The new credential was pushed with the wrangler CLI, but the command omitted the flag that targets the production environment. The secret landed in the default development environment instead. From the operator's point of view the rotation had succeeded: the command returned cleanly, the new value existed, and the next step in the runbook was to remove the old credential. So the old credential was deleted.

At that moment production had no valid credential at all. The old one was gone, the new one was somewhere else, and the gateway could no longer authenticate to the storage backend it depends on. Cloudflare's remediation list is instructive: mandatory automated deployment tooling instead of hand-typed commands, updated procedures requiring a second person to validate high-impact actions like credential rotation, and better health checks so the root cause surfaces faster. Two of those three are about the rotation process. One is about detection. That ratio is roughly correct for most teams.

Why the blast radius was total rather than gradual

Traffic failures degrade. Identity failures do not. When a service is overloaded you see a knee in the latency curve, a rising error rate, retries succeeding some of the time, and a period where the system is unhappy but partially working. That gradient is what most alerting thresholds are tuned for, and it is what gives an on-call engineer a few minutes of warning before the page.

An expired or missing credential has no gradient. The credential is valid until the exact instant it is not, and then every call that needs it fails identically. There is no warning period, no partial success to reason about, and no natural throttle. The read and write asymmetry in the R2 case is the exception that proves the rule: reads were partly served from paths that did not need the rotated credential, while writes needed it every single time and therefore failed every single time.

This matters for on-call because it inverts a habit. Engineers are trained to look for what changed in traffic. In a rotation incident nothing changed in traffic. What changed was a control plane action taken deliberately, often by someone who has already closed the terminal and moved on, and possibly in a different team from the one now holding the pager.

Why credential rotation outages are becoming a bigger on-call problem

This category is not new. What is new is the rate. Three forces are pushing rotation incidents from an occasional annoyance into a recurring on-call load.

Certificate lifetimes are collapsing on a published schedule

The industry timetable for shortening public TLS certificate validity is already in motion. Maximum certificate lifetime drops to 200 days on 15 March 2026, then to 100 days on 15 March 2027, and to 47 days on 15 March 2029. Read that as an operational forecast rather than a compliance note. A certificate you renewed once a year becomes one you renew roughly twice a year, then quarterly, then every six weeks.

Every one of those renewals is a change to production. If your renewal process is manual, or semi-automated with a human confirmation step, you have just multiplied the number of times a human will perform a high-blast-radius action by a factor of eight over three years. Processes that work at one repetition per year, largely because someone reads the runbook carefully each time, tend to erode when the same task becomes routine. Familiarity is what removes the flag from the command.

Machine identities have quietly outgrown the inventory

Service accounts, API tokens, signing keys, mutual TLS certificates, database passwords, webhook secrets, cloud provider access keys, and internal service credentials all expire or rotate on their own schedules. Most organisations added these incrementally, one integration at a time, and the list lives in several places at once: a secrets manager, a cloud console, a config repository, and at least one spreadsheet nobody trusts.

Research cited across the certificate management industry puts the scale of the problem plainly. CSC has found that as many as 40 percent of enterprises have experienced an unexpected service outage related to SSL certificates. Keyfactor's 2026 research found that certificate outages typically pull 11 to 20 people into the response. That second number is the on-call signal. An incident that needs a dozen people is almost never technically difficult. It is an incident where nobody knew in advance who owned the thing that broke, so the response strategy became "invite everyone and find out".

The failure crosses team boundaries by design

A rotation is usually performed by whoever owns the secret: a platform team, a security team, an infrastructure engineer working a scheduled maintenance ticket. The failure surfaces wherever the secret is consumed, which is typically a product service owned by someone else. So the person who caused the incident and the person paged for it are frequently in different rotations, different Slack channels, and sometimes different time zones.

Public outage lists from the last few weeks reinforce how ordinary this has become. Notable multi-hour outages at Microsoft Teams, Spotify, Ericsson's telecom core, and Epic Games have all been publicly traced back to a single expired certificate. These are not organisations short of engineering talent. They are organisations where one expiry crossed more boundaries than the response process anticipated.

Why rotation incidents are harder to diagnose than they look

The symptom impersonates an application bug

The first-line symptom of a credential failure is usually a 401 or 403 buried inside a 500 that your own service returns to its callers. By the time it reaches a dashboard it has been wrapped, retried, and relabelled as a generic upstream error. The on-call engineer sees an error rate spike in service A, starts reading service A's recent deploys, finds none, and burns ten minutes before someone thinks to look at what service B thinks of service A's identity.

That ten minutes is the single largest recoverable chunk of time in most rotation incidents. It is recoverable through alert design, not heroics: if an authentication failure rate is a distinct signal rather than a subset of a generic error budget, the page can name the actual problem.

The change that caused it is not in the deploy log

Most incident response starts with "what shipped". Rotations frequently do not ship. They are a console action, a CLI invocation, or a scheduled job in a secrets manager, and none of those necessarily appear in the deployment timeline the responder is looking at. If your incident channel automatically pulls in recent deploys but not recent secret rotations, certificate renewals, or IAM policy changes, you have a blind spot precisely where this class of incident lives.

Rollback is not always available

The instinctive fix is to put the old credential back. Often you cannot, because the rotation deleted it, or because the identity provider will not reissue a revoked secret, or because the old certificate has genuinely expired and no amount of redeployment brings it back. Rotation incidents therefore tend to require forward fixes under time pressure, which is exactly the condition in which a second mistake gets made. This is why the overlap window described below matters more than any detection improvement.

A practical playbook for rotation incidents

Before the rotation: treat it as a deploy, not a chore

Any rotation that can break production deserves the same ceremony as a code change. Announce it in the channel where the on-call engineer actually lives, before it starts, with the service name, the window, and the person doing it. Post it again when it completes. If the rotation is scripted, the script should post these itself so it cannot be forgotten in a hurry.

Two rules do most of the work. First, never delete the old credential in the same operation that installs the new one. Second, require a verification step that proves production is using the new credential before the old one is revoked, and make that verification an observation of production behaviour rather than a reading of the command's exit code. The R2 incident is a clean illustration: the command succeeded, the operator believed the rotation was done, and the only thing that would have caught the mistake was checking what production was actually authenticating with.

During the incident: the first ten minutes

When authentication errors appear across a service boundary, work this order:

  • Ask what rotated, not what deployed. Check secret managers, certificate renewals, IAM changes, and scheduled maintenance tickets for the last 48 hours before you read a single application diff.
  • Establish which side is rejecting. Is the caller failing to present a credential, or is the receiver refusing one it does not recognise? These have different owners and different fixes, and confusing them wastes the most time.
  • Check the environment, not just the value. A secret that exists with the right name and the right contents can still be in the wrong place. Verify where production is reading from, not where you believe it reads from.
  • Pull in the secret owner immediately. Do not escalate broadly. Escalate specifically to whoever performed or scheduled the rotation, because they can confirm in seconds what a debugging session takes an hour to infer.
  • Capture the expiry, not just the error. Note the actual validity window of the credential involved. Half the time it explains the timing exactly, and it is the first thing the postmortem will need.

Notice that four of those five steps are questions about ownership and process rather than about code. That is why routing quality determines resolution time for this class of incident far more than debugging skill does.

After: fix the process, not the person

The action item "be more careful with the production flag" is worthless, and Cloudflare's own remediation avoided it. Useful action items look like: remove the ability to target the wrong environment, add a required second approver for revocation steps, add a health check that distinguishes authentication failures from general errors, and add the credential to an inventory with a named owner and a monitored expiry date.

Designing rotation so it fails safe

Overlap windows are the single highest-value change

The strongest structural defence is to make sure two valid credentials exist at once. Issue the new secret, deploy it, confirm production is using it, and only then revoke the old one, ideally a day or more later. Most identity systems, certificate authorities, and cloud providers support multiple active keys precisely so this is possible. An overlap window converts a total outage into a harmless no-op, because a mistake during the install phase leaves the old credential still working while you fix it.

Where the platform genuinely allows only one active credential, the rotation should be treated as a scheduled maintenance event with an announced window and someone watching, not as a background task.

Automate the rotation, not just the reminder

Many teams automate the calendar reminder and leave the dangerous part manual. That is backwards. The reminder is the cheap half. Automating the actual sequence removes the specific failure mode that took down R2, because a script cannot forget an environment flag that is baked into it. As certificate lifetimes shrink toward 47 days, manual renewal stops being viable anyway, so the automation work is not optional, only early or late.

You cannot rotate what you have not inventoried

Build a list of every credential and certificate that can cause a production failure. For each one record where it lives, which services consume it, when it expires, who owns it, and how it is rotated. Then monitor expiry as a first-class signal with a warning threshold well ahead of the date, so the team gets a ticket rather than a page.

This inventory is also the artefact that fixes the 11-to-20-people problem. When the alert names the owning team, the response is two people, not twelve.

What this means for how you run on-call

Routing beats detection when the fix is known

For most rotation incidents, the fix is not hard once the right person is looking. The expensive part is the interval between the first error and the moment the credential owner is engaged. That interval is a routing problem, and routing is the part of incident response that is most often left informal: a responder guessing which team owns a secret, checking a wiki page that is out of date, and asking in a general channel at 3am.

A schedule that reflects actual ownership, including for platform and security teams that perform rotations, closes most of that gap. If your on-call covers application services but the secret owners have no rotation at all, then every rotation incident outside business hours resolves at the speed of somebody's personal phone number.

Response belongs where the context already is

Rotation incidents are unusually conversational. Someone has to answer "did you rotate anything today", someone has to confirm which environment the value landed in, and someone has to authorise revoking or reissuing a secret. That is a Slack conversation with a paging system attached, not a ticket workflow.

This is the case for keeping incident response in the channel where the engineers already are. A Slack-native on-call tool like Pagerly puts the schedule, the page, the escalation, and the incident channel in the same place, so finding the current owner of a credential is a lookup rather than an archaeology project, and the timeline of who did what is captured as the conversation happens. For a failure class where the answer usually lives in one person's memory of an action they took hours ago, reducing the distance to that person is most of the fix.

Rehearse one rotation failure per quarter

Game days for rotation incidents are cheap because the failure is easy to simulate: revoke a credential in a staging environment and let the on-call rotation practise finding it. The skills being exercised are the ones that are missing in production, namely recognising an identity failure quickly, knowing where the inventory lives, and knowing who to pull in.

Takeaways

The R2 incident is a small outage with a large lesson. One hour and seven minutes, one missing flag, one deleted secret, and a service that had no gradual failure mode to warn anyone. Every organisation running machine identities has the same setup, and the schedule of shrinking certificate lifetimes guarantees more attempts at the same mistake.

  • Never revoke in the same step as you install. Overlap windows turn a total outage into a recoverable error.
  • Verify production behaviour, not command exit codes. A successful command proves nothing about which environment received the value.
  • Make authentication failures a distinct alert. Buried inside a generic error rate, they cost ten minutes of misdirected debugging every time.
  • Put rotations in the incident timeline. If your channel auto-pulls deploys but not secret and certificate changes, you are blind exactly where this failure lives.
  • Inventory every credential with a named owner and a monitored expiry. Ownership clarity is what turns a twelve-person scramble into a two-person fix.
  • Automate the rotation itself. At 47-day certificate lifetimes, manual renewal is not a process, it is a scheduled incident.

The teams that handle this well are not the ones with better engineers. They are the ones who decided that rotating a secret is a production change, gave it the same guardrails as a deploy, and made sure the pager knows who owns it. That is a week of work and it retires an entire category of 3am pages.

Further reading: Cloudflare's postmortem archive, BleepingComputer's report on the R2 rotation error, and Oasis Security's analysis of safer rotation practices.