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

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

重要 : このページでは、Edge Rate Limiting プロダクトのメインダッシュボードを使用する際に役立つ、基本的な情報について説明します。Edge Rate Limiting は、大量のトラフィックに対するより高速なレスポンスが必要なユースケース (DDoS 攻撃の軽減など) 向けに設計されています。Advanced Rate Limiting、および同機能の Fastly Next-Gen WAF での使用に関する詳細については、高度なレート制限ルールに関するドキュメントをご参照ください。

エッジレート制限ページについて

エッジレート制限ページには、サービスを通して有効になっているすべてのレート制限ポリシーの概要が表示されます。各サマリーには、以下の詳細が含まれます。

  • Service: サービスの名称

  • Policy name: レート制限ポリシーの名称

  • Requests per second: レート制限ポリシーが適用される前に、検出ウインドウに設定された時間内にカウントされる1秒あたりの最大リクエスト数

  • Detection window: レート制限ウィンドウの期間

  • Action: レート制限を超えた際に実行されるアクション (Block または Log only)

レート制限ポリシーに関する考慮事項

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

  • サービスは保護されるべきか、それとも異なるエンドポイントに対しては異なる保護レベルを設定するべきですか?例えば、認証関連のエンドポイントの場合は制限を比較的厳しくする必要があるかもしれません。

  • クライアントはどのように識別するべきですか?例えば、クライアントキーはクライアントの IP アドレスであるべきか、それとも単一の IP アドレスの背後にある個々のクライアントを識別する比較的複雑なキーにする必要がありますか?

  • レートはどのように設定するべきですか?典型的なクライアントレートを確立し、誤検知を防ぐためのオーバーヘッドなど、適切な時間枠レート制限を設定する必要があります。

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

  • ログ記録を使用すると、レート制限の設定が期待どおりに動作するかをテストできます。

  • 除外するクライアントまたはクライアント IP アドレスを特定できます。例えば、リモートパフォーマンスモニタリング、テストソリューション、ペネトレーションテストソリューションなどをレート制限ポリシーから除外することができます。

  • オリジンシールドを使用している場合、レート制限ポリシーを変更しなければならない場合があります。詳細については、開発者ドキュメントをご参照ください。

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

レート制限ポリシーは、 Security タブ、または特定のサービスの場合は Service configuration タブで作成できます。

  1. Security タブ
  2. Service configuration タブ

Security タブからレート制限ポリシーを作成する方法は以下の通りです。

  1. Fastly コンソールにログインしてください。
  2. Security > Edge rate limiting に移動します。

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

次に、レート制限のポリシーコントロールを設定します。

レート制限のポリシーコントロール

レート制限ポリシーを作成または編集する際に、レート制限のポリシーコントロールを操作する方法については、以下の詳細をご覧ください。

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

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

  3. 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 を選択し、カウントされるリクエストを集計します。

  4. Response セクションで、レート制限を超えた場合に Fastly がとるべき対応を選択し、表示される追加フィールドに入力します。

    • Block with custom response: レート制限を超えた場合にリクエストがブロックされ、ブラウザにカスタムレスポンスが表示されます。「ブロックしてカスタムレスポンスを返す」をご参照ください。

    • Block with response object: レート制限を超えた場合にリクエストがブロックされ、ブラウザにレスポンスオブジェクトが表示されます。このオプションを使用するには、レスポンスオブジェクトが作成されている必要があります。「ブロックしてレスポンスオブジェクトを返す」をご参照ください。

    • Log only: レート制限を超えた場合、ログに記録されるだけでリクエストはそのまま処理されます。「ログのみ」をご参照ください。

  5. Save policy をクリックします。

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

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

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

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

  • キーは相対パスを使用して指定し、末尾に / を使用しないものでなければなりません。

  • クエリ文字列は除外されます。

  • 正規表現を使用するキーはサポートされていません。

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

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

Block with custom response フィールド

  • Status フィールドに、ブラウザに表示する HTTP ステータスコードを入力します。

  • MIME type フィールドに、メディアタイプの識別子を入力します。Response フィールドに入力されたテキストと互換性がある限り、任意の MIME タイプを指定できます。

  • Response フィールドに、レート制限を超えた場合にブラウザに表示されるカスタムレスポンスを入力します。

  • Response duration フィールドに 1 から 60 までの値を入力し、レートリミッターがリセットされてブロックが解除されるまでの間、カスタムレスポンスが表示される時間を分単位で決定します。

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

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

Block with response object フィールド

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

ヒント : 選択されたレスポンスオブジェクトに条件がアタッチされているか、すべてのリクエストに対してそのレスポンスが返されることを確認します。

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

ログのみ

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

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

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

Log only フィールド

重要 : すべてのレート制限ポリシーに対して、1つのログ記録エンドポイントのみ設定できます。デフォルトでは、ログ記録エンドポイントはratelimit-debugと名付けられています。このエンドポイントは、Fastly コントロールパネルまたは 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>"
}

レート制限ポリシーのテスト

ログ記録を使用すると、レート制限の設定が期待どおりに動作するかをテストできます。

さらに、レート制限ポリシーから除外するクライアントまたはクライアントの IP アドレスを指定できます。たとえば、リモートパフォーマンスモニタリング、テストソリューション、ペネトレーションテストソリューションは除外できます。

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

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

  1. Security タブ
  2. Service configuration タブ

Security タブからレート制限ポリシーを編集する方法は以下の通りです。

  1. Fastly コンソールにログインしてください。
  2. Security > Edge rate limiting に移動します。

  3. Draft サービスにアタッチされているポリシーについては、鉛筆アイコン 鉛筆アイコン をクリックして、レート制限ポリシーを編集します。Active または Locked サービスにアタッチされているポリシーについては、Clone version to edit をクリックします。

  4. 編集したいレート制限のポリシーコントロールの値を更新してください。

  5. Save policy をクリックします。

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

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

  1. Security タブ
  2. Service configuration タブ

Security タブからレート制限ポリシーを削除する方法は以下の通りです。

  1. Fastly コンソールにログインしてください。
  2. Security > Edge rate limiting に移動します。

  3. 削除したいレート制限ポリシーを見つけます。

  4. Draft サービスにアタッチされているポリシーについては、ゴミ箱ゴミ箱アイコンをクリックしてから Confirm and delete をクリックして、レート制限ポリシーを削除します。

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

WAF や DDoS 緩和などのすべてのセキュリティサービスは、Fastly が提供するものも含め、あらゆる悪意ある攻撃や脅威を検知することが出来るわけではありません。サブスクライバーは、すべての Web アプリケーションおよびオリジンに対して、適切なセキュリティコントロールを維持する必要があります。Fastly のセキュリティプロダクトを使用しても、この義務が免除されるわけではありません。サブスクライバーとして、Fastly のセキュリティ製品を本番環境に適用する前に可能な限りのテストを行い、サービスの導入後も継続してパフォーマンスの監視を行って下さい。また、 Web アプリケーションなどのオリジン環境の変更や、 Fastly のその他のサービス設定の変更した場合、必要に応じてサービスの設定を調整して下さい。