AWS WAF とそのコンポーネントの設定 - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced

AWS WAF とそのコンポーネントの設定

このチュートリアルでは、AWS WAF を使用して次のタスクを実行する方法を示します。

  • AWS WAF のセットアップ

  • AWS WAF コンソールのウィザードを使用して、ウェブアクセスコントロールリスト (ウェブ ACL) を作成する。

  • AWS WAF でウェブリクエストを検査する AWS リソースを選択します。このチュートリアルには、Amazon CloudFront のステップが記載されています。このプロセスは、Amazon API Gateway REST API、Application Load Balancer、AWS AppSync GraphQL API、Amazon Cognito ユーザープール、AWS App Runner サービス、または AWS Verified Access インスタンスの場合と基本的に同じです。

  • ウェブリクエストのフィルタリングに使用するルールおよびルールグループを追加します。例えば、リクエストの発生元の IP アドレスと、攻撃者によってのみ使用されるリクエスト内の値を指定できます。各ルールについて、一致するウェブリクエストの処理方法を指定します。ウェブリクエストをブロックしたりカウントしたり、CAPTCHA のようなボットチャレンジを実行することもできます。ウェブ ACL 内で定義する各ルールと、ルールグループ内で定義する各ルール用に、アクションを定義します。

  • ウェブ ACL のデフォルトのアクション (Block または Allow) を指定します。これは、ウェブ ACL のルールがリクエストを明示的に許可またはブロックしないとき、AWS WAF がリクエストに対して実行するアクションです。

注記

AWS では通常、このチュートリアルで作成するリソースに対して 1 日あたり 0.25 USD 以下の料金が発生します。チュートリアルを終了したら、不要な料金が発生しないようにリソースを削除することをお勧めします。

ステップ 1: AWS WAF を設定する

アカウントを設定してサービスを使用する の一般的なセットアップ手順をまだ実行していない場合、今すぐ実行してください。

ステップ 2: ウェブ ACL を作成する

AWS WAF コンソールでは、リクエストの発生元の IP アドレスやリクエスト内の値など、指定した基準に基づいてウェブリクエストをブロックまたは許可するように、AWS WAF を設定するプロセスが案内されます。このステップでは、ウェブ ACL を作成します。AWS WAF ウェブ ACL の詳細については、「AWS WAF でのウェブ ACL の使用」を参照してください。

ウェブ ACL を作成するには
  1. AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/) を開きます。

  2. AWS WAF ホームページから、[Create web ACL] (ウェブ ACL を作成) を選択します。

  3. [Name] (名前) で、このウェブ ACL の識別に使用する名前を入力します。

    注記

    ウェブ ACL の作成後は、名前を変更することはできません。

  4. (オプション) 必要に応じて、[Description - optional] (説明 - オプション) に、ウェブ ACL の詳しい説明を入力します。

  5. [CloudWatch metric name] (CloudWatch メトリクス名) で、必要に応じてデフォルト名を変更します。有効な文字については、コンソールのガイダンスに従ってください。名前には、特殊文字、空白や、「All」および「Default_Action」などの AWS WAF 用に予約されたメトリクス名を使用できません。

    注記

    ウェブ ACL の作成後は CloudWatch メトリクス名を変更できません。

  6. [Resource type] (リソースタイプ) で、[CloudFront distributions] (CloudFront ディストリビューション) を選択します。[Region] (リージョン) が、CloudFront ディストリビューションの [Global (CloudFront)] (グローバル (CloudFront)) に自動的に入力されます。

  7. (オプション) [Associated AWS resources - optional] (関連付けられた リソース - オプション) で、[Add AWS resources] ( リソースの追加) を選択します。ダイアログボックスで、関連付けるリソースを選択し、[Add] (追加) を選択します。AWS WAF は [Describe web ACL and associated AWS resources] (ウェブ ACL と関連付けられた リソースの説明) ページに戻します。

  8. [Next] (次へ) を選択します。

ステップ 3: 文字列一致ルールを追加する

このステップでは、文字列一致ステートメントを使用してルールを作成し、一致リクエストの処理方法を指定します。文字列一致ルールステートメントは、AWS WAF がリクエストで検索する文字列を識別します。通常、文字列は印刷可能な ASCII 文字で構成されますが、16 進数 0x00 〜 0xFF (10 進数 0 〜 255) の任意の文字を指定できます。検索する文字列を指定するだけでなく、ヘッダー、クエリ文字列、リクエストボディなど、検索するウェブリクエストコンポーネントを指定します。

