Cloud Service
Rate Limiting Rules
特定パターンへの過剰なリクエストをエッジで検知し、ブロックやチャレンジで自動制御してオリジン負荷とAPI悪用を防ぐ。AWSのWAFレートベースルールに近い位置づけ。
- 1.リクエスト特性ごとにしきい値を設定し、超過分をエッジ側で自動制御するルール群。
- 2.ログイン試行やAPI乱用、スクレイピングなど特定パターンの過剰アクセスを狙い撃ちできる。
- 3.カウント対象・期間・アクションを柔軟に組み合わせ、WAFの他機能と併用して運用する。
解決する課題
- ログインページや検索APIなど特定のエンドポイントに対する総当たり攻撃やブルートフォースを止めたい
- 特定のクライアントによるAPI乱用やスクレイピングでオリジンの負荷が跳ね上がるのを防ぎたい
- DDoS対策だけではカバーしきれない、正常な形式だが過剰な頻度のリクエストを制御したい
- オリジン側にレート制御ロジックを実装せず、エッジ側で一元的にしきい値制御を完結させたい
主要概念と用語
- レートリミティングルール(Rate Limiting Rule): 特定の条件に一致するリクエストの発生頻度を監視し、しきい値を超えた場合にアクションを実行する設定単位
- マッチ条件(Request Matching): どのリクエストをカウント対象とするかを、URLパス・ホスト名・ヘッダーなど式(Expression)で指定する条件
- カウンティングキャラクタリスティック(Counting Characteristic): 送信元IPやCookie、ヘッダー値など、リクエストをどの単位でグルーピングして数えるかを決める要素
- 期間(Period)としきい値(Threshold): 一定期間内に許容するリクエスト数の上限。この期間内で条件に合致した回数がしきい値を超えると発火する
- ミティゲーションタイムアウト(Mitigation Timeout): しきい値超過後にアクションを適用し続ける期間。この間は新たなリクエストも継続して制御される
- アクション(Action): しきい値超過時に実行する処理。ブロック、チャレンジ(人間確認)、ログのみなど複数の選択肢がある
- カウンティングエクスプレッション(Counting Expression): レスポンスコードなど、成功したリクエストのみをカウントするかどうかを絞り込む条件(例えば認証失敗のみを数える設定)
仕様・制限・クォータ
- レート制御はゾーン(ドメイン)単位、またはアカウント全体に及ぶルールセットの一部として設定する
- 1つのルールで指定できる期間・しきい値・ミティゲーションタイムアウトの組み合わせには、プランに応じた範囲がある
- ルールの評価順序はWAFの他のルール(カスタムルール、マネージドルールなど)と同じ実行順に組み込まれ、上から順に評価される
- カウントは基本的に各Cloudflareのエッジロケーションをまたいでグローバルに集計されるが、集計方式の詳細は仕様変更が入りやすいため公式ドキュメントの記載を優先して確認する
- 作成できるルール数やプラン別の上限は契約プランによって異なる
内部の仕組み
Rate Limiting Rulesは、リクエストがCloudflareのエッジに到着するたびにマッチ条件を評価し、条件に合致したリクエストをカウンティングキャラクタリスティックの単位(例えば送信元IPごと)で集計します。
指定した期間内のカウントがしきい値を超えると、そのグループ(例えば同一IP)からの以降のリクエストに対してミティゲーションタイムアウトの間、指定したアクションが適用されます。カウンティングエクスプレッションを併用すれば、単純なアクセス数ではなく「認証失敗のレスポンスだけを数える」といった、より意図に沿った検知が可能になります。
Rate Limiting Rulesは単独でも機能しますが、マネージドルールやカスタムルールと組み合わせることで、既知の攻撃パターンの遮断としきい値ベースの異常検知を両立できます。実行順序を意識してルールを並べることが重要です。
設計パターン / ベストプラクティス
- ログインエンドポイントには、認証失敗レスポンスのみをカウントするルールを設定し、正規ユーザーの通常利用を妨げずにブルートフォースを検知する
- API公開エンドポイントには、APIキーやトークンをカウンティングキャラクタリスティックに使い、クライアント単位で公平にしきい値を適用する
- 最初はログのみ(Log)でアクションを設定して既存トラフィックへの影響を観察し、誤検知が少ないことを確認してからブロックやチャレンジへ切り替える
- 単一IPからの攻撃だけでなく、分散した多数のIPからの低頻度アクセスも想定し、他のセキュリティ機能(Bot Managementなど)と役割分担する
- しきい値は業務上の正常なピーク挙動(バッチ処理や一括操作など)を踏まえて設定し、過剰な誤ブロックを避ける
しきい値を厳しくしすぎると、社内ツールや正規のバッチ処理、共有IP環境下の複数ユーザーなどが誤ってブロックされることがあります。導入初期は影響範囲を確認しながら段階的に厳格化することが望ましいです。
運用・監視
- ダッシュボードのセキュリティイベントログで、どのルールがどの頻度で発火しているかを継続的に確認する
- しきい値超過によるブロック・チャレンジの発生状況を監視し、想定外の急増があれば攻撃の予兆として扱う
- ルール変更時は本番反映前にログのみモードで挙動を検証し、意図しない正規トラフィックへの影響がないかを確かめる
- 他のWAFルールとの評価順序や重複適用がないかを定期的に見直す
コスト
Rate Limiting Rulesは多くの場合、契約プランに応じてルール数や利用可否が変わる形で提供されます。追加のルールや高度な条件を使う場合に上位プランやアドオンが必要になることがあり、具体的な料金や上限は変わりやすいため、契約中のプランと公式の料金ページで確認することが望ましいです。
| 課金対象 | 考え方 | コスト最適化のヒント |
|---|---|---|
| ルール数 | 作成するレートリミティングルールの数に応じてプラン上限が変動 | 本当に必要なエンドポイントだけに限定する |
| プラン階層 | 高度なマッチ条件や集計方式は上位プランで解放されることがある | まずは基本機能で運用し、必要に応じて拡張を検討する |
| 誤検知対応の運用コスト | 誤ブロックの問い合わせ対応など間接コスト | 段階的な導入としきい値の継続チューニングで抑える |
セキュリティ
- ログイン・パスワードリセット・検索など悪用されやすいエンドポイントを優先的に保護対象にする
- カウンティングキャラクタリスティックを工夫し、単純な送信元IPだけでなく認証トークンやセッションCookie単位での制御も検討する
- アクションには**ブロックだけでなくチャレンジ(人間確認)**も選択肢に入れ、正規ユーザーへの影響を抑えつつ自動化された攻撃を減速させる
- レート制御はDDoS対策やBot Managementを代替するものではなく、あくまで特定パターンの過剰アクセスに対する補完策として位置づける
すべてのエンドポイントに同一の厳しいしきい値を機械的に適用するのはアンチパターンです。エンドポイントごとの利用実態を無視すると、正規のバッチ処理や高頻度アクセスが必要な機能まで止めてしまい、業務影響が発生します。
関連サービス・比較
Rate Limiting RulesはCloudflare WAFのルールセットの一部として動作し、他のWAFルールやBot Managementと組み合わせて使います。AWSでは類似の役割をAWS WAFのレートベースルールが担います。
| 観点 | Cloudflare Rate Limiting Rules | AWS WAF レートベースルール |
|---|---|---|
| 位置づけ | WAFルールセットの一部としてのしきい値制御 | WAF内のレートベースステートメント |
| カウント単位 | IP・ヘッダー・Cookieなど柔軟に指定 | 主に送信元IPベース |
| アクション | ブロック・チャレンジ・ログのみなど | ブロック・カウントなど |
| 適用範囲 | ゾーン/アカウント単位のルール | Web ACL単位のルール |
| 他機能との連携 | マネージドルール・Bot Managementと併用 | 他のWAFルールグループと併用 |
ハンズオン / CLI例
Rate Limiting Rulesはダッシュボードから設定するのが一般的ですが、wranglerでAPIトークンの状態を確認したうえで、Cloudflare APIを直接呼び出してルールを作成する例を示します。
# wrangler経由でCloudflare APIトークンの有効性を確認
wrangler whoami
# ゾーンのルールセット一覧を取得し、対象となるカスタムルールセットのIDを確認
curl -X GET "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/rulesets" \
-H "Authorization: Bearer ${CF_API_TOKEN}"
# レートリミティングルールをルールセットに追加する例
curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/rulesets/${RULESET_ID}/rules" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{
"action": "block",
"expression": "(http.request.uri.path eq \"/login\")",
"description": "login-brute-force-protection",
"ratelimit": {
"characteristics": ["ip.src"],
"period": 60,
"requests_per_period": 20,
"mitigation_timeout": 600
}
}'
# 作成済みルールの一覧を確認
curl -X GET "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/rulesets/${RULESET_ID}" \
-H "Authorization: Bearer ${CF_API_TOKEN}"
Cloudflare Service
Rate Limiting Rulesを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ネットワーキング
比較で見る軸
クラウド: Cloudflare / カテゴリ: ネットワーキング / 難易度: basic
導入後に効く点
ログイン試行やAPI乱用、スクレイピングなど特定パターンの過剰アクセスを狙い撃ちできる。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Cloudflare
- カテゴリ
- ネットワーキング
- 難易度
- basic
- 関連資格
- —
- 設計柱
- security / reliability / operational
判断チェックリスト
- 自社の用途が「ネットワーキング / security」に近いか確認する。
- 強みである「リクエスト特性ごとにしきい値を設定し、超過分をエッジ側で自動制御するルール群。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。