皆様こんにちは!ネットワールドSEの渡邊です!
今回、AWS WAFの動作を確認するための、検証用AWS WAF構築手順を画像付きで解説します!
簡単な構成図
本記事では構成図の内のAWS WAFの作成手順を紹介します。
ALB(Application Load Balancer)を用意
AWS WAFは単体では作成することが出来ず、監視対象となるリソースを必ず指定する必要があります。仕様としてCloudFront、もしくはApplication Load Balancer(ALB)をリソースとして指定できますが、今回はALBを指定します。
ALBの作成方法についてはこちらの記事で紹介されています。
検証用WAFを作成
ここからは具体的にWAFの作成手順を紹介します。
WAF作成画面まで
1.検索窓で「WAF」と検索。出てきたWAF&Shieldをクリック
2.左側タブからAWS WAF ⇒ Web ACLsを選択
3.「Create web ACL」をクリック
WAF作成
Step 1 - Describe web ACL and associate it to AWS resources
各種設定項目を記入・選択していきます。
- Resource type … Regional resourcesを選択
- Region … 作成したALBと同じリージョンを選択
- Name … 作成するWAFの名前を記入
- CloudWatch metric name … 「Name」と同じ内容が自動記入されます
全て記入したらAssociated AWS resourcesの「Add AWS resources」をクリックします。
Resource typeはApplication Load Balancerを選択し、作成していたALBにチェックを入れて「Add」をクリックします。
元の画面に戻ったら「Next」をクリックします。
Step 2 - Add rules and rule groups
実際にルールを設定していきます。AWS WAFではユーザー独自のルールを設定も可能ですが、AWS Managed Rule GroupsというAWS WAFで使用可能なルールセット(シグネチャ)が用意されています。
一部を除き追加費用無し・AWS脅威リサーチチームによる作成及びメンテナンスが実施されていますので、設定が簡単なこちらで作成します。
AWS Managed Rule Groupsの内容は公式ドキュメントでも説明されていますので、興味のある方はそちらも参照してみていただければと思います。
まずは「Add Rules」をクリックし、「Add managed rule groups」を選択します。
↓のような画面に遷移するので、今回追加する「AWS managed rule groups」を展開して確認してみます。
一番上の方に有料のルールがありますが、下にスクロールすると無料で使えるルールがありますので、そちらを検証目的に応じて追加していきます。
「Free rule groups」配下のルールが無料で利用可能なルールです。一番上にある「Paid rule groups」配下のルールは有料なので注意してください。
今回は無料のルールの上から6つを追加してみます。選択できましたら画面最下部までスクロールして「Add rules」をクリックします。
ここで注意すべき点として、WCU(Capacityと書かれている列の値です)の合計値が1500WCUを超えないようにします。WCUはルールの処理にかかるコストを示す値のようなものです。
AWS WAFは1500WCUまでであれば基本料金内で使用できますが、超えてしまうとリクエスト数に応じて追加料金が発生してしまいます。また、追加料金を払う場合でも5000WCUが上限です。
ルールを個別にチューニングする際にもWCUの値が変動するので、少し余裕を持たせて追加するのをオススメします。
詳しい内容は公式のドキュメントでも確認することが可能です。
Step 2の最初の画面に遷移するので、WCUが1500を超えていないことを確認します。また、Default Actionはどのルールにも引っかからなかったリクエストに対する処理を決める項目となりますので、Allowのままにして「Next」をクリックします。
Step 3 - Set rule priority
リクエストに対して適用するルールの順序を決める画面です。
トラフィックの精査をする場合、シグネチャマッチングの前にIPアドレスに関するルールを先に適用することで、パフォーマンスを最適化することが出来ます。
以下2つのルールにチェックを入れて、「Move Up」で一番上まで移動してから「Next」をクリックします。
- AWS-AWSManagedRulesAmazonIpReputationList
- AWS-AWSManagedRulesAnonymousIpList
AnonymousIpListでは攻撃に使用されやすい、ホスティングプロバイダーやクラウドプロバイダー、匿名プロキシ、Torノード(送信元を匿名化する技術)等からのリクエストをブロックします。(具体的にどんなIPがリストに含まれているかはブラックボックスであり確認できません。)
Step 4 - Configure metrics
Cloudwatchのメトリクスの設定をする画面ですが、ここでは何も変更せず、「Next」をクリックします。
Step 5 Review and create web ACL
Step 1~4までで設定した内容の確認画面です。特に問題なければ「Create web ACL」をクリックして作成完了です。
もし問題がある場合は 「Edit Step X」のボタンをクリックすることで設定画面に戻ることが出来ます。
WAF作成完了
「Web ACLs」画面に遷移し、作成したWAFが存在することが確認できれば、そのままALBに適用されます。ここまでお疲れ様でした!
注意点として、WAFは作成完了時に、作成時に設定したリソースに自動で適用されます。検証用で作成する場合はそこまで気にしなくていいですが、本番環境でWAFを作成する場合、Step 2で追加するルールは最小限にして作成し、WAF作成後にルールを追加していくことをオススメします。
ユーザー独自ルールの作成方法についてはこちらの記事で紹介しているので、もしよければ合わせて参考にしていただければ幸いです。
補足
検証する際にどのルールに引っかかったかを確認する場合、作成したWAFの設定画面のタブの1つであるSampled Requestで、どのルールセットのどのルールでどんなアクションが適用されたかを確認することが出来ます。
今回追加したルールセットの1つのCore Rule Set(AWS-AWSManagedRulesCommonRuleSet)ですが、その中のルールの1つに、リクエストのBodyサイズを検査するルールである、「SizeRestrictions_BODY」があります。
このルールは8KBを超過したリクエストに対し、デフォルト設定ではリクエストをブロックする仕組みです。AWS WAFで監視できる対象リソースの中のALBやAppSync以外は最大64KBまで制限を変更できるため、もし不要な場合は一時的に該当ルールのActionをCountに設定することをお奨めします。