新規投稿のお知らせを受信されたい方は、サブスクリプションをご登録ください:

2023年10月30日のCloudflareインシデント

2023-11-01

4分で読了
この投稿はEnglish繁體中文FrançaisDeutsch한국어Español简体中文でも表示されます。

2023年10月30日、複数のCloudflareサービスが37分間利用できませんでした。これは、Workers KVが使用しているデプロイツールの設定ミスが原因でした。Cloudflareは自社製品群に依存していたため、本インシデントはより困難なものとなりました。お客様に多大なご迷惑をおかけしたことを深くお詫び申し上げます。以下では、何が問題だったのか、インシデントはどのように解決されたのか、そして再発防止に向けた取り組みについてまとめています。

Workers KVは、グローバルに分散されたキーバリューストアです。設定データ、ルーティングルックアップ、静的アセットバンドル、認証トークン、その他低遅延アクセスを必要とするデータを管理するために、お客様とCloudflareチームの双方に使用されています。

このインシデントにおいて、KVは、KVが使用する新しいデプロイツールのバグにより、要求されたキーと値のペアの代わりに、HTTP 401(Unauthorized)ステータスコードと思われるものを返しました。

これらのエラーは、KVが各サービスでどのように使用されているかによって、各製品で異なる形で現れ、その影響を以下に詳しく記載します。

影響を受けたもの

多くのCloudflareサービスは、設定、ルーティング情報、静的アセットサービス、認証状態をグローバルに配布するためにWorkers KVに依存しています。これらのサービスでは、KVネームスペースに対してget、put、delete、またはlist操作を実行すると、代わりにHTTP 401(Unauthorized)エラーが発生しました。

以下のCloudflare製品をご利用のお客様は、インシデントが発生している間、エラー発生率の上昇や、一部またはすべての機能にアクセスできない可能性がありました。

