WAF維持管理の助けになるCloudWatch Dashboard for AWS WAFの紹介

2022.06.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな吉井 亮です。

AWS WAF はご利用でしょうか?
公開 Web サービスを AWS 上で展開するケースではほぼ必須といっても過言はないと個人的には思います。

ただ、WAF はログを解析したり、リクエスト数・ブロック数などのメトリクスを一覧するにはひと工夫が必要でした。
そんな悩みを抱えていたところ神のようなダッシュボードを作ってくれるテンプレートが公開されました!!

やってみます。

Web ACL を作る

まずは Web ACL を作ります。Web ACL を作るところは本題ではないので割愛します。開発者ガイドを参照ください。
Creating a web ACL

Web ACL が作成できたら、Logging and metrics タブから Logging を Enable にします。

Logging destination は CloudWatch Logs log group を必ず選択します。
ここポイントです。S3 や Firehose を選ばないようにしましょう。
CloudWatch Logs ロググループ名は「aws-waf-logs-」で始まるものを作成します。

Web ACL をリソースに関連付ける

CloudFront or ALB に Web ACL を関連付けます。
本記事では CloudFront を使用しています。

アクセスしてみる

Web ACL 関連付けが終わったので CloudFront URL にアクセスしてみます。
ブラウザで何回かリロードしました。

CloudWatch Logs に WAF ログが出力されました。準備完了です。

CloudFormation テンプレートの実行

以下のリポジトリをブラウザで開きます。(またはクローンします)
CloudWatch Dashboard for AWS WAF

Regional WAF、CloudFront WAF 用の CloudFormation テンプレートが公開されています。これを使ってダッシュボードを作成します。
自身のマネジメントコンソールにログインしている状態であれば「Launch Stack」と表示されているリンクをクリックすることでスタック作成画面まで飛ぶことが可能です。

スタック作成途中にパラメーターを指定する箇所があります。自身の環境に合わせた値を指定します。

項目
CWWAFLogName CloudWatch Logs ロググループ名
WAFRegion リージョンの指定。CloudFront は us-east-1
WebACLName Web ACL 名

image

ダッシュボード

スタック作成はすぐに完了するはずです。
出力タブを開くとダッシュボードへのリンクが表示されています。こちらをクリックしてダッシュボードを開きます。

ブロックされてみる

AWS-AWSManagedRulesBotControlRuleSet にブロックされるようなアクセスをしてみます。

$ curl -I https://CloudFrontのURL/
HTTP/2 403

しばらくしてダッシュボードを更新してみると Bot リクエストが確認できます。

ブロックリクエストを示すウィジェットです。2行目に検知されています。

まとめ

WAF の維持管理は楽ではありません。このようなダッシュボードがあるとかなり助かります。
また、ログを可視化するといった観点でもこのテンプレートは勉強になりました。

参考

CloudWatch Dashboard for AWS WAF

以上、吉井 亮 がお届けしました。