

**の新しいコンソールエクスペリエンスの紹介 AWS WAF**

更新されたエクスペリエンスを使用して、コンソールの任意の場所で AWS WAF 機能にアクセスできるようになりました。詳細については、[「コンソールの使用](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html)」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# でのルールステートメント設定の調整 AWS WAF
<a name="waf-rule-statement-fields"></a>

このセクションでは、ウェブリクエストのコンポーネントを検査するルールステートメントで指定できる設定について説明します。使用の詳細については、「[での一致ルールステートメントの使用 AWS WAF](waf-rule-statements-match.md)」で個別のルールステートメントを参照してください。

これらのウェブリクエストコンポーネントのサブセットは、カスタムリクエスト集約キーとしてレートベースのルールで使用することもできます。詳細については、「[でのレートベースのルールの集計 AWS WAF](waf-rule-statement-type-rate-based-aggregation-options.md)」を参照してください。

リクエストコンポーネントの設定では、コンポーネントタイプ自体と、コンポーネントタイプに応じる追加オプションを指定します。例えば、テキストを含むコンポーネントタイプを検査する場合、検査する前にテキスト変換を適用できます。

**注記**  
特に明記されていない限り、ウェブリクエストにルールステートメントで指定されたリクエストコンポーネントがない場合、 AWS WAF はリクエストをルール条件に一致しないものとして評価します。

**Contents**
+ [でコンポーネントをリクエストする AWS WAF](waf-rule-statement-fields-list.md)
  + [HTTP メソッド](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-http-method)
  + [単一ヘッダー](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-single-header)
  + [すべてのヘッダー](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-headers)
  + [ヘッダーの順序](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-header-order)
  + [cookie](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-cookies)
  + [URI フラグメント](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-uri-fragment)
  + [URI パス](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-uri-path)
  + [JA3 フィンガープリント](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-ja3-fingerprint)
  + [JA4 フィンガープリント](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-ja4-fingerprint)
  + [クエリ文字列](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-query-string)
  + [Single query parameter (単一クエリパラメータ)](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-single-query-param)
  + [All query parameters (すべてのクエリパラメータ)](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-all-query-params)
  + [[Body] (本文)](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-body)
  + [JSON 本文](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-json-body)
+ [で転送された IP アドレスを使用する AWS WAF](waf-rule-statement-forwarded-ip-address.md)
+ [での HTTP/2 擬似ヘッダーの検査 AWS WAF](waf-rule-statement-request-components-for-http2-pseudo-headers.md)
+ [でのテキスト変換の使用 AWS WAF](waf-rule-statement-transformation.md)

# でコンポーネントをリクエストする AWS WAF
<a name="waf-rule-statement-fields-list"></a>

このセクションでは、検査のために指定できるウェブリクエストのコンポーネントについて説明します。ウェブリクエスト内のパターンを検索する一致ルールステートメントのリクエストコンポーネントを指定します。これらのステートメントのタイプには、文字列一致、正規表現一致、サイズ制約、SQL インジェクション攻撃などのステートメントがあります。リクエストコンポーネント設定の使用方法については、「[での一致ルールステートメントの使用 AWS WAF](waf-rule-statements-match.md)」で個々のルールステートメントを参照してください。

特に明記されていない限り、ウェブリクエストにルールステートメントで指定されたリクエストコンポーネントがない場合、 AWS WAF はリクエストをルール条件に一致しないものとして評価します。

**注記**  
リクエストコンポーネントは、それを必要とするルールステートメントごとに 1 つずつ指定します。リクエストの複数のコンポーネントを検査するには、コンポーネントごとにルールステートメントを作成します。

 AWS WAF コンソールと API のドキュメントには、次の場所のリクエストコンポーネント設定に関するガイダンスが記載されています。
+ コンソールの**ルールビルダー** – 通常のルールタイプの **[Statement]** (ステートメント) 設定で、**[Request components]** (コンポーネントをリクエスト) の下の **[Inspect]** (検査) ダイアログで検査するコンポーネントを選択します。
+ **API ステートメントのコンテンツ** – `FieldToMatch`

このセクションの残りの部分では、ウェブリクエストの検査対象部分のオプションについて説明します。

