AWS WAF の特定のリクエストパラメータまたは URI にレート制限を適用する方法を教えてください。
簡単な説明
AWS WAF では、送信元 IP アドレスごとにリクエストのレートを追跡するレートベースのルールがあります。このルールでは、レートが 5 分以内に指定された制限値を超えた IP に対して、ルールアクションを開始します。
レートベースのルールを使用して、過剰なリクエストを送信している IP アドレスからのリクエストを一時的にブロックできます。AWS WAF ではデフォルトで、ウェブリクエストオリジンからの IP アドレスに基づいてリクエストを集約します。ただし、この代わりに X-Forwarded-For などの HTTP ヘッダーの IP アドレスを使用するようにルールを設定することができます。
これらのレートベースのルールステートメントでは、スコープダウンステートメントの一部として条件を定義することもできます。条件を定義して、スコープダウンステートメントに一致するリクエストのみが、そのルールによる評価の対象となるようにすることができます。
注意: AWS WAF コンソールには、レートベースのルールの「スコープダウンステートメント」のオプションはありません。[ルールステートメントの条件に一致するリクエストのみを対象にする] オプションを選択すると、スコープダウンステートメントと同等のものを作成します。
次の解決策では、特定のパラメータでレートベースのルールをカスタマイズできる 2 つのシナリオを考慮します。
解決方法
シナリオ 1: 特定の URI にレート制限を追加する
注意: 任意のリクエストパラメータを指定することができます。
- AWS WAF コンソールを開きます。
- [Web ACLs] を選択します。
- Web ACL を選択し、[ルール] タブを選択します。
- [ルールの追加] を選択します。
- [独自のルールとルールグループを追加] を選択します。
- [ルールタイプ] で [ルールビルダー] を選択します。
- 名前を入力し、[レートベースのルール] を選択します。
- 「リクエストレート詳細」に次のパラメータを入力します:
レート制限: 100 から 20,000,000 の数値を入力します。これは、すべての IP に対し 5 分間に許可されるリクエストの最大数です。
レート制限に使用する IP アドレス: クライアント IP フィールドに基づいてレートを制限する場合は、[送信元 IP アドレス] を選択します。または、ヘッダーの IP アドレスに基づいてレートを制限する場合、[ヘッダーの IP アドレス] を選択します。例えば、X-Forwarder-for です。
レート制限に対してリクエストをカウントする基準: [ルールステートメントの条件に一致するリクエストのみを対象にする] を選択します。
- [リクエストが次の場合] ドロップダウンリストから、[ステートメントに一致] を選択します。指定する条件が複数ある場合は、ユースケースに応じてこの選択を変更できます。
- [ステートメント] 詳細セクションで次のフィールドに入力します:
注意: この例では、レート制限は URI パス「/admin」です。ユースケースに基づいて詳細を変更することができます。
[検査]: URI path
[一致タイプ]: Contains string
[照合する文字列]: /admin
[テキスト変換]: なし
- [アクション] セクションで、[ブロック] を選択します。
- [ルールの追加] を選択します。[ユースケースに応じた正しい優先順位でルールを設定] に移動し、[保存] を選択します。
シナリオ 2: 選択した内部 IP をレート制限ルールから除外する
このシナリオでは、すべての内部 IP を含む IP セットを作成します。続いて、スコープダウンステートメントでこの IP セットを除外します。
IP セットをレートベースルールから除外するには、次の手順を実行します:
- AWS WAF コンソールを開きます。
- [Web ACLs] を選択します。
- Web ACL を選択し、[ルール] タブを選択します。
- [ルールの追加] を選択します。
- [独自のルールとルールグループを追加] を選択します。
- [ルールタイプ] で [ルールビルダー] を選択します。
- 名前を入力し、[タイプ] として[レートベースのルール]を選択します。
- 「リクエストレート詳細」に次のパラメータを入力します:
レート制限: 100 から 20,000,000 の数値を入力します。これは、すべての IP に対し 5 分間に許可されるリクエストの最大数です。
レート制限に使用する IP アドレス: クライアント IP フィールドに基づいてレート制限を行う場合は [送信元 IP アドレス] を選択します。または、ヘッダーの IP アドレスに基づいてレート制限を行う場合は、[ヘッダーの IP アドレス] を選択します。例えば、X-Forwarder-for です。
レート制限に対してリクエストをカウントする基準: [ルールステートメントの条件に一致するリクエストのみを対象にする] を選択します。
- [リクエストが次の場合] ドロップダウンリストから、[ステートメントに一致しない] を選択します。
- [ステートメント] 詳細セクションで次のフィールドに入力します:
[Inspect]: 内 IP アドレスから発信されます。
[IP セット]: ドロップダウンリストから IP セットを選択します。
発信元アドレスとして使用する IP アドレス: クライアント IP フィールドに基づいてレート制限が必要な場合は、[送信元 IP アドレス] を選択します。または、ヘッダーの IP アドレスに基づいてレート制限を行う場合は、[ヘッダーの IP アドレス] を選択します。例えば、X-Forwarder-for です。
- [アクション] セクションで、[ブロック] を選択します。
- [ルールの追加] を選択します。[ユースケースに応じた正しい優先順位でルールを設定] に移動し、その後、[保存] を選択します。