IL-0284 Cloudflare · 2025-06-12database
Workers KV 의 저장소 인프라가 멈춰 KV 에 기대는 Access, WARP, Gateway, 대시보드 같은 Cloudflare 서비스 여럿이 2시간 28분 동안 전 세계에서 실패했다
Workers KV 는 전 세계 거점마다 따로 도는 서비스로 만들었지만, 데이터의 기준이 되는 중앙 저장소 하나에 기대고 있었다. 이 저장소의 일부는 서드파티 클라우드 공급자가 받치고 있었다. Cloudflare 는 자기 플랫폼 위에 서비스를 짓는다는 원칙에 따라 많은 제품이 설정, 인증, 자산 전달을 Workers KV 에 맡겼다. Workers KV 는 데이터 일관성 문제를 막고 데이터 저장 위치 요건을 지원하려고 백엔드를 Cloudflare R2 로 옮기는 중이었고, 그 과정에서 저장소 공급자 하나를 뺐다. Cloudflare 는 이 전환 과정에 빈틈이 있었고 이번 장애가 그 빈틈을 드러냈다고 밝혔다.
2025년 6월 12일 이 공급자에 장애가 나자 KV 네임스페이스의 콜드 읽기와 쓰기가 전부 멈췄다. 17:52 UTC 에 WARP 팀이 새 기기 등록 실패를 보고 장애를 선언했고, 18:05 에 Access 와 여러 서비스의 SLO 알림이 울렸다. 18:06 에 팀은 Workers KV 를 쓸 수 없게 된 것이 공통 원인임을 알고 서비스별 장애를 하나로 합쳐 P1 으로 올렸고, 18:21 에 영향의 크기를 보고 P0 으로 올렸다. Access, Gateway, WARP, 대시보드, Challenges 와 Turnstile, Workers AI, Stream, Pages, Queues 같은 제품이 KV 를 통해 함께 실패했고, KV 와 같은 저장소를 쓰는 Durable Objects 와 D1 도 오류를 냈다. 이 연쇄로 피해 범위가 크게 넓어졌다. 데이터는 잃지 않았고 Magic Transit, Magic WAN, DNS, Cache, 프록시, WAF 는 직접 영향을 받지 않았다.
팀들은 저장소가 계속 멈출 때를 대비해 Access 를 다른 저장소로 옮길 방법을 찾았다. Gateway 는 신원과 Device Posture 를 쓰는 규칙을 단계적으로 약하게 만들었다. Access 와 Device Posture 는 KV 부하를 줄이려고 요청을 강제로 버렸다. 다른 저장소를 쓰는 Workers KV 릴리스도 준비했다. 20:23 에 저장소 인프라가 회복되면서 서비스들이 돌아오기 시작했고, 20:25 에 Access 와 Device Posture 가 KV 호출을 되살렸으며, 20:28 에 SLO 가 장애 전 수준으로 돌아왔다. Cloudflare 는 장애가 2시간 28분 이어졌다고 밝혔다.
- 심각도
- –
- 영향 범위
- Workers KV failed 90.22% of requests; Access, Gateway, WARP, Dashboard, Challenges and Turnstile, Browser Isolation, Images, Stream, Realtime, Workers AI, Pages and Workers Assets, AutoRAG, Durable Objects, D1, Queues and Event Notifications, AI Gateway, parts of the CDN, Workers, Workers Builds, Browser Rendering and Zaraz were impaired; no data was lost
- 영향 사용자
- all Cloudflare customers using the affected services
- 지역
- global
- 감지까지
- –
- 복구까지
- 2h 36m
증상
17:52 UTC 에 WARP 팀이 새 기기 등록이 실패하는 것을 보고 장애를 선언했다. 18:05 에 Cloudflare Access 팀이 오류율 급증 알림을 받았고, 여러 서비스의 SLO 가 목표 아래로 떨어져 팀마다 알림이 울렸다.
Workers KV 는 요청의 90.22% 가 실패했다. 캐시에 없어 원본 저장소 백엔드에서 값을 가져와야 하는 키는 응답 코드 503 이나 500 으로 실패했다. 나머지 요청은 Workers KV 캐시에서 응답해 200 과 404 로 성공했다.
Access 는 Self-Hosted, SaaS, Infrastructure 모든 애플리케이션 종류에서 신원 기반 로그인이 100% 실패했다. Access 는 정책 설정이나 사용자 신원을 가져오지 못하면 접근을 막도록 설계됐기 때문이다. SCIM 서비스는 신원 공급자의 요청에 500 으로 응답했다. Gateway 는 신원 기반 규칙이 걸린 DoH 쿼리가 실패했고, Gateway 프록시, egress, TLS 복호화를 쓰는 사용자는 연결도 등록도 하지 못했다. WARP 에서는 새 클라이언트가 연결하거나 가입하지 못했고, 비상 연결 해제 기능도 쓸 수 없었다.
대시보드에서는 로그인이 되지 않았고 기존 세션도 대부분 쓸 수 없었다. 아이디와 비밀번호 로그인은 Turnstile 이, Google 로그인은 KV 가, SSO 로그인은 Access 가 멈춰 실패했다. Challenges 와 Turnstile 의 siteverify API 요청은 실패와 타임아웃이 잦았다.
다른 제품들도 같은 의존 때문에 실패했다. Workers AI 는 추론 요청이 전부 실패했고, Stream 은 오류율이 90% 를 넘었으며 Stream Live 는 100% 였다. Pages 는 오류율이 약 100% 까지 올랐고 빌드가 끝나지 않았다. KV 와 같은 저장소를 쓰는 SQLite 기반 Durable Objects 와 D1 은 평균 오류율이 22% 까지 올랐다. AI Gateway 는 오류율이 97% 까지 올랐고, Queues 는 메시지를 넣지도 꺼내지도 못했으며, Realtime TURN 은 오류율이 100% 가까이 됐다. 새 Workers Builds 는 18:03 부터 100% 실패했고, Zaraz 는 요청이 100% 영향을 받았다.
Zero Trust 클라이언트의 등록 요청이 크게 늘어 여러 Cloudflare 거점에 부하가 걸렸다. 자동 트래픽 관리가 CDN 트래픽을 가까운 거점으로 돌렸지만 트래픽 일부는 예상대로 옮겨지지 않았다. 이 때문에 São Paulo, Philadelphia, Atlanta, Raleigh 에서 CDN 요청의 지연이 늘고 HTTP 499 와 HTTP 503 오류가 났다.
20:23 에 저장소 인프라가 회복되면서 서비스들이 돌아오기 시작했지만, 서비스들이 한꺼번에 캐시를 다시 채우느라 한동안 오류가 이어졌고 인프라의 rate limit 에도 걸렸다.
원인
- 촉발
- Workers KV 의 중앙 저장소 일부를 받치던 서드파티 클라우드 공급자에 장애가 났고, KV 가 원본 저장소에서 값을 읽고 쓰지 못하게 됐다.
감지
17:52 UTC 에 Cloudflare WARP 팀이 새 기기 등록이 실패하는 것을 보고 조사를 시작해 장애를 선언했다. 18:05 에 Access 팀이 오류율 급증 알림을 받았고, 여러 서비스의 SLO 가 목표 아래로 떨어져 팀마다 알림이 울렸다. 18:06 에 Workers KV 를 쓸 수 없게 된 것이 공통 원인임을 찾아 서비스별 장애를 하나로 합쳤다.
조치
- Challenges 와 Turnstile 의 siteverify 호출을 끄는 킬 스위치를 켜 방문자가 막히지 않게 했다. 킬 스위치를 켜 둔 동안에는 siteverify API 가 유효한 토큰 하나를 여러 번 받아들일 수 있었다. 봇 탐지는 영향을 받지 않았다.
- 19:09 UTC 에 Zero Trust Gateway 가 신원이나 Device Posture 상태를 참조하는 규칙을 단계적으로 약하게 만들어 Workers KV 의존을 덜었다.
- 19:32 UTC 에 Access 와 Device Posture 가 서드파티 서비스가 돌아올 때까지 신원과 Device Posture 요청을 강제로 버려 Workers KV 의 부하를 줄였다.
- 저장소가 계속 멈출 때를 대비해, 다른 저장소를 쓰는 Workers KV 릴리스를 배포하고 핵심 서비스가 설정 데이터를 그 저장소에 쓰게 할 방법을 계속 준비했다.
- 20:25 UTC 에 서드파티 서비스가 회복되자 Access 와 Device Posture 가 Workers KV 호출을 되살렸다.
후속 조치
- Cloudflare 가 소유하지 않은 저장소 인프라 하나에만 기대는 구조를 없앤다.
- Access, Gateway, WARP 같은 핵심 서비스를 복구하는 능력을 높인다.
- Workers KV 저장소 인프라의 이중화를 강화해 어느 한 공급자에도 기대지 않게 하는 작업을 앞당긴다. 장애 중에 이미 핵심 KV 네임스페이스를 자체 인프라로 옮기고 백필하는 일을 시작했다.
- 이번 장애로 영향을 받은 제품마다 피해 범위를 줄이는 단기 조치를 적용해, 서드파티 의존을 포함한 어떤 단일 장애 지점이 멈춰도 제품이 버티게 한다.
- 저장소 인프라 장애 때 네임스페이스를 차례로 다시 켜는 도구를 만들어, 캐시를 다시 채우는 동안 Access 와 WARP 같은 핵심 의존 서비스가 자체 인프라에 서비스 거부를 일으키지 않고 올라오게 한다.
교훈
서드파티 공급자의 장애가 직접 원인이었지만 Cloudflare 는 어떤 의존을 고르고 그 의존을 감안해 시스템을 어떻게 설계하는지가 자기 책임이라고 밝혔다. 많은 서비스가 각자 저장소를 만들지 않고 Workers KV 에 기대는 것은 평소에는 서비스를 튼튼하게 하지만, 이번에는 KV 의 실패가 연쇄로 번져 피해 범위를 크게 넓혔다.
출처
관련 사례
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0368AWS us-east-1 장애 동안 PlanetScale 컨트롤 플레인이 멈추고, 이어 일부 데이터베이스 브랜치가 네트워크 분할로 쿼리에 실패했다PlanetScale · 2025같은 원인 · 공통 데이터베이스
IL-0119Cosmos DB 장애 뒤 ChatGPT 웹 서비스 파드가 헬스 체크 실패로 크래시 루프에 빠져 chatgpt.com 과 일부 API 의 오류율이 높아졌다.OpenAI · 2025같은 원인 · 공통 데이터베이스
IL-0145Australia East 의 전압 강하로 냉각기가 멈춰 데이터 홀 장비가 꺼지면서, 영역 중복이 아닌 AKS 작업 큐 데이터베이스가 내려가 두 리전의 AKS 생성, 수정, 삭제 작업이 막혔다Microsoft Azure · 2023같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0172AWS 도쿄 리전 한 AZ 의 냉각 장애로 쿠버네티스 위에서 돌던 CockroachDB 노드 60대 중 6대가 22분 만에 죽었고, AZ 토폴로지 설정이 없어 일부 Range 가 정족수를 잃었다.Devsisters · 2021같은 원인 · 공통 데이터베이스
IL-0193GCP SSD 영구 디스크 장애로 Cassandra 파드가 볼륨을 붙이지 못했고, OrderedReady 정책 때문에 나머지 파드도 다시 뜨지 못한 데다 Metrictank 가 바뀐 Cassandra IP 로 다시 연결하지 못해, Grafana Cloud Graphite 쿼리 일부가 최대 23시간 실패했다.Grafana Labs · 2019같은 원인 · 공통 데이터베이스
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0284
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0284/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.