ハマログ

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

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日


関連記事

インターネットトラフィックの四方山話

こんにちは。 koma です。 いつもの通りqbookでネタ探しをしていたら、こ…

テスト設計技法 – デシジョンテーブルテスト

どうもーyasuです~ そろそろ涼しくなってきたかな? 一つ報告、8/25にテス…

霞初月 2021

年明けとともに、緊急事態宣言も再びやってきました。 つまり、絶賛引きこもり生活ア…


← 前の投稿

次の投稿 →