テックブログ

AWS WAF v2 事始め (新規設定・Classicからの移行)

ネットアシスト開発部の y-kinjo です。AWSの提供するWAFサービス「AWS WAF」において旧バージョンとなる AWS WAF Classic が2025年9月末をもって廃止される事が発表されました(※1)。今回は現行バージョンとなる AWS WAF v2 への移行を行いましたので、その際に行った手順や考えるべきことを共有したいと思います。

※1 AWS WAF Classic リソースを AWS WAF に移行する https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/waf-migrating-from-classic.html

Classicとv2の違い

公式のドキュメントの説明が分かりやすいかと思いますが、実際に対応するうえでの違いは大まかに以下のようになります。

  • Classicではユーザー側にある程度セキュリティに関する知識が有るような前提になっており、攻撃手法に対するルールを手動で追加していく、もしくは完全に外部のWAFサービスと連携する形を取るような使い方でした。v2では様々なマネージドルールが提供されており、それと自作のルールを自由に組み合わせて適用する事ができます。基本的な攻撃・スキャン行為への対処はAWS公式のマネージドルールが提供されています。
  • 料金の計算方法が若干異なります。こちらもAWSの説明が分かりやすく、今後軽微な金額変更が行われる可能性が有りますので公式を参照してください。参考程度に、今回移行したケースにおいては、Classicと大きく金額が変わることはありませんでした。
    https://aws.amazon.com/jp/waf/pricing/
  • AWSが管理する不審なIP群リストからのIPブロックが出来るなど、新しくできるようになることもあります。

Classicでは、例えば「../../」といったURIにアクセスを行うディレクトリトラバーサルという攻撃手法が有り、リクエストに「../../」という文字列が含まれている場合はブロックを行う必要がある、などのように利用者側にある程度のセキュリティ知識が求められ、かつそれを1つ1つおさらいのように手動でルール追加していく必要がありました。

v2においては「ディレクトリトラバーサルのような入力」「XSSのような入力」「SQLインジェクションのような入力」「スキャンツールのようなリクエストヘッダ」といった一般的に必要になる対応はAWS公式のマネージドルールを適用することで簡単に初期設定が行えます。

WebACLの作成~ルールの追加

実際にAWS WAF v2を利用するためにWebACLを作成していきます。WebACLがWAF全体の設定のようになっており、その中にルール・マネージドルール・ルールグループを追加していく形になります。

今回は基本的なWAFとしての動作をAWS公式のマネージドルールで設定していきます。どういったものが提供されているかは以下を参照ください。

AWS マネージドルールのルールグループのリスト
https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/aws-managed-rule-groups-list.html

この中で特に注目するべきは「ベースラインルールグループ」「ユースケース固有のルールグループ」に含まれるルールです。これらがWAFとしての基本的な機能を提供しています。

今回はLinuxサーバー上で動作するPHPRDBを利用するWebシステムで有る為、以下のように設定してみました。それぞれの詳細は上記リンク先のドキュメントをご確認ください。

  • AWS Managed Rules Common Rule Set
  • AWS Managed Rules Unix Rule Set
  • AWS Managed Rules Linux Rule Set
  • AWS Managed Rules SQLi Rule Set
  • AWS Managed Rules PHP Rule Set
  • 手動で設定を行ったレート制限ルール RateBaseRule
    これは一定時間内に〇アクセス来た場合はBlock、というルールです。

WebACLにルールを追加する際、ルールごとの処理コストを表す「WCU」という値が有り、この例では 1350/5000 となっています。1500を超えた場合は追加料金がかかってきますので費用算出の上でこちらも確認しておきましょう。

スコープダウンステートメントの設定

ルールごとに「適用する条件」「適用しない条件」を設定する事が出来ます。特に「AWS Managed Rules Common Rule Set」を利用するうえではスコープダウンステートメントの設定が必須に近いです。

これは、AWS Managed Rules Common Rule Setに含まれるルール「SizeRestrictions_BODY」が8KB以上のリクエストボディの場合にブロックするという挙動を取る為です。ブログの本文入力欄のようにユーザーが自由に長文を書き込めるPOST処理が有ると簡単に8KBを超えてしまいますので、スコープダウンステートメントで除外URLを設定しましょう。

