ハマログ

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

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日


関連記事

採用特設サイト 絶賛準備中!

実は今、採用特設サイト絶賛準備中です! すでにイーツー・インフォのコーポレートサ…

Amazon Simple Queue Service をPHPで使ってみる

皆様、お疲れ様です。 uminchuです 今回は前回軽く触れたAWSの機能の一つ…

AWS EC2 Yum Update まとめ

暑い日が続きますね。休日は娘連れて絵本で有名な、せなけいこ展に行きました。 2~…


← 前の投稿

次の投稿 →