みなさん、こんにちは。サニービュー事業部の小寺です。
CloudTrailでログ取得されている方も多いと思いますが、実際にインシデントが発生したら確認用にと
そのままログを取っていて、通常は中身まで詳細には確認されていないという方も中にはいらっしゃるかと思います。

今日は、CloudTrailイベントをSQLライクなクエリで検索できる「AWS CloudTrail Lake」について簡単に解説します!

AWS CloudTrail Lakeとは

AWS CloudTrail Lake では、イベントに対して SQL ベースのクエリを実行することができます。 CloudTrail Lake は、行ベースの JSON形式の既存のイベントを Apache ORC 形式に変換します。ORC形式は、データを高速に取得するために最適化された単票ストレージ形式です。

AWS CloudTrail Lakeのサービス発表まではCloudTrailの標準のダッシュボードで簡易的なイベント検索を行うことは出来ますが以下の制約がありました。

・表示されるイベントは90日間
・表示されるイベントは現在利用しているリージョンのみ
・S3などのデータイベントは表示されない

直接のクエリ検索ができないので複雑な条件でログ検索をしたい場合はS3にログを転送して、Athenaを使ってログを分析する必要がありました。
CloudTrail Lakeは、Athenaテーブルを作成することなくSQLクエリ検索を行うことができます。CloudTrailのコンソール画面にLake項目があり、クリックすると初期設定ではEvent data storesタブに飛ぶのでイベントデータストアが作成できます。

AWS CloudTrail Lakeの特徴です。
・CloudTrailイベントに対してSQLベースのクエリが実行できる
・イベントデータは、イベントデータストアに最大 7 年間 (2557日)保持できる・複数のリージョン、アカウント、Organization内のイベント集約ができる
・CloudTrail Lakeにクエリを保存することができ、クエリの結果は最大 7 日間表示できる
・クエリ結果を Amazon S3 バケットに保存できる

試してみる

利用の前提条件として、AWS Organizations の管理アカウントで CloudTrail Lake のイベントデータストアを作成してみます。
以下の作業はOrganizationsの管理アカウントで対応しています。

(1)マネジメントコンソールよりCloudTrailを選び、左側ナビゲーションペインの「イベントデータストア」より「イベントデータの作成」をクリックします。

(2)イベントデータストアの設定において、オフィシャルブログでは、この画面で「組織内のすべてのアカウントについて有効化」チェックボックスが表示されるはずなのですが、この画面では表示されず・・。

https://aws.amazon.com/jp/blogs/mt/announcing-aws-cloudtrail-lake-a-managed-audit-and-security-lakeより引用

(3)とりあえず、次の設定へ進み、イベントタイプは「AWSイベント」または「統合からのイベント」を選ぶことができます。デフォルトのままイベントタイプは「AWSイベント」、AWSイベントタイプは「CloudTrailイベント」を選びました。

「CloudTrailイベント」の設定に「組織内のすべてのアカウントについて有効化」のチェックボックスが見つかりました!「有効化」にチェックを入れます。
また、管理イベントはデフォルトの「読み込み」と「書き込み」にチェックを入れました。

(4)設定を確認し、「イベントデータストアの作成」をクリックします。

無事にイベントデータストアができました。

クエリを投げてみる

イベントデータストアが作成できたら、レイクのエディタータブをクリックするとAthenaライクなエディター画面が見えるようになります。

(1)イベントをプレビューするクエリを実行してみます。対象のテーブルはイベントデータストア名ではなく、イベントデータストアIDを指定します。

SELECT * FROM 15c57889-XXXX-XXXX-XXXX-XXXXXXXXXXXX
LIMIT 10;

「クエリ結果」タブをクリックすると結果が表示されます。結果をS3に保管することもできます。無事にクエリ実行できることが確認できました。

(2)特定時間のイベントを特定するクエリを実行してみます。リージョンは東京リージョンに絞っています。

SELECT * FROM 15c57889-XXXX-XXXX-XXXX-XXXXXXXXXXXX
WHERE eventTime>= '2023-02-05 09:15:00' and eventTime <= '2023-02-05 09:30:00'
AND awsRegion in ('ap-northeast-1')
LIMIT 10;

(3)特定ユーザーの全操作記録を検索するクエリを実行してみます。リージョンは東京リージョンに絞っています

SELECT eventTime, eventSource, eventName, awsRegion FROM 15c57889-XXXX-XXXX-XXXX-XXXXXXXXXXXX
WHERE eventTime >= '2023-02-05 09:15:00' AND
eventTime <= '2023-02-05 09:30:00' AND
userIdentity.username like 'kodera@ids.co.jp' AND
awsRegion like 'ap-northeast-1'
order by eventtime desc
limit 1000;

まとめ

CloudTrail Lakeの機能について簡単にお伝えしました。Athenaでできることを一通り備えているのが良いですよね。
クエリ履歴を使えば直近使ったクエリ内容を確認できますし、よく使うクエリを保存する機能もあります。
CloudTrail Lakeのメリットとしては、マルチアカウントに対応しているところだと思います。
イベントデータストアの作成以前のログはCloudTrail Lakeで検索できないので、もしAthenaで検索して、通知などされている方は移行する際に考慮されると良いかと思います。