AWS-WAF

AWS WAF のログを確認してみた

皆さんこんにちは。構築担当の川合です。

前回に引き続き最近よく触っているAWS WAFについての記事になります。

AWS WAFで対象のWebACLsからoverviewでIPアドレスだったり、リクエストを簡単に見る事が出来ます。
ただし、3時間以内のものしか見ることが出来ず、ダッシュボードやcloudwatchのメトリクスでは検知状況しか確認することが出来ません。
※どのIPアドレスが遮断されたりしたのか詳細までわかりません

その場合は、AWS WAF のログを有効化する事でログファイルの出力が可能になりますので保存されたログから情報を確認する事が可能になります。

今回は、実際にログを有効してみてAWS WAFのログを見れる所までやってみたいと思います。

AWS WAF でログを有効化する

AWS WAF では、ELBのようにそのまま予め用意しておいたS3バケットにログを保存する事は出来ません。

AWS WAFでは、Kinesis Data Firehose を経由してログを保存する事になります。
今回は、Amazon Athena でログ解析してみるのでKinesis Data Firehose の出力先はS3で設定しています。
※S3以外にも複数の選択肢があります

ですので、まずKinesis Data Firehose の設定をしてみます。

Kinesis Data Firehose を設定する

AWS WAF とKinesis Data Firehose を連携するには、1点注意事項があります。
実際にログを有効化する所にも注意書きがありますが、Kinesis Data Firehose を【aws-waf-logs-***】という形の命名規則で登録する必要があります。
※この命名規則で作成しないと、プルダウンから選択することが出来ません

Kinesis Data Firehose 経由でS3へログを出力する

では、実際にKinesis Data Firehose を作成してみます。
今回はテストなので、【aws-waf-logs-kawaitest】という名前にしています。

ページ下部の設定は、デフォルトのままで次へ。

次のページのLambdaに関する設定などもデフォルトのままで。

今回はS3に保存しますので、ログの保存先はS3で。

S3のプレフィックスは、今回は使用していません。

S3のファイル圧縮や暗号化については、今回はテストなのでデフォルトのままで設定しています。

AWS WAF とKinesis Data Firehoseを連携する

Kinesis Data Firehose の作成も完了したら、再度AWS WAFのWeb ACLsの画面まで移動してログを有効化します。

対象のログから除外する内容も設定できますので、必要に応じてログの内容を変更することが可能です。

Amazon Athena を使ってログを確認してみた

Amazon Athena の使い方は、公式のユーザーガイド 【AWS WAF ログクエリ】を実施しています。
※参考サイト※
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/waf-logs.html

Amazon Athena でクエリの保管場所を設定していない場合は、まず先にクエリの保管場所を設定しておきます。
※テストなので、AWS WAF のログと同じS3バケットにしておきました

まず、AWS WAF のログ用のテーブルを作成します。
ユーザーガイドに記載の通り、S3バケットの場所を今回のS3バケットのパスに書き換えておきます。

クエリを実行すると、画面左側に【waf_logs】という名前のテーブルが作成されます。

では、これで準備が整いましたのでユーザーガイドの【日付と時刻の使用】の部分に記載のクエリを実行してみます。
簡単ではありますが、AWS WAF のログの内容が確認出来ました。

まとめ

Amazon Athena を普段あまり利用しないので、四苦八苦して一応ログ内容を確認するところまで実施することが出来ました。

AWS WAF のログを有効化していなくても、Cloudwatchやサーバーのアクセスログから大体の辺りを付けることは出来ますが、実際にどのIPアドレスが遮断されたのかまでは分からないので基本的にログは有効化しておくべきだと感じています。

ただ、アクセス頻度が多くKinesis Data Firehose 経由でログが多数出力される場合は費用がかさんでしまうので、出力するログを精査したりS3の容量圧縮のために圧縮やライフサイクルを用いたローテート等を検討して費用を抑える必要があるなとは思います。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA