ハマログ

株式会社イーツー・インフォの社員ブログ

AWS WAFの検知内容をAmazon SNSで通知する

はじめに

AWS WAFで、Amazonのマネージドルールが利用できるようになりました。
AWSManagedRulesCommonRuleSetとかかなりいいよ!

WAFを導入しただけでは、攻撃をきちんと検知しているかわからず、場合によっては正常なアクセスを誤検知によりブロックしてしまっている可能性があります。

そこで、WAFコンソール(直近3時間)もしくはCloudWatchでモニタリングする方法は用意されているのですが、いちいち情報を見に行くのがめんどくさいので、内容を通知するように設定してみました。

AWSのサービスのみで、AWS WAF, Kinesis, S3, Lambdaを利用しています。
こんな感じになります

AWS WAFの設定

ロギング設定を有効化します。

S3の設定

バケットを作ります。バケット名をaws-waf-logs-で始める必要があります。
今回は、aws-waf-logs-corporate-s3 としました(-s3は冗長だった)

Kinesisの設定

Kinesisを設定して、WAFのログがS3に格納されるようにします。Kinesisの種類を選択する必要がありますが、「Kinesis Firehose 配信ストリーム」を選択します。
宛先をS3の先ほど作成したバケットとし、容量削減のためにgzip圧縮ありを選択。直近のブロックログはAWS WAF側の設定画面で確認できるため、バッファ時間は最大の900秒としました。
ログきました

Lambdaの設定

さて、ここまででWAFのログがS3に格納されるようになったので、s3 selectもしくはAthenaを利用してログの内容は確認できるようになりました。

さらに、Lambdaでブロックログをメール送信するように設定してみます。
コードはgistに置きました
S3に格納されたAWS WAFログをSNSで通知する(Lambda, Node.js)

また、トリガーにS3のObjectCreatedByPutを指定しました。
このままではS3の読み取りとSNSへの通知ができないため、権限を設定します。
Lambdaの設定→アクセス権限→実行ロールにロールが設定されるので、クリックしてIAM画面を表示します。
以下2つのポリシーを付与します ・AmazonS3ReadOnlyAccess
・AmazonSNSFullAccess

結果

以上で、ブロックログが通知されるようになりました。

課題

・Kinesisのバッファが最大900秒なので、15分に1回通知がくる。もっと長くしたい。
・通知が多すぎて見なくなる問題。ポートスキャナーとかAWS Security Scannerとか既知のUAは通知しないようにしたほうがいいかも。
・Node.jsにバグがあったらそもそも通知がこないという不安との戦い
AWSAWS WAFnode.jsS3SNSTopicWAFトピック通知運用運用監視

  kaneko tomo   2019年12月25日


関連記事

AWSのイイところをまとめてみた

どうも! 今回はAWSについて全く知識の無い宇都宮が入門中の入門として AWSの…

ITツールの機能紹介-iPhoneのオートメーション機能-

つ~じ~です。悲しい事に、2023年に引き続き2024年も気が滅入るような重い出…

AWS CloudWatch LogsをLambdaにストリーミングするときのサブスクリプションフィルタパターンの書き方

はじめに AWS上で動いているアプリケーション監視の際に、CloudWatch …


← 前の投稿

次の投稿 →