2019 年 Cloudflare regex 事故的核心教訓是:控制面配置錯誤可以在秒級擴散成全球可用性事故。這類事故的第一責任不是「加機器」,而是迅速切斷擴散路徑,讓錯誤停止被新流量放大。

事故摘要

Cloudflare 在 2019-07-02 發布新的 WAF Managed Rule 後,規則中的 regex 觸發 catastrophic backtracking,導致 edge CPU 快速打滿。事故影響約 27 分鐘,症狀是大量 502/503 與延遲激增。

這起事件屬於典型「控制面配置推送 → data plane 全網受影響」模式。錯誤並非單點節點故障,而是由一致推送機制把同一錯誤同步擴散到整個 edge 網路。

判讀訊號

訊號事故中代表什麼第一波決策價值
全球 CPU 同步飆升問題來自共用規則或共用執行路徑優先檢查最新全域配置變更
5xx 與延遲同時惡化非單純容量尖峰,更像執行成本突增優先撤回新規則,避免持續放大
多區域同時報警事故已跨區域,屬全網級控制面風險啟動全域指揮節奏與高頻通訊
回滾後指標快速回穩根因與近期變更高度相關立即凍結同批規則推送,改走分區驗證
事件期間 rule path 命中異常增單一規則造成 CPU 熱點補 rule-level profiling 與上線前成本檢查

事故路徑

  1. 控制面推送新 WAF 規則到全球 edge。
  2. 規則 regex 在特定輸入下產生高計算成本。
  3. edge CPU 被規則執行成本吃滿,請求處理能力下降。
  4. 5xx 與延遲擴散成全球可見症狀。
  5. 回滾規則後,CPU 與可用性逐步恢復。

這條路徑顯示:事故擴散速度主要由「推送覆蓋範圍」決定,而不是由「單機故障率」決定。

可回寫控制面

控制面這次事故暴露的缺口回寫方向
規則上線前靜態檢查regex 風險模式未被擋下補 regex 風險 lint 與拒絕規則(高 backtracking 風險直接阻擋)
上線前效能測試缺少 rule-level CPU 成本基線補 rule replay 測試,用代表性 payload 驗證執行成本
推送策略全域一次推送讓 blast radius 過大改成分區/分群 staged rollout,設回滾閘門
事故啟動門檻全網症狀出現後才完整升級以「跨區 CPU 同步異常 + 5xx 上升」作為自動升級條件
Decision log事中決策若缺時間線,復盤成本高在事故期間即時記錄假設、回滾條件、責任人與驗證結果
Evidence write-back事故教訓易停在 PIR 文本回寫到 04 觀測規則與 06 實驗安全邊界,形成下次推送前硬性 gate

下一步路由

引用源