AWS WAFのLogを保存するKinesis FirehoseをCloudFormationでさくっと作ってみた
AWS事業本部の梶原@新福岡オフィスです。
指定のURLに対して、IP制限を実施するCloudFront用のWAF設定をCloudFormationでさくっと作ってみた
で特定のIPアドレス制限をいれたらちゃんと制御されているかログ取りたくなってきたので WAFのログはS3のバケットを指定だと思ってたら、Kinesis Firehoseのデリバリーストリームを指定でした。 Kinesisi Firehoseを普段から触ってればなんともないと思うのですが、やっぱりS3にさくっと保存したかったので、 Kinesisi FirehoseからS3に保存するCloudFormationテンプレートを作ったので共有します。
では、サクサクいきます。
作成するリソース
- S3 バケット
- Kinesis Firehose データストリーム
- aws-waf-logs-スタック名で作成されます
- CloudWatch Logs ストリーム(Kinesis Firehoseのログ用)
- CloudWatch Logs ロググループ(Kinesis Firehoseのログ用)
- IAM Role(Kinesis Firehose用)
上記のリソースを作成します。いくつかのパラメータは入力パラメータで指定できるようにしています。
CloudFormationの実行
CloudFormationスタックの作成
いつものようにテンプレートはS3においてますので、AWSにログイン後、下記ボタンをポチっとするとCloudFomationのスタック画面に遷移しますので、内容を確認後、スタックの作成をしてください
CludFront用のWAFに、設定する場合はKinesis firehoseは米国東部 (バージニア北部)に作成する必要がありますので、事前にリージョンを切替てCloudFormationのスタックを作成してください
ALB用のWAFの場合は対象のリージョンで実施してください、S3も同リージョンに作成されます。
CloudFront用(バージニア北部リージョン)クイック作成リンク
ALB用(東京リージョン)クイック作成リンク
入力パラメータ
Kinesis Firehose
CloudFormationで Kinesis Firehoseの作成時のパラメータを設定します。
- SizeInMBs
- Kinesis Data Firehose が受信データを送信先に送信する前に受信データに対して使用するバッファサイズ (MB)を指定します。
- IntervalInSeconds
- Kinesis Data Firehose が送信先にデータを送信する前に受信データをバッファする時間 (秒)を指定します。
- CompressionFormat:
- Amazon S3 バケットに配信されるデータを圧縮するために Kinesis Data Firehose で使用する圧縮タイプを指定します。
- GZIP, Snappy, UNCOMPRESSED, ZIP から選択してください
S3
- BucketName
- ログが保存されるバケット名を指定します。
- ExpirationInDays
- ライフライクルルールで削除する日数を指定します。
作成されたリソースの確認
スタックを作成したリージョンにて、Kinesis Firehose delivery streamsが作成されているか確認します。
AWS コンソール https://console.aws.amazon.com/firehose/home?region=us-east-1#/dashboard/list
作成されたKinesis Firehose delivery streamsにWAFのログを出力する
WAF のAWS コンソールから出力したいWAFに対して、Kinesisis Firehoseのデリバリーストリームを指定します。
今回作成したテンプレートではaws-waf-logs-スタック名で作成されます
WAFのログ出力設定
Kinesisis Firehoseのデリバリーストリームを指定
確認
S3へのログ出力の確認
WAFのログ出力設定を実施したら、実際にログが出力されているか確認します。 詳細なログフォーマットは以下をご参照ください
まとめ
WAFのログを取ろうと思ったときにあれ?S3のバケット指定じゃないの?と思ったんですが、これで次回からはサクッとバケット指定できるかと思います。 保存のパラメータなども入力パラメータ化などしてますので、ご自由にお使いください。
テンプレート
参考情報
AWS ドキュメント » AWS WAF » 開発者ガイド » AWS WAF » ウェブ ACL トラフィック情報のログ記録 ウェブ ACL トラフィック情報のログ記録 https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/logging.html
AWS ドキュメント » AWS CloudFormation » ユーザーガイド » テンプレートリファレンス » AWS リソースおよびプロパティタイプのリファレンス » Amazon Kinesis Data Firehose リソースタイプのリファレンス » AWS::KinesisFirehose::DeliveryStream » AWS::KinesisFirehose::DeliveryStream S3DestinationConfiguration https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-deliverystream-s3destinationconfiguration.html