「アレクサ、私のプリンを食べたIAMユーザーを特定して」
2023.3.8
おばんです。Mr.oldtypeと申します。
今回はタイトル通りAWS CloudTrail Lake についてのご紹介です。
というのもこの素晴らしい機能が出てきてもう1年近く経つのですが、恥ずかしながらCloudTrail Lake について最近まで知りませんでした。
いやなんかそういう名前の項目が追加されてるなー程度には認識してたんですが、名前から勝手にDataLake のLakeだと思ってて分析に使うんかー程度にしか思ってませんでした。
なので「この毎日S3にアクセスしてるIAMユーザー誰!?」とか「冷蔵庫のプリン食べたの誰!?」って思っても、AthenaでS3バケットに対してクエリして探すことしか能がなかったんですね。
そして偶然この機能に巡り合って、SQLの知識がない僕でも簡単にクエることが出来るようになっていたので感動して記事にしました。
今回はよくあるユースケースと公式ドキュメントのクエリの例を参考に、備忘も兼ねて書置きしておきます。
CloudTrail Lake について
AWSサービスの操作(ここではAWS API と書きます)履歴を探したい時は、管理イベントであればCloudTrail イベント履歴から簡単に検索出来ました。ただ、データイベント(S3オブジェクトレベルのAPIコールとか)はイベント履歴には保存されていないので、CloudTrail 証跡を作成して、S3に保存したログをAthena などでクエリする必要がありました。これが意外と大変だったんですよね。
そのデータイベントと管理イベントのクエリ(つまり検索)を数クリックで簡単に出来るようにしてくれる機能が、CloudTrail Lake となってます。
事前準備
CloudTrail Lake でのクエリを開始するには、まずイベントデータストアというLakeさん専用のデータストアを作成する必要があります。
CloudTrail のページから簡単に作成可能です。
次に任意の名前と保存期間を指定します。
最後に保存するイベントタイプを選択します。
S3オブジェクトへのアクセスはデータイベントなので「データイベント」にチェックをして下の「データイベントタイプ」でS3を指定します。
これでイベントデータストアの作成が完了します。
注意点として、イベントデータストアを作成してからのAPIイベントしか対象となりません。それより前の履歴を検索出来ないので注意してください。
実際のユースケース
個人的によくありそうなユースケースとそのクエリ例を置いておきます。
1. 昔からある謎のIAMユーザーが毎日S3にアクセスしてる
IAMコンソールでIAMユーザーを棚卸していると、AdministratorAccess権限の付いてる謎のユーザーが。
昔のいた人の消し忘れかと思って削除しようとすると「最後のアクティビティ:30分前」の文字が。アクセスアドバイザーで見てみると、S3 へアクセスしてる履歴が残っていました。
こんな時は下記のようにクエリできます。
SELECT eventID, eventName, eventSource, eventTime , sourceIPAddress FROM [イベントデータストア ID](クエリ画面から確認できます) WHERE userIdentity.username = '[IAMユーザー名]' /* userIdentity,accessKeyId = '[IAMアクセスキー]' (アクセスキーで検索する場合) */ AND eventTime > '2023-02-28 00:00:00' AND eventTime < '2023-03-01 00:00:00'
これで2/28 ~ 3/1 間に検索対象のユーザーが行ったイベントを検索できます。
2. 特定のS3を誰が使ってるか知りたい
数年前からある「hogehoge-s3」という名前のS3。名前とランダム文字列のオブジェクトでは何に使ってるS3なのか見当が付きません。
とりあえず、誰がいつどのように使ってるか調べたい。
こんな時は下記のようにクエリできます。
SELECT eventID, eventName, eventSource, eventTime , sourceIPAddress , requestParameters, userIdentity FROM [イベントデータストア ID](クエリ画面から確認できます) WHERE element_at(requestParameters, 'bucketName') = '[バケット名]' AND eventTime > '2023-02-28 00:00:00' AND eventTime < '2023-03-01 00:00:00'
これで誰(userIdentity内にユーザー名があります)がどのような操作(eventName)をしているかが把握できます。
eventNameをしたいしたい場合はAND条件で指定すると絞り込めます。
他にこんな条件で検索出来たら便利だなってのがあれば追記していきます。アイデアがある方は至急メールください。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitterクラウドを楽しくする、をテーマに活動しています。 2021/2022 APN Top Engineer。 でしょうね、ミスター・オールドタイプ。
Recommends
こちらもおすすめ
-
Amazon S3とローカルPCをWinSCPでシンプルにファイル共有してみた
2024.4.30
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16