レート制限ポリシーの操作

Fastly のレート制限コントロールパネルでは、オリジンサーバーに送信されるリクエストのレートをコントロールすることができます。この機能では、クライアントのリクエストを数えるほか、オプションで設定したレート制限の上限を超えるクライアントにペナルティーを科すことができます。

レート制限ポリシーを作成する際、リクエストの数と時間を追跡する条件を定義します。累積したカウント数は、1秒、10秒、または60秒のうち、設定した時間枠に基づいて計算された推定レートに変換されます。レートは、1秒あたりのリクエスト数 (RPS) で測定されます。レート制限を超えた場合、Fastly はイベントをログに記録し、指定した期間中の後続リクエストをブロックすることもできます。

VCL でレート制限機能にアクセスすることもできます。

前提条件

この機能を使用するには、Fastly Next-Gen WAF (powered by Signal Sciences) のプレミアプラットフォームサブスクリプションを購入し、フルサイトデリバリー有料アカウントを持っている必要があります。

レート制限ダッシュボードについて

レート制限ダッシュボードにアクセスするには、Fastly コントロールパネルにログインし、Secure リンクをクリックします。レート制限ダッシュボードには、サービス全体で有効なすべてのレート制限ポリシーの概要が表示されます。各要約には、以下の詳細が含まれます。

Secure ページのレート制限ダッシュボード

  • サービス: サービスの名称
  • ポリシー名: レート制限ポリシーの名称
  • 1秒あたりのリクエスト数: レート制限ポリシーが適用される前に、検出ウインドウに設定された時間内にカウントされる1秒あたりの最大リクエスト数
  • 検出ウィンドウ: レート制限ウィンドウの期間
  • アクション: レート制限を超えた際に実行されるアクション (Block または Log only)

レート制限ポリシーの作成

これらの手順に従って、レート制限ポリシーを作成します。

  1. Fastly コントロールパネルにログインし、Secure リンクをクリックします。Rate Limiting ダッシュボードが表示されます。
  2. Add Rate Limiting to a service をクリックします。Rate limiting ページが表示されます。

    Rate limiting ページ

  3. Policy name フィールドにポリシーの分かりやすい名前を入力します。この名前はレート制限ダッシュボードに表示されます。
  4. Service メニューから、ポリシーを適用するサービスとバージョンを選択します。検索ボックスを使用して ID または名前を検索します。
  5. Detect セクションのフィールドに入力し、レート制限ポリシーの検出条件を定義します。
    • Destination to protect フィールドで、オリジンへのすべてのトラフィックを保護するか、エッジディクショナリを介して特定のリクエストを保護するかを選択します。選択したサービスにエッジディクショナリがない場合、このオプションは無効になります。
    • HTTP methods フィールドで、検出するリクエストの種類の隣のチェックボックスを選択します。
    • Requests per second フィールドに、レート制限を適用する前に検出ウィンドウ内でカウントする 1 秒あたりの最大リクエスト数を入力します。効果的な動作を実証するためにこの機能でサポートされている最低レート制限は 100 RPSです。100 RPS を超える制限を使用すると、予測不可能な精度と検出時間が発生する可能性があります。
    • Detection window フィールドで、レート制限ウィンドウの期間を選択します。ウィンドウに設定される期間によって、お客様のオリジンへの過度のトラフィックを検知するのにかかる時間 (TTD) を割り出すことができます。短い時間枠を使用することで正確さは多少損なわれますが、検知までの時間を短縮することができます。詳細については、制約と注意事項をご覧ください。
    • Client keys メニューから、IPUser-Agent、または IP and User-Agent を選択します。
  6. Response セクションで、レート制限ポリシーを超える Fastly がどのように対応するかを選択し、表示される追加フィールドに入力します。
    • Block with custom response: レート制限を超えた場合にリクエストがブロックされ、ブラウザにカスタムレスポンスが表示されます。ブロックしてカスタムレスポンスを返すを参照してください。
    • Block with response object: レート制限を超えた場合にリクエストがブロックされ、ブラウザにレスポンスオブジェクトが表示されます。このオプションを使用するには、レスポンスオブジェクトが作成されている必要があります。ブロックしてレスポンスオブジェクトを返すを参照してください。
    • Log only: レート制限を超えた場合、ログに記録されるだけでリクエストはそのまま処理されます。ログのみを参照してください。
  7. Save policy をクリックします。

より具体的な保護のためのエッジディクショナリの使用

エッジレート制限では、エッジディクショナリを使用して保護するパスを指定できます。ディクショナリ内のキーと値のペアにキーとして保護するパスを指定する必要があります。例えば /checkout など、特定の API を保護したい場合は、キーが /checkout で値が Checkout のキーと値のペアを作成します。

以下の点に注意してください。

  • キーは相対パスを使用して指定し、末尾に / を使用しないでください。
  • クエリ文字列は除外されます。
  • 正規表現を使用するキーはサポートされていません。

ブロックしてカスタムレスポンスを返す

Block with custom response を選択すると、レート制限を超えた場合にリクエストがブロックされ、カスタムレスポンスが表示されます。このオプションを選択すると、以下のフィールドが利用可能になります。

