Kinesis Firehoseを使ってAWS WAF の包括的なログ記録をS3へ出力する

2021.03.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、yagiです。

先々週くらいは暖かかったドイツですが、また今週は寒さが舞い戻っています。 春が待ち遠しい今日この頃です。

本日は、先日作成したCloudFrontディストリビューションにAWS WAFを導入したのに引き続き、 AWS WAFのログをKinesis Firehoseを使ってS3へ出力します。

Kinesis Data Firehose でAWS WAF の包括的なログ記録を設定する

[AWS WAFのログをFirehoseでS3に出力しブロックログをS3Selectで確認してみた](https://dev.classmethod.jp/articles/awf-waf-comprehensive-logging/)

Amazon S3 にログを保存するように AWS WAF の包括的なログ記録を設定する方法を教えてください。

同じリージョン内の Amazon S3 バケットを宛先とする Amazon Kinesis Data Firehose ストリームを使用して、ウェブアクセスコントロールリスト(web ACL)で包括的なログ記録を有効にできます。 そのためには、次の 3 つの AWS のサービスを使用する必要があります。

ログを作成するために AWS WAF

ログを受け取るために Kinesis Data Firehose

ログを保存するために Amazon S3

注: AWS WAF、Kinesis Data Firehose、および Amazon S3 は同じリージョンで実行されている必要があります。

Kinesis Data Firehose を作成する

AWS マネジメントコンソールから、「Kinesis」を選択します。 リージョンの選択ですが、この後作成するログ保管先のS3バケットと合わせる必要があります。 「Kinesis Data Firehose」を選択し、「配信ストリームを作成」を押下します。

「Create delivery stream」から作成する配信ストリームについて設定を行います。 Delivery stream nameについては、「aws-waf-logs-」で始まり任意のサフィックスで終わる名前を入力します。 Sourceは、「Direct PUT or other sources」を指定します。 その他はデフォルトの内容のまま、「Next」を押下して次画面遷移します。

レコード変換、レコード形式の変換は今回はしないのでデフォルトのまま「無効」にします。

DestinationでAmazon S3を選択します。 なお、もっと大量のログを分析目的で使用したい場合は、Amazon RedshiftやAmazon Elasticsearchを検討することもあるかと思います。

S3側で最初に「Kinesis」を選択した際と同じリージョンでS3バケットを作成しておきます。 S3 bucketの選択で、「Create new」から作成もできます。 既に作成済みのS3バケットを使いたい場合は、リストから選択します。

GZIPを有効にし、その他はデフォルト設定としました。

Reviewで確認し、「Create delivery stream」を押下します。 配信ストリームにストリームが作成されたことを確認します。

AWS WAF を Kinesis Data Firehose に関連付ける

AWSコンソールからAWS WAFに移動し、Web ACLsを右ペインから選択、Global (CloudFront)をリストから選択して、対象のWeb ACLを押下します。 Logging and metricsタブを選択し、「Enable logging」を押下します。

ここで先ほど作成したFirehoseの配信ストリームを指定するのですが、表示されないことが発覚。

原因を調査していたところ、以下のブログに記載されていた通り、 「リージョンをバージニア北部に変えて、Firehoseを作り直し」したところ、無事表示されました。

[CloudFrontのログをAWS WAF + FirehoseでS3に送信しようとしてハマった話](https://dev.classmethod.jp/articles/sendcflog-tos3/)

Select a delivery streamから「aws-waf-logs-test」を選択し、「Enable logging」を押下します。

Loggingが「Enabled」になったことを確認します。

これで設定完了です。

結論

先日導入したAWS WAFについて、Kinesis FirehoseでS3へ出力設定するところまでを紹介しました。

AWS WAFの対象がCloudFrontのログをS3に出力する場合には、Firehoseをバージニア北部で作成しなければならないので注意が必要でした。

AWS Kinesisについて、詳しい内容は以下の公式ドキュメントをご参照ください。

Amazon Kinesis Data Firehose とは