このステートメントタイプは、ウェブリクエストコンポーネントで動作し、次のリクエストコンポーネント設定が必要です。

  • [リクエストコンポーネント] — ウェブリクエストの検査対象部分 (クエリ文字列や本文など)。

    警告

    リクエストコンポーネント [Body] (本文)、[JSON body] (JSON 本文)、[Headers] (ヘッダー)、または [Cookies] (cookie) を検査する場合、AWS WAF で検査できるコンテンツの量の制限を「AWS WAF でのオーバーサイズウェブリクエストコンポーネントの処理」で確認してください。

    ウェブリクエストコンポーネントの詳細については、「AWS WAF でのルールステートメント設定の調整」を参照してください。

  • [Optional text transformations] (オプションのテキスト変換) – リクエストコンポーネントを検査する前に AWS WAF が実行する変換。例えば、小文字に変換したり、空白を正規化したりできます。複数の変換を指定すると、AWS WAF は、リストされている順に処理します。詳細については、「AWS WAF でのテキスト変換の使用」を参照してください。

AWS WAF ルールの詳細については、「AWS WAF ルールの使用」を参照してください。

文字列一致ルールステートメントを作成するには
  1. [Add rules and rule groups] (ルールとルールグループの追加) ページで、[Add rules] (ルールの追加)、[Add my own rules and rule groups] (独自のルールとルールグループの追加)、[Rule builder] (ルールビルダー)、[Rule visual editor] (ルールビジュアルエディタ) の順に選択します。

    注記

    コンソールには、ルールビジュアルエディタルール JSON エディタが用意されています。JSON エディタを使用すると、ウェブ ACL 間で設定を簡単にコピーできます。これは、ネストのレベルが複数あるルールセットなど、より複雑なルールセットに必要です。

    この手順では、ルールビジュアルエディタを使用します。

  2. [Name] (名前) で、このルールの識別に使用する名前を入力します。

  3. [Type] (タイプ) で、[Regular rule] (通常のルール) を選択します。

  4. [If a request] (リクエストの状態) で、[matches the statement] (ステートメントに一致) を選択します。

    その他のオプションは、論理ルールステートメントタイプ用です。これらを使用して、他のルールステートメントの結果を組み合わせたり、否定したりできます。

  5. [Statement] (ステートメント) の [Inspect] (検査) で、ドロップダウンを開き、AWS WAF で検査するウェブリクエストコンポーネントを選択します。この例では、[単一ヘッダー] を選択します。

    [単一ヘッダー] を選択した場合は、AWS WAF で検査するヘッダーも指定します。User-Agent と入力します。この値では大文字と小文字は区別されません。

  6. [Match type] (一致タイプ) で、指定した文字列が User-Agent ヘッダーに表示される場所を選択します。

    この例では、[Exactly matches string] (文字列に完全一致) を選択します。これは、AWS WAF が指定した文字列と同じ文字列について各ウェブリクエスト内のユーザーエージェントヘッダーを検査することを示します。

  7. [String to match] (照合する文字列) で、AWS WAF で検索する文字列を指定します。[String to match] (照合する文字列) は最大 200 文字です。base64 でエンコードされた値を指定する場合、エンコード前の長さで最大 200 文字指定できます。

    この例では、MyAgent と入力します。AWS WAF は値 MyAgent のウェブリクエストの User-Agent ヘッダーを検査します。

  8. [Text transformation] (テキスト変換) を [None] (なし) のままにします。

  9. [Action] (アクション) で、ウェブリクエストに一致したときにルールによって実行されるアクションを選択します。この例では、[Count] (カウント) を選択し、他の選択肢はそのままにしておきます。カウントアクションにより、ルールに一致するウェブリクエストのメトリクスが作成されますが、リクエストが許可またはブロックされるかどうかには影響しません。アクションの選択の詳細については、「AWS WAF でのルールアクションの使用」および「AWS WAF のルールとルールグループをウェブ ACL と使い合わせる」を参照してください。

  10. [Add rule] (ルールの追加) を選択します。

ステップ 4: AWS マネージドルールルールグループを追加する

AWS マネージドルールは、お客様が使用するためのマネージドルールグループのセットを提供します。AWS WAF のお客様には、そのほとんどが無料で提供されます。ルールグループの詳細については、「AWS WAF ルールグループの使用」を参照してください。このウェブ ACL に AWS マネージドルールのルールグループを追加します。

