Independent downtime-cost research, read by SRE and reliability teams.Sponsor this site →

Case Study

Google Cloud June 2025: an unflagged feature, a policy with blank fields, and a global 3-hour authorization failure

On 12 June 2025, a policy change containing unintended blank fields reached an unguarded code path in Service Control, Google Cloud's API authorization and quota layer, and sent it into a global crash loop. Because the policy data replicated everywhere within seconds, authorization failed across dozens of Google Cloud and Workspace products at once for roughly 3 hours, cascading to Cloudflare, Spotify, Discord, and OpenAI. It is the clearest recent example of how a single global control plane turns a small change into a worldwide outage in seconds.

By Oliver Wakefield-Smith · Published September 2026 · Sources: Google Cloud incident report (status.cloud.google.com), contemporaneous reporting (The Register, ThousandEyes).

Incident window

~3 hrs

10:49 to 13:49 PDT, 12 Jun 2025

Scope

Global

Service Control, every region

Disclosed cost

None

Google published no figure

Timeline

What happened

TimeEvent
29 May 2025A new quota-policy check is added to Service Control. It ships without error handling and without feature-flag protection, so it is inert but unguarded in production
~10:49 PDT, 12 JunA quota policy change containing unintended blank fields is inserted and replicates globally within seconds; the unguarded code path hits a null pointer and Service Control begins crash-looping in every region
First minutesAPI authorization fails across Google Cloud and Workspace; dozens of products return errors more or less simultaneously worldwide
~10:51-11:00 PDTGoogle engineers identify the root cause quickly and begin work on a fix, deploying a red-button to bypass the offending policy check
~12:48 PDTMost regions recover as the bypass rolls out (roughly 2 hours after onset)
Up to ~13:29 PDTus-central1 lags: without randomized exponential backoff the recovery causes a herd effect, so Google throttles task creation and routes to multi-regional databases, fully resolving it up to ~2h 40m after onset
13:49 PDT, 12 JunIncident declared resolved; overall window roughly 3 hours

Times anchored to Google's published incident report, which gives the impact window in PDT. Most regions recovered by roughly 12:48 PDT; us-central1, the slowest region, took up to about 2 hours 40 minutes because Service Control lacked randomized exponential backoff. Intermediate steps are approximate where Google did not publish a minute-by-minute log.

Affected Services

Selected services and companies impacted

The list below is illustrative, not exhaustive. Service Control gates authorization for Google APIs, so its failure radiated to dozens of Google's own products and to third parties that depend on Google Cloud.

Company / serviceObserved impact
BigQuery / Cloud Storage / Compute EngineAPI calls rejected as authorization checks failed globally
Firestore / Vertex AI / Cloud SQLManaged data and AI services returned errors for the incident window
Gmail / Google Drive / Google MeetWorkspace products degraded for a global user base
Cloudflare Workers KVCloudflare's key-value store, which relied on Google Cloud, failed and took dependent Cloudflare features down
SpotifyPlayback and app functions disrupted during the window
DiscordConnectivity and messaging degraded
OpenAIServices reported disruption alongside other GCP-dependent platforms

Root Cause

An unguarded feature and a policy with blank fields

Per Google's incident report, the seed was planted on 29 May 2025, when a new quota-policy check was added to Service Control. That change shipped with two gaps: it had no error handling for malformed input, and it was not protected by a feature flag. Google's own remediation notes that feature flags are used to enable features gradually, region by region, and that if this one had been flag-protected the fault would have been caught in staging. Instead the code sat inert but unguarded in production.

On 12 June, a quota policy change containing unintended blank fields was inserted. Service Control exercised its quota checks against that policy in each regional datastore, hit the missing fields on the new unguarded path, and dereferenced a null pointer. Rather than reject the bad input, the process crashed and entered a crash loop. Because the policy data was replicated globally within seconds, the same crash hit every region almost simultaneously, which is why authorization failed worldwide rather than in one region.

Detection was fast: engineers identified the cause within minutes and deployed a red-button to bypass the offending policy check, and most regions recovered in about two hours. Recovery lagged in us-central1, however, because Service Control did not have randomized exponential backoff, so as tasks restarted they overloaded the underlying infrastructure in a herd effect. Google throttled task creation and routed traffic to multi-regional databases to bring the region back safely, which is what stretched full resolution there to up to about 2 hours 40 minutes.

Economic Impact

