ハマログ

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

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日


関連記事

資格試験 – JCSQEについて

どうもーyasuです~ この前健康診断があり、ダイエットの結果が分かりました! …

AWS(Route53)でドメインを取得する

はじめに ドメイン取得の際に、お名前.comとかさくらインターネットで取得するこ…

AWS CloudFormationの削除保護について備忘

先日に引き続きAWS CloudFormationネタでごんす。 AWSコンソー…


← 前の投稿

次の投稿 →