日本のワクチン接種を支えたCloudflare Waiting Roomのプラクティス
クラスメソッドはCloudflareのFair Shotプロジェクトに賛同し、ワクチン接種を推進する自治体・医療機関・協力企業にデジタル待合室Cloudflare Waiting Roomを無償提供しています。
10月1日時点で
- 全国1713自治体中223自治体のワクチン接種受付システムに導入。
- 人口カバー35,413,000人。全人口の28%。
- 全国3600医療機関の受付システム、フォームへ導入。
という導入実績で、予約時にCloudflareと弊社のロゴを見かけた方は結構いらっしゃるんじゃないでしょうか。
2回目のワクチン予約のために、Cloudflare Waiting Roomのお世話になっている。 15分正座で待機です。 pic.twitter.com/zMO8T9hmeH
— とげ (@toge_) August 15, 2021
特に7月頃はサイトの混雑から待機画面が表示される機会が多く、Twitterでどう攻略するのがいいのかという議論をよく目にしました。的を射ている推理もあればそうでないものもありましたが、年明けにはブースターショットの予約も始まりますので、Waiting Room導入のプラクティスを示すことで少し種明かしをしてみたいと思います。
DNSレベルでの振り分け
Waiting Roomの基本構成はこのようになっています。
いわゆるリクエストキューイングやスロッティングのソリューションは、オリジンサーバーへのロードバランシングを行う以前かCDN上にサービスが設けられるのが一般的ですが、Cloudflare Waiting RoomはCDNに到達する前に、利用者がDNSへの名前解決リクエストを行った時点で動作します。
これは商用のDNSサービスとしてはおそらく最大手になるCloudflareのユニークな解決方法で、混雑時にはWebサービスのコンテンツリソースには一切負荷が発生せずに順番待ちの判定、照合を行うことができます。
このDNSレベルでの動作は、後続のインフラやオリジンサーバーのプログラムにタッチをせずに待合室を設置、設定できるという短期導入の助けにもなっています。DNSのAレコードにIPアドレスを入力するか、CNAMEでロードバランサーやCDNのエンドポイントを指定するだけです。
シンプルで強力なWAFによる不正防止
予約サイトを時限でオープンするような施策を取る場合、F5連打での更新など古典的な手法や、ワクチン接種予約に特有な、おじいちゃんおばあちゃんの予約を孫総出でパソコンとスマホからアクセスして取りに行くなどの競争が発生します。
また、Waiting Roomを設置することで、多窓を使って待機室を占拠しようとする人が出てくるなど、別の問題も発生してきます。
Waiting Roomを導入したほとんどの自治体やSIerは、Cloudflare WAF、Anti-DDoS、Anti-Botの機能をあわせて使うことでこれらを解決しました。
なかでもSuper Bot Fight Modeは、Cloudflareの脅威インテリジェンスによってリクエストの特徴を把握、分類し、アクセスブロックやreCaptchaを挟んでアクセスコストを上げる措置を自動で発動できる強力な防御です。
オリジンキャパシティに応じた待機室の設定
突発的なアクセススパイクは、どんなにオリジンキャパシティを増やしたとしてもサービスの継続を困難にします。Waiting Roomはそれを解決するものですが、動作機序としては、
- DNSへの問い合わせをカウントする。
- それをアクティブユーザー数 = オリジンの同時処理キャパシティとして設定。
- しきい値を超えたものは待機室に誘導。
- 1分あたりの新規アクセスユーザーを設定。
- オリジンサーバーでの滞在、操作時間を設定。
- 上記2つのパラメーターからアクティブユーザー数を超えないよう順番待ち計算を行い、順次オリジンへ誘導する。
- オリジンへ通過するリクエストへはセッションCookieが付与され、設定した滞在時間内であればブラウザを閉じたとしても(一般的なブラウザの設定であれば)並び直しをしない。
となります。
このため、DNS、WAFの不正対策フィルタ通過して待機室に入ったリクエストは、きわめて平等な扱いを受けます。また、実際に待機室の画面が表示されずにオリジンに到達する場合でも、セッションCookieが付与されるプロセスを経るためアクセスがシリアライズされ、オリジンへの同時アクセス負荷をやわらげます。
また、さまざまな創意工夫を凝らした運用がとられました。
- ランディングページと予約ページにそれぞれ待機室を設置して二段構えにする。
- 予約開始時間の最初のアクティブユーザー設定をあえて絞り、待ち時間を長く見せて諦めさせる。
- 電話受付を行っているオペレーターが実際はWeb予約と同じ画面を見て予約代行をしているので、コールセンターをスキップさせるページルール作成する。
- 早出組を有利にしないため、予約開始時にWaiting Roomをフラッシュする。
- 配布数が希少な場合、Waiting Roomで予約枠終了のお知らせを表示する。
- フォームサービスやSaaSのエンドポイントにWaiting Roomを設置する。
これらは自治体やバックエンドシステムの事情によるので一概には言えませんが、Waiting Roomが設置されている予約サイトは安全性、継続性、公平性が高く、想定されるほとんどの攻略法やハッキングは役に立ちません。待合室が表示されたら、だまって待っておく、というのが結局一番ということです。
今年のCloudflareのアドベントカレンダーが始まっています。ぜひご覧ください。