No disclosed figure, so model the exposure instead

Google did not publish a cost for this outage, and, unlike the AWS October 2025 event that CyberCube priced at $38 million to $581 million in insured losses, no independent analyst issued a specific insured-loss estimate for the June 2025 Service Control incident. Rather than invent a headline number, the honest measure is the exposure: a global, roughly 3-hour authorization failure across dozens of Google Cloud and Workspace products during a weekday business window, plus the downstream hit to Cloudflare, Spotify, Discord, and OpenAI.

For the customers hit, the loss was not Google's SLA credit. GCP returns a percentage of the affected service's monthly fee, never a percentage of your revenue, so even a maximum credit is a fraction of the business loss from the same window. See our SLA credit asymmetry analysis for why the credit rarely covers the damage.

To translate the event into your own numbers, the downtime cost calculator applies your revenue and architecture to a 3-hour outage. A business running $100,000 per day of GCP-dependent revenue would face roughly $12,500 of exposure across a 3-hour total outage before any failover mitigation.

Architectural Lessons

A global control plane insulates no region

The June 2025 incident is a clean illustration that a global control plane is a concentration risk for everything behind it. Service Control exists so that authorization and quota decisions are consistent everywhere, but that also means one bad policy replicated globally can fail authorization in every region at once. Running in multiple GCP regions gave no protection here, because all of them shared the same control plane and the same bad data.

Three lessons recur. First, new code in a control plane must fail safe: a missing-field policy should have been rejected, not allowed to crash-loop the process. Second, feature flags exist to catch exactly this class of fault in staging and to limit blast radius by enabling a change region by region; skipping them turned a staging-catchable bug into a global outage. Third, recovery mechanics matter as much as the fix: without randomized exponential backoff, the restart itself became a second incident in us-central1. Google's remediation committed to all three.

For how this event compares with the AWS us-east-1 and Azure Front Door failures of 2025, see the AWS vs Azure vs GCP outage comparison and the full GCP outage history. The downstream Cloudflare failure is covered in the Cloudflare outage history. For the cost-benefit math on multi-region and failover, see our business case builder.

Frequently Asked

Common Questions

What caused the Google Cloud outage of 12 June 2025?
A quota-policy check added to Service Control on 29 May 2025 had no error handling and no feature-flag protection. On 12 June a policy change with unintended blank fields reached that path and triggered a null-pointer crash loop. The policy replicated globally within seconds, so Service Control crash-looped in every region at once and API authorization failed worldwide.
How long did the June 2025 GCP outage last?
About 3 hours overall, from 10:49 to 13:49 PDT on 12 June 2025. Most regions recovered by around 12:48 PDT (roughly 2 hours), but us-central1 was the slowest, taking up to about 2 hours 40 minutes because Service Control lacked randomized exponential backoff and the recovery overloaded infrastructure in a herd effect.
How much did the June 2025 Google Cloud outage cost?
Google disclosed no figure and no analyst published a specific insured-loss estimate, unlike the AWS October 2025 event that CyberCube priced at $38 million to $581 million. The documented impact is a global 3-hour authorization failure across dozens of Google Cloud and Workspace products, cascading to Cloudflare, Spotify, Discord, and OpenAI; model your own revenue and architecture rather than trusting a headline number.
Which services were affected?
Dozens of Google Cloud and Workspace products, including BigQuery, Cloud Storage, Compute Engine, Firestore, Vertex AI, Gmail, and Google Drive, plus third parties dependent on Google Cloud, most visibly Cloudflare Workers KV, Spotify, Discord, and OpenAI.
How was it different from the AWS and Azure 2025 outages?
All three were control-plane failures. GCP on 12 June was an unflagged code path plus a policy with blank fields that crash-looped Service Control globally within seconds, over about 3 hours. AWS on 20 October was a DynamoDB DNS race condition that cascaded into EC2 over roughly 15 hours in us-east-1. Azure on 29 October was a configuration change that bypassed validation and reached the global edge fleet over about 8.5 hours.
What is the architectural lesson?
New code in a global control plane needs the same guardrails as risky application code: error handling that fails safe, feature-flag protection so a change is enabled region by region and caught in staging, and randomized exponential backoff so recovery does not create a herd effect. Google committed to all three. For customers, a provider's global control plane is a concentration risk no in-provider multi-region deployment can insulate you from.

Related

Updated 2026-04-27