AWS WAF ルール - AWS WAF、AWS Firewall Manager、AWS Shield Advanced、および AWS Shield ネットワークセキュリティディレクター

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

更新されたエクスペリエンスを使用して、コンソールの任意の場所で AWS WAF 機能にアクセスできるようになりました。詳細については、「更新されたコンソールエクスペリエンスを使用する」を参照してください。

AWS WAF ルール

このセクションでは、AWS WAF ルールとは何か、またその仕組みについて説明します。

AWS WAF ルールでは、HTTP(S) ウェブリクエストを検査する方法と、検査基準に一致したときにリクエストに対して実行するアクションを定義します。ルールは、ルールグループまたは保護パック (ウェブ ACL) のコンテキストでのみ定義されます。

ルールは、AWS WAF に単独で存在するわけではありません。ルールは AWS リソースではなく、Amazon リソースネーム (ARN) も割り当てられていません。ルールが定義されているルールグループまたは保護パック (ウェブ ACL) に含まれる名前を使用してルールにアクセスします。ルールを管理し、他の保護パック (ウェブ ACL) にコピーするには、そのルールが含まれているルールグループまたは保護パック (ウェブ ACL) の JSON ビューを使用します。また、AWS WAF コンソールのルールビルダーを使用して管理することもできます。このルールビルダーは保護パック (ウェブ ACL) とルールグループで利用可能です。

ルール名

各ルールには名前が必要です。AWS で始まる名前や、他のサービスによって管理されているルールグループまたはルールに使用されている名前は避けてください。「他のサービスによって提供されるルールグループを識別する」を参照してください。

注記

ルールの名前を変更し、ルールのメトリック名に変更を反映させたい場合は、メトリック名も更新する必要があります。ルール名を変更しても、AWS WAF では、ルールのメトリック名は自動的に更新されません。ルールの JSON エディターを使用して、コンソールでルールを編集するときに、メトリック名を変更できます。API や、保護パック (ウェブ ACL) またはルールグループの定義に使用する JSON リストを使用して、両方の名前を変更することもできます。

ルールステートメント

各ルールには、ルールがウェブリクエストを検査する方法を定義するルールステートメントも必要です。ルールステートメントには、ルールとステートメントのタイプに応じて、ネストされたステートメントを任意の深さに含めることができます。一部のルールステートメントは、条件のセットを採用します。例えば、IP セット一致ルールに最大 10,000 個の IP アドレスまたは IP アドレス範囲を指定できます。

次のような基準を検査するルールを定義できます。

  • 悪意のある可能性が高いスクリプト。攻撃者は、ウェブアプリケーションの脆弱性を悪用できるスクリプトを埋め込みます。これはクロスサイトスクリプティング (XSS) と呼ばれます。

  • リクエストの発生元の IP アドレスまたはアドレス範囲。

  • リクエスト送信元の国または地理的場所。

  • クエリ文字列など、リクエストの指定した部分の長さ。

  • 悪意のある可能性が高い SQL コード。攻撃者は、ウェブリクエストに悪意のある SQL コードを埋め込むことで、データベースからデータを抽出しようとします。これは SQL インジェクション と呼ばれます。

  • リクエストに表示される文字列。例えば、User-Agent ヘッダーに表示される値、またはクエリ文字列に表示されるテキスト文字列です。正規表現を使用してこれらの文字列を指定することもできます。

  • 保護パック (ウェブ ACL) の以前のルールがリクエストに追加したラベル。

上記のリストにあるようなウェブリクエストの検査基準を持つステートメントに加えて、AWS WAF は、ルール内のステートメントを組み合わせるために使用する ANDOR、および NOT の論理ステートメントをサポートします。

例えば、攻撃者からの最近のリクエストに基づいて、次のネストされたステートメントを組み合わせた論理 AND ステートメントを使用してルールを作成できます。

  • リクエストが 192.0.2.44 から発生した。

  • リクエストの User-Agent ヘッダーに BadBot 値が含まれる。

  • それらのクエリ文字列には、SQL などのコードが含まれる。

この場合、上位のレベルの AND に一致するようにするには、ウェブリクエストはすべてのステートメントに一致する必要があります。