【概要】
2018年9月1日(日本時間)にAWS WAFよりFull Log機能が発表されました。今までは検知ログを見ようとしてもサンプリングで3時間前までと制限がありましたが、今回のリリースを上手く使いこなせばそのような制限も無く、より詳細なリクエスト内容を保存することができます。今回はFull Log記事第一弾として「Kinesis Firehose を構築し、S3にFull Logを出す」ところまでをやってみます。
【Kinesis Firehose】
Kinesis Firehose はほぼリアルタイムで生成されるデータを設定した出力先に保存するサービスです。生成されたデータをS3やRedshiftに保存してデータの解析などを行うことができます。まずはKinesis Firehoseの環境を構築し、その後AWS WAFと連携させます。
【Kinesis Firehoseの設定】
Amazon Kinesis のページに行きます。
[ Create delivery streams ] をクリックします。
ALBの場合はWAF (Web ACL)と同じRegion、 CloudFrontで利用するときはRegionを「N. Virginia」(米国東部(バージニア北部))にします。
「Delivery stream name*」を入力します。好きな名前で構いませんが、先頭に「aws-waf-logs-」を付けてください。
「Source*」は「Direct PUT or other sources」を選択します。
[ Next ]をクリックします。
「Transform source records with AWS Lambda」ですが今回はAWS WAFが出力するログをそのままの形でS3に出力させたいので、「Disabled」を選択します。
「Convert record format」もそのままの形でS3に出力させたいので「Disabled」を選択し、[ Next ]をクリックします。
「Destination」は「Amazon S3」を選択します。
ログを出力したいS3 bucket、必要であればPrefixを設定します。Prefixの後に ”/” を入れてください。「Next」をクリックします。
データをバッファするサイズ、時間を決めます。時間は最短で確認ができる60秒をオススメします。
続いてログの圧縮方法ですが、S3の容量を少なくする為「GZIP」にします。暗号化はここではあまり考えず、「Disabled」を選択します。
エラーログはデフォルトで「Enabled」になっているのでそのままにします。
[ Create new or choose ]をクリックします。
遷移したページにて IAMのロールを選択 or 新規作成します。名前は好きな名前で良いです。
[ Allow ]をクリックします。
「IAM role」に先ほど作成した roleが 設定されていることを確認したら、「Next」をクリックします。
最後にレビューが行われるので設定に間違いがないか確認します。
問題なければ[ Create delivery stream ] をクリックします。
作成中です。しばし待ちます。
作成できました。
【Kinesis Firehose を AWS WAF と連携させる】
ここからは先ほど作成した Kinesis Firehose を AWS WAF と連携させます。
これを行うことで今までは3時間前までの一部のログしか取得できなかったリクエストログをS3に保存することができます。
サービスから[ WAF & Shield ]を選択します。
[ Go to AWS WAF ] をクリックします。
サイドバーから[ Web ACLs ]をクリックします。
適用対象の Web ACL をクリックします。
[ Logging ] をクリックします。
[ Enable Logging ] をクリックします。
「Amazon Kinesis Data Firehose」で先ほど作成した Kinesis Firehoseを選択します。「Redacted fields」はログに出力しないフィールドを選択することができます。(例)URI, Query string
設定できましたら、[ Create ] をクリックします。
設定できました。
これでKinesis FirehoseのログをS3に出力できるようになりました。(以下例)
以下がサンプリングとFullログの比較です。
サンプリングで見える部分 | フルログで見える部分 |
---|---|
Source IP | Client IP |
URI | URI |
Matches rule | Rule ID ※1 |
Action | Action |
Time | Timestamp |
Country | Country |
Method | httpMethod |
Host | Host |
Content-Length | Content-Length |
upgrade-insecure-requests | upgrade-insecure-requests |
user-agent | user-agent |
accsept | accsept |
accept-encoding | accept-encoding |
accept-language | accept-language |
cookie | cookie |
format version | |
Web ACL ID | |
RuleType | |
http Source Name | |
http Source Id | |
rule Group List | |
rateBased Rule List | |
non Terminating Matching Rules | |
args | |
HTTP Version | |
Request ID |
※1 この値はルール更新のタイミングで変わります
【まとめ】
今回は下記を行ってみました。
- Kinesis Firehose の環境構築 (S3の出力先、形式等の設定)
- AWS WAFと連携する
次回は、WafCharmとの連携を行いたいと思います。