WafCharm 通知機能の構築とテスト方法
概要
- 前回までは、AWS WAF + WafCharm をトライアルで導入する方法と、WafCharm レポート機能の構築方法を手順にまとめました。今回はWafCharm の通知機能を追加設定して、テスト用に投げたリクエストがブロックされること、正しくメール通知がされることまでを確認したいと思います。
- 前回までの、AWS WAF + WafCharmの構築については、下記2つの記事を参照ください。
AWS WAF / WafCharmの構成図
- AWS WAF および WafCharm、WafCharmレポート機能/通知機能の構成図を書いてみました。
- 下記に簡単な処理の流れを記載します。①~③は前々回の記事で手順を説明しています。④~⑧は前回の記事で手順を説明しています。今回の記事でご紹介する範囲は、⑨となります。
- ①AWS WAFと連携するCloudFront (あるいはALB) のアクセスログがS3 バケットに格納されます。
- ②WafCharmはCloudFront (あるいはALB) のアクセスログを取得します。(WafCharm設定時にS3 バケットを参照するためのアクセスキーを登録する)
- ③WafCharmはCloudFront (あるいはALB) のアクセスログを元に判定したルールをWeb ACLに配信します。(WafCharm設定時にWeb ACLを更新するためのアクセスキーを登録する)
- ④Kinesis Data Firehoseを作成し、AWS WAFと連携、WAFのLoggingを有効にします。
- ⑤Kinesis Data Firehoseから出力されたWAFログがS3 バケットに格納されます。
- ⑥S3 バケットのオブジェクト作成をトリガにWafCharm連携Lambdaが起動します。
- ⑦WafCharm連携LambdaがWAFログをWafCharm側に転送します。(Lambdaには必要なロールを付与します)
- ⑧管理者から月次レポートが閲覧可能となります。
- ⑨検知があった場合に、WafCharmからメール通知されます。
WafCharm 通知機能の構築方法
構築マニュアルについて
- 今回の構築は、WafCharmの公式マニュアルである「レポート機能/通知機能 利用マニュアル new AWS WAF Ver 1.0」を参考にして、構築を進めます。必要に応じて、最新の公式マニュアルを参照ください。
- 私がハマった部分として、マニュアルには新旧があるということ。新旧の相違は、マニュアルに記載のコードがWAF v1(classic)用からWAF v2(new)用に変わっていることです。
前提条件
- 前提として、前回の記事でご紹介したWafCharm レポート機能の構築までが完了している必要があります。
Web ACL ConfigのNotification設定
- WafCharm管理画面より、Web ACL Configs → Web ACLを選択します。
- Web ACL Config → Notification を選択し、Notification のEdit をクリックします。
- 下記画面で、「WafCharm Email Notificatoin」をOFF から ON に変更します。
- 「Managed Rule Email Notificatoin」はOFF から変更しません。マネージドルールはWAF Classic でサポートされる機能で、new WAF では利用しない設定値のようです。
- 次に、Notification email のEdit をクリックします。初期は管理者のメールアドレスのみが入力されています。必要に応じて、2人目以降のメールアドレスを入力します。
- これで通知機能の構築は終わりです。
WafCharm 通知機能のテスト方法
- 次に、AWS WAF / WafCharm にテスト用のリクエストをブロックするルールを設定し、今回の通知機能が正しく構築されたか、実際にメールが通知されるかをテストします。
Blacklist のルールにテスト用のIPを追加する
- (事前に)WafCharm のBlacklist にテスト用のIPを追加します。
- 翌日、WafCharmからルールの更新が行われ、Blacklist のルールに含まれるIPが追加されたことを確認します。
URIに特定の文字列が含まれるリクエストをブロックするルールを追加する
- 次は、AWS WAF のコンソールから、Web ACLのルール追加を行います。Web ACLを選択し、Rulesタブを開きます。[Add rules] → [Add my own rules and rule groups] を押します。
- 下記の画面が表示されるため、Rule typeに「Rule builder」、RuleのNameの入力、Typeに「Regular rule」を指定します。
- 次に、If a requestを「matches the statement」とし、StatementのInspectに「URI Path」、Match typeに「Contains words」、
- また、Then のActionには、「Block」を指定しています。最後に、[Add rule]を押します。
- Set rule priorityを適切に設定します。
- Web ACLに、テスト用のリクエストをブロックするルールが追加されました。
ブロック or カウントされたリクエストのメール通知を確認する
- ブラウザからパスに"test999″ の文字列を追加してアクセスを試みます。AWS WAF から403 Forbiddenのエラーが返り、リクエストがブロックされたことが分かります。
- また、Web ACLのOverviewより、リクエストの日時, Source IP, URI およびAction(Allow or Block)などの結果が確認できます。なお、このリクエスト結果は、過去3時間まで見ることが可能です(3時間経過すると見れません)。
- 最後に、ブロック or カウントされたリクエストのメール通知を確認します。下記は、Blacklist に追加したIP からのリクエストを検知してメール通知された結果です。ActionはWafCharmの設定通り、"COUNT" となっています。
- 下記は、URIに特定の文字列が含まれるリクエストを検知してメール通知された結果です。Actionは"BLOCK" となっています。