2026年2月20日のCloudflareサービス障害
2026年2月20日、Cloudflareがサービス障害を発生。BYOIP利用者の一部でBGP経由のインターネット接続が切断された。
キーポイント
2026年2月20日にCloudflareがBYOIPサービスの設定変更ミスにより大規模なサービス障害を発生させた
約1,100のBYOIPプレフィックスがBGP経由で誤って撤回され、25%のBYOIP顧客が影響を受けた
障害時間は6時間7分に及び、CloudflareのDNSリゾルバー(1.1.1.1)も403エラーを発生させた
原因はサイバー攻撃ではなく、内部の設定変更ミスによる人為的エラーであった
Cloudflareは原因分析と再発防止策を公表し、顧客への謝罪を行った
影響分析・編集コメントを表示
影響分析
この障害はクラウドインフラの信頼性に対する重要な教訓を示しており、大規模なネットワークプロバイダーにおける設定変更管理の重要性を浮き彫りにした。6時間以上のサービス停止は、BYOIPを利用する企業のビジネス継続性に重大な影響を与え、クラウド依存時代のリスク管理の課題を再認識させる事例となった。
編集コメント
AIシステムの基盤となるクラウドインフラの脆弱性を示す事例として、AIサービスの安定稼働にはインフラレベルの信頼性が不可欠であることを再認識させる内容。
タイトル: 2026年2月20日のCloudflare障害
David Tuber
Dzevad Trumic
2026年2月20日、UTC 17:48に、Cloudflareはサービス障害を経験しました。CloudflareのBring Your Own IP (BYOIP) サービスを利用している一部のお客様において、Border Gateway Protocol (BGP) 経由でインターネットへの経路が撤回される事象が発生しました。
この問題は、直接的にも間接的にも、サイバー攻撃やあらゆる種類の悪意のある活動によって引き起こされたものではありません。この問題は、Cloudflareが自社ネットワークにおけるBYOIPパイプラインを通じてオンボードされたIPアドレスの管理方法に対して行った変更によって引き起こされました。この変更により、Cloudflareは意図せずにお客様のプレフィックスを撤回してしまいました。
一部のBYOIPのお客様にとって、これはインターネットから彼らのサービスやアプリケーションに到達不能となり、BYOIPを使用したCloudflareデプロイメント全体で接続タイムアウトや失敗を引き起こす結果となりました。Cloudflareの再帰的DNSリゾルバー (1.1.1.1) のウェブサイトでも403エラーが発生しました。インシデントの総継続時間は6時間7分で、その大部分の時間は、変更前の状態にプレフィックス設定を復元するために費やされました。
Cloudflareのエンジニアは変更を元に戻し、障害の発生を観測し始めた時点でプレフィックスの撤回は停止しました。しかし、エンジニアが変更を元に戻す前に、約1,100のBYOIPプレフィックスがCloudflareネットワークから撤回されました。一部のお客様は、Cloudflareダッシュボードを使用して自身のIPアドレスを再アドバタイズすることで、自らのサービスを復元することができました。当社はすべてのプレフィックス設定を復元した時点でこのインシデントを解決しました。
お客様への影響を心よりお詫び申し上げます。本日、私たちは皆様の期待に応えることができませんでした。この投稿は、何が正確に起こり、どのシステムとプロセスが失敗したのかについての詳細な説明です。また、このような障害が再発しないようにするために私たちが講じている手順についても概説します。
障害はどのようにお客様に影響を与えたか?
このグラフは、インシデント中にCloudflareがBGPネイバーに対してアドバタイズしたプレフィックスの量を示しており、アドバタイズされなかったプレフィックスはインターネット上で到達不能であったため、影響の度合いと相関しています。
このピアに対してアドバタイズされた合計6,500のプレフィックスのうち、4,306はBYOIPプレフィックスでした。これらのBYOIPプレフィックスはすべてのピアにアドバタイズされ、当社がグローバルにアドバタイズするすべてのBYOIPプレフィックスを表しています。
インシデント中、UTC 17:56から18:46にかけて、合計6,500プレフィックスのうち1,100プレフィックスが撤回されました。合計4,306のBYOIPプレフィックスのうち、25%のBYOIPプレフィックスが意図せず撤回されました。当社はone.one.one.oneへの影響を検出し、より多くのプレフィックスが影響を受ける前に、影響を与える変更を元に戻すことができました。UTC 19:19に、当社はお客様に対し、Cloudflareダッシュボードにアクセスして自身のプレフィックスを再アドバタイズすることでこのインシデントを自己修復できる旨のガイダンスを発表しました。
CloudflareはUTC 20:20頃に多くのアドバタイズ変更を元に戻すことができ、これにより800のプレフィックスが復元されました。なお、約300のプレフィックスは、ソフトウェアのバグにより、それらのプレフィックスのサービス設定がエッジから削除されていたため、ダッシュボードを通じて修復することができませんでした。これらのプレフィックスは、UTC 23:03にCloudflareエンジニアによって手動で復元されました。
このインシデントは、設定変更がすべてのBYOIPお客様に即座ではなく反復的に適用されたため、すべてのBYOIPお客様に影響を与えたわけではありません。設定変更が影響を及ぼしていることが明らかになった後、すべてのお客様が影響を受ける前に変更が元に戻されました。
影響を受けたBYOIPのお客様は、最初にBGPパスハンティングと呼ばれる動作を経験しました。この状態では、エンドユーザーの接続は宛先IPへの経路を見つけようとネットワークを横断します。この動作は、開かれた接続がタイムアウトして失敗するまで持続します。プレフィックスがどこかでアドバタイズされるまで、お客様はこの障害モードを見続けることになります。この「失敗するまでループする」シナリオは、インターネットへのアドバタイズにBYOIPを使用するあらゆる製品に影響を与えました。さらに、Cloudflareの再帰的DNSリゾルバーのウェブサイトであるone.one.one.oneへの訪問者は、HTTP 403エラーと「Edge IP Restricted」というエラーメッセージに遭遇しました。DNS over HTTPSを含む、1.1.1.1パブリックリゾルバーを介したDNS解決は影響を受けませんでした。影響を受けたサービスの完全な内訳は以下の通りです。
サービス/製品
影響の説明
コアCDNおよびセキュリティサービス
トラフィックがCloudflareに引き寄せられず、それらの範囲でアドバタイズされたウェブサイトに接続するユーザーは接続失敗を経験した
BYOIP上のSpectrumアプリは、トラフィックがCloudflareに引き寄せられないため、トラフィックのプロキシに失敗した
専用イグレス
BYOIPを活用したGateway専用イグレス、またはBYOIPを活用したCDNイグレスの専用IPを使用していたお客様は、トラフィックを宛先に送信できなかった
Magic Transitによって保護されたアプリケーションに接続するエンドユーザーは、インターネット上でアドバタイズされず、接続タイムアウトや失敗を経験した
また、Cloudflareダッシュボードでプレフィックスを切り替えることでサービスを復元できないお客様のグループも存在しました。エンジニアがこれらのお客様のためにサービスを復元するためにプレフィックスの再アドバタイズを開始すると、これらのお客様は、自身のIPアドレスがアドバタイズされているにもかかわらず、レイテンシーの増加や障害を経験した可能性があります。これは、一部のユーザーのアドレッシング設定が、自社ソフトウェアの問題によりエッジサーバーから削除されており、その状態をエッジに再度伝播させる必要があったためです。
私たちのアドレッシングシステムで具体的に何が壊れたのかについて説明しますが、そのためには、Cloudflareにおけるお客様のIPアドレスの根本的な信頼できる情報源である「Addressing API」について簡単に説明する必要があります。
CloudflareのAddressing API
Addressing APIは、Cloudflareネットワーク上に存在するアドレスの権威あるデータセットです。そのデータセットへの変更は、直ちにCloudflareのグローバルネットワークに反映されます。私たちは現在、Code Orange: Fail Smallの一環として、これらのシステムがどのように変更をロールアウトするかを改善する過程にありますが、現時点では、お客様はパブリック向けAPIを操作することでIPアドレスを設定できます。これらのAPIは、変更をCloudflareのエッジに伝播させる運用ワークフローをトリガーする一連のデータベースを設定します。これは、Addressing APIへの変更が直ちにCloudflareエッジに伝播されることを意味します。
Cloudflare上でIPアドレスをアドバタイズおよび設定するには、いくつかのステップが関与します:
- お客様は、Addressing APIまたはBGP Controlを介して、IPアドレスのアドバタイズ/撤回をCloudflareに通知する
- Addressing APIは、マシンにプレフィックスアドバタイズの変更を指示する
- プレフィックスを更新する通知を十分な数のマシンが受信すると、ルーター上でBGPが更新される
- 最後に、お客様はサービスバインディングを介してCloudflare製品がBYOIPアドレスを使用するように設定でき、これにより製品がこれらの範囲に割り当てられる
Addressing APIにより、アドレスのアドバタイズや撤回に関連するプロセスの大部分を自動化することができますが、一部のプロセスは依然として手動操作を必要とします。これらの手動プロセスは、本番環境に近いためリスクが高いものです。Code Orange: Fail Smallの一環として、是正措置の目標の一つは、Addressing APIで行われていた手動操作を削除し、安全なワークフローに置き換えることでした。
インシデントはどのように発生したか?
障害が発生した具体的な設定部分は、CloudflareのBYOIPサービスからプレフィックスを削除するという、現在は手動で行われている日常的なお客様のリクエストを自動化しようとする変更でした。この手動プロセスの削除は、すべての変更を安全で自動化された、修復可能なものへと推進するための私たちのCode Orange: Fail Small作業の一部でした。
原文を表示
Cloudflare outage on February 20, 2026
David Tuber
Dzevad Trumic
On February 20, 2026, at 17:48 UTC, Cloudflare experienced a service outage when a subset of customers who use Cloudflare’s Bring Your Own IP (BYOIP) service saw their routes to the Internet withdrawn via Border Gateway Protocol (BGP).
The issue was not caused, directly or indirectly, by a cyberattack or malicious activity of any kind. This issue was caused by a change that Cloudflare made to how our network manages IP addresses onboarded through the BYOIP pipeline. This change caused Cloudflare to unintentionally withdraw customer prefixes.
For some BYOIP customers, this resulted in their services and applications being unreachable from the Internet, causing timeouts and failures to connect across their Cloudflare deployments that used BYOIP. The website for Cloudflare’s recursive DNS resolver (1.1.1.1) saw 403 errors as well. The total duration of the incident was 6 hours and 7 minutes with most of that time spent restoring prefix configurations to their state prior to the change.
Cloudflare engineers reverted the change and prefixes stopped being withdrawn when we began to observe failures. However, before engineers were able to revert the change, ~1,100 BYOIP prefixes were withdrawn from the Cloudflare network. Some customers were able to restore their own service by using the Cloudflare dashboard to re-advertise their IP addresses. We resolved the incident when we restored all prefix configurations.
We are sorry for the impact to our customers. We let you down today. This post is an in-depth recounting of exactly what happened and which systems and processes failed. We will also outline the steps we are taking to prevent outages like this from happening again.
How did the outage impact customers?
This graph shows the amount of prefixes advertised by Cloudflare during the incident to a BGP neighbor, which correlates to impact as prefixes that weren’t advertised were unreachable on the Internet:
Out of the total 6,500 prefixes advertised to this peer, 4,306 of those were BYOIP prefixes. These BYOIP prefixes are advertised to every peer and represent all the BYOIP prefixes we advertise globally.
During the incident, 1,100 prefixes out of the total 6,500 were withdrawn from 17:56 to 18:46 UTC. Out of the 4,306 total BYOIP prefixes, 25% of BYOIP prefixes were unintentionally withdrawn. We were able to detect impact on one.one.one.one and revert the impacting change before more prefixes were impacted. At 19:19 UTC, we published guidance to customers that they would be able to self-remediate this incident by going to the Cloudflare dashboard and re-advertising their prefixes.
Cloudflare was able to revert many of the advertisement changes around 20:20 UTC, which caused 800 prefixes to be restored. There were still ~300 prefixes that were unable to be remediated through the dashboard because the service configurations for those prefixes were removed from the edge due to a software bug. These prefixes were manually restored by Cloudflare engineers at 23:03 UTC.
This incident did not impact all BYOIP customers because the configuration change was applied iteratively and not instantaneously across all BYOIP customers. Once the configuration change was revealed to be causing impact, the change was reverted before all customers were affected.
The impacted BYOIP customers first experienced a behavior called BGP Path Hunting. In this state, end user connections traverse networks trying to find a route to the destination IP. This behavior will persist until the connection that was opened times out and fails. Until the prefix is advertised somewhere, customers will continue to see this failure mode. This loop-until-failure scenario affected any product that uses BYOIP for advertisement to the Internet. Additionally, visitors to one.one.one.one, the website for Cloudflare’s recursive DNS resolver, were met with HTTP 403 errors and an “Edge IP Restricted” error message. DNS resolution over the 1.1.1.1 Public Resolver, including DNS over HTTPS, was not affected. A full breakdown of the services impacted is below.
Service/Product
Impact Description
Core CDN and Security Services
Traffic was not attracted to Cloudflare, and users connecting to websites advertised on those ranges would have seen failures to connect
Spectrum apps on BYOIP failed to proxy traffic due to traffic not being attracted to Cloudflare
Dedicated Egress
Customers who used Gateway Dedicated Egress leveraging BYOIP or Dedicated IPs for CDN Egress leveraging BYOIP would not have been able to send traffic out to their destinations
End users connecting to applications protected by Magic Transit would not have been advertised on the Internet, and would have seen connection timeouts and failures
There was also a set of customers who were unable to restore service by toggling the prefixes on the Cloudflare dashboard. As engineers began reannouncing prefixes to restore service for these customers, these customers may have seen increased latency and failures despite their IP addresses being advertised. This was because the addressing settings for some users were removed from edge servers due an issue in our own software, and the state had to be propagated back to the edge.
We’re going to get into what exactly broke in our addressing system, but to do that we need to cover a quick primer on the Addressing API, which is the underlying source of truth for customer IP addresses at Cloudflare.
Cloudflare’s Addressing API
The Addressing API is an authoritative dataset of the addresses present on the Cloudflare network. Any change to that dataset is immediately reflected in Cloudflare's global network. While we are in the process of improving how these systems roll out changes as a part of Code Orange: Fail Small, today customers can configure their IP addresses by interacting with public-facing APIs which configure a set of databases that trigger operational workflows propagating the changes to Cloudflare’s edge. This means that changes to the Addressing API are immediately propagated to the Cloudflare edge.
Advertising and configuring IP addresses on Cloudflare involves several steps:
Customers signal to Cloudflare about advertisement/withdrawal of IP addresses via the Addressing API or BGP Control
The Addressing API instructs the machines to change the prefix advertisements
BGP will be updated on the routers once enough machines have received the notification to update the prefix
Finally, customers can configure Cloudflare products to use BYOIP addresses via service bindings which will assign products to these ranges
The Addressing API allows us to automate most of the processes surrounding how we advertise or withdraw addresses, but some processes still require manual actions. These manual processes are risky because of their close proximity to Production. As a part of Code Orange: Fail Small, one of the goals of remediation was to remove manual actions taken in the Addressing API and replace them with safe workflows.
How did the incident occur?
The specific piece of configuration that broke was a modification attempting to automate the customer action of removing prefixes from Cloudflare’s BYOIP service, a regular customer request that is done manually today. Removing this manual process was part of our Code Orange: Fail Small work to push all changes toward safe, automated, health-mediated deployment. Since the list of related objects of BYOIP prefixes can be large, this was implemented as part of a regularly running sub-task that checks for BYOIP prefixes that should be removed, and then removes them. Unfortunately, this regular cleanup sub-task queried the API with a bug.
Here is the API query from the cleanup sub-task:
resp, err := d.doRequest(ctx, http.MethodGet, /v1/prefixes?pending_delete, nil)
And here is the relevant part of the API implementation:
if v := req.URL.Query().Get("pending_delete"); v != "" { // ignore other behavior and fetch pending objects from the ip_prefixes_deleted table prefixes, err := c.RO().IPPrefixes().FetchPrefixesPendingDeletion(ctx) if err != nil { api.RenderError(ctx, w, ErrInternalError) return } api.Render(ctx, w, http.StatusOK, renderIPPrefixAPIResponse(prefixes, nil)) return }
Because the client is passing pending_delete with no value, the result of Query().Get(“pending_delete”) here will be an empty string (“”), so the API server interprets this as a request for all BYOIP prefixes instead of just those prefixes that were supposed to be removed. The system interpreted this as all returned prefixes being queued for deletion. The new sub-task then began systematically deleting all BYOIP prefixes and all of their related dependent objects including service bindings, until the impact was noticed, and an engineer identified the sub-task and shut it down.
Why did Cloudflare not catch the bug in our staging environment or testing?
Our staging environment contains data that matches Production as closely as possible, but was not sufficient in this case and the mock data we relied on to simulate what would occur was insufficient.
In addition, while we have tests for this functionality, coverage for this scenario in our testing process and environment was incomplete. Initial testing and code review focused on the BYOIP self-service API journey and were completed successfully. While our engineers successfully tested the exact process a customer would have followed, testing did not cover a scenario where the task-runner service would independently execute changes to user data without explicit input.
Why was recovery not immediate?
Affected BYOIP prefixes were not all impacted in the same way, necessitating more intensive data recovery steps. As a part of Code Orange: Fail Small, we are building a system where operational state snapshots can be safely rolled out through health-mediated deployments. In the event something does roll out that causes unexpected behavior, it can be very quickly rolled back to a known-good state. However, that system is not in Production today.
BYOIP prefixes were in different states of impact during this incident, and each of these different states required different actions:
Most impacted customers only had their prefixes withdrawn. Customers in this configuration could go into the dashboard and toggle their advertisements, which would restore service.
Some customers had their prefixes withdrawn and some bindings removed. These customers were in a partial state of recovery where they could toggle some prefixes but not others.
Some customers had their prefixes withdrawn and all service bindings removed. They could not toggle their prefixes in the dashboard because there was no service (Magic Transit, Spectrum, CDN) bound to them. These customers took the longest to mitigate, as a global configuration update had to be initiated to reapply the service bindings for all these customers to every single machine on Cloudflare’s edge.
How does this incident relate to Code Orange: Fail Small?
The change we were making when this incident occurred is part of the Code Orange: Fail Small initiative, which is aimed at improving the resiliency of code and configuration at Cloudflare. As a brief primer of the Code Orange: Fail Small initiatives, the work can be divided into three buckets:
Require controlled rollouts for any configuration change
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み