エッジでの不正検知:Cloudflare Workers + tracio.ai
リクエストがオリジンに到達する前に、Cloudflare Workersでデバイスフィンガープリントの検証を実行します。エッジでの5ms未満の不正判断を実現します。
従来の不正検知はアプリケーション層で行われます。リクエストがサーバーに到着し、不正検知APIにクエリを送り、応答を待ち、それから許可するかブロックするかを判断します。この往復は、すべてのリクエストに50〜200msのレイテンシを加えます。ページ読み込みには許容できても、APIエンドポイント、AJAX呼び出し、リアルタイムの操作には苦痛です。
リクエストがオリジンサーバーに到達する前に不正判断を下せるとしたらどうでしょうか。それこそがエッジコンピューティングが可能にするものであり、Cloudflare Workersは私たちがこのパターンを示すために使うプラットフォームです。
アーキテクチャ
この構成には3つのコンポーネントがあります。ブラウザで動作するtracio.ai JS SDK(@tracio/sdk)、クライアントとオリジンの間に位置するCloudflare Worker、そして完全なシグナル分析をバックエンドに届ける署名付きのtracio.aiウェブフックです。
フローは次のように機能します。JS SDKはページ読み込み中にデバイスシグナルを収集してtracio.aiに送信し、ブラウザにvisitorIdを返します。バックエンドは、署名付きウェブフックを通じて完全な識別結果、すなわちボット分類、スマートシグナル、信頼度を受け取り、判定をエッジキャッシュに書き込みます。ブラウザは、その後のAPIリクエストに(ヘッダーまたはクッキー経由で)visitorIdを含めます。Cloudflare Workerは各リクエストをインターセプトし、そのvisitorIdについてキャッシュされた判定を検索し、5ms未満でallow/blockの判断を下します。
Workerの実装
Workerは、CloudflareのKVストレージを使って最近のデバイス検証結果の軽量なキャッシュを維持し、これは署名付きのtracio.aiウェブフックが到着するにつれてバックエンドによって投入されます。visitorIdヘッダーを持つリクエストが到着すると、Workerはキャッシュを確認します。判定がキャッシュされていて訪問者がクリーン(低いボットスコア、VPNなし、しきい値を超える信頼度)であれば、リクエストはただちに通過します。判定がまだキャッシュされていなければ、Workerはフォールバックポリシー、すなわち保守的なレート制限付きで通過させるか、チャレンジを行うかを、ウェブフック駆動のキャッシュが追いつくまで適用します。
決定的な洞察は、検証キャッシュが先回りして投入されるということです。最初のページ読み込みがシグナル収集をトリガーし、その結果をキャッシュします。その訪問者からのその後のAPI呼び出しはすべてキャッシュにヒットし、tracio.aiへの往復は不要です。キャッシュのTTLは設定可能で、高セキュリティのエンドポイントには5分、一般的なコンテンツには30分を推奨します。
パフォーマンスの数値
私たちはこのアーキテクチャを、Cloudflare Workersを通じて毎分50,000リクエストを処理するお客様でベンチマークしました。結果は次のとおりです。
キャッシュヒット率:94%(ほとんどのリクエストは、すでにページを読み込んだ訪問者からのものです)。エッジ判断レイテンシ(キャッシュヒット):中央値1.2ms、p99で3.8ms。エッジ判断レイテンシ(キャッシュミス):中央値45ms(tracio.aiへのAPI呼び出しを含む)。オリジンレイテンシの節約:リクエストごとに中央値120ms(サーバー側の不正チェックを取り除いた分)。
94%のキャッシュヒット率は、不正判断の94%がオリジンの関与なしにエッジで4ms未満で行われることを意味します。残りの6%は、完全なAPIの往復を必要とする初回訪問のリクエストです。
ブロッキング戦略
Workerは、ルートごとに設定可能な3つのブロッキング戦略をサポートします。
ハードブロック:高リスクの訪問者(ボットスコア>0.9、既知の自動化フレームワーク)に対してただちに403を返します。ソフトブロック:X-Tracio-Riskヘッダーを追加し、オリジンに判断を委ねます。これは、判断にアプリケーションレベルのコンテキストが欲しいときに有用です。チャレンジ:不審な訪問者(中程度のボットスコア、VPN検出)を、追加の検証を求めるチャレンジページにリダイレクトします。
本番環境ではソフトブロックから始め、リスク分布を1週間モニタリングし、それから明白なケース(既知のボット、ヘッドレスブラウザ、高信頼度の自動化)についてハードブロックを有効にすることを推奨します。
コスト分析
Cloudflare Workersの料金は、リクエスト数とコンピュート時間に基づきます。毎分5万リクエスト(月間21.6億件)では、Workerのコストは月額約$500です。これをレイテンシの節約と比較してください。120msのオリジン側の不正チェックを取り除くことでサーバーのCPU使用率を15〜20%削減し、これは通常、コンピュートにおいてWorkerのコストを上回る節約になります。
真の価値は不正防止にあります。ボットや不正なリクエストが、オリジンのリソース、データベース接続、下流のAPI呼び出しを消費する前にそれらを捕らえるのです。あるお客様は、エッジベースの不正検知を実装した後、オリジンサーバーの台数を12台から8台に減らしました。コンピュートの30%を消費していたボットが、オリジンに到達しなくなったのです。