【技術関連】Cloudflareに頼らないインフラ設計

911

どうも、TakasumiBOTの運営支援してるNeodylandの多趣味フルスタックエンジニアのみかんです!今日はTakasumiBOTの裏で動いてるインフラの改善についてちょっと書いてみました!

先日(18/20/2025)発生した大規模なCloudflare障害にTakasumiBOTの一部システムが巻き込まれ、様々な所でTakasumiBOTのサービス品質が低下し、ユーザー認証ができない等の問題が発生しました。これに関しましては、想定外の外部システム障害への対策不足と壊れやすい設計のシステムを開発した私が責任を持って謝ります。誠に申し訳ございませんでした。

さて、今回のことがあってからの再発防止策についてのことを伝えます。

簡単に言うと、Cloudflare等の外部サービスにできるだけ頼らないようにTakasumiBOTのシステムを改良しました!

もちろん、ユーザー認証のCaptchaやVPN対策等で外部サービスを使いかねない部分はありますが、今回の改良でそこそこ頼りを減らしたと思われます。

今までの設計

Web全般には影響がありましたが、今回は一番被害が大きかったユーザー認証システムの「TakasumiBOT Auth」の設計について話します。

元々TakasumiBOTでは、最近開始されたNeodylandの独自ネットワーク事業の速度とキャパシティを試してみたかったため、大半のサイトで使われてる「Cloudflareプロキシ」は利用していませんでした。これは、サイトの全てのトラフィックをCloudflareを一旦通してからユーザーに送る設計であって、これを使っていれば今回の障害の被害はもっと拡大していたでしょう。

一般的なCloudflareを通したWebサイトの設計。

良かったことに、今回はNeodyネットワーク内の自前ロードバランサーを利用していたのでサイトが完全にアクセス不可能になるのは逃れることができました。

TakasumiBOTが利用しているサーバー設計。

しかし、Authの裏ではまだCloudflareに頼っている部分があって、そこで問題が発生していました。

初めの問題は、認証時に最初に出る「認証中…」の画面が動いている時に発生しました。

認証の最初の段階は、Cloudflare製のTurnstileという簡単なスパム・ボット対策のツールを使ってユーザーを検証していました。これは最近人気が出ていて、ネットを使っていたら下の画像みたいなやつを見たことない人の方が少ないでしょう。(なおTakasumiBOTは下のは出ない設定でりようしていました)

よくあるやつ。

こちらのシステムはCloudflare障害発生中完全に利用不可能になったため、障害中Web認証しようとしたユーザーは永遠に「認証中…」画面が出ていました。

「さて、Cloudflare関連のインフラはこれだけだ!これをなくしたから動くはず!!」と思っているでしょう。私もそう思っていましたが、肝心なことを忘れていました(笑)

それは、認証の第二段階で起こることでした。

セキュリティをもっと強化するように、TakasumiBOTでは上記のCaptchaに加えてVPN等の悪質なIPアドレスへの対策も行っております。そこでは、IPアドレスを審査する別途サービスを使っていました。ただ、そのサービスの利用料が結構かかる為、毎回叩いてる訳ではありません。そちらのサービスのデータを一時的に保存して再利用するキャッシングシステムを別途作成して、それを叩いてユーザー認証していました。そこで、第二の問題が発生しました。

元々、キャッシングサーバーをHonoというAPIフレームワークと、Upstashというデータベースプロバイダーを利用する設計で書いていました。なぜなら、私はその時はこういうマイクロサービスをサーバーを用意せずにデプロイできるCloudflare Workersで動かしていたからです。

他人に頼り過ぎのゴミ設計。

今振り返ると、複数個の外部プロバイダーに頼る設計の外部サービスに頼るマイクロサービスを書くのは良くなかったですね。(笑)

Cloudflare障害のせいでこの裏のマイクロサービスがダウンした為、最初のCaptchaを通ることができたユーザーもIPアドレス検査ができなかった為認証できませんでした。

再発防止策

さて、これらの問題が再度起きないようにはどうしたでしょう?

まず一個目の問題は、認証の初段階ではもう少し頑丈で信頼性があるGoogle reCAPTCHAを利用するように変更しました。

これもよくあるやつ。(なおTakasumiBOTではこれ自体は出ません)

もっと重大な二個目の問題は、原因のマイクロサービスで大幅な設計変更を行いました。元々Honoを使っていましたが、まずはじめにTakasumiBOTのAPIで使っていて、主が最も推しているElysiaというAPIフレームワークに変更しました。すごくオススメです。皆様も使ってみてください。めっちゃ快適です。

それと、キャッシュのデータベースも自前のRedisで動くように実装を変更しました。最終的には、こんな感じの設計になりました。

現在利用中のVery Good設計。

ちなみにその書き直したキャッシングサーバーのコードはオープンソースとして公開してるよ〜

後書き

このAuthの2つの再設計と裏での微調整を行った結果、現在TakasumiBOTのサービス運営で利用しているインフラではCloudflareを一切利用しなくなりました!

これからも外部の障害に倒されない、いつでも頼れるTakasumiBOTの設計と開発を務めて行きたいと思っています!

それでは今回の「みかんのインフラ設計」はここでおしまいです!最後まで読んでくれてありがとう!!

また機会(とやる気)があればこういう技術関連の記事を書いてみたいと思います!(実際書くかは別の話)

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です