Cloudflare の Volumetric Abuse Detection は、エンドポイントごと・セッションごとのレート制限の推奨値を生成します。トラフィックパターンの変化に合わせて、推奨値は自動で更新されます。
Cloudflare は、個々のエンドポイントへのユーザートラフィックから、エンドポイントの不正利用を検出します。
たとえば、/reset-password エンドポイントと /login エンドポイントでは、トラフィック量が異なることがあります。また、マーケティングキャンペーンが成功したあと、/login エンドポイントのトラフィックが平均より増えることもあります。
この 2 つの例は、従来のレート制限の限界を示しています。トラフィックはエンドポイントごとに違うだけでなく、同じエンドポイントでも時間とともに変わります。Volumetric Abuse Detection は教師なし学習(あらかじめ決めたルールなしでトラフィックパターンを分析する手法)を使い、エンドポイントごとにベースラインを作り、ユーザー行動の変化に合わせて調整します。
Volumetric Abuse Detection のレート制限は、IP アドレス単位ではなくセッション単位で生成されます。API へのトラフィックが増えても、共有 IP アドレスではなく個々のセッションを追跡するため、誤検知を抑えられます。
Volumetric Abuse Detection のレート制限は、明らかな量的不正利用を防ぎつつ、誤検知を抑える手段です。不正なボットトラフィックそのものを防ぎたい場合は、Cloudflare の Bot ソリューション を参照してください。
Volumetric Abuse Detection は、API のセッションごとのトラフィック統計を分析し、エンドポイントごと・セッションごとのレート制限を推奨します。
エンドポイントを確認するには、Security > Web Assets > Endpoints を開きます。
トラフィックパターンが変わると、推奨値は更新され続けます。
Volumetric Abuse Detection は、信頼できる推奨値を出せるだけのトラフィックデータを集めたあとで、レート制限のしきい値を生成します。検出済みエンドポイントに推奨値がない場合、トラフィックが必要な条件を満たしていない可能性が高いです。
しきい値が提案されるのは、直近 7 日間(または初回検出以降)に次の要件をすべて満たすエンドポイントだけです。
- エンドポイントは、十分な有効トラフィック(API Discovery の条件を満たすトラフィック)を受信している必要があります。断続的または不規則なトラフィックでは、提案が出ないことがあります。
- 直近 7 日間のいずれかの 24 時間で、少なくとも 50 の異なるセッションからアクセスされている必要があります。
- リクエストヘッダーまたは Cookie として使える認可トークンなどの セッション識別子 を設定し、Cloudflare が個々のセッションを正確に検出し、セッション単位のレート分析を行えるようにする必要があります。
セッション識別子を追加したあと、Cloudflare ダッシュボードのエンドポイントにレート制限の推奨値が表示されるまで、24 時間待ってください。
Endpoints でエンドポイントの行を選ぶと、そのレート制限の推奨値を確認できます。詳細ビューには、総合的な推奨値とパーセンタイル値(p50、p90、p99)が表示されます。
Cloudflare は、直近 24 時間のリクエストにもとづき、推奨値を一日を通して再計算します。トラフィックの傾向が安定していれば、推奨値は変わらないことがあります。
単一のパーセンタイル値ではなく、総合的なレート制限の推奨値を使うことをおすすめします。総合推奨値は、すべての API セッションのばらつきを考慮します。パーセンタイル値だけを選ぶと、外れ値が多いために誤検知が増えることがあります。
Endpoints では、各推奨値の信頼度と、直近 7 日間に観測されたユニークセッション数を確認できます。一般に、ユニークセッションが少なく、ユーザー行動のばらつきが大きいエンドポイントは、信頼度スコアが低くなります。
信頼度が低いレート制限でも、API の不正利用防止には役立ちます。信頼度が低い場合は、レート制限ルールをまず log モードで開始し、誤検知がないか違反を確認してから block に切り替えてください。
Advanced Rate Limiting ルールの作成方法は、Rules のドキュメント を参照してください。
レート制限を時間とともに動的に更新したい場合は、API 経由でレート制限の推奨値を取得 できます。
Required API token permissions
At least one of the following token permissions is required:Account API GatewayAccount API Gateway ReadDomain API GatewayDomain API Gateway Read
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/api_gateway/operations/$OPERATION_ID" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"JSON Web Token(JWT)内の任意のクレームに基づいて、リクエストをレート制限できます。例:
audやsubなどの登録済みクレームuserEmailなどのカスタムクレーム。ネストしたカスタムクレーム(user.email)も含みます
JWT クレームの値によるレート制限は、有効な JSON Web Token でのみ動作します。パス上で無効な JSON Web Token をブロックしていない場合、JWT クレームはすべてカウントされ、Point of Presence(PoP)で高トラフィックが検出されるとブロックされる ことがあります。
ユーザーを一意に識別する JWT クレームをカウントする必要があります。多くのユーザーで同じ値になるクレームを選ぶと、それらのレート制限はまとめてカウントされます。
ウェブサイトやアプリケーションで複数のティアを提供しており、ティアに応じてレート制限を適用したい場合の例:
"aud": "free-tier"の場合、1 分あたり 5 リクエストに制限します。"aud": "premium-tier"の場合、1 分あたり 50 リクエストに制限します。
次のレート制限ルールの例に従ってください。
(http.request.method eq "GET" and
http.host eq "<YOUR_DOMAIN>" and
http.request.uri.path matches "</EXAMPLE_PATH>" and
lookup_json_string(http.request.jwt.claims["<JWT_TOKEN_CONFIGURATION_ID>"][0], "aud") eq "free-tier"セッション識別子を設定すると、API Shield は常に推奨値を計算します。セッションベースのレート制限を有効にするには、Advanced Rate Limiting を契約 してください。
Volumetric Abuse Detection は Enterprise のお客様のみ利用できます。この製品に関心がある Enterprise のお客様は、アカウントチームにお問い合わせください。