要約
- Cloudflare によると、11:05 UTC にデプロイされたデータベースアクセス制御の変更により、データベース名でフィルタリングしない ClickHouse メタデータクエリの出力が変わった。
- 変更されたクエリは、明示的な権限がデータベースクラスタ全体に展開される過程で、重複したカラムメタデータを返した。その出力から生成された Bot Management 機能ファイルはサイズが倍増した。
- ファイルを読み込むソフトウェアはサイズ制限を課していた。Cloudflare のポストモーテムは、
unwrap()を使用したエラーパスを示しており、それがパニックを引き起こし、コアプロキシパスで HTTP 5xx エラーを発生させた。 - ファイルは5分ごとに生成されていた。特定の時点でデータベースノードの一部だけが変更された権限を持っていたため、生成ごとに有効なファイルと無効なファイルが交互に現れることがあった。その結果、断続的な復旧が発生し、当初は大規模な攻撃のように見えた。
- Cloudflare のポストモーテムの導入部では障害が11:20 UTC に始まったと述べているが、詳細なタイムラインでは最初の顧客 HTTP エラーは11:28 UTC と記録されている。両方の表現をそのまま残すべきである。
- コア CDN およびセキュリティサービス、Workers KV、Access、Turnstile、ダッシュボードログイン、メールセキュリティの一部がそれぞれ異なる影響を受けた。すべてのサービスや顧客が完全に利用不可だったという証拠はない。
- OpenAI は、該当期間中にウェブアクセスエラーを報告したが、モバイルアプリケーション、API およびバックエンドサービスは正常だった。この違いは、ある依存関係が製品によって選択的に障害を起こしうることを示している。
- Cloudflare の即時対応には、生成された設定を信頼できない入力として扱うこと、非常停止スイッチの追加、モジュールの障害動作の見直しが含まれていた。その後の Code Orange プログラムでは、管理された設定ロールアウト、インターフェース契約、緊急時アクセス依存関係に対処した。
- 別の Cloudflare 障害が12月5日に発生し、別のグローバル設定パスが関与していた。トリガーは異なるが、設定デプロイメントがソフトウェアリリースと同等の管理を必要とするという主張を強化した。
- 説明責任は、クエリスコープ、アーティファクト検証、配信速度、フォールバック動作、インターフェース分離、可観測性、ロールバック、顧客コミュニケーション、そして発表された修復策が本番環境で機能するという証明に対する管理に基づく。
権限変更がグローバルトラフィックに対する権限に変わった
最初の重要な区別は、変更がどこから生じ、その影響がどこまで及ぶことが許されたかである。Cloudflare のポストモーテムは、契機となるアクションをデータベース権限のデプロイに置いている。そのデプロイは直接パケット処理ロジックを書き換えたわけではない。メタデータクエリが参照できる内容を変更した。
このクエリは Bot Management 機能ファイルの生成に使用されていた。Cloudflare によれば、クエリはデータベース名でメタデータをフィルタリングしていなかった。明示的な権限が展開されるにつれて、ClickHouse は基本となるテーブルからカラム情報を返し、重複行が発生した。ジェネレータはそれらの行を受け入れ、結果として機能ファイルは予想サイズの約2倍になった。
権限変更のみを考慮するエンジニアは、これをデータベース制御操作と分類するかもしれない。機能ファイルのみを考慮するエンジニアは、内部構成更新と分類するかもしれない。この障害は、これらのラベルが不完全であることを示している。このファイルは Cloudflare のネットワーク全体でソフトウェアに読み込まれ、その内容はコアプロキシパスで動作するモジュールに影響を与えた。配信されると、このアーティファクトは顧客トラフィックの成否を左右する実質的な権限を持つことになった。
これは、従来のバイナリではないにしても、実行可能な運用権限である。「コード」と「設定」の区別は所有権やツールには有用だが、リスクを決定するものではない。リスクは入力が引き起こしうる結果に従う。グローバルにデプロイされた動作を変更し、パーサの制限を超え、セキュリティアクションを選択し、コンポーネントをクラッシュさせる可能性のあるファイルは、その権限に従って管理されるべきである。
この枠組みは、すべての設定更新に大規模ソフトウェアリリースと同じ手順が必要であることを意味するわけではない。管理は爆発半径、可逆性、障害動作に比例する必要がある。デフォルトが制限された地域設定は、トラフィック経路上のモジュールに世界中に配信されるアーティファクトと同じリスクをもたらさない。11月のインシデントは、高い権限を持つ設定が、不正な出力や予期しない出力を十分に制約しない経路を通過するときに何が起こるかを示している。
したがって、責任の単位は個々のデータベースコマンドではない。それは連鎖である。データベースチームはアクセスセマンティクスを制御していた。クエリ所有者はスコープと前提条件を制御していた。ジェネレータ所有者はスキーマ、カーディナリティ、サイズ検証を制御していた。配信システムはロールアウト速度と到達範囲を制御していた。消費者モジュールはエラー処理を制御していた。プロダクトチームはインターフェース依存関係を制御していた。インシデント対応チームは診断、回避、復旧を制御していた。経営陣と信頼性リーダーシップは、これらのシステムのどれがこのイベント前にリリースグレードの投資を受けていたかを制御していた。
説明責任は、これらの制御面に従うと明確になる。「ヒューマンエラー」に圧縮されたり、権限変更を承認した人物だけに割り当てられたりすると、不正確になる。
直接的な因果連鎖の再構築
Cloudflare の説明は6つのステップを支持している。
第一に、データベースアクセス制御の変更が11:05 UTC に開始された。Cloudflare はデータベースアクセスに明示的な権限へ移行していた。この変更により、Bot Management 機能ファイルジェネレータが使用するクエリに表示されるメタデータが変更された。
第二に、クエリにはデータベース名のフィルタが含まれていなかった。変更された権限状態では、基本となるテーブルからのメタデータが結果セットに現れた。重複したカラム行が返された。重要な点は、単にデータベースがより多くの行を生成したことではない。下流のジェネレータはそれらの行の一意性とサイズについて暗黙の前提に依存していたことである。
第三に、ジェネレータは重複行を機能ファイルに組み込んだ。この境界で堅牢な契約があれば、期待されるキーが一意であること、スキーマが有効であること、カーディナリティが学習または宣言された範囲内にあること、完成したアーティファクトが運用上の最大値を下回っていることをチェックできたはずである。Cloudflare のポストモーテムは、予期しない出力が代わりに配布可能なファイルになったことを示している。
第四に、ファイルは Cloudflare のネットワークを介して伝播した。配信により、ローカルなデータ品質エラーがグローバルな運用イベントに変わった。その配信の速度と範囲は偶然ではなかった。エンジニアが原因を特定するのに十分な証拠を得る前に、爆発半径を決定した。
第五に、ファイルを読み込むソフトウェアはサイズ制限を強制した。制限は通常、保護的な管理策である。この場合、制限超過の処理が決定的だった。Cloudflare の例は、unwrap()を呼び出す Rust のエラーパスを特定している。正常と分かっているファイルを保持し、新しいアーティファクトのみを拒否するか、影響を受ける分類機能を劣化させる代わりに、消費者はパニックを起こした。
第六に、障害はコアトラフィックと依存サービスが共有するパスで発生した。HTTP 5xx 応答が Cloudflare のネットワーク全体に現れた。コアプロキシまたはその背後にあるサービスに依存する製品は、独自の障害モードを経験した。
このシーケンスは、インシデント要約でしばしば統合される3つの概念を分離している。トリガーイベントはデータベースアクセス制御のデプロイだった。直接の障害メカニズムは、サイズ超過の生成機能ファイルがその消費者でパニックを引き起こしたことだった。根本的な制御障害は、変更されたクエリセマンティクス、アーティファクト生成、グローバル配信、安全でない消費の間に効果的な障壁がなかったことである。
寄与条件には、クエリの不完全なスコープ、十分な入力検証の欠如、ファイルのグローバルロールアウトパス、消費者の障害セマンティクス、影響を受けたパスに付随する製品依存関係が含まれる。検出と診断は、正常なアーティファクトと不良なアーティファクトが交互に現れることで複雑化した。復旧にはデータベース権限を元に戻す以上のことが必要だった。エンジニアは新しいファイルの伝播を停止し、依存サービスを管理しながら正常な設定を復元する必要があった。
この分解が重要なのは、各カテゴリが異なる修復を意味するからである。引き金となった変更を元に戻すことで1つのイベントを終わらせることができる。クエリを修正することで同じ重複行メカニズムを防ぐことができる。スキーマとサイズ検証を追加することで、より広範な不正アーティファクトを阻止できる。段階的なデプロイで露出を制限できる。安全なフォールバックにより、拒否されたアーティファクトが無関係なトラフィックを停止させることを防げる。依存関係の分離を改善することで、1つの製品モジュールが共有障害点になることを防げる。
「権限変更が障害を引き起こした」とだけ記録する組織は、トリガーを修復しても、別のサイズ超過や不正なアーティファクトに対してシステムを脆弱なままにする可能性がある。「ファイルが大きすぎた」とだけ記録する組織は、安全でないグローバル伝播を維持しながら制限を引き上げるかもしれない。因果連鎖の価値は、狭い修正が耐久性のある修正と誤認されるのを防ぐことにある。
症状が振動した理由
機能ファイルは5分ごとに生成されていた。Cloudflare によると、アクセス制御の変更はすべての ClickHouse ノードに同時に到達したわけではない。その移行中、生成ジョブは新しい権限を持つノードからの出力を受け取ることも、まだ変更されていないノードからの出力を受け取ることもあった。
つまり、入力は一貫して悪いものではなかった。ある生成では拡大された機能ファイルが生成され、次の生成では有効なファイルが生成される可能性があった。したがって、ネットワークの挙動は回復し、その後、後続のアーティファクトが伝播するにつれて再び故障するように見える可能性がある。
これはエンジニアリングと説明責任の両方に重要である。断続的な症状は、対応者を需要急増、攻撃、ネットワーク不安定性、外部依存関係に向けさせる可能性がある。Cloudflare は、チームが当初ハイパースケール分散型サービス拒否攻撃を疑ったと述べている。これは作業仮説であり、攻撃が発生したという証拠ではない。同社は最終的に内部設定チェーンを特定した。
当初の疑念は規模とパターンを考えると理解できるが、遅延は可観測性の問題も明らかにしている。対応者は、各ロケーションがどのバージョンとハッシュの機能ファイルを読み込んでいるかを迅速に確認できただろうか? ファイルのカーディナリティとサイズの変化を HTTP エラー率と相関させることができただろうか? ジェネレータは各結果を提供したデータベースノードを公開していただろうか? 運用ビューはトラフィック急増とコアプロキシパニックを区別できただろうか?
可観測性は、アラートが発動したかどうかで評価されることが多い。Cloudflare の詳細なタイムラインは、顧客エラーの直後に自動検出が行われたことを記録している。より難しいテストは、証拠が障害の管理を指し示したかどうかである。エラー率が高いことを示すアラートは、検索範囲を減らさずに緊急性を確立することができる。高権限の設定システムには、何が変わったか、どこで変わったか、どのバージョンがアクティブか、バージョンによって動作が異なるかを回答するための、来歴、配信、アクティベーションのテレメトリが必要である。
振動はまた、単純なロールバックの前提を弱める。有効なファイルと無効なファイルが交互に現れる場合、一時的な改善が成功した修復と誤認される可能性がある。復旧は、既知のアーティファクト、停止した生成、制御された配信、持続的なメトリクスに結び付けられるべきであり、エラーの一時的な低下のみに結び付けるべきではない。
したがって、このインシデントは部分的にデプロイされた制御変更に関する一般的な教訓を提供している。混合状態のシステムは非単調な証拠を生み出す可能性がある。責任あるロールアウト設計は、新旧の状態が共存することを前提とし、その期間中にクエリ、ジェネレータ、消費者が正しく動作し続けるかどうかをテストする。共存がセマンティクスを変更する場合、ロールアウト計画はシーケンスを制約するか、互換性ロジックを追加しなければならない。
タイムラインとその内部の証拠ギャップ
Cloudflare のポストモーテムは2つの開始時間を提示している。導入部ではネットワークが11:20 UTC に重大な障害を経験し始めたと述べている。詳細なタイムラインは、データベースアクセス制御のデプロイを11:05 UTC、最初の顧客 HTTP エラーを11:28 UTC と記録している。これらの記述は、偽の単一タイムスタンプに強制的に統合する必要はない。異なるテレメトリや集約レベルを反映している可能性がある。注意深い再構築では両方を保持する。
詳細なタイムラインによると、11:31 UTC に自動テストが問題を検出した。手動調査は11:32 UTC に開始された。インシデントコールは11:35 UTC に作成された。このシーケンスは、顧客エラーが発生するとすぐに検出と正式な調整が行われたことを示している。
困難な期間は検出後に訪れた。断続的な復旧と見かけ上の規模から、対応者は攻撃仮説に向かった。一方、不良アーティファクトはサービスに影響を与え続けた。障害を検出することと原因設定を特定することの違いは、対応能力の中心的な尺度である。
約13:05 UTC に、Cloudflare は Workers KV と Access のバイパスを実装した。これらの行動は、グローバルな根本原因が完全に除去される前でも、製品固有の緩和が可能であることを示している。バイパスはまた、依存関係の境界を明らかにした。1つのゲートウェイまたは認証パスを復元することで、すべての影響を受けるコンポーネントを修復しなくても影響を減らすことができる。
その後、作業は Bot Management を最後に正常だった機能ファイルに戻すことに焦点が当てられた。14:24 UTC に、Cloudflare は新しいファイルの生成と伝播を停止し、代替品のテストを完了した。主要な影響は14:30 UTC に解決された。Cloudflare は下流の復旧を続け、すべてのサービスが17:06 UTC に解決されたと報告した。
このタイムラインには、いくつかの説明責任のある間隔がある。
最初は11:05 UTC から最初に観測された障害までである。これは、デプロイ前の検証や段階的な露出がグローバルイベントを防ぐことができた伝播間隔である。
2番目は最初の障害から自動検出までである。この間隔は短いように見えるが、11:20 UTC と11:28 UTC という異なる表現が誤った正確性を防いでいる。
3番目は検出から正確な因果診断までである。公開記録は誤った攻撃仮説と交互に現れるアーティファクトを説明しているが、内部の意思決定や調査の分岐をすべて公開しているわけではない。その不確実性は可視のままにすべきである。
4番目は診断からグローバル封じ込めまでである。ファイル生成を停止し、正常なアーティファクトを復元することが決定的な行動だった。製品バイパスは早期に被害を軽減した。
5番目は14:30 UTC の主要復旧から17:06 UTC の完全解決までである。この末尾は重要である。なぜなら、グローバルプラットフォームは主要なエラー率が低下しただけでは回復しないからである。キュー、認証セッション、依存製品、顧客システムは異なる速度で回復し続ける可能性がある。
タイムラインは、金銭的損失、契約上の罰則、影響を受けた顧客の普遍的な数を確立していない。Cloudflare のステータスとポストモーテムの証拠は、サービスの挙動と対応のマイルストーンを確立している。損害に関する主張には、別途顧客、契約、規制上の証拠が必要である。
1つのインシデントが複数の異なる製品障害を生み出した
広範な表現は、依存関係設計がどのように影響を形成したかを不明瞭にする可能性がある。Cloudflare のポストモーテムは、すべてのサービスが同じように停止したと言うのではなく、製品を区別している。
コア CDN およびセキュリティサービスは HTTP 5xx エラーを返した。これはプロキシパス障害の最も直接的な表現であった。不正なセキュリティ関連入力はボット分類に留まらなかった。通常のトラフィックの処理に影響を与えた。
Workers KV は、ゲートウェイがコアプロキシを使用していたため、高いエラー率を経験した。基礎となるストレージ概念とゲートウェイの依存関係は異なる層である。KV エラーを目にする顧客は、最初の問題が Bot Management 機能ファイルであることを必ずしも知らないだろう。
Cloudflare Access は、アクティブなセッションを持たないユーザーに対して広範な認証障害を経験した。この区別は重要である。既存のセッションと新しい認証パスは異なる依存関係を持つ可能性がある。「Access が失敗した」という記述は、どのユーザー状態とインターフェースが失敗したかを特定するよりも情報量が少ない。
Turnstile は読み込みに失敗した。Turnstile はログインやフォームフロー内に配置される可能性があるため、その障害は、そのサービスのバックエンドが正常であっても、別のサービスを利用不可に見せることがある。これが、共有セキュリティ依存関係がより大きな知覚爆発半径を生み出すメカニズムの1つである。
Cloudflare ダッシュボードはほとんど運用可能だったが、多くのユーザーはログインできなかった。そのログインフローは Turnstile に依存しており、一部の内部機能は Workers KV に依存していた。したがって、管理画面は顧客がステータスと制御を必要とする瞬間に使いにくくなった。これは利便性の問題だけではない。管理機能と診断機能へのアクセスは、顧客がインシデントを回避する能力に影響を与える可能性がある。
Cloudflare によると、メール配信は継続したが、IP レピュテーションソースが一時的に失われたことで、メールセキュリティの検出機能の一部が低下した。これは完全なサービス欠如ではなく、低下した制御状態である。これは、検出が低下した状態で配信を継続することが、メールをブロックしたり製品を失敗させたりするよりも安全かどうかという、異なる決定を提起する。
これらの区別は、インターフェース契約がインシデントガバナンスに属する理由を示している。各依存関係は、アップストリーム入力が利用不可、無効、または古くなった場合に何が起こるかを指定すべきである。選択肢は、正常な値を保持する、中立的なデフォルトを使用する、リスクのあるアクションを拒否する、重要でない分類ステップをバイパスする、リクエストを失敗させるなどである。普遍的な答えはない。意図的な答えがなければならない。
製品マップはまた、責任の割り当てにも役立つ。機能ファイルを所有するチームはその有効性を制御していた。コアプロキシチームは消費動作を制御していた。プロダクトチームは、自社のサービスが影響を受けるパスに同期的に依存しているかどうか、バイパスを持っているかどうかを制御していた。プラットフォームリーダーシップは共有依存関係の基準を制御していた。顧客は自らの代替パスの一部を制御していたが、イベント中に Cloudflare の内部結合を再設計することはできなかった。
OpenAI は選択的な顧客側の境界を示している
OpenAI のステータス記録は、該当期間中の主要な顧客側の見解を提供している。OpenAI は、一部のユーザーがブラウザベースの消費者サービス、platform.openai.com、Sora.com、openai.com にアクセスする際に HTTP 403または504エラーに遭遇したと報告した。問題は、サードパーティのネットワーキングプロバイダーによる誤った設定ロールアウトに起因するとした。
同じ記録は、OpenAI のモバイル消費者アプリケーション、Sora アプリケーション、API トラフィック、バックエンドサービスは正常だったと述べている。プロバイダーが変更をロールバックした後に回復が始まった。OpenAI は影響を受けた期間を太平洋時間の約3:30 AM から6:40 AM と説明している。
この証拠は、2つの反対の誤りを防ぐので有用である。1つ目は、Cloudflare イベントがダウンストリーム顧客に影響を与えなかったとみなすことである。OpenAI は実際のウェブアクセスへの影響を文書化している。2つ目は、OpenAI のすべてが失敗したと言うことである。OpenAI 自身のステータス記録は、影響を受けなかったアプリケーション、API、バックエンドサービスに関して明確な境界を引いている。
この違いは、おそらく製品パスと依存関係の選択を反映しているが、公開証拠は OpenAI のプライベートネットワーク設計、契約条件、コストを開示していない。記録は、ウェブアクセスが影響を受けたアップストリームパスに依存していた一方で、他の表面は同じ障害を経験しなかったということのみを支持している。冗長性アーキテクチャを発明したり、サービスレベル契約の違反を主張したりするためのものではない。
選択的な影響自体がリスクシグナルである。企業は、一部のワークロードが異なるパスを使用するためプロバイダの多様性があると信じているかもしれないが、公開ウェブエントリポイントが失敗すれば、ユーザーは依然として大規模な障害を認識する可能性がある。逆に、影響を受けない API は、ブラウザアクセスが低下してもビジネス顧客が運用を継続することを可能にするかもしれない。依存関係評価は、ベンダーを数えるだけでなく、重要なユーザージャーニーを測定すべきである。
OpenAI の経験はまた、顧客コミュニケーションが表面を特定するべき理由を示している。「アップストリームプロバイダーの影響を受けています」は、ウェブ、モバイル、API、バックエンドの状態を指定するよりも実用的でない。チャネルを切り替えるかどうかを決定する顧客は、その詳細さを必要とする。
トリガー、根本原因、寄与条件
責任を割り当てるには、「原因」よりも正確な語彙が必要である。
トリガーイベントは、変更されたデータベース権限のデプロイであった。その時点でその変更がなければ、クエリはこのメカニズムを通じて同じ重複メタデータを生成しなかっただろう。
直接の技術的原因は、サイズ超過の Bot Management 機能ファイルの作成と配信と、それに続く消費者の安全でない処理であった。倍増したファイルが制限を超え、エラーパスがパニックを引き起こした。
根本的な制御問題は、内部で生成されたアーティファクトが、十分な検証と安全な障害動作なしにグローバル運用境界を越える能力であった。クエリ、ジェネレータ、配信者、消費者は、予期しない状態がコアトラフィックに影響を与える前に阻止できる障壁を集合的に欠いていた。
寄与条件には、クエリの欠落したデータベース名フィルタ、ロールアウト中の混合データベース状態、頻繁なファイル生成、迅速なグローバル伝播、エラーパスでの消費者のunwrap()の使用、影響を受けるプロキシ動作に他の製品を結び付ける依存関係が含まれる。
検出問題はアラームの欠如ではなかった。自動テストがエラーを検出した。より重要な制限は因果的可視性であった。交互に現れるファイルと攻撃のような症状が特定を複雑にした。
対応問題は、広範なインシデントシグナルから設定パスの制御に移行するのに要した時間であった。13:05 UTC の製品バイパスは一部の影響を軽減したが、決定的な封じ込めは新しい機能ファイルの生成と伝播が停止され、正常なファイルが復元されたときにもたらされた。
復旧問題はコアプロキシを超えて広がった。Cloudflare は主要な影響が14:30 UTC に解決されたが、すべてのシステムが17:06 UTC に解決されたと報告した。ダウンストリームサービスが正常に戻るには時間が必要だった。
これらのカテゴリは、説明責任が権限を変更した人物で止まるのを防ぐ。その人物はトリガーを制御したかもしれない。クエリの前提、機能ファイルスキーマ、配信アーキテクチャ、パニック動作、組織の設定リリース基準を必ずしも所有していなかった。
また、システムを責任があるとみなす反対の誤りも防ぐ。各制御には所有者がいたか、いるべきだった。調査は、誰がクエリを変更できたか、誰がアーティファクト契約を承認したか、誰がロールアウトポリシーを設定したか、誰が消費者エラーパスをレビューしたか、誰がより安全な設計を要求できたかを特定すべきである。
設定は結果に従って管理されるべきである
ソフトウェア組織は、成熟したバイナリリリース管理を維持しながら、設定をより高速なチャネルで移動させることを許可することが多い。この区別は合理的である。設定は、ソフトウェアの再構築を避け、脅威に対応し、動作を迅速に変更するために頻繁に使用される。
速度は、設定が幅広い権限を持つが弱い検証しか受けない場合に危険になる。11月のイベントは、管理レベルを引き上げるべき3つの特性を示している。
1つ目は到達範囲である。機能ファイルは Cloudflare のネットワーク全体に広く配布されていた。
2つ目は結合度である。消費モジュールは、その障害がコアトラフィックと依存製品に影響を与えるパスで動作していた。
3つ目は脆弱性である。ファイルサイズの予期しない増加が限定された拒否を生み出さなかった。パニックを引き起こした。
結果に基づくガバナンスモデルは、そのようなアーティファクトを高リスクリリースオブジェクトとして分類するだろう。その分類には、型付きスキーマ、一意性制約、カーディナリティしきい値、最大サイズチェック、代表的な消費者テスト、カナリアデプロイ、レート制限付き伝播、自動ロールバック、最後に正常なフォールバックが必要となる可能性がある。
管理は安定状態だけでなく遷移もカバーしなければならない。データベース権限のロールアウトは一時的に混合メタデータを露出させる可能性がある。スキーマ移行は新旧のリーダーが共存することを要求する可能性がある。ジェネレータは部分的なデプロイを観測する可能性がある。最終的な意図された状態のみを評価するテストは、まさに振動する機能ファイルを生み出した条件を見逃す。
設定パイプラインはまた、来歴を記録すべきである。グローバルイベントに対応するオペレータは、どのソースクエリがアーティファクトを生成したか、どのデータベースノードが応答したか、どのコードバージョンが生成したか、どの検証が通過したか、そのサイズとカーディナリティは何か、どこにデプロイされたか、どの消費者がアクティブ化したかを回答できるべきである。
これは、すべての変更に遅い手動委員会を意味するわけではない。自動化はより強力な制御を提供し、高速であり続けることができる。スキーマ検証、差分リスクスコアリング、カナリア、自動ロールバック、署名付き来歴は、設定パイプラインを、ほとんど見えないグローバルプッシュよりも安全で応答性の高いものにすることができる。
説明責任のテストは、組織がアーティファクトに与えた権限に見合った管理に投資したかどうかである。オブジェクトを「設定」と呼ぶことは、それがグローバルトラフィックを停止できる場合には防御にならない。
Fail-Open と Fail-Close はインターフェースの決定である
Cloudflare のフォローアップ分析は、障害セマンティクスの問題に対する異常な可視性を提供している。Bot Management 機能ファイルが無効だった場合、システムは検証済みの以前のファイルを保持するか、中立的な分類を使用することができたはずである。Bot Management モジュールが失敗した場合、無関係なトラフィックはコアプロキシパスからエラーを受け取らずに継続できたはずである。
これは fail-open 動作の議論のように聞こえるが、原理には限界がある。セキュリティシステムと ID システムは、不確実性の下でアクセスを許可することが容認できない害を生み出すリソースを保護することがある。失敗した認証チェックはリクエストを拒否する必要があるかもしれない。利用不可のボットスコアは中立的な値にデフォルト設定できるかもしれない。利用不可のオプションのレピュテーションシグナルは、明示的な監視を伴う劣化した検査を正当化するかもしれない。正しい選択はインターフェースと脅威モデルに依存する。
制御の失敗は、動作が偶発的である場合に発生する。パニックは文書化されたリスク決定ではない。入力エラーをランタイムのデフォルトの障害結果に変換する。その結果は、プロダクト所有者が意図したよりもはるかに広範囲に及ぶ可能性がある。
したがって、各高リスクインターフェースは以下を定義すべきである:
- どの入力が必須で、どの入力が助言的か
- 古くなった正常な値が許容されるかどうか
- 保持された値の最大経過時間
- 中立的なデフォルトがセキュリティリスクまたは可用性リスクを増加させるかどうか
- 不確実性の下でどのリクエストを拒否すべきか
- 劣化モードがオペレータと顧客にどのように伝達されるか
- 非常停止スイッチが依存機能を無効にできるタイミング
- 誰がそのモードへの移行と終了の権限を持つか
- 選択された動作がどのようにテストされるか
Bot Management に関して、公表された修復議論は、中立的な分類または保持されたデフォルトが、無効なファイルが無関係なトラフィックを停止させるのを防げた可能性があることを示唆している。これはこのモジュールからの具体的な教訓である。すべての Cloudflare セキュリティ機能が fail-open すべきであるという主張に一般化すべきではない。
適切な障害セマンティクスはまた、隠れた劣化を制限する。システムがセキュリティシグナルなしで継続する場合、オペレータは検出品質が変化したことを知るべきである。Cloudflare のメールセキュリティの例はこの問題を示している。IP レピュテーションソースが一時的に利用不可の間、配信は継続された。サービスの継続は合理的であるが、低下した制御を測定し伝達する責任ある義務を生み出す。
爆発半径はインターフェースで設計される
インシデントはいくつかのインターフェースを通過した:データベースからクエリ、クエリからジェネレータ、ジェネレータからファイル、ファイルから配信者、配信者から消費者、消費者からコアプロキシ、プロキシから製品。各インターフェースは爆発半径を減らす機会であった。
データベース境界では、クエリがデータベース ID を明示的に制約し、一意性を検証できた。
ジェネレータ境界では、システムが重複キー、予期しないカーディナリティ、過剰なサイズを拒否できた。
配信境界では、カナリアがグローバル伝播の前に小さな人口でパニックを露出できた。
消費者境界では、モジュールが正常なバージョンを保持しながら新しいファイルを拒否できた。
プロキシ境界では、セキュリティモデルが許す場合、モジュール障害を通常のトラフィックから分離できた。
製品境界では、Access、Workers KV、Turnstile、管理機能がバイパスまたは代替パスを文書化しテストできた。
複数の可能な障壁の存在は重要である。信頼性の高いシステムは1つの完璧なチームに依存すべきではない。データベースチームはクエリ相互作用を予測できないかもしれない。それでもジェネレータは異常な出力を検出すべきである。ジェネレータが見逃すかもしれない。それでもカナリアは消費者障害を示すべきである。カナリアが失敗するかもしれない。それでも消費者は安全に劣化すべきである。
この多層防御モデルは、引き金となる変更にさらに多くのレビューを追加することとは異なる。レビューは有用だが、レビュアーは複雑なグローバルプラットフォームにおけるすべての相互作用を予測できない。強力なアーキテクチャは、欠陥が1つの境界を通過することを前提とし、次に何ができるかを制限する。
取締役会は、インシデントアクションリストが完了したという声明だけでなく、これらのインターフェースでの証拠を求めるべきである。有用な証拠には、不正ファイルの拒否テスト、カナリア期間と拡大基準を示すデプロイメントメトリクス、自動ロールバック演習、非常停止スイッチ訓練、オプションモジュールが失敗してもコアトラフィックが継続する実証が含まれる。
検出は迅速だったが、診断はより困難だった
Cloudflare のタイムラインは、自動テストが詳細な表の最初の顧客エラーから数分以内に問題を検出したことを示している。これは肯定的な制御である。組織が顧客チケットのみに依存していなかったことを意味する。
しかし、トラフィックが失敗していることを知ることは理由を知ることと同じではないため、インシデントは依然として深刻だった。最初の DDoS 仮説と交互に現れる症状が封じ込めへの経路を延長した。
より強力な診断システムは、変更イベントをサービス動作に結び付けるだろう。これには、データベースアクセス制御のデプロイ、機能ファイルのサイズとハッシュの変更、配信ステータス、消費者アクティベーション、パニックシグネチャが含まれる。相関関係は、すべての最近の変更が有罪であると想定する必要はない。変更来歴を十分に可視化し、迅速にテストできるようにすべきである。
ファイルの5分ごとの生成サイクルは、自然な診断キーを提供できたはずである。エラー率がアーティファクト生成とともに変化した場合、対応者は正常なファイルと不良なファイルのハッシュを比較し、ソースクエリに遡って調査できた。Cloudflare がこの可視性の一部を持っていたかどうかは、公開記録では完全に確認されていない。重要なのは、グローバル設定プラットフォームがそのような分析を日常的に行えるようにすべきであるということである。
診断アクセスはインシデント中も生き残らなければならない。Cloudflare の後の Code Orange の議論には、緊急時アクセスと循環依存関係が含まれている。信頼性チームは、認証、ダッシュボード、デプロイ管理、ステータス通信のために障害が発生しているプラットフォームだけに依存することはできない。独立したパスは高価だが、その価値はプラットフォーム全体のイベント中に最大になる。
したがって、検出の説明責任の尺度には、最初のアラートまでの時間だけでなく、因果分離までの時間も含まれるべきである。組織は、伝播を停止するために必要な証拠がまだ不足している一方で、優れたアラートレイテンシを報告することができる。
即時修正と後の Code Orange プログラム
Cloudflare の最初のポストモーテムは、いくつかの修復方向をリストした。内部で生成された設定は信頼できない入力のように扱うべきだと述べた。グローバルな非常停止スイッチ、診断出力によるリソース枯渇からの保護、コアプロキシモジュールのエラー処理の見直しに関する作業を説明した。
これらの行動は異なる障害クラスに対処している。入力検証は不正なまたは予期しないアーティファクトを対象とする。非常停止スイッチは機能が危険になった場合の封じ込めを提供する。リソース制御はトラブルシューティングデータが2番目の障害を引き起こすのを防ぐ。エラー処理の見直しは、1つのモジュールがより広範なトラフィックをクラッシュさせる可能性のある他のパスを探す。
後の「fail small」および Code Orange プログラムは範囲を拡大した。Cloudflare は、成熟したソフトウェアバイナリデプロイ管理と、世界的な動作を迅速に変更できる設定システムを対比した。制御されたロールアウト原則をネットワーク設定に適用し、障害モードとインターフェース契約をレビューし、緊急時手順と循環依存関係を改善することを約束した。
即時修復と構造的修復の区別は重要である。ClickHouse クエリへのパッチとより大きなファイル制限は、正確な再発を防ぎながら他の設定システムを露出したままにする可能性がある。高権限設定を分類し、デプロイを段階化し、障害動作をテストするプログラムは、より広範なイベントクラスを削減できる。
約束は証明ではない。公開ロードマップは、経営陣の認識と表明された方向性を確立する。修復の証拠には、測定可能な実装が必要である。例えば:
- グローバルに有効な設定タイプのうち、段階的ロールアウトを使用している割合は?
- 自動停止前の最大露出は?
- どのアーティファクトスキーマが一意性、カーディナリティ、サイズを強制しているか?
- カナリアはどのくらいの頻度で不良設定を拒否したか?
- 各コアモジュールはプロキシを再起動せずに無効化または劣化できるか?
- 最後に正常なファイルの復元と非常停止スイッチは最後いつ実行されたか?
- どの運用ツールが独立した認証とネットワークパスを持っているか?
- どのような例外が残っており、誰が所有し、いつ期限切れになるか?
11月のポストモーテムと後のプログラムは、共に説明責任のベースラインを形成する。Cloudflare は、謝罪したか詳細な説明を公開したかだけでなく、指名された制御クラスが観察可能な実践になったかどうかで評価されることができる。
12月5日の障害は比較証拠であり、同じイベントではない
2025年12月5日、Cloudflare はグローバル設定システムに関連する別の障害を経験した。Cloudflare によると、変更は React Server Components の脆弱性に対応中に発生した。その伝播方法により、HTTP トラフィックの約28%を占めるサブセットに約25分間エラーが発生した。
技術的なトリガーは11月の ClickHouse と Bot Management の連鎖とは異なっていた。両イベントを1つの根本原因に統合すべきではない。しかし、12月のイベントは Code Orange の作業で特定されたガバナンスの問題を強化する。設定は、既存の制御が欠陥を検出して封じ込めるよりも速くグローバルな動作を変更できる可能性がある。
2つのインシデントが制御の弱点を共有しているがトリガーは異なる場合、修復基準には特異性と一般性の両方を含めるべきである。組織は各直接メカニズムを修正しなければならない。また、適切な段階的露出なしの高速グローバル設定などの共有クラスも特定しなければならない。
12月の短い期間は11月の復旧と比較して、イベントを無関係にはしない。これは、修復プログラムがすべての関連設定パスに到達したかどうか、緊急セキュリティ変更が通常の設定と同じリリース規律を受けたかどうかの初期テストを提供する。
公開記録だけでは、12月5日までに11月のどの行動が完了していたか、完了した制御が失敗したかどうかを示せない。それには内部実装と例外データが必要である。それでも、このシーケンスは取締役会と顧客に正確な質問を提供する。その日までにどの設定クラスが新しい制御境界内にあり、どれが外にあり、なぜか?
9月のダッシュボード障害は分離の価値を示している
Cloudflare の2025年9月12日のダッシュボードおよび API インシデントは、有用な比較例を提供する。React のuseEffect依存関係の問題により、サービスデプロイ中に Tenant Service への呼び出しが繰り返し発生した。Tenant Service が過負荷になり、認証に依存する API が失敗した。
Cloudflare によると、データプレーンは分離されたままであった。通常のトラフィック配信は同じように影響を受けなかった。ユーザーはダッシュボードと API の問題を経験したが、障害は11月のインシデントのようなコアトラフィックの爆発半径を獲得しなかった。
この比較は、管理プレーンの障害が軽微であることを意味しない。顧客は脅威に対応したり障害を回避したりするためにダッシュボードと API を必要とするかもしれない。しかし、管理プレーンに深刻な欠陥がある場合でも、アーキテクチャの分離が結果を制限できることを示している。
11月のイベントは異なる境界を越えた。生成されたセキュリティ機能ファイルがコアプロキシパスのソフトウェアに到達し、その障害がトラフィック自体に影響を与えた。したがって、2つのイベントはインターフェース配置の実際的な意味を示している。欠陥の重大度は、失敗したコードだけでなく、そのコードが停止することを許可されているかにも依存する。
これが、依存関係図に障害権限を含めるべき理由である。コンポーネントは論理的には「Bot Management」と記述されながら、物理的には共有プロキシ内で動作する場合がある。ダッシュボードログインは Turnstile と Workers KV に依存する可能性がある。製品名は完全な結合を明らかにしない。オペレータは、どの障害がどのユーザージャーニーをブロックできるかを示すテスト済みのマップを必要とする。
顧客の説明責任は依然として現実的だが非対称である
Cloudflare の顧客は、ClickHouse クエリ、機能ファイルジェネレータ、グローバル配信者、プロキシパニックを制御していなかった。これらの管理の一次責任は Cloudflare にある。
顧客は依然として、自社のサービスが Cloudflare にどのように依存するかを制御している。重要なユーザージャーニーをマッピングし、正当化される場合には Web と API パスを分離し、代替ステータスと管理アクセスを維持し、プロバイダイベント中にオリジンアクセスが可能かどうかを決定し、DNS やトラフィックフェイルオーバーをテストし、劣化モードを伝達することができる。
これらの選択肢はすべての顧客に等しく実用的ではない。マルチプロバイダーアーキテクチャは高価であり、独自の複雑さを導入する可能性がある。セキュリティポリシーは意図的に直接のオリジンアクセスを防ぐかもしれない。ステートフルセッション、証明書、ルーティング、アプリケーション動作により、フェイルオーバーは調達言語が示唆するよりも遅くなる可能性がある。
説明責任は、すべての顧客が依存関係を排除できるふりをすることを要求しない。意思決定者がどの機能がプロバイダーに依存しているか、どの代替手段が実際に機能するか、切り替えにどのくらいの時間がかかるか、回避策がどのようなリスクを生み出すかを知っていることを要求する。
OpenAI の異なる Web と API への影響は、この分析が具体的であるべき理由を示している。影響を受けない API パスを使用する企業は、ブラウザインターフェースに依存する従業員がエラーに遭遇している間も、自社のユーザーにサービスを提供し続けるかもしれない。別の顧客はすべてのトラフィックを1つのパスに持っているかもしれない。プロバイダー集中度はロゴの数で測定されない。重要な作業が通過しなければならないパスによって測定される。
契約とサービス報奨金は一部の財務的結果を割り当てることができるが、ここでレビューされた公開ソースは特定の条件や支払いを確立していない。顧客は報奨金をレジリエンス管理として扱うべきではない。運用上の問題は、サービスが独自の許容範囲内で継続または復旧できるかどうかに残る。
コミュニケーションは境界と不確実性を公開すべきである
Cloudflare の詳細なポストモーテムは、引き金となった変更、クエリ動作、生成されたアーティファクト、消費者障害、製品固有の影響を特定しているため価値がある。その詳細レベルにより、顧客は依存関係とリスクモデルを更新できる。
コミュニケーションには依然として注意深い読み取りが必要である。ナラティブの11:20 UTC と詳細タイムラインの11:28 UTC の違いは、黙って調和させるのではなく保存されるべきである。最初の攻撃仮説は実際の攻撃として繰り返されるべきではない。製品の劣化は普遍的な利用不可に変えられるべきではない。
イベント中のステータスコミュニケーションは4つの実用的な質問に答えるべきである:
- どの製品面が失敗しているか?
- どの面が正常か?
- どの回避策が安全で利用可能か?
- 推定される復旧状態を裏付ける証拠は何か?
顧客はまた、その情報を受け取る独立した方法を必要とする。サービスの管理に使用されるのと同じ ID、ダッシュボード、ネットワークパスが影響を受ける場合、ステータスページだけでは十分な運用アクセスを提供できない可能性がある。緊急時パスは保護され、制限され、テストされなければならないが、回復対象のシステムとすべての依存関係を共有してはならない。
イベント後、コミュニケーションは確認された事実、推論、未解決の質問を分離すべきである。Cloudflare は内部設定チェーンを確認した。修復作業を発表した。公開記録はそれ自体では、すべての修復がすべての設定システムに実装されたことを証明しない。顧客と取締役会がフォローアップメトリクスを求め、公開から完了を推測しない時点である。
耐久性のある修復を示す証拠
耐久性のある修復記録は、完了したチケットのリストよりも具体的であるべきである。
クエリとデータ契約については、Cloudflare はジェネレータが明示的なデータベースとテーブル ID を使用し、重複キーを拒否し、スキーマバージョンを検証し、期待されるカーディナリティを強制することを示せなければならない。テストには混合権限状態と部分的なロールアウトを含めるべきである。
アーティファクト検証については、証拠には配信前の最大サイズチェック、消費者互換性テスト、拒否動作を含めるべきである。拒否されたアーティファクトは、内部システムによって生成されたという理由だけで正常なアーティファクトを置き換えるべきではない。
デプロイについては、証拠は段階的な露出を示すべきである。設定は小さな代表的な人口を通過し、意味のあるシグナルを得るのに十分な時間そこに留まり、定義された条件が通過した場合にのみ拡大するべきである。システムは、エラー率、パニック、アーティファクト異常がしきい値を超えた場合に自動的に停止またはロールバックするべきである。
障害セマンティクスについては、各コアモジュールが明示的なポリシーを持つべきである。テストは、入力が欠落、古い、不正、または大きすぎる場合に何が起こるかを実証すべきである。安全なデフォルトは、セキュリティと可用性の両方のリスクに対して正当化されるべきである。
依存関係分離については、Cloudflare はどの製品がコアプロキシ、Workers KV、Turnstile、Access、共有 ID パスに依存しているかをマッピングすべきである。バイパスはインシデント中に発明されるのではなく、事前にテストされるべきである。
可観測性については、対応者はアクティブなアーティファクトをソースクエリ、ジェネレータバージョン、検証結果、ハッシュ、サイズ、ロールアウトコホート、アクティベーション時間までトレースできるべきである。失敗しているコホートを正常なコホートと迅速に比較できるべきである。
インシデントアクセスについては、独立した認証、デプロイ、コミュニケーションパスを行使すべきである。非常時制御は指定された対応者が利用でき、悪用から保護され、使用後に観察可能であるべきである。
顧客説明責任については、製品ドキュメントは機密内部詳細を開示せずに、意味のある依存関係とフォールバック動作を特定すべきである。顧客はどのサービスが一緒に劣化する可能性があるか、どの代替インターフェースが利用可能かを知る必要がある。
ガバナンスについては、例外を可視化すべきである。高権限設定がまだ段階的ロールアウトを使用できない場合、リーダーシップは理由、補償制御、所有者、期限を知るべきである。隠れた例外は、宣言されたプログラムが運用力を失う場所である。
最も強力なメトリクスは、別の同一のサイズ超過 Bot Management ファイルが現れたかどうかではない。不正な高権限設定が広範なプラットフォームで拒否、封じ込め、回復可能であることを組織が示せるかどうかである。
取締役会向け説明責任チェックリスト
取締役会と上級運用者は個々の機能ファイルを承認する必要はない。組織がそれらのファイルが持つ権限を管理しているという証拠を必要とする。
最初の質問は在庫である:どの設定システムがグローバルトラフィック、認証、セキュリティ分類、ルーティング、管理アクセスを変更できるか?
2番目は所有権である:各システムのソースデータ、ジェネレータ、配信パス、消費者、障害ポリシーを誰が所有しているか?
3番目は契約の強さである:スキーマ、一意性、カーディナリティ、サイズ、互換性制約は機械的に強制されているか?
4番目は遷移の安全性である:テストは混合バージョン、部分的な権限変更、古い入力、ロールバック状態をカバーしているか?
5番目は段階的な露出である:欠陥のあるアーティファクトは、その影響が測定される前にネットワーク全体に到達できるか?
6番目はフォールバックである:どの正常または中立的な状態が保持され、いつ拒否が劣化サービスよりも安全か?
7番目は分離である:オプションのセキュリティまたは分析モジュールが失敗しても、無関係なトラフィックを停止せずに済むか?
8番目は可観測性である:対応者はエラーを数分で正確なアーティファクトとソース変更に結び付けられるか?
9番目は制御アクセスである:対応者はプラットフォームインシデント中に独立したステータス、認証、ロールバックパスを保持しているか?
10番目は顧客証拠である:影響を受ける面と影響を受けない面は、顧客が行動するのに十分正確に伝達されているか?
11番目は修復検証である:Code Orange のコミットメントのうち実装されたものはどれか、どの本番メトリクスがそれらを実証しているか、どの例外が残っているか?
12番目はインシデント間の学習である:12月の設定障害は、カバーされていないクラス、不完全なロールアウト、新しい制御の失敗を明らかにしたか?
これらの質問は、複雑なシステムが欠陥ゼロになるというふりをせずに責任を割り当てる。目的は、1つの欠陥が無制限の権限を獲得するのを防ぐことである。
説明責任は防止、封じ込め、復旧の力に従う
Cloudflare の11月の障害は、因果連鎖が技術的かつ組織的であるため重要である。権限変更がメタデータを変更した。メタデータが生成ファイルを変更した。ファイルはグローバルに移動した。消費者パニックが1つのモジュールの無効入力を共有トラフィック障害に変換した。製品依存関係が影響を拡大した。交互に現れるアーティファクトが診断を複雑にした。復旧は伝播を停止し、正常な状態を復元することに依存していた。
単一のラベルがその連鎖を捉えることはできない。攻撃ではなかった。悪いデータベースコマンド以上のものであった。ファイル制限を増やすだけで解決されなかった。設定をその運用権限に従って管理するという失敗であった。
Cloudflare はアーティファクトを作成し配布した内部システムを制御していた。その説明責任には、クエリ設計、検証、ロールアウト、フォールバック、分離、診断、復旧、修復の証明が含まれる。顧客は自らの依存関係マップと継続性の選択を制御していたが、その制御はより狭く、下流にあった。
最も有用な結果は、この正確なインシデントが二度と起こらないという約束ではない。将来の予期しない入力がより小規模に失敗するという証拠である。それには複数の障壁が必要である:明示的なデータ契約、段階的な配信、安全な消費者動作、独立した復旧アクセス、可視的な例外。
設定はソフトウェアよりも速く変更できる。なぜなら速度は価値があるからである。設定がグローバルトラフィックを停止できるようになると、封じ込めのない速度はガバナンスの決定になる。11月18日の障害はその決定を可視化した。
出典
- https://blog.cloudflare.com/18-november-2025-outage/
- https://blog.cloudflare.com/fail-small-resilience-plan/
- https://blog.cloudflare.com/5-december-2025-outage/
- https://blog.cloudflare.com/deep-dive-into-cloudflares-sept-12-dashboard-and-api-outage/
- https://blog.cloudflare.com/q4-2025-internet-disruption-summary/
- https://status.openai.com/incidents/01KABE2437NJYKBFHT22SD3H92/write-up
- https://status.openai.com/incidents/01KABE2437NJYKBFHT22SD3H92
- https://developers.cloudflare.com/bots/get-started/bot-management/
- https://developers.cloudflare.com/bots/reference/bot-management-variables/
- https://developers.cloudflare.com/kv/concepts/how-kv-works/
- https://developers.cloudflare.com/turnstile/
- https://developers.cloudflare.com/cloudflare-one/access-controls/
- https://developers.cloudflare.com/ruleset-engine/about/
- https://developers.cloudflare.com/workers/versions-and-deployments/
- https://developers.cloudflare.com/workers/versions-and-deployments/gradual-deployments/
- https://developers.cloudflare.com/workers/versions-and-deployments/version-overrides/
- https://developers.cloudflare.com/workers/versions-and-deployments/rollbacks/
- https://developers.cloudflare.com/workers/observability/

