WAFのログはサンプルとしてしか取れませんでしたが、完全なログを取得できるようになったので、ログをS3に出力し保存する方法をまとめます。
AWS WAFの導入や設定などはこちら
EC2 のWebサーバーへ CloudFront 経由で AWS WAF を導入
AWS WAFのルールを設定してみる
AWS WAFにWordPress用のルールを設定してみる
やることはこちら
- Kinesis Firehose設定
- WAFの設定
- S3ログの確認
- Monitoringの確認
事前に必要なもの
- ELBやCloudFrontなどのWAFを適用できるもの
- AWS WAF(Web ACLs)
- 上記2つが紐付いている環境(ELBやCloudFrontにアクセスしてWebサイトにアクセスできる)
Kinesis Firehose設定
※注意
- CloudFrontにAWS WAFを設定し、FirehoseでS3にログを出力する場合は、FirehoseとAWS WAFのリージョンを同じにする必要があります。
- AWS WAFをGlobalで使っている場合は、FirehoseにGlobalは存在しませんが、バージニアを選択すると設定することができます。
AWS WAFのログ出力先は Amazon Kinesis Data Firehose、保存場所はS3になります。
作成する Amazon Kinesis リソースは配信ストリームです。
※Kinesis Firehoseのストリーム名は「aws-waf-logs-」で開始する必要があります。
以下のように設定し、次へ
データ加工はそのままで、次へ
次にログを保存するS3バケットを選択、もしくは作成します。
適時作成し、次へ
バッファサイズやバッファ間隔は適時変更し、料金を下げるためにGZIPにする。
バッファーはデータサイズと時間、どちらかの値に達した時点でS3に保存されます。
今回はどちらも小さくしました。
IAMは新規で作成をクリックすると必要な権限が付与されたIAMが作成されます。
設定事項を確認し、[Create delivery Stream]をクリックして作成
WAFの設定
[Web ACLs] > [Logging] > [Enable Logging] と進む
先程作成したFirehoseを設定し作成します。
作成したFirehoseが出てこない場合は、「リージョンが違う」か「aws-waf-logsと先頭に付いていない」のどちらかだと思います。
このようにLoggingに追加されていれば完了です。
S3ログの確認
Firehoseで設定したバケットに日付毎に保存されてます。
また、設定したデータサイズと時間、どちらかの値に達した時点でS3に保存されているので、調整することでファイルの数を減らしたり、細かく保存したりとできます。
{ "timestamp": 1538109445535, "formatVersion": 1, "webaclId": "a3cc1665-05df-4b72-8dd0-e572025307ae", "terminatingRuleId": "Default_Action", "terminatingRuleType": "REGULAR", "action": "ALLOW", ... "uri": "/test.txt", "args": "id=1", "httpVersion": "HTTP/1.1", "httpMethod": "GET", "requestId": "VT30yZ2MYW-bVQyEVmKuvuaLZGRSHe4ml8q-LsNJK1uUriEmKQvb1A==" } }
Monitoringの確認
[Kinesis Firehose] > [Data Firehose] > [Monitoring] でFirehoseのログ出力のモニタリングができます。
リージョン毎で異なりますが、Firehoseの配信ストリームは、1000レコード/s、1000トランザクション/s、1MiB/sの上限が設定されているので、上限に達してしまう場合はAWSサポートへの上限緩和申請をしたほうがいいです。