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

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

制約と考慮事項

レート制限ポリシーの作成または変更を行う場合、以下の質問を検討してください。

  • サービスは保護されるべきか、それとも異なるエンドポイントに対しては異なる保護レベルを設定するべきですか?例えば、認証関連のエンドポイントの場合は制限を比較的厳しくする必要があるかもしれません。
  • クライアントはどのように識別するべきですか?例えば、クライアントキーはクライアントの IP アドレスであるべきか、それとも単一の IP アドレスの背後にある個々のクライアントを識別する比較的複雑なキーにする必要がありますか?
  • レートはどのように設定するべきですか?典型的なクライアントレートを確立し、誤検知を防ぐためのオーバーヘッドなど、適切な時間枠レート制限を設定する必要があります。

レート制限ポリシーをテストする場合、以下の点に留意してください。

  • レート制限の設定が期待どおりに動作することをテストするためには、ログを使用できます。
  • 除外するクライアントまたはクライアント IP アドレスを特定できます。例えば、リモートパフォーマンスモニタリング、テストソリューション、ペネトレーションテストソリューションなどをレート制限ポリシーから除外することができます。
  • オリジンシールドを使用している場合、レート制限ポリシーを変更しなければならない場合があります。詳細については、開発者ドキュメントをご参照ください。

エッジでのレート制限ポリシーの作成

以下の手順に従って、エッジでのレート制限ポリシーを作成します。

  1. Fastly コントロールパネルにログインします。
  2. Security > Edge rate limiting に移動します。

  3. Add rate limiting to a service をクリックします。

    エッジレート制限のページ

  4. Policy name フィールドにポリシーの分かりやすい名前を入力します。この名前はレート制限ダッシュボードに表示されます。

  5. Service メニューから、ポリシーを適用するサービスとバージョンを選択します。検索ボックスを使用して ID または名前を検索します。

  6. Detect セクションのフィールドに入力し、レート制限ポリシーの検出条件を定義します。

    • Destination to protect フィールドで、オリジンへのすべてのトラフィックを保護するか、ディクショナリを介して特定のリクエストを保護するかを選択します。選択したサービスにディクショナリがない場合、このオプションは無効になります。
    • HTTP methods フィールドで、検出するリクエストの種類の隣にあるチェックボックスを選択します。
    • Requests per second フィールドに、レート制限を適用する前に検出ウィンドウ内でカウントする1秒あたりの最大リクエスト数を入力します。効果的な動作を確保するため、この機能でサポートされている最低レート制限は 10 RPS に設定されています。10 RPS 未満に制限を設定すると、予測不可能な精度と検出時間が発生する可能性があります。
    • Detection window フィールドで、レート制限ウィンドウの期間を選択します。ウィンドウに設定される期間によって、お客様のオリジンへの過度のトラフィックを検知するのにかかる時間 (TTD) を割り出すことができます。短い時間枠を使用することで正確さは多少損なわれますが、検知までの時間を短縮することができます。詳細については、制約と注意事項をご参照ください。
    • Client keys メニューから、IPUser-Agent、または IP and User-Agent を選択し、カウントされるリクエストを集計します。
  7. Response セクションで、レート制限を超えた場合に Fastly がとるべき対応を選択し、表示される追加フィールドに入力します。

    • Block with custom response: レート制限を超えた場合にリクエストがブロックされ、ブラウザにカスタムレスポンスが表示されます。ブロックしてカスタムレスポンスを返すを参照してください。
    • Block with response object: レート制限を超えた場合にリクエストがブロックされ、ブラウザにレスポンスオブジェクトが表示されます。このオプションを使用するには、レスポンスオブジェクトが作成されている必要があります。ブロックしてレスポンスオブジェクトを返すを参照してください。
    • Log only: レート制限を超えた場合、ログに記録されるだけでリクエストはそのまま処理されます。ログのみを参照してください。
  8. Save policy をクリックします。

注意

VCL でレート制限を設定することで、高度な設定を作成できます。 詳細については、開発者ドキュメントをご参照ください。

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

エッジレート制限では、エッジディクショナリを使用して保護するパスを指定できます。ディクショナリ内のキーと値のペアに、キーとして保護するパスを指定する必要があります。例えば /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. Datadog
  3. Honeycomb
1
2
3
4
5
6
7
8
9
{
"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>"
}

レート制限ポリシーの編集

レート制限ポリシーを作成したら、ポリシーを作成したときに指定したコントロールを編集することができます。Draft 状態のサービスに添付されているポリシーのみを編集することができます。Active または Locked 状態のサービスに添付されているポリシーを編集することはできません。

レート制限ポリシーを編集するには、以下の手順に従ってください。

  1. Fastly コントロールパネルにログインします。
  2. Security > Edge rate limiting に移動します。
  3. 編集したいレート制限ポリシーを見つけます。
  4. Draft サービスにアタッチされているポリシーについては、鉛筆アイコンをクリックして、レート制限ポリシーを編集します。Active または Locked サービスにアタッチされているポリシーについては、Clone version to edit をクリックします。
  5. 編集したいエッジレート制限コントロールの値を更新します。
  6. Save policy をクリックします。

レート制限ポリシーの削除

レート制限ポリシーを削除するには、以下の手順に従ってください。Draft 状態のサービスに添付されているポリシーのみを削除することができます。Active または Locked 状態のサービスに添付されているポリシーを削除することはできません。Active または Locked サービスに添付されているポリシーを削除するには、まずサービスをクローンする必要があります。

レート制限ポリシーを削除するには、以下の手順に従ってください。

  1. Fastly コントロールパネルにログインします。
  2. Security > Edge rate limiting に移動します。
  3. 削除したいレート制限ポリシーを見つけます。
  4. Draft サービスにアタッチされているポリシーについては、ゴミ箱をクリックしてから Confirm and delete をクリックして、レート制限ポリシーを削除します。

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

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

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

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。