**Topics**
+ [HTTP メソッド](#waf-rule-statement-request-component-http-method)
+ [単一ヘッダー](#waf-rule-statement-request-component-single-header)
+ [すべてのヘッダー](#waf-rule-statement-request-component-headers)
+ [ヘッダーの順序](#waf-rule-statement-request-component-header-order)
+ [cookie](#waf-rule-statement-request-component-cookies)
+ [URI フラグメント](#waf-rule-statement-request-component-uri-fragment)
+ [URI パス](#waf-rule-statement-request-component-uri-path)
+ [JA3 フィンガープリント](#waf-rule-statement-request-component-ja3-fingerprint)
+ [JA4 フィンガープリント](#waf-rule-statement-request-component-ja4-fingerprint)
+ [クエリ文字列](#waf-rule-statement-request-component-query-string)
+ [Single query parameter (単一クエリパラメータ)](#waf-rule-statement-request-component-single-query-param)
+ [All query parameters (すべてのクエリパラメータ)](#waf-rule-statement-request-component-all-query-params)
+ [[Body] (本文)](#waf-rule-statement-request-component-body)
+ [JSON 本文](#waf-rule-statement-request-component-json-body)

## HTTP メソッド
<a name="waf-rule-statement-request-component-http-method"></a>

リクエストの HTTP メソッドが検査されます。HTTP メソッドは、ウェブリクエストが保護対象リソースに対して実行を求めている操作のタイプ (`POST` または `GET` など) を示しています。

## 単一ヘッダー
<a name="waf-rule-statement-request-component-single-header"></a>

リクエスト内の単一の名前付きヘッダーが検査されます。

このオプションでは、`User-Agent` や `Referer` などのヘッダー名を指定します。名前の文字列一致では大文字と小文字は区別されず、リクエストヘッダーとルールの両方から先頭と末尾のスペースをトリミングした後に実行されます。

## すべてのヘッダー
<a name="waf-rule-statement-request-component-headers"></a>

すべてのリクエストヘッダー (cookie を含む) を検査します。フィルターを適用して、すべてのヘッダーのサブセットを検査できます。

このオプションでは、次の仕様を指定します。
+ **一致パターン** – inspection のヘッダーのサブセットを取得するために使用するフィルター。 は、ヘッダーキーでこれらのパターン AWS WAF を探します。

  一致パターン設定は、次のいずれかになります。
  + **[All]** (すべて) – すべてのキーに一致します。すべてのヘッダーのルール検査基準を評価します。
  + **[Excluded headers]** (除外されるヘッダー) – ここで指定した文字列のいずれとも一致しないキーを持つヘッダーのみを検査します。キーと一致する文字列は大文字と小文字に区別されません。一致は、リクエストヘッダーと一致ルールから先頭と末尾のスペースをトリミングした後に実行されます。
  + **[Included headers]** (含まれるヘッダー) – ここで指定した文字列のいずれかに一致するキーを持つヘッダーのみを検査します。キーと一致する文字列は大文字と小文字に区別されません。一致は、リクエストヘッダーと一致ルールから先頭と末尾のスペースをトリミングした後に実行されます。
+ **一致範囲** – がルール検査基準で検査 AWS WAF する必要があるヘッダーの部分。**[キー]**、**[値]**、または **[すべて]** を指定して、キーと値の両方で一致するものがあるかどうかを検査することができます。

  **[すべて]** では、キーで一致するもの、および値で一致するものを見つける必要はありません。キー、値、またはその両方で一致するものを見つける必要があります。キーと値で一致するものを見つけるようにするには、論理 `AND` ステートメントを使用して、キーを検査する一致ルールと値を検査する一致ルールの 2 つを組み合わせます。
+ **オーバーサイズ処理** – AWS WAF が検査 AWS WAF できるよりも大きいヘッダーデータを持つリクエストを処理する方法。 は、リクエストヘッダーの最初の 8 KB (8,192 バイト) まで、および最初の 200 個のヘッダーまで検査 AWS WAF できます。コンテンツは、最初の制限に達する AWS WAF まで検査できます。検査を続行するか、検査をスキップするかを選択できます。検査をスキップする場合、リクエストがルールに一致するとマークするか一致しないとマークするかを選択できます。オーバーサイズコンテンツの処理の詳細については、「[でのウェブリクエストコンポーネントのオーバーサイズ化 AWS WAF](waf-oversize-request-components.md)」を参照してください。

## ヘッダーの順序
<a name="waf-rule-statement-request-component-header-order"></a>

が検査のために AWS WAF 受け取るウェブリクエストに表示される順序で、リクエストのヘッダー名のリストを含む文字列を検査します。 AWS WAF は文字列を生成し、それを検査のコンポーネントと一致するフィールドとして使用します。 は、文字列内のヘッダー名をコロンで AWS WAF 区切り、スペースを追加しません。例: `host:user-agent:accept:authorization:referer`。

このオプションでは、次の仕様を指定します。
+ **オーバーサイズ処理** – AWS WAF が検査 AWS WAF できる数以上のヘッダーデータを持つリクエストを処理する方法。 は、リクエストヘッダーの最初の 8 KB (8,192 バイト) まで、および最初の 200 ヘッダーまでを検査 AWS WAF できます。コンテンツは、最初の制限に達する AWS WAF まで検査できます。使用可能なヘッダーの検査を続行するか、検査をスキップするかを選択できます。検査をスキップする場合、リクエストがルールに一致するか一致しないかをマークします。オーバーサイズコンテンツの処理の詳細については、「[でのウェブリクエストコンポーネントのオーバーサイズ化 AWS WAF](waf-oversize-request-components.md)」を参照してください。

## cookie
<a name="waf-rule-statement-request-component-cookies"></a>

すべてのリクエスト cookie を検査します。フィルターを適用して、すべての cookie のサブセットを検査できます。

このオプションでは、次の仕様を指定します。
+ **[Match patterns]** (一致パターン) – 検査用の cookie のサブセットを取得するために使用するフィルター。 AWS WAF は、cookie キーでこれらのパターンを検索します。

  一致パターン設定は、次のいずれかになります。
  + **[All]** (すべて) – すべてのキーに一致します。すべての cookie のルール検査基準を評価します。
  + **[Excluded cookies]** (除外される cookie) – ここで指定した文字列のいずれとも一致しないキーを持つ cookie のみを検査します。キーの文字列一致は大文字と小文字が区別され、完全に一致する必要があります。
  + **[Included cookies]** (含まれる cookie) – ここで指定した文字列のいずれかに一致するキーを持つ cookie のみを検査します。キーの文字列一致は大文字と小文字が区別され、完全に一致する必要があります。
+ **一致範囲** – がルール検査基準で検査 AWS WAF する必要がある Cookie の一部。キーと値の両方に、**[Keys]** (キー)、**[Values]** (値)、または **[All]** (すべて) を指定できます。

  **[すべて]** では、キーで一致するもの、および値で一致するものを見つける必要はありません。キー、値、またはその両方で一致するものを見つける必要があります。キーと値で一致するものを見つけるようにするには、論理 `AND` ステートメントを使用して、キーを検査する一致ルールと値を検査する一致ルールの 2 つを組み合わせます。
+ **オーバーサイズ処理** – AWS WAF が検査 AWS WAF できるよりも大きい Cookie データを持つリクエストを処理する方法。 は、リクエスト Cookie の最初の 8 KB (8,192 バイト) まで、および最初の 200 個の Cookie まで検査 AWS WAF できます。コンテンツは、最初の制限に達する AWS WAF まで検査できます。検査を続行するか、検査をスキップするかを選択できます。検査をスキップする場合、リクエストがルールに一致するとマークするか一致しないとマークするかを選択できます。オーバーサイズコンテンツの処理の詳細については、「[でのウェブリクエストコンポーネントのオーバーサイズ化 AWS WAF](waf-oversize-request-components.md)」を参照してください。

## URI フラグメント
<a name="waf-rule-statement-request-component-uri-fragment"></a>

**注記**  
フラグメント検査は、CloudFront ディストリビューションと Application Load Balancer でのみ利用可能です。

「\$1」記号の後に続く URL の一部を検査し、\$1section2 など、リソースに関する追加情報を提供します。詳細については、「[Uniform Resource Identifier (URI): 一般的な構文](https://tools.ietf.org/html/rfc3986#section-3)」を参照してください。

このオプションでテキスト変換を使用しない場合、 AWS WAF は URI フラグメントを正規化せず、リクエストでクライアントから受信したとおりに検査します。テキスト変換については、「[でのテキスト変換の使用 AWS WAF](waf-rule-statement-transformation.md)」を参照してください。

**ルールステートメントの要件**  
このルールステートメントにはフォールバック動作を指定する必要があります。フォールバック動作は、URI にフラグメントがないか、関連するサービスが Application Load Balancer または CloudFront でない場合にウェブリクエスト AWS WAF に割り当てる一致ステータスです。一致を選択した場合、 はリクエストをルールステートメントに一致するものとして AWS WAF 処理し、ルールアクションをリクエストに適用します。一致しないことを選択した場合、 はリクエストをルールステートメントと一致しないものとして AWS WAF 扱います。

## URI パス
<a name="waf-rule-statement-request-component-uri-path"></a>

URL 内でリソースを識別する部分 (`/images/daily-ad.jpg` など) が検査されます。詳細については、「[Uniform Resource Identifier (URI): 一般的な構文](https://tools.ietf.org/html/rfc3986#section-3)」を参照してください。

このオプションでテキスト変換を使用しない場合、 AWS WAF は URI を正規化せず、リクエストでクライアントから受信したとおりに検査します。テキスト変換については、「[でのテキスト変換の使用 AWS WAF](waf-rule-statement-transformation.md)」を参照してください。

## JA3 フィンガープリント
<a name="waf-rule-statement-request-component-ja3-fingerprint"></a>

リクエストの JA3 フィンガープリントを検査します。

**注記**  
JA3 フィンガープリント検査は、Amazon CloudFront ディストリビューションと Application Load Balancer でのみ利用可能です。

JA3 フィンガープリントは、受信リクエストの TLS Client Hello から生成される 32 文字のハッシュです。このフィンガープリントは、クライアントの TLS 設定の一意の識別子として機能します。 AWS WAF は、計算に十分な TLS Client Hello 情報を持つリクエストごとに、このフィンガープリントを計算してログに記録します。この情報は、ほとんどすべてのウェブリクエストに含まれています。

**クライアントの JA3 フィンガープリントを取得する方法**  
クライアントリクエストの JA3 フィンガープリントは、保護パック (ウェブ ACL) ログからを取得できます。 AWS WAF がフィンガープリントを計算できる場合は、それをログに含めます。フィールドのログ記録については、「[保護パック (ウェブ ACL) トラフィックのログフィールド](logging-fields.md)」を参照してください。

**ルールステートメントの要件**  
JA3 フィンガープリントは、指定した文字列と完全に一致するように設定されている文字列一致ステートメント内のみで検査することができます。同じ TLS 設定を持つ将来のリクエストと一致させるために、文字列一致ステートメントの仕様のログから JA3 フィンガープリント文字列を指定します。文字列一致ルールステートメントの詳細については、「[文字列一致ルールステートメント](waf-rule-statement-type-string-match.md)」を参照してください。

このルールステートメントにはフォールバック動作を指定する必要があります。フォールバック動作は、 が JA3 フィンガープリントを計算できない場合にウェブリクエスト AWS WAF AWS WAF に割り当てる一致ステータスです。一致を選択した場合、 AWS WAF はリクエストをルールステートメントに一致するものとして処理し、ルールアクションをリクエストに適用します。一致しないことを選択した場合、 はリクエストをルールステートメントと一致しないものとして AWS WAF 扱います。

この一致オプションを使用するには、保護パック (ウェブ ACL) トラフィックをログに記録する必要があります。詳細については、「[ログ記録 AWS WAF 保護パック (ウェブ ACL) トラフィック](logging.md)」を参照してください。

## JA4 フィンガープリント
<a name="waf-rule-statement-request-component-ja4-fingerprint"></a>

リクエストの JA4 フィンガープリントを検査します。

**注記**  
JA4 フィンガープリント検査は、Amazon CloudFront ディストリビューションと Application Load Balancer でのみ使用できます。

JA4 フィンガープリントは、受信リクエストの TLS Client Hello から派生した 36 文字のハッシュです。このフィンガープリントは、クライアントの TLS 設定の一意の識別子として機能します。JA4 フィンガープリントは JA3 フィンガープリントの拡張機能であり、一部のブラウザでは一意のフィンガープリントが少なくなります。 AWS WAF は、計算に十分な TLS Client Hello 情報を持つリクエストごとにこのフィンガープリントを計算してログに記録します。この情報は、ほとんどすべてのウェブリクエストに含まれています。

**クライアントの JA4 フィンガープリントを取得する方法**  
クライアントリクエストの JA4 フィンガープリントは、保護パック (ウェブ ACL) ログからを取得できます。 AWS WAF がフィンガープリントを計算できる場合は、それをログに含めます。フィールドのログ記録については、「[保護パック (ウェブ ACL) トラフィックのログフィールド](logging-fields.md)」を参照してください。

**ルールステートメントの要件**  
JA4 フィンガープリントは、指定した文字列と完全に一致するように設定された文字列一致ステートメント内でのみ検査できます。同じ TLS 設定を持つ将来のリクエストと一致するように、文字列一致ステートメント仕様のログから JA4 フィンガープリント文字列を指定します。文字列一致ルールステートメントの詳細については、「[文字列一致ルールステートメント](waf-rule-statement-type-string-match.md)」を参照してください。

このルールステートメントにはフォールバック動作を指定する必要があります。フォールバック動作は、 が JA4 フィンガープリントを計算できない場合にウェブリクエスト AWS WAF AWS WAF に割り当てる一致ステータスです。一致を選択した場合、 AWS WAF はリクエストをルールステートメントに一致するものとして処理し、ルールアクションをリクエストに適用します。一致しないことを選択した場合、 はリクエストをルールステートメントと一致しないものとして AWS WAF 扱います。

この一致オプションを使用するには、保護パック (ウェブ ACL) トラフィックをログに記録する必要があります。詳細については、「[ログ記録 AWS WAF 保護パック (ウェブ ACL) トラフィック](logging.md)」を参照してください。

## クエリ文字列
<a name="waf-rule-statement-request-component-query-string"></a>

URL 内で `?` 文字の後に続く部分 (ある場合) が検査されます。

**注記**  
クロスサイトスクリプティングの一致ステートメントについては、**[Query string]** (クエリ文字列) ではなく、**[All query parameters]** (すべてのクエリパラメータ) を選択することをお勧めします。**[All query parameters]** (すべてのクエリパラメータ) を選択すると、基本コストに 10 WCU が追加されます。

## Single query parameter (単一クエリパラメータ)
<a name="waf-rule-statement-request-component-single-query-param"></a>

クエリ文字列の一部として定義した単一のクエリパラメータを検査します。 AWS WAF は、指定したパラメータの値を検査します。

このオプションでは、**[Query argument]** (クエリ引数) も指定します。例えば、URL が `www.xyz.com?UserName=abc&SalesRegion=seattle` である場合は、クエリ引数として `UserName` または `SalesRegion` を指定できます。引数の名前は最大 30 文字です。名前では大文字と小文字が区別されないため、`UserName` と指定すると、 AWS WAF では `UserName` のすべてのバリエーション (`username`、`UsERName` など) と一致します。

クエリ文字列に、指定したクエリ引数の複数のインスタンスが含まれている場合、 OR はロジックを使用して一致のすべての値を AWS WAF 検査します。例えば、URL `www.xyz.com?SalesRegion=boston&SalesRegion=seattle` では、 AWS WAF は、指定された名前を `boston` および `seattle` に対して評価します。いずれかが一致する場合、検査結果は一致となります。

## All query parameters (すべてのクエリパラメータ)
<a name="waf-rule-statement-request-component-all-query-params"></a>

リクエスト内のすべてのクエリパラメータが検査されます。これは単一のクエリパラメータコンポーネントの選択に似ていますが、クエリ文字列内のすべての引数の値を AWS WAF 検査します。例えば、URL が `www.xyz.com?UserName=abc&SalesRegion=seattle` である場合は、`UserName` または `SalesRegion` の値が検査基準に一致すると、 AWS WAF は一致をトリガーします。

このオプションを選択すると、基本コストに 10 WCU が追加されます。

## [Body] (本文)
<a name="waf-rule-statement-request-component-body"></a>

プレーンテキストとして評価されて、リクエストボディが検査されます。また、JSON コンテンツタイプを使用して、本文を JSON として評価することもできます。

リクエストボディは、リクエストの一部で、リクエストヘッダーの直後に続く部分です。これには、フォームからのデータなど、ウェブリクエストに必要な追加データが含まれます。
+ コンソールで、**[Content type]** (コンテンツタイプ) の **[Plain text]** (プレーンテキスト) を選択して、**[Request option]** (リクエストオプション) の **[Body]** (本文) でこれを選択します。
+ API では、ルールの `FieldToMatch` の指定で、リクエストボディをプレーンテキストとして検査するように `Body` を指定します。

Application Load Balancer および の場合 AWS AppSync、 はリクエストの本文の最初の 8 KB を検査 AWS WAF できます。CloudFront、API Gateway、Amazon Cognito、App Runner、Verified Access では、デフォルトで最初の 16 KB を検査 AWS WAF でき、保護パック (ウェブ ACL) 設定で制限を最大 64 KB まで増やすことができます。詳細については、「[でのボディ検査の管理に関する考慮事項 AWS WAF](web-acl-setting-body-inspection-limit.md)」を参照してください。

このコンポーネントタイプには、オーバーサイズの処理を指定する必要があります。オーバーサイズ処理は、 が検査 AWS WAF できるよりも大きい本文データを持つリクエストを が AWS WAF 処理する方法を定義します。検査を続行するか、検査をスキップするかを選択できます。検査をスキップする場合、リクエストがルールに一致するとマークするか一致しないとマークするかを選択できます。オーバーサイズコンテンツの処理の詳細については、「[でのウェブリクエストコンポーネントのオーバーサイズ化 AWS WAF](waf-oversize-request-components.md)」を参照してください。

本文を解析された JSON として評価することもできます。これに関する詳細については、次のセクションを参照してください。

## JSON 本文
<a name="waf-rule-statement-request-component-json-body"></a>

JSON として評価されて、リクエストボディが検査されます。本文をプレーンテキストとして評価することもできます。

リクエストボディは、リクエストの一部で、リクエストヘッダーの直後に続く部分です。これには、フォームからのデータなど、ウェブリクエストに必要な追加データが含まれます。
+ コンソールで、**[Content type]** (コンテンツタイプ) の **[JSON]** を選択して、**[Request option]** (リクエストオプション) の **[Body]** (本文) でこれを選択します。
+ API で、ルールの `FieldToMatch` の指定で `JsonBody` を指定します。

Application Load Balancer および の場合 AWS AppSync、 はリクエストの本文の最初の 8 KB を検査 AWS WAF できます。CloudFront、API Gateway、Amazon Cognito、App Runner、Verified Access では、デフォルトで最初の 16 KB を検査 AWS WAF でき、保護パック (ウェブ ACL) 設定で制限を最大 64 KB まで増やすことができます。詳細については、「[でのボディ検査の管理に関する考慮事項 AWS WAF](web-acl-setting-body-inspection-limit.md)」を参照してください。

このコンポーネントタイプには、オーバーサイズの処理を指定する必要があります。オーバーサイズ処理は、 が検査 AWS WAF できるよりも大きい本文データを持つリクエストを が AWS WAF 処理する方法を定義します。検査を続行するか、検査をスキップするかを選択できます。検査をスキップする場合、リクエストがルールに一致するとマークするか一致しないとマークするかを選択できます。オーバーサイズコンテンツの処理の詳細については、「[でのウェブリクエストコンポーネントのオーバーサイズ化 AWS WAF](waf-oversize-request-components.md)」を参照してください。

このオプションを選択すると、一致ステートメントの基本コスト WCU が 2 倍になります。例えば、一致ステートメントのベースコストが JSON 解析なしで 5 WCU の場合、JSON 解析を使用すると、コストが 10 WCU に倍増します。

このオプションでは、以下のセクションで説明されている通り追加の仕様を提供します。

**が JSON 本文検査 AWS WAF を処理する方法**  
は、ウェブリクエスト本文を JSON として AWS WAF 検査する場合、本文を解析し、検査用に JSON 要素を抽出するステップを実行します。 は、設定の選択に従ってこれらのステップ AWS WAF を実行します。

が AWS WAF 実行するステップを以下に示します。

1. **本文の内容を解析する** – は、検査用に JSON 要素を抽出するためにウェブリクエスト本文の内容を AWS WAF 解析します。 は本文のコンテンツ全体を解析するために最善を AWS WAF 尽くしますが、コンテンツのさまざまなエラー状態で解析が失敗する可能性があります。例としては、無効な文字、重複するキー、切り捨て、ルートノードがオブジェクトまたは配列ではないコンテンツなどがあります。

   オプションの**本文解析フォールバック動作**によって AWS WAF 、JSON 本文を完全に解析できなかった場合の動作が決まります。
   + **None (デフォルトの動作)** - 解析エラーが発生した時点までのみコンテンツ AWS WAF を評価します。
   + **文字列として評価** - 本文をプレーンテキストとして検査します。 は、JSON 検査用に定義したテキスト変換と検査基準を本文テキスト文字列 AWS WAF に適用します。
   + **一致** - ウェブリクエストをルールステートメントに一致するものとして扱います。 はルールアクションをリクエスト AWS WAF に適用します。
   + **一致なし** - ウェブリクエストをルールステートメントと一致しないものとして処理します。
**注記**  
このフォールバック動作は、JSON 文字列の解析中に でエラー AWS WAF が発生した場合にのみトリガーされます。

**解析では JSON が完全に検証されません**  
AWS WAF 解析では入力 JSON 文字列が完全に検証されないため、無効な JSON であっても解析が成功する可能性があります。

   たとえば、 はエラーなしで次の無効な JSON を AWS WAF 解析します。
   + カンマ不足: `{"key1":"value1""key2":"value2"}`
   + コロン不足: `{"key1":"value1","key2""value2"}`
   + 余分なコロン: `{"key1"::"value1","key2""value2"}`

   このように、解析は成功したものの結果が完全に有効な JSON ではない場合、評価の後続のステップの結果が異なることがあります。抽出で一部の要素が欠落したり、ルール評価で予期しない結果が出たりする可能性があります。アプリケーションで受信した JSON を検証し、必要に応じて無効な JSON を処理することをお勧めします。

1. **JSON 要素を抽出** – 設定に従って検査する JSON 要素のサブセット AWS WAF を識別します。
   + オプション **JSON 一致スコープ**は、 が検査 AWS WAF する JSON 内の要素のタイプを指定します。

     キーと値の両方に、**[Keys]** (キー)、**[Values]** (値)、または **[All]** (すべて) を指定できます。

     **[すべて]** では、キーで一致するもの、および値で一致するものを見つける必要はありません。キー、値、またはその両方で一致するものを見つける必要があります。キーと値で一致するものを見つけるようにするには、論理 `AND` ステートメントを使用して、キーを検査する一致ルールと値を検査する一致ルールの 2 つを組み合わせます。
   + **検査するコンテンツ**オプションは、 AWS WAF 検査するサブセットに設定された要素をフィルタリングする方法を指定します。

     いずれかを指定する必要があります。
     + **[完全な JSON コンテンツ]** – すべての要素を評価します。
     + **[含まれる要素のみ]** – パスが提供された JSON ポインタの基準に一致する要素のみを評価します。このオプションで JSON 内のすべてのパスを表示しないでください。**代わりに **[完全な JSON コンテンツ]** を使用してください。

       JSON ポインタ構文の詳細については、インターネットエンジニアリングタスクフォース (IETF) ドキュメントの「[JavaScript オブジェクト表記 (JSON) ポインタ](https://tools.ietf.org/html/rfc6901)」を参照してください。

       例えば、コンソールで次の内容を指定できます。

       ```
       /dogs/0/name
       /dogs/1/name
       ```

       API または CLI では、次を指定できます。

       ```
       "IncludedPaths": ["/dogs/0/name", "/dogs/1/name"]
       ```

   例えば、**[検査するコンテンツ]** 設定が **[含まれる要素のみ]** で、含まれている要素設定が `/a/b` であるとします。

   たとえば、次の JSON ボディの例の場合: 

   ```
   { 
     "a":{
       "c":"d",
       "b":{
         "e":{
           "f":"g"
         }
       }
     }
   }
   ```

   が各 **JSON 一致スコープ**設定を検査 AWS WAF する要素セットを以下に示します。含まれている要素のパスの一部であるキー `b` は評価されないことを注意してください。
   + **すべて**: `e`、`f,` および `g`。
   + **キー **: `e` および `f`。
   + **値**: `g`。

1. **JSON 要素セットの検査** – 抽出された JSON 要素に指定したテキスト変換 AWS WAF を適用し、結果の要素セットをルールステートメントの一致基準と照合します。これは、他のウェブリクエストコンポーネントに対するものと同じ変換および評価の動作です。抽出された JSON 要素のいずれかが一致する場合、そのウェブリクエストはルールに一致します。

# で転送された IP アドレスを使用する AWS WAF
<a name="waf-rule-statement-forwarded-ip-address"></a>

このセクションは、ウェブリクエストの IP アドレスを使用するルールステートメントに適用されます。デフォルトでは、 はウェブリクエストオリジンの IP アドレス AWS WAF を使用します。ただし、ウェブリクエストが 1 つ以上のプロキシまたはロードバランサーを通過する場合、ウェブリクエストの発信元には、クライアントの発信アドレスではなく、最後のプロキシのアドレスが含まれます。この場合、通常、発信元のクライアントアドレスは別の HTTP ヘッダーに転送されます。このヘッダーは通常 `X-Forwarded-For` (XFF) ですが、別のヘッダーにすることもできます。

**IP アドレスを使用するルールステートメント**  
IP アドレスを使用するルールステートメントは次のとおりです。
+ [IP セット一致](waf-rule-statement-type-ipset-match.md) - IP セットで定義されているアドレスと一致する IP アドレスを検査します。
+ [地理的一致](waf-rule-statement-type-geo-match.md) - IP アドレスを使用して発信元の国と地域を特定し、それを国のリストと照合します。
+ [ASN 一致](waf-rule-statement-type-asn-match.md) - IP アドレスを使用して AS 番号 (ASN) を判別し、ASN のリストに対して ASN を照合します。
+ [レートベースのルールステートメントの使用](waf-rule-statement-type-rate-based.md) - IP アドレスでリクエストを集約して、個々の IP アドレスがリクエストを過度に高いレートで送信しないようにできます。IP アドレスの集約は、単独で使用することも、他の集約キーと組み合わせて使用することもできます。

ウェブリクエストのオリジンを使用する代わりに、 `X-Forwarded-For` ヘッダーまたは別の HTTP ヘッダーのいずれかから、これらのルールステートメントに転送された IP アドレスを使用する AWS WAF ように に指示できます。仕様を指定する方法の詳細については、個別のルールステートメントタイプのガイダンスを参照してください。

**注記**  
ヘッダーがない場合、 はそのヘッダーを「一致なし」として使用するステートメント AWS WAF を評価します。NOT ステートメントを「一致なし」の結果で使用すると、 は評価を「一致 AWS WAF 」に変換します。ヘッダーが見つからない場合、フォールバック動作はトリガーされません。無効なヘッダー値のみがトリガーされます。

**フォールバック動作**  
転送された IP アドレスを使用する場合、リクエストに指定された位置に有効な IP アドレスがない場合 AWS WAF に がウェブリクエストに割り当てる一致ステータスを指定します。
+ **MATCH** - ウェブリクエストをルールステートメントに一致するものとして扱います。 はルールアクションをリクエスト AWS WAF に適用します。
+ **一致なし** - ウェブリクエストをルールステートメントと一致しないものとして処理します。

**AWS WAF Bot Control で使用される IP アドレス**  
Bot Control マネージドルールグループは、IP アドレスを使用してボットを検証します AWS WAF。Bot Control を使用し、プロキシまたはロードバランサーを介してルーティングするボットを検証した場合は、カスタムルールを使用して明示的に許可する必要があります。例えば、転送された IP アドレスを使用して検証済みボットを検出および許可するカスタム IP セット一致ルールを設定できます。ルールを使用して、さまざまな方法でボット管理をカスタマイズできます。説明と例については、「[AWS WAF ボットコントロール](waf-bot-control.md)」を参照してください。

**転送された IP アドレスの使用に関する一般的な考慮事項**  
転送された IP アドレスを使用する前に、次の一般的な注意事項に留意してください。
+ ヘッダーは途中でプロキシによって変更でき、プロキシはヘッダーをさまざまな方法で処理することがあります。
+ 攻撃者は、 AWS WAF 検査をバイパスしようとしてヘッダーの内容を変更する可能性があります。
+ ヘッダー内の IP アドレスは、形式が正しくないか、無効である可能性があります。
+ 指定したヘッダーは、リクエストにまったく存在しない可能性があります。

**で転送された IP アドレスを使用する際の考慮事項 AWS WAF**  
次のリストでは、転送された IP アドレスを で使用するための要件と注意点について説明します AWS WAF。
+ 単一のルールでは、転送された IP アドレス用に 1 つのヘッダーを指定できます。ヘッダーの仕様では、大文字と小文字は区別されません。
+ レートベースのルールステートメントでは、ネストされたスコープステートメントは、転送された IP 設定を継承しません。転送された IP アドレスを使用する各ステートメントの設定を指定します。
+ 地理的一致、ASN 一致、レートベースのルールの場合、 は ヘッダーの最初のアドレス AWS WAF を使用します。たとえば、ヘッダーに が含まれている場合、 は `10.1.1.1, 127.0.0.0, 10.10.10.10` AWS WAF を使用します。 `10.1.1.1`
+ IP セットの一致では、ヘッダーの最初のアドレス、最後のアドレス、または任意のアドレスのいずれと照合するかを指定します。指定した場合、 はヘッダー内のすべてのアドレスに一致がないか、最大 10 個のアドレス AWS WAF を検査します。ヘッダーに 10 個を超えるアドレスが含まれている場合、 は最後の 10 個 AWS WAF を検査します。
+ 複数のアドレスを含むヘッダーでは、アドレスの間にカンマ区切り文字を使用する必要があります。リクエストでカンマ以外の区切り文字が使用されている場合、 AWS WAF はヘッダーの IP アドレスの形式が正しくないとみなします。
+ ヘッダー内の IP アドレスが不正な形式であるか、または無効である場合、 AWS WAF は、転送された IP 設定で指定したフォールバック動作に従って、ウェブリクエストをルールに一致するか一致しないかを指定します。
+ 指定したヘッダーがリクエストに存在しない場合、 AWS WAF はリクエストにルールをまったく適用しません。つまり、 AWS WAF はルールアクションを適用せず、フォールバック動作も適用しません。
+ IP アドレス用に転送された IP ヘッダーを使用するルールステートメントでは、ウェブリクエストの発信元によって報告された IP アドレスは使用されません。

**で転送された IP アドレスを使用するためのベストプラクティス AWS WAF**  
転送された IP アドレスを使用する場合は、次のベストプラクティスを使用します。
+ 転送された IP 設定を有効にする前に、リクエストヘッダーの可能な状態をすべて慎重に検討してください。目的の動作を実現するには、複数のルールを使用する必要がある場合があります。
+ 複数の転送された IP ヘッダーを検査したり、ウェブリクエストの発信元と転送された IP ヘッダーを検査したりするには、IP アドレスのソースごとに 1 つのルールを使用します。
+ 無効なヘッダーを持つウェブリクエストをブロックするには、ブロックするようにルールアクションを設定し、転送された IP 設定のフォールバック動作を一致するように設定します。

**転送された IP アドレスの JSON の例**  
次の地理一致ステートメントは、発信元の国が `US` である IP が `X-Forwarded-For` ヘッダーに含まれている場合にのみ一致します。

```
{
  "Name": "XFFTestGeo",
  "Priority": 0,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "XFFTestGeo"
  },
  "Statement": {
    "GeoMatchStatement": {
      "CountryCodes": [
        "US"
      ],
      "ForwardedIPConfig": {
        "HeaderName": "x-forwarded-for",
        "FallbackBehavior": "MATCH"
      }
    }
  }
}
```

次のレートベースのルールは、`X-Forwarded-For` ヘッダーの最初の IP に基づいてリクエストを集約します。ルールは、ネストされた地理一致ステートメントに一致するリクエストのみをカウントし、地理一致ステートメントに一致するリクエストのみをブロックします。ネストされた地理一致ステートメントは、`X-Forwarded-For` ヘッダーを使用して、IP アドレスが `US` の発信元の国を示しているかどうかも判断します。示している場合、またはヘッダーが存在していても形式が間違っている場合、地理一致ステートメントは一致を返します。

```
{
  "Name": "XFFTestRateGeo",
  "Priority": 0,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "XFFTestRateGeo"
  },
  "Statement": {
    "RateBasedStatement": {
      "Limit": "100",
      "AggregateKeyType": "FORWARDED_IP",
      "ScopeDownStatement": {
        "GeoMatchStatement": {
          "CountryCodes": [
            "US"
          ],
          "ForwardedIPConfig": {
            "HeaderName": "x-forwarded-for",
            "FallbackBehavior": "MATCH"
          }
        }
      },
      "ForwardedIPConfig": {
        "HeaderName": "x-forwarded-for",
        "FallbackBehavior": "MATCH"
      }
    }
  }
}
```

# での HTTP/2 擬似ヘッダーの検査 AWS WAF
<a name="waf-rule-statement-request-components-for-http2-pseudo-headers"></a>

このセクションでは、 AWS WAF を使用して HTTP/2 擬似ヘッダーを検査する方法について説明します。

HTTP/2 トラフィックをサポートする保護された AWS リソースは、検査 AWS WAF のために HTTP/2 擬似ヘッダーを に転送しませんが、 AWS WAF 検査するウェブリクエストコンポーネントに擬似ヘッダーのコンテンツを提供します。

を使用して AWS WAF 、次の表に示す擬似ヘッダーのみを検査できます。


**ウェブリクエストコンポーネントにマップされた HTTP/2 疑似ヘッダーの内容**  

| HTTP/2 擬似ヘッダー | 検査するウェブリクエストコンポーネント | ドキュメント | 
| --- | --- | --- | 
|  `:method`  |  HTTP メソッド   |  [HTTP メソッド](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-http-method)  | 
|  `:authority`  |  `Host` ヘッダー   |  [単一ヘッダー](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-single-header)  [すべてのヘッダー](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-headers)  | 
|  `:path` URI パス  | URI パス  | [URI パス](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-uri-path) | 
|  `:path` クエリ  |  クエリ文字列  |  [クエリ文字列](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-query-string) [Single query parameter (単一クエリパラメータ)](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-single-query-param) [All query parameters (すべてのクエリパラメータ)](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-all-query-params)  | 

# でのテキスト変換の使用 AWS WAF
<a name="waf-rule-statement-transformation"></a>

このセクションでは、リクエストを検査する前に が適用 AWS WAF する変換を提供する方法について説明します。

パターンを探したり制約を設定したりするステートメントでは、リクエストを検査する前に が適用 AWS WAF する変換を指定できます。変換では、 AWS WAFをバイパスするために攻撃者が使用する異常なフォーマットの一部を削除するために、ウェブリクエストが再フォーマットされます。

これを JSON 本文リクエストコンポーネントの選択で使用する場合、 AWS WAF は JSON から検査する要素を解析および抽出した後、変換を適用します。詳細については、「[JSON 本文](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-json-body)」を参照してください。

複数の変換が指定された場合、 AWS WAF は変換の適用順序も設定します。

**WCU** - テキスト変換ごとには 10 個の WCU。

 AWS WAF コンソールと API のドキュメントには、以下の場所におけるこれらの設定に関するガイダンスも記載されています。
+ コンソールの**ルールビルダー** - **[Text transformation]** (テキスト変換)。このオプションは、リクエストコンポーネントの使用時に選択できます。
+ **API ステートメントのコンテンツ** – `TextTransformations`テキスト変換のオプション

各変換リストには、コンソールと API の仕様が表示され、説明が続きます。

Base64 decode – `BASE64_DECODE`  
AWS WAF は Base64-encodedされた文字列をデコードします。

Base64 decode extension – `BASE64_DECODE_EXT`  
AWS WAF は Base64-encodedされた文字列をデコードしますが、無効な文字を無視する寛容な実装を使用します。

Command line – `CMD_LINE`  
このオプションは、攻撃者がオペレーティングシステムのコマンドラインコマンドを挿入し、異常なフォーマットを使用して、コマンドの一部またはすべてを偽装する状況を緩和します。  
このオプションを使用して、次の変換を実行します。  
+ 次の文字を削除します: `\ " ' ^`
+ 次の文字の前にあるスペースを削除します: `/ (`
+ 次の文字をスペースに置き換えます: `, ;`
+ 複数のスペースを 1 つのスペースに置き換えます。
+ 大文字 `A-Z` を小文字 `a-z` に変換します。

Compress whitespace – `COMPRESS_WHITE_SPACE`  
AWS WAF は、複数のスペースを 1 つのスペースに置き換え、次の文字をスペース文字 (ASCII 32) に置き換えることで、空白を圧縮します。  
+ フォームフィード (ASCII 12)
+ タブ (ASCII 9)
+ 改行 (ASCII 10)
+ キャリッジリターン (ASCII 13)
+ 垂直タブ (ASCII 11)
+ 改行なしスペース (ASCII 160)

CSS decode – `CSS_DECODE`  
AWS WAF は、CSS 2.x エスケープルール を使用してエンコードされた文字をデコードします`syndata.html#characters`。この関数は、デコード処理で最大 2 バイトを使用するため、通常はエンコードされない CSS エンコーディングを使用してエンコードされた ASCII 文字を発見するのに役立ちます。また、バックスラッシュと 16 進数以外の文字の組み合わせである回避対策にも役立ちます。たとえば、`javascript` の `ja\vascript` を設定します。

Escape sequences decode – `ESCAPE_SEQ_DECODE`  
AWS WAF は、次の ANSI C エスケープシーケンスをデコードします: `\a`、`\b`、、`\f`、`\n``\r`、`\t`、`\v`、、`\\``\?`、`\xHH`、 (16 進数)`\"`、 `\0OOO` (8 `\'`進数）。有効でないエンコーディングは出力に残ります。

Hex decode – `HEX_DECODE`  
AWS WAF は 16 進数の文字の文字列をバイナリにデコードします。

HTML entity decode – `HTML_ENTITY_DECODE`  
AWS WAF は、16 進数形式`&#xhhhh;`または 10 進数形式で表される文字を対応する文字`&#nnnn;`に置き換えます。  
AWS WAF は、次の HTML エンコード文字をエンコードされていない文字に置き換えます。このリストでは小文字の HTML エンコーディングを使用しますが、処理では大文字と小文字が区別されません。例えば、`&QuOt;` と `&quot;` は同じように扱われます。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/waf-rule-statement-transformation.html)

JS decode – `JS_DECODE`  
AWS WAF は JavaScript エスケープシーケンスをデコードします。`\uHHHH` コードが `FF01-FF5E` の全角 ASCII コード範囲内にある場合、高位バイトを使用して下位バイトが検出され、調整されます。そうでない場合は、下位バイトのみが使用され、上位バイトはゼロになり、情報が失われる可能性があります。

Lowercase – `LOWERCASE`  
AWS WAF は大文字 (A～Z) を小文字 (a～z) に変換します。

MD5 – `MD5`  
AWS WAF は、入力内のデータから MD5 ハッシュを計算します。計算されたハッシュは生のバイナリ形式です。

None – `NONE`  
AWS WAF は、テキスト変換なしで、受信したウェブリクエストを検査します。

Normalize path – `NORMALIZE_PATH`  
AWS WAF は、入力の先頭にない複数のスラッシュ、ディレクトリの自己参照、およびディレクトリのバックリファレンスを削除することで、入力文字列を正規化します。

Normalize path Windows – `NORMALIZE_PATH_WIN`  
AWS WAF はバックスラッシュ文字をスラッシュに変換し、`NORMALIZE_PATH`変換を使用して結果の文字列を処理します。

Remove nulls – `REMOVE_NULLS`  
AWS WAF は入力からすべての`NULL`バイトを削除します。

Replace comments – `REPLACE_COMMENTS`  
AWS WAF は、C 形式のコメント (/\$1 ... \$1/) の各出現を 1 つのスペースに置き換えます。コメントが複数連続しているときは、圧縮しません。コメントの終端がないときもスペース (ASCII 0x20) に置き換えられます。コメントの終端 (\$1/) のみがあるときは変更されません。

Replace nulls – `REPLACE_NULLS`  
AWS WAF は、入力の各バイトをスペース文字 (ASCII `NULL` 0x20) に置き換えます。

SQL hex decode – `SQL_HEX_DECODE`  
AWS WAF は SQL 16 進数のデータをデコードします。たとえば、 は (`0x414243`) を () に AWS WAF デコードします`ABC`。

URL decode – `URL_DECODE`  
AWS WAF は URL エンコードされた値をデコードします。

URL decode Unicode – `URL_DECODE_UNI`  
`URL_DECODE` と同様ですが、Microsoft 固有の `%u` エンコーディングをサポートしています。コードが `FF01-FF5E` の全角 ASCII コード範囲内にある場合、高位バイトを使用して下位バイトが検出され、調整されます。それ以外の場合は、下位バイトのみが使用され、高位バイトはゼロになります。

UTF8 to Unicode – `UTF8_TO_UNICODE`  
AWS WAF は、すべての UTF-8 文字シーケンスを Unicode に変換します。これは、入力を正規化し、非英語の言語における誤検知（偽陽性や偽陰性）を最小限に抑えるのに役立ちます。