Block with custom response フィールド

  • Status フィールドに、ブラウザに表示する HTTP ステータスコードを入力します。
  • MIME type フィールドにメディアタイプの識別子を入力します。すべての MIME タイプは、Response フィールドに入力したテキストと互換性がある場合に限り指定することができます。
  • Response フィールドに、レート制限を超えた場合にブラウザに表示されるカスタムレスポンスを入力します。
  • Response duration フィールドに、レートリミッターがリセットされ、ブロックが解除されるまでカスタムレスポンスが表示される時間を分単位で入力します。

ブロックしてレスポンスオブジェクトを返す

Block with response object を選択すると、レート制限を超えた場合にリクエストがブロックされ、レスポンスオブジェクトが表示されます。このオプションを使用するには、レスポンスオブジェクトが作成されている必要があります。このオプションを選択すると、以下のフィールドが利用可能になります。

Block with response object フィールド

  • Response object メニューから、レート制限を超えた場合にブラウザに表示されるレスポンスオブジェクトを選択します。

  • Response duration フィールドに、レートリミッターがリクエストをリセットおよびブロック解除する前にカスタムレスポンスが表示される時間を分単位で入力します。

ログのみ

Log only を選択すると、レート制限を超えた場合、ログに記録されるだけでリクエストはそのまま処理されます。デフォルトでは、timestamppolicy_nameurllimitwindowentryrate のフィールドがログに記録されます。

このオプションを選択すると、Logging provider メニューが利用可能になります。ログの送信先として設定したいログエンドポイントを選択します。Save policy をクリックすると、指定したプロバイダーのログエンドポートを作成するため、略された形式で表示されます。フィールドに入力し、Save をクリックします。

Log only フィールド

ログ形式

Log only オプションを選択すると、以下の JSON ログ形式が使用されます。これらのスキーマは、異なるログプロバイダーにデータが書き込まれる方法を理解するのに役立ちます。

別段の指定がない場合、デフォルトフォーマットを使用して、レート制限を超える特定のポリシーに関する情報をログに記録します。

デフォルト

{
  "timestamp": “%{strftime({"%Y-%m-%dT%H:%M:%S"}, time.start)}V”,
  "policy_name": "%{json.escape(“<rate limiter name>”)}V”,
  "url": “%{json.escape(req.url)}V”,
  "limit": <limit>,
  "window": <window>,
  "entry": "<entry>",
  "rate":  “<rate>"
}

Datadog

{
  "time_start": “%{strftime({"%Y-%m-%dT%H:%M:%S%Z"}, time.start)}V”,
  "ddsource": "fastly",
  "service": “%{req.service_id}V",
  "policy_name": "%{json.escape(“<rate limiter name>”)}V”,
  "url": “%{json.escape(req.url)}V”,
  "limit": <limit>,
  "window": <window>,
  "entry": "<entry>",
  "rate":  “<rate>"
}

Honeycomb

{
  "time": “%{strftime({"%Y-%m-%dT%H:%M:%SZ"}, time.start)}V”,
  "data":{
    "service_id": “%{req.service_id}V",
    "policy_name": "%{json.escape(“<rate limiter name>”)}V”,
    "url": “%{json.escape(req.url)}V”,
    "limit": <limit>,
    "window": <window>,
    "entry": "<entry>",
    "rate":  “<rate>"
  }
}

制約と注意事項

レート制限ポリシーで設定されたレート制限は、各 Fastly POP ごとに適用され、カウントは Fastly POP 全体で共有されません。

エッジレート制限機能は、Fastly’s のオリジンシールドと互換性があり、併せて使用することができます。オリジンシールドが有効な場合は、レート制限は合計2回 (エッジで1回、オリジンシールドで1回) カウントされます。これにより、保護が行われる場所やクライアントの識別方法に異なる影響が及びます。

エッジレート制限機能は、レートの高精度な計算を行うものではありません。レートの精度は、レートが計算される時間枠によって異なります。基準状況下で推定されるパーセント誤差の境界は、以下のようになります。

  • 1秒枠では (+/-) 50%
  • 10秒枠では (+/-) 25%
  • 60秒枠では (+/-) 10%

例えば、10秒枠で100 RPS のレート制限を使用している場合、攻撃がレート制限により検出される前に、オリジンに対する RPS が最大25%増加 (1秒あたり125リクエスト) する場合があります。同様に、実際のレートが意図したレートの75% (1秒あたり75リクエスト) の場合、レート制限が作動されたと報告されることがあります。

セキュリティープロダクトに関する追記

No security product, such as a WAF or DDoS mitigation product, including those security services offered by Fastly, will detect or prevent all possible attacks or threats. As a subscriber, you should maintain appropriate security controls on all web applications and origins. The use of Fastly's security products do not relieve you of this obligation. As a subscriber, you should test and validate the effectiveness of Fastly's security services to the extent possible prior to deploying these services in production, continuously monitor their performance, and adjust these services as appropriate to address changes in your web applications, origin services, and configurations of the other aspects of your Fastly services.

Back to Top