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

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

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

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

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

    エッジレート制限ページ

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

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

  5. 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 を選択し、カウントされるリクエストを集計します。
  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 フィールドに、メディアタイプの識別子を入力します。Response フィールドに入力したテキストと互換性がある限り、任意の MIME タイプを指定することができます。
  • 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}

::: :::

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

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

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

  1. Fastly コントロールパネルにログインし、Secure リンクをクリックします。Secure ページでは、Fastly のセキュリティ製品の概要が表示されます。
  2. Edge rate limiting をクリックします。
  3. 編集したいレート制限ポリシーを見つけます。
  4. Draft サービスにアタッチされているポリシーについては、鉛筆アイコンをクリックして、レート制限ポリシーを編集します。Active または Locked サービスにアタッチされているポリシーについては、Clone version to edit をクリックします。
  5. 編集したいエッジレート制限コントロールの値を更新します。
  6. Save policy をクリックします。

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

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

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

  1. Fastly コントロールパネルにログインし、Secure リンクをクリックします。Secure ページでは、Fastly のセキュリティ製品の概要が表示されます。
  2. Edge rate limiting をクリックします。
  3. 削除したいレート制限ポリシーを見つけます。
  4. Draft サービスにアタッチされているポリシーについては、ゴミ箱をクリックしてから Confirm and delete をクリックして、レート制限ポリシーを削除します。

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

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

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

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