.tg {border-collapse:collapse;border-color:#ccc;border-spacing:0;} .tg td{background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{background-color:#f0f0f0;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-7s56{background-color:#F4F5F7;text-align:left;vertical-align:top} .tg .tg-0lax{text-align:left;vertical-align:top}

Product Impact
Workers KV Customers with applications leveraging KV saw those applications fail during the duration of this incident, including both the KV API within Workers, and the REST API.
Workers applications not using KV were not impacted.
Pages Applications hosted on Pages were unreachable for the duration of the incident and returned HTTP 500 errors to users. New Pages deployments also returned HTTP 500 errors to users for the duration.
Access Users who were unauthenticated could not log in; any origin attempting to validate the JWT using the /certs endpoint would fail; any application with a device posture policy failed for all users.
Existing logged-in sessions that did not use the /certs endpoint or posture checks were unaffected. Overall, a large percentage of existing sessions were still affected.
WARP / Zero Trust Users were unable to register new devices or connect to resources subject to policies that enforce Device Posture checks or WARP Session timeouts.
Devices already enrolled, resources not relying on device posture, or that had re-authorized outside of this window were unaffected.
Images The Images API returned errors during the incident. Existing image delivery was not impacted.
Cache Purge (single file) Single file purge was partially unavailable for the duration of the incident as some data centers could not access configuration data in KV. Data centers that had existing configuration data locally cached were unaffected.
Other cache purge mechanisms, including purge by tag, were unaffected.
Workers Uploading or editing Workers through the dashboard, wrangler or API returned errors during the incident. Deployed Workers were not impacted, unless they used KV.
AI Gateway AI Gateway was not able to proxy requests for the duration of the incident.
Waiting Room Waiting Room configuration is stored at the edge in Workers KV. Waiting Room configurations, and configuration changes, were unavailable and the service failed open.
When access to KV was restored, some Waiting Room users would have experienced queuing as the service came back up.
Turnstile and Challenge Pages Turnstile's JavaScript assets are stored in KV, and the entry point for Turnstile (api.js) was not able to be served. Clients accessing pages using Turnstile could not initialize the Turnstile widget and would have failed closed during the incident window.
Challenge Pages (which products like Custom, Managed and Rate Limiting rules use) also use Turnstile infrastructure for presenting challenge pages to users under specific conditions, and would have blocked users who were presented with a challenge during that period.
Cloudflare Dashboard Parts of the Cloudflare dashboard that rely on Turnstile and/or our internal feature flag tooling (which uses KV for configuration) returned errors to users for the duration.

製品

影響

Time Description
2023-10-30 18:58 UTC The Workers KV team began a progressive deployment of a new KV build to production.
2023-10-30 19:29 UTC The internal progressive deployment API returns staging build GUID to a call to list production builds.
2023-10-30 19:40 UTC The progressive deployment API was used to continue rolling out the release. This routed a percentage of traffic to the wrong destination, triggering alerting and leading to the decision to roll back.
2023-10-30 19:54 UTC Rollback via progressive deployment API attempted, traffic starts to fail at scale. — IMPACT START —
2023-10-30 20:15 UTC Cloudflare engineers manually edit (via break glass mechanisms) deployment routes to revert to last known good build for the majority of traffic.
2023-10-30 20:29 UTC Workers KV error rates return to normal pre-incident levels, and impacted services recover within the following minute.
2023-10-30 20:31 UTC Impact resolved — IMPACT END —

Workers KV

KVを活用したアプリケーションをお使いのお客様では、このインシデントの期間中、Workers内のKV APIとREST APIの両方を含め、これらのアプリケーションに障害が発生しました。Workers KVを使用していないアプリケーションに影響はありませんでした。

Pages

Cloudflare Pages上でホストされているアプリケーションは、インシデントが発生している間アクセスできず、ユーザーにHTTP 500エラーが返されました。また、Cloudflare Pagesの新規デプロイでは、インシデント中、ユーザーにHTTP 500エラーが返されました。

Access

認証されていないユーザーはログインできませんでした。/certsエンドポイントを使用してJWTを検証しようとするオリジンは失敗しました。いずれのユーザーでも、デバイスポスチャーを持つアプリケーションで障害が発生しました。/certsエンドポイントまたはポスチャーチェックを使用しない既存のログインセッションは影響を受けませんでした。全体として、既存のセッションの大部分は依然として影響を受けました。

WARP / Zero Trust

ユーザーが新しいデバイスを登録できなかったり、デバイスポスチャーチェックやWarpセッションタイムアウトを強制するポリシーの対象となるリソースに接続できませんでした。すでに登録されているデバイス、デバイスポスチャーを使用しないリソース、またはこのウィンドウ外で再認証されたリソースは影響を受けませんでした。

画像

インシデントの間、Images APIはエラーを返しました。既存の画像配信に影響はありませんでした。

キャッシュのパージ(単一ファイル)

一部のデータセンターがKVの設定データにアクセスできなかったため、インシデントの間、単一ファイルのパージを部分的に利用できませんでした。既存の設定データをローカルにキャッシュしていたデータセンターは影響を受けませんでした。タグによるパージを含む他のキャッシュのパージメカニズムは影響を受けませんでした。

Workers

ダッシュボード、Wrangler、またはAPIを使用してWorkersをアップロードまたは編集すると、インシデント中にエラーが返されました。デプロイ済みのWorkersは、KVを使用していない限り影響を受けませんでした。

AI Gateway

AI Gatewayはインシデントの間、リクエストのプロキシができませんでした。

Waiting Room

Waiting Roomの設定はWorkers KVでエッジに保存されます。インシデントの間、Waiting Roomの設定や設定変更が利用できず、サービスを開くことができませんでした。KVへのアクセスが回復したとき、一部のWaiting Roomユーザーはサービス回復時にキューに入ることがありました。

Turnstileとチャレンジページ

TurnstileのJavaScriptアセットがKVに保存されており、Turnstileのエントリーポイント(API.js)を提供できませんでした。インシデントの間、Turnstileを使用してページにアクセスするクライアントが、Turnstileウィジェットを初期化できず、障害が発生しました。チャレンジページ(カスタム、マネージド、レート制限ルールなどの製品が使用する)も、特定の条件下でユーザーにチャレンジページを提示するためのTurnstileインフラストラクチャを使用しており、その期間中にチャレンジが提示されたユーザーはブロックされました。

Cloudflareダッシュボード

Turnstileや(設定にKVを使用する)内部機能フラグツールを使用するCloudflareダッシュボードの一部は、インシデントの間、ユーザーにエラーを返しました。

タイムライン

参照されるタイムスタンプはすべて協定世界時(UTC)です。

.tg {border-collapse:collapse;border-color:#ccc;border-spacing:0;} .tg td{background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{background-color:#f0f0f0;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-ppch{background-color:#F4F5F7;color:#000000;font-weight:bold;text-align:left;vertical-align:top} .tg .tg-096r{color:#000000;text-align:left;vertical-align:top}

時間

説明

2023-10-30 18:58 UTC

Workers KVチームは、新しいKVビルドの本番環境へのプログレッシブデプロイを開始しました。

2023-10-30 19:29 UTC

内部プログレッシブデプロイAPIは、本番ビルドを一覧表示する呼び出しに対してステージングビルドGUIDを返しました。

2023-10-30 19:40 UTC

プログレッシブデプロイAPIは、リリースを継続的に展開するために使用されました。このため、トラフィックの何割かが誤った宛先にルーティングされ、警告が発せられ、ロールバックの決定につながりました。

2023-10-30 19:54 UTC

プログレッシブデプロイAPIによるロールバックを試みましたが、規模が大きくなるにつれてトラフィックに障害が発生しました。—影響開始—

2023-10-30 20:15 UTC

Cloudflareのエンジニアは、(break-glassメカニズムを使って)デプロイルートを手動で編集し、大部分のトラフィックについては、直近の正常なビルドに戻すことができました。

2023-10-30 20:29 UTC

Workers KVのエラー率はインシデント前の通常のレベルに戻り、影響を受けたサービスは次の数分以内に復旧しました。

2023-10-30 20:31 UTC

影響解決 —影響終了—

上記のタイムラインに示されているように、19:54 UTCに問題を認識してから、20:15 UTCに実際にロールバックを実行できるようになるまでには遅れがありました。

これは、Cloudflare内の複数のツールが、Cloudflare Accessを含むWorkers KVに依存していることが原因でした。Accessは、リクエスト検証プロセスの一環として、Workers KVを使用しています。このため、内部ツールを活用することができず、通常のツールをバイパスするためにbreak-glassメカニズムを使用せざるを得ませんでした。後述するように、Cloudflareはロールバックメカニズムのテストに十分な時間を費やしていませんでした。今後、これを強化していく所存です。

解決方法

Cloudflareのエンジニアは、(break-glassメカニズムを使用して)本番用ルートを以前の作業バージョンのWorkers KVに手動で切り替えました。これにより、失敗したリクエストパスがすぐに解消され、Workers KVのデプロイに関する問題が解決されました。

分析

Workers KVは、Cloudflareのネットワーク上で、可能な限りユーザーの近くに永続的なデータを保存することを可能にする、遅延の少ないキーバリューストアです。この分散型キーバリューストアは多くのアプリケーションで使用されており、その中にはCloudflare Pages、Access、Zero TrustのようなCloudflareのファーストパーティ製品もあります。

Workers KVチームは、専用のデプロイツールを使って新しいリリースのプログレッシブデプロイを進めていました。デプロイメカニズムには、ステージング環境と本番環境が含まれ、すべての本番環境が最新の本番ビルドにアップグレードされるまで、本番環境が新しいバージョンにプログレッシブデプロイの割合に従ってアップグレードされるプロセスが利用されます。デプロイツールには、リリースとそれぞれのバージョンを返す方法に潜在的なバグがありました。このツールは単一の環境からリリースを返すのではなく、意図したよりも幅広いリリースのリストを返し、その結果、本番リリースとステージングリリースが一緒に返されました。

このインシデントでは、サービスはステージングでデプロイされ、テストされました。しかし、デプロイ自動化のバグにより、本番環境へのデプロイ時に、本番アカウントのプレプロダクションバージョンではなく、ステージングアカウントにデプロイされたスクリプトが、誤って参照されました。その結果、デプロイメカニズムは、本番環境のどこにも実行されていないバージョンを本番環境に指し示し、トラフィックをブラックホールにルーティングしました。

このような事態が発生すると、本番稼動中のWorkers KVは、製品へのアクセスが許可されていないバージョンに誘導され、HTTP 401エラーコードを返すため、アクセス不能となりました。このため、KVにキーバリューペアを保存している製品では、そのキーバリューペアがローカルにキャッシュされているかどうかに関係なく、障害が発生しました。

自動アラートは問題をすぐに検出しましたが、問題の発生を認識してから実際にロールバックを実行できるまでに時間がかかりました。これは、Cloudflare内の複数のツールが、Cloudflare Accessを含むWorkers KVに依存していることが原因でした。Accessは、ユーザーJWT(JSON Webトークン)の検証プロセスの一部として、Workers KVを使用しています。

これらのツールには、変更を戻すために使用されたダッシュボードや、継続的インテグレーション(CI)システムにアクセスするための認証メカニズムが含まれます。Workers KVがダウンしたため、これらのサービスもダウンしました。CIシステムによる自動ロールバックは以前にもテストされていましたが、今回のインシデントによる認証の問題(AccessはKVに依存しているため)により、デプロイをロールバックするために必要なシークレットにアクセスすることができませんでした。

最終的な修正は、本番用ビルドパスを既知の良好なものに手動で変更することで行われました。このパスはデプロイされたことが知られており、デプロイを試みる前の本番ビルドでした。

次のステップ

Cloudflareのより多くのチームがWorkersを基盤とするにつれ、私たちは「有機的に」Workers KVが今や私たちの製品やサービスの膨大な部分を支えるに至っています。このインシデントにより、私たちは重要な依存関係の広範な影響を小さくする方法を再検討する必要性がさらに強まりました。これには、デプロイツールの洗練度の向上、社内チームにとっての使いやすさ、これらの依存関係にある製品レベルでの制御などが含まれます。私たちは、このようなインシデントを繰り返さないために、これらの取り組みに優先順位をつけて対応中です。

これはまた、Cloudflareが社内およびお客様向けにWorkersアプリケーションのプログレッシブデプロイの際のツールの改善と、当該ツールの安全性を向上させる必要性を補強するものでもあります。

これには、今四半期の主なフォローアップ活動の以下のリスト(順不同)が含まれます(ただし、これに限定されません)。

  1. 標準化されたWorkersデプロイモデルにKVを搭載し、影響の検出と復旧に自動システムを使用する。

  2. ロールバックプロセスが既知の正常なデプロイ識別子にアクセスできること、およびCloudflare Accessがダウンしているときにロールバックプロセスが機能することを確認する。

  3. デプロイに事前チェックを追加し、入力パラメーターを検証することで、バージョンの不一致が本番環境に伝播しないようにする。

  4. プログレッシブデプロイツールを強化し、マルチテナント用に設計された方法で動作するようにする。現在の設計では、シングルテナントモデルを想定しています。

  5. プログレッシブデプロイスクリプトに新たな検証を追加し、デプロイがアプリ環境(本番環境、ステージング環境など)と一致していることを検証する。

繰り返しになりますが、この件がお客様に与えた影響を非常に深刻に受け止めており、このような事態が発生したことを深くお詫びいたします。

Cloudflareは企業ネットワーク全体を保護し、お客様がインターネット規模のアプリケーションを効率的に構築し、あらゆるWebサイトやインターネットアプリケーションを高速化し、DDoS攻撃を退けハッカーの侵入を防ぎゼロトラスト導入を推進できるようお手伝いしています。

ご使用のデバイスから1.1.1.1 にアクセスし、インターネットを高速化し安全性を高めるCloudflareの無料アプリをご利用ください。

より良いインターネットの構築支援という当社の使命について、詳しくはこちらをご覧ください。新たなキャリアの方向性を模索中の方は、当社の求人情報をご覧ください。
Post Mortem

Xでフォロー

Matt Silverlock|@elithrar
Cloudflare|@cloudflare

関連ブログ投稿