なお、スコープダウンステートメントでは複数の条件を組み合わせて設定できますが、2024年12月13日現在、グラフィカルに編集可能な項目は5件までに制限されており、6件以上を設定する場合はJSONエディタでの編集が必要になります。

例として、設定するケースが多いと思われる

  • 全体をAND条件リストとする。
  • それぞれの条件はURIが特定の文字列から始まるとする。
  • それぞれの条件はNotで反転しておく

を設定した場合は、以下の画像のようになります(冒頭のみ掲載)。URIが除外したいURI文字列から始まることをチェックしそれをNotで反転、全体としてANDになっている事で「WAFでのチェック例外とするURLの列挙」が行えます。5つまではビジュアルエディタで編集し、6つ目以降をJSONで編集すれば記載すべきフォーマットが分かりやすいかと思います。

なお、スコープダウンステートメントを設定する際、その条件が複雑であるほどルールのWCUが増加します。注意しましょう。

スコープダウンステートメントはルールごとにそれぞれ設定可能ですので、少し面倒ではありますが全てのルールに同じ内容のスコープダウンステートメントを指定するのではなく、「ルールAではこのURLへのアクセスが引っかかりそうなので除外追加が必要だが、ルールBはチェックしても問題ない」という設定をしっかりしてあげた方が、緩和を最低限にしたルール設定になります。

WAF v2への切り替え

WebACLの詳細画面から「Associated AWS resources」タブに移動し、「Add AWS Resource」を押すことで、ALBなどの既存のAWSリソースへの割り当てを行います。あらかじめステージング環境などを用意して、ステージング環境で動作検証を行う事をおすすめします。

既にAWS WAF Classicを利用しているリソースに対して割り当てを行う事で、作成した新しいv2への連携に切り替わります。切り替え後は対象リソース(ALBであればALB)側の詳細画面からも新しいWebACLと連携している事を確認しておきましょう。

動作確認

動作確認を行います。Webサイトに対して問題なく動くべき処理が正常に動くかを網羅的に確かめる事はもちろん、ブロックされるべき通信がブロックされるかも確認しておきましょう。どちらの場合においても、意図した動きにならない場合はスコープダウンステートメントの設定が考えられます。

例えば「AWS Managed Rules Common Rule Set」にはリクエストヘッダーにUserAgentが含まれていない事をチェックするルールが含まれておりますので、curlコマンドを利用して以下のような確認が行えます。

curl https://チェック対象のURL -H "User-Agent: "

問題なくページ内容が取得出来てしまう場合は、スコープダウンステートメントの設定に不備がある状態となります。

「Sampled Request」画面で直近のアクセスが確認できるほか、WebACLのロギング設定を有効にすると任意の期間CloudWatchLogsにログを残す事が可能です。以下は実際にスキャン行為が行われているリクエストのサンプルです。.env という環境設定ファイルが置かれていないかをスキャンしに来ています。

WAFで検知した不正なアクセス

移行に際しての所感

Classicで必要だった初期設定に比べると、だいぶ短時間でWAFとしての基本機能が構築できるようになっています。

もちろん、このページにはこういうアクセスが行われるのでこう除外する必要がある、といった最低限のセキュリティ知識と適用先Webアプリケーションに対する知識は必要です。また、除外する条件を追加しようと思うと6件以上のスコープダウンステートメントはJSONでの編集が必要になってしまうなど、そのあたりは分かりやすい画面を提供している事をアピールするWAF製品よりは手間がかかる印象です。2024年12月13日現在、UIの日本語化も行われていません。

その分 AWS WAF v2 + AWS公式マネージドルール は価格の面で安価であったり、v2においても手動でルールを作る事は可能でより強固に固めていくこともできるなど、中級者にとってシンプルなWAFとして使い勝手が有るのではないかと思います。

UIの面であったり、ALB利用時においてもサイズ上限を8KBより大きな閾値に変更出来るようにしてほしかったりなど、今後よりよい改善が続いていくことに期待したいです。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください