ハマログ

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

WAF LOG Athena

AWSのWAFのlog機能とAthenaを使って分析しようとした件

結果から言うとまだ分析してなにかを達成したわけではないですが…

とりあえずWAFで何をブロックしてるのかを調査する為の方法を紹介したいと思って書きます。

WAFのlog機能(+Kinesis )

まずはWAFのlog機能設定です。簡単な手順で言うと以下の通りです。

詳細は参考のサイトを見ていただければできると思います。

①AWS WAFのログ出力先となる Amazon Kinesis Data Firehoseと、ログ保管場所として利用するS3バケットの設置

②WAFに①で設置したKinesis Data Firehoseを設定

参考:

https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/logging.html

https://dev.classmethod.jp/cloud/aws/awf-waf-comprehensive-logging/

上記の作業をするとS3バケットに指定した時間毎にアクセスがあれば出力されます。

これでも何か発生した際にはその時間のログを確認すれば調査は可能なのですが、

ウェブに関しては大量のアクセスがあったりするので大量のログを一つ一つ見ていくのは時間もコストもかかってしまうと思います。

そこで下記のサービスを使用することで解決できます。

 

Athena

Amazon Athena

実行するクエリに対してのみ料金が発生します。各クエリでスキャンされるデータ量に基づいて課金されます。データの圧縮、分割、列形式への変換を行うと、大幅なコスト削減とパフォーマンス向上を実現できます。このようなオペレーションにより、Athena でクエリを実行するためにスキャンする必要のあるデータ量が減少するためです。

参照:

 https://aws.amazon.com/jp/athena/pricing/

S3に出力したWAFのlogをAthena 使用して分析

簡単なイメージ的にはS3のlogのデータをテーブルにして①、

テーブルにしたデータから分析したいデータを検索(SELECT)する②。

検索した結果をCSVで吐き出せます。

①以下のクエリを実行

CREATE EXTERNAL TABLE IF NOT EXISTS Database名.作成したいテーブル名 (

  `timestamp` timestamp,

  `webaclId` string,

  `terminatingRuleId` string,

  `terminatingRuleType` string,

  `action` string,

  `httpRequest` struct<

    `clientIp`:string,

    `country`:string,

    `uri`:string,

    `httpVersion`:string,

    `httpMethod`:string,

    `headers`:array &lt; struct &gt;,

    `requestId`:string

  >,

  `HostHeader` string 

)

ROW FORMAT SERDE ‘org.openx.data.jsonserde.JsonSerDe’

LOCATION ‘s3://バケット名/参照したいディレクトリ/’;

Database名は何も作ってなければ”default”になっていると思います。

参照したいディレクトリは上記を参照してlogをS3にあげてるとしたら2019/9のログを分析するなら”2019/09″になると思います。

 

②は①で作ったファイルを検索なのでブロックされたログだけを抽出する場合は以下のクエリを実行

select * from Database名.①で作成したテーブル名 where "action" = 'BLOCK'

このようなカタチで月毎WAFの調査が行えると思います。

もし参考になれば嬉しいです。

 

最後に

さいきんインフラ系のブログが多いですねw

  ryo   2019年9月1日


関連記事

業務円滑化テクニック – スタートアップ

最近自分が大好きなイベントが潰れてへこみまくりのつーじーです。それでも地球は回り…

libfaketimeを使ってdocker-composeの複数コンテナでダミー時刻を設定する

私たちがDockerなどで使っているコンテナ技術の実態は、仮想マシン(VM)のそ…

CentOSのMTAを変更する

CentOS6系のサーバーで、標準のMTAがSendmailだったのでPostf…


← 前の投稿

次の投稿 →