AWS マネージドルールのルールグループを追加するには
  1. [Add rules and rule groups] (ルールとルールグループの追加) ページで、[Add rules] (ルールの追加) を選択し、[Add managed rule groups] (マネージドルールグループの追加) を選択します。

  2. [マネージドルールグループを追加] ページで、[AWS マネージドルールグループ] のリストを展開します。(AWS Marketplace 販売者に提供されるリストも表示されます。販売者のサービスをサブスクライブして、AWS マネージドルールのルールグループの場合と同じように使用できます。)

  3. 追加するルールグループについて、次を実行します。

    1. [Action] (アクション) 列で、[Add to web ACL] (ウェブ ACL に追加) 切り替えボタンをオンにします。

    2. [Edit] (編集) を選択し、ルールグループの [Rules] (ルール) リストで [Override all rule actions] (すべてのルールアクションをオーバーライド) ドロップダウンを開いて [Count] を選択します。これにより、ルールグループ内のすべてのルールのアクションがカウントのみに設定されます。これにより、ルールグループのルールを使用する前に、ルールグループのすべてのルールがウェブリクエストでどのように動作するかを確認できます。

    3. [Save rule] (ルールを保存) を選択します。

  4. [Add managed rule groups] (マネージドルールグループを追加) ページで、[Add rules] (ルールを追加) を選択します。これにより、[Add rules and rule groups] (ルールとルールグループを追加) ページに戻ります。

ステップ 5: ウェブ ACL の設定を完了する

ルールとルールグループをウェブ ACL 設定に追加したら、ウェブ ACL 内のルールの優先順位を管理し、メトリクス、タグ付け、ログ記録などの設定を行うことで完了します。

ウェブ ACL の設定を完了するには
  1. [Add rules and rule groups] (ルールとルールグループの追加) ページで、[Next] (次へ) を選択します。

  2. [Set rule priority] (ルールの優先順位の設定) ページでは、ウェブ ACL 内のルールおよびルールグループの処理順序を確認できます。AWS WAF は、それらをリストの最上位から処理します。処理順序は、ルールを上下に移動することで変更できます。これを行うには、リストで 1 つを選択し、[Move up] (上へ移動) または [Move down] (下へ移動) を選択します。ルーティングの優先度の詳細については、「ウェブ ACL でのルール優先度の設定」をご覧ください。

  3. [Next] を選択します。

  4. [Configure metrics] (メトリクスの設定) ページの [Amazon CloudWatch metrics] (Amazon CloudWatch メトリクス) で、ルールとルールグループ用の計画されたメトリクスと、ウェブリクエストのサンプリングオプションを確認できます。サンプリングされたリクエストの表示方法については、「ウェブリクエストのサンプルの表示」を参照してください。Amazon CloudWatch メトリクスの詳細については、「Amazon CloudWatch によるモニタリング」を参照してください。

    ウェブトラフィックメトリクスの概要には、AWS WAF コンソールのウェブ ACL ページの [トラフィック概要] タブでアクセスできます。コンソールダッシュボードには、ウェブ ACL の Amazon CloudWatch メトリクスの概要がほぼリアルタイムで表示されます。詳細については、「ウェブ ACL トラフィック概要ダッシュボード」を参照してください。

  5. [Next] を選択します。

  6. [Review and create web ACL] (ウェブ ACL の確認と作成) ページで、設定を確認し、[Create web ACL] (ウェブ ACL の作成) を選択します。

ウィザードによって [Web ACL] (ウェブ ACL) ページに戻ります。このページには、新しいウェブ ACL が一覧表示されます。

ステップ 6: リソースをクリーンアップする

これでチュートリアルは完了です。アカウントで AWS WAF の追加料金が発生しないようにするには、作成した AWS WAF オブジェクトをクリーンアップします。あるいは、AWS WAF を使用して実際に管理するウェブリクエストに一致するように設定を変更することもできます。

注記

AWS では通常、このチュートリアルで作成するリソースに対して 1 日あたり 0.25 USD 以下の料金が発生します。終了したら、不要な料金が発生しないようにリソースを削除することをお勧めします。

AWS WAF の料金が発生するオブジェクトを削除するには
  1. [Web ACL] (ウェブ ACL) ページで、リストからウェブ ACL を選択し、[Edit] (編集) を選択します。

  2. [関連付けられた AWS リソース] タブで、関連付けられたリソースごとに、リソース名の横にあるラジオボタンを選択し、その後に [関連付けの解除] を選択します。これにより、ウェブ ACL と AWS リソースの関連付けが解除されます。

  3. 次の各画面で、[Web ACL] (ウェブ ACL) ページに戻るまで [Next] (次へ) を選択します。

    [Web ACL] (ウェブ ACL) ページで、リストからウェブ ACL を選択し、[Delete] (削除) を選択します。

ルールおよびルールステートメントは、ルールグループおよびウェブ ACL 定義の外部には存在しません。ウェブ ACL を削除すると、ウェブ ACL で定義した個々のルールがすべて削除されます。ウェブ ACL からルールグループを削除する場合は、そのグループへの参照を削除するだけです。