[初心者向け] CloudTrailで過去データをクエリしたくなった時に知っておくべきこと
CloudTrailのイベントデータをSQLで詳細にクエリしたい場面はよくあります。
イベント履歴の画面から直近のイベントを探すことはできるのですが、 複合条件で探したいときなどは探すのに難儀します。 となるとSQLを使ったクエリで探したいと思うのですが、 個人的にはCloudTrailのマネコンの動線だとやり方がよく分からず、 いつもイベント履歴から頑張っていました。
そんなCloudTrail初心者(こと俺)に向けてSQLでクエリする方法の基本を、 CloudTrail Lakeの使い方を中心にまとめてみたいと思います。
覚えるべきこと
イベント履歴からSQLでのクエリ利用にレベルアップするために覚えておく要素は以下かなと思います。
- SQLでクエリしたい場合は「証跡」を保存するようにする必要がある[1]
- 証跡があっていてもすぐに内容を見ることはできない
- 過去のデータを見る方法は基本的に2つ
- Athenaで見る
- CloudTrail Lakeで見る
- そのためにはイベントデータストアにデータをインポートする必要がある
- イベントデータストアは新たなデータを自動取り込みする機能もある(ので、過去しか見たい場合に混乱しがち)
「イベント履歴」とは
イベント履歴はマネコンから簡単なフィルターを使ってイベントを参照することができるサービスです。 これは「直近(90日)のものは準備なしにすぐ見れる」を実現するためにAWSが用意してくれている機能ですが、 フィルターは一種類しか選べなかったり、IAMロールでの検索ができなかったり、 しっかり調査したい時の使い勝手はイマイチです。
「証跡」とは
証跡はCloudTrailというサービスがイベントの記録をS3に保存するファイルのことです。 「証跡」はただのS3オブジェクトなので、普通にダウンロードしたらエディタで開くことも可能です。 ちなみにCloudTrailの「Trail」が日本語で「証跡」です。
前述の通り、これは保存する設定がされていなければ保存されません。 また保存にはS3のファイルストレージと別に料金もかかります。
なお私は勝手に勘違いしていたのですが、 証跡については90日より前のものが保存されるわけではありません。 「直近90日間は見れる」というのは、 あくまでもイベント履歴が90日間だけ対応しているという意味であり、 証跡としては90日を過ぎるかどうかで何か処理が切り替わるということはありません。
証跡の中身をSQLで見る
本題。 証跡の中身をSQLでクエリするには2つのやり方があります。
Athenaで見る
証跡はただのS3オブジェクトであることは説明しました。 なのでこのS3オブジェクトがあるディレクトリをAthenaで見ることでイベントを探しやすくなります。
CloudTrailは、証跡を見るためのAthenaテーブルを作るクエリを自動作成してくれる機能があります。 「Athenaテーブルを作成」ボタンでクエリを取得することができます。
このクエリを流すことでAthenaテーブルが作成できるので、 Athenaについてあまりよく知らないという人でも簡単に証跡をSQLクエリで検索することができるようになります。
パーティションに注意
この方法は一点注意点があります。 CloudTrailが自動作成してくれるAthenaテーブルはパーティションが定義されていません。 パーティションが定義されていないということは、 例えば365日分のデータがある中で2025/03/30のデータだけを検索対象としたい場合でも、 365日分全てが検索対象となってしまい、 時間も料金も無駄にかかってしまうということです (Athenaは検索対象となったデータ量に依存して料金が決まります)。
CloudTrailが自動作成してくれるクエリは自由に改変することができますので、 下記の記事などを参考にパーティションが適用されるテーブルを作成することも可能です。 しかしこちらはある程度Athenaについての知識が必要になってくるかと思います。
CloudTrail Lakeを使う
CloudTrail Lake(以下、単にレイク)は Athenaを使ってSQLクエリを発行するという仕組みをCloudTrailに取り込んだ機能だと思えば良いと思います。 レイクでできることは、基本的にはAthenaのそれと同じです。
概念の理解
レイクを使うためには、下記の用語をきちんと認識しましょう。 ここがわかりにくいです。
- 証跡
- イベントデータが記録されているS3オブジェクト
- イベントデータストア
- SQLクエリで検索ができるデータを格納する場所
- レイク
- イベントデータストアに対してSQLクエリをすることができる機能の名前
- 機能の名前なので、一旦忘れて良い
イベントデータストアの準備
まずはイベントデータストアを準備します。 レイク機能を使うためには、証跡ではなくイベントデータストアにデータが格納されている必要があります。 ここは正直ちょっと面倒だなと思うところですが、証跡のままではレイク機能は使えません。
イベントデータストアを作成
この記事では単発でレイク機能を単発で利用(1日程度目的のイベントの探索に使って、あとは不要)することを想定しています。 つまり、S3に保存されている証跡をイベントデータストアにインポートして、それを見るという形です。
しかし今回の用途を目的としてイベントデータストアを作ろうとすると設定画面はかなり意味不明になってしまいます。 それは、イベントデータストアには「この先(未来)のイベントを自動的に取り込む」という機能があり、 イベントデータストア作成の際には、それについての設定項目がたくさん登場します。 イベントデータストアを単に証跡からインポートするだけの器だと思うとこれらの設定が何を言わんとしているのか分からず混乱の種になりがちです。
今回は自動取り込み機能はオフにした上でイベントデータストアを作成していきます。 作成と同時に証跡からのデータ取り込みもできるのでそれもやっていきます。 証跡から取り込むデータは日時を指定しますのでおおよその当たりをつけておおきましょう。
これで自動取り込みを行わないイベントデータストアが作成でき、 さらに証跡からのデータコピーが始まります。 完了まで少し待ちます。
ステータスが「完了済み」となれば利用できます。
クエリする
イベントのコピーが完了したら「クエリ」のページでSQLクエリを書いていきます。 詳細は割愛しますが、SQLを知っている人なら違和感なく使えるかと思います。
SQLでクエリができました!
まとめ
CloudTrailの過去データをSQLでクエリしたい時の方法についてまとめてみました。
登場する用語がいろいろあり、 それらをきちんと認識しないと混乱しがちだなと思いました。 またAthenaで自動作成されるテーブル作成クエリはパーティションが設定されていなかったり、 イベントデータストアにはイベントの自動取り込み機能があることで設定が煩雑だったり、 初見でSQLクエリできる状態にするのは意外と大変だなと感じました
しかしCloudTrailを自在に見れるようになることは AWSを利用していく上では重要なスキルだと思いますので、 この記事が混乱していた方の助けになれば幸いです。
参考情報
- 料金について
クラスメソッドメンバーズのAWSアカウントであれば、初期設定として証跡の保存が有効になっています。 ↩︎