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

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

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

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

  1. Fastly コントロールパネルにログインし、Secure リンクをクリックします。Secure ページでは、Fastly のセキュリティ製品の概要が表示されます。
  2. Manage rate limiting policies をクリックします。
  3. Add Rate Limiting to a service をクリックします。Rate limiting ページが表示されます。

Rate limiting ページ

  1. Policy name フィールドにポリシーの分かりやすい名前を入力します。この名前はレート制限ダッシュボードに表示されます。
  2. Service メニューから、ポリシーを適用するサービスとバージョンを選択します。検索ボックスを使用して ID または名前を検索します。
  3. 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 を選択します。
  4. Response セクションで、レート制限ポリシーを超える Fastly がどのように対応するかを選択し、表示される追加フィールドに入力します。
    • Block with custom response: レート制限を超えた場合にリクエストがブロックされ、ブラウザにカスタムレスポンスが表示されます。ブロックしてカスタムレスポンスを返すを参照してください。
    • Block with response object: レート制限を超えた場合にリクエストがブロックされ、ブラウザにレスポンスオブジェクトが表示されます。このオプションを使用するには、レスポンスオブジェクトが作成されている必要があります。ブロックしてレスポンスオブジェクトを返すを参照してください。
    • Log only: レート制限を超えた場合、ログに記録されるだけでリクエストはそのまま処理されます。ログのみを参照してください。
  5. Save policy をクリックします。

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

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

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

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

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

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

Block with custom response フィールド

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

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

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

Block with response object フィールド

  • Response objectメニューから、レート制限を超えるとブラウザに表示されるレスポンスオブジェクトを選択します。選択されたレスポレスポンスオブジェクトに条件が付いていること、あるいはすべてのリクエストに対してレスポンスが返されることを確認
    注意

    してください。

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

ログのみ

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

注意

timestamp フィールドの代わりに、Datadog は time_start を、Honeycomb は time をログに記録します。

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

Log only フィールド

注意

すべてのレート制限ポリシーに対して、1つのログエンドポイントしか持てません。デフォルトでは、ログエンドポイントの名称は ratelimit-debug です。コントロールパネルまたは API 経由で、このエンドポイントを作成することもできます。

ログ形式

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

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

デフォルト

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

Datadog

1{
2 "time_start": “%{strftime({"%Y-%m-%dT%H:%M:%S%Z"}, time.start)}V”,
3 "ddsource": "fastly",
4 "service": “%{req.service_id}V",
5 "policy_name": "%{json.escape(“<rate limiter name>”)}V”,
6 "url": “%{json.escape(req.url)}V”,
7 "limit": <limit>,
8 "window": <window>,
9 "entry": "<entry>",
10 "rate": “<rate>"
11}

Honeycomb

1{
2 "time": “%{strftime({"%Y-%m-%dT%H:%M:%SZ"}, time.start)}V”,
3 "data":{
4 "service_id": “%{req.service_id}V",
5 "policy_name": "%{json.escape(“<rate limiter name>”)}V”,
6 "url": “%{json.escape(req.url)}V”,
7 "limit": <limit>,
8 "window": <window>,
9 "entry": "<entry>",
10 "rate": “<rate>"
11 }
12}

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

Fastly が提供するセキュリティサービスも含め、WAF 製品や DDoS 対策サービスなどのいかなるセキュリティソリューションも、起こり得るすべての攻撃や脅威を検知または防止するものではありません。Fastly のサービスをご利用のお客様は、すべての Web アプリケーションとオリジンに対して適切なセキュリティコントロールを確保する必要があります。Fastly のセキュリティ製品を使用する場合も、この義務は免除されません。Fastly のサービスをご利用のお客様は、サービスを本番環境にデプロイする前に、可能な限り Fastly のセキュリティサービスの有効性をテストおよび検証し、パフォーマンスを継続的にモニタリングしながら Web アプリケーション、オリジンサービス、および Fastly サービスのその他のコンポーネントの設定における変更に応じて、サービスを適切に調整する必要があります。

翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください