はじめに
WAFを構成する要素として、「Web ACLs」「Rules」「Associated AWS resources」があります。これはIAMの考え方と似ていて、
- Web ACLs = IAM Group
- Rules = IAM Policy
- Associated AWS resources = IAM User
というイメージを持つとわかりやすいでしょう。
つまり「Web ACLs」という箱を作り、そこにアクセスの可否を制御する「Rules」を設定し、そこに対象となるAWSリソース(ALB or CloudFront)を紐付けることになります。
作成
それでは実際に作っていきます。
Web ACLsの作成&リソースの関連付け(Describe web ACL and associate it to AWS resources)
- AWSのコンソールから、「WAF&Shield」を選択
- 左サイドバーの「Web ACLs」を選択 > 「Create WebACL」を選択
Web ACL details
まずはルールやリソースを関連づけるための箱であるWeb ACLを作成します。
* 「Name」:ACLの名前を記入
* 「Resource type」:関連づけたいリソースの種類を選択(今回はALBなのでそのまま)
* 「Region」:リージョンを選択
Associated AWS resources
続いて、作成したWeb ACLにWAFの監視対象とするリソースを関連づけます。
ルールの設定(Add rules and rule groups)
作成したWeb ACLにルールを適用していきましょう。WAFルールには、
- Managed Rule:AWSが提供しているルールセット
- My Own Rule:ユーザーが独自に定義するルール
の二種類あり、イメージとしてはIAM Policyでいうところの「AWS Managed Policy」と「Customer Managed Policy」の関係になります。
各Managed Ruleの詳細は公式ドキュメントにまとまっているので、ベースはManaged Ruleを使いつつ、追加で設定したいポリシーはMy Own Ruleとして定義するのが良いと思います。
今回はさくっと設定できる「Managed Rule」を設定することにします。
適用するルールを選択肢して、「Add rules」を選択
今回は不審なIPからのアクセスをブロックする「Amazon IP reputation list」を追加します。
「Default action」は「Allow」のまま「Next」を選択
ルールの優先度(Set rule priority)
ルールの適用順序を設定する画面ですが、今回はこのまま「Next」を選択します。
メトリクスの設定(Configure metrics)
cloudwatchのメトリクスを設定する画面ですが、今回はこのまま「Next」を選択します。
確認画面(Review and create web ACL)
内容に問題なければこのまま「Create web ACL」を選択します。
確認
web ACLのoverviewでアクセスが確認できればOKです。
注意点
設定するルールによっては本来許可したいリクエストをブロックしてしまう可能性があります。
筆者の場合は一度テスト用のロードバランサを作成し、そこにWAFを紐づけた上で動作確認し、その後本番用のロードバランサへの切り替えを行いました。