0
0

Security LakeにWAFのログを入れてAthenaでクエリしたい

Last updated at Posted at 2024-07-29

やりたいこと

Amazon Security Lakeが、AWS WAFのログサポートを2024年5月に開始しました。

WAFとSecurity Lakeを連携させて、お試しでAPI GWを建ててWAFと連携し、出てきたログをAthenaで見てみたいと思います。API GWなのは、一番楽そうだったからです。

やってみる

Security Lakeの作成

いつも使っているAWSアカウントでSecurity Lakeのコンソールに行って作成してみたところ、「別のAWSアカウントに委任する」という選択肢しか出てきませんでした。
そのため、別のAWSアカウントを指定しました。以下はその委任先のAWSアカウントでの作業です。

さて、委任先のAWSアカウントで再びSecurity Lakeのコンソールに行って、構築していきます。

ログとイベントソースの中にAWS WAFがデフォルトだと入っていなかったので、チェックして加えます。
image.png

リージョンは、とりあえず東京のみにしておきます。
image.png

これ以外はデフォルトで作成。2分くらいで完了しました。

試しにAthenaで見たところ、WAFのテーブルも作成されていました。Glue DBとテーブルが勝手に用意されるみたいですね。
image.png

WAFとAPI GWの作成

WAFの設定と、WAFを使うための何かしらの口としてAPI GWを建てます。

まずはWAFのWeb ACLsを作成。
image.png

ルールは、AWSマネージドルールであるAWSManagedIPReputationListを指定してみます。これは何でもOKです。
image.png

Web ACLsにルールを付けないと、Security Lakeにログが溜まっていかなかったので注意。

次にAPI GWを作成します。
とりあえず作って、ルート(/)配下にGETメソッドを作成、devステージを構築しました。
種類はREST APIで、GETメソッドの統合タイプはMockを使ってます。
image.png

そして、ステージからウェブACLに先ほど作成したWAFのルールを紐づけます。これで、API GWへのアクセスをWAFでチェックできます。
image.png

Security LakeとWAFの統合を確認

ここまで実行すると、Security LakeでWAFにチェックを入れているので裏で勝手にSecurity LakeとWAFが統合されます。その統合は、WAFのルールの「Logging and metrics」タブで確認できます。
image.png

上記のようにStatusがEnabledになっていたら統合されているのですが、私の場合は作って数分待ってもDisabledだったので、一旦放置して約8時間後に確認したらEnabledとなっていました。

テストアクセス

ここまででWAFとAPI GWが紐づけられ、かつWAFのログがSecurity Lakeで見られるようになっているはずです。
まずは、API GWにアクセスしてみて、WAFが動いていることを確認してみます。
API GWのステージの画面の「URL を呼び出す」に記載されているのが、このAPI GWのURLです。このアドレスに、ブラウザで何回かアクセスしてみます。
image.png

その後WAFのルールの画面を見てみると、Totalのところに件数が表示されています。これで、API GWへのアクセスをWAFでチェックできていることが分かりました。
image.png

Athenaでログを確認

ここからはいよいよ、Athenaで見ていきます。
先ほどAPI GWに何回かアクセスしたので、そのログがSecurity Lakeに溜まって、Athenaで確認できるはずです。

以下のように、Athenaで確認することできました。
image.png

API GWにアクセスしてからAthenaでログが見られるようになるまで、3~5分ほどのライムラグがありました。

また、GlueのコンソールでWAFのテーブルを見てみると、Table formatがIcebergになっていました。特に指定はしていませんが、裏では勝手にIcebergテーブルにしてくれるようですね。Icebergならではのタイムトラベルクエリなどが使えて使い勝手が良さそうです。
image.png

Icebergについては、以下のブログがとても分かりやすく詳しいのでご一読ください。

Athenaで同一IPからのログの件数をチェック

確認だけだとつまらないので、ありそうなユースケースをAthenaで調査してみます。
今回は、同一IPアドレスからの大量アクセスを調べてみます。

SELECT accountid, region, 
       concat(http_request.url.hostname, http_request.url.path) AS url,
       http_request.http_headers[1].value AS ip,
       COUNT(*) AS count
FROM amazon_security_lake_glue_db_ap_northeast_1.amazon_security_lake_table_ap_northeast_1_waf_2_0
WHERE time_dt >= CURRENT_TIMESTAMP - INTERVAL '5' MINUTE  
  AND time_dt <= CURRENT_TIMESTAMP
GROUP BY accountid, region, concat(http_request.url.hostname, http_request.url.path), http_request.http_headers[1].value;

image.png

5分前から現在までで、同一のAWSアカウントID、リージョン、対象のURL、IPアドレスの集計をしています。実際はcountが多い順に並び変えて調査することが多そうですね。

おわりに

Security Lakeは有効にして紐づけるだけですぐAthenaで検索できるようになるので楽ですね。自前でS3にログを出力してそれをテーブル化して…ということをしなくてよいので、手軽にログ調査を始めるには良いサービスだなと思いました。
ただし、ログによっては量が多くなってコストが大きくなる可能性があるので注意してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0