CloudTrail 証跡で S3 データイベントを記録する際に対象プレフィックスの末尾が / である必要はない
コンバンハ、千葉(幸)です。
CloudTrail 証跡でデータイベントを記録する際に、対象のリソースを限定できます。
S3 のデータイベントを記録する場合は、S3 バケットを限定できます。さらに、バケットの中のプレフィックスまで限定できます。
ここで、指定するプレフィックスの末尾は/
で区切られている必要があるのかが気になりました。別の言い方をすると、/
で区切られた階層を「フォルダ」と呼ぶとしたときに、同一フォルダ内の同じ接頭辞を持つファイルおよび子フォルダをまとめて指定できるのかが気になりました。
具体例を出すと、以下のオブジェクトがある場合にプレフィックスとしてhoge/test
(末尾に/
が含まれない)を指定すると、どのオブジェクトが記録対象になるのかを知りたいです。
% aws s3 ls chibayuki-prefix-test --recursive 2024-02-19 18:25:48 0 hoge/ 2024-02-19 18:56:27 37150 hoge/hoge.txt 2024-02-19 19:00:48 0 hoge/test-test/ 2024-02-19 18:49:04 875 hoge/test.html 2024-02-19 18:49:04 6 hoge/test.txt 2024-02-19 18:51:10 9 hoge/test2.txt 2024-02-19 18:33:55 0 hoge/test2/ 2024-02-19 18:34:05 37150 hoge/test2/hoge.txt 2024-02-19 18:57:29 6 test.txt
今回はその検証を行ってみました。
先にまとめ
CloudTrail 証跡で S3 のデータイベントを記録する際に、プレフィックスの末尾が/
である必要はない。
先の例で言えば、記録対象となるかどうかの結果は以下です。
オブジェクト | 記録対象に |
---|---|
hoge/ | ならない |
hoge/hoge.txt | ならない |
hoge/test-test/ | なる |
hoge/test.html | なる |
hoge/test.txt | なる |
hoge/test2.txt | なる |
hoge/test2/ | なる |
hoge/test2/hoge.txt | なる |
test.txt | ならない |
例えば要件がhoge/test/
配下のオブジェクトだけ記録対象にしたい、という場合は末尾に/
を加えないと余計なオブジェクトまで記録対象になります。
やってみた
実際に試してみた結果を記載します。
CloudTrail 証跡の作成
以下のように記録対象を設定した CloudTrail 証跡を作成しました。証跡ログの格納バケットを併せて新規作成しています。
- 管理イベントの記録なし
- データイベントは以下条件で記録
- バケット:
chikayuki-prefix-test
- プレフィックス:
/hoge/prefix
- イベントの種別:書き込み
- バケット:
イベントの記録について編集画面のイメージは以下です。
S3 バケットへのオブジェクトの Put
今回記録対象にしたバケットchibayuki-prefix-test
に対して、マネジメントコンソールからファイルのアップロードやフォルダの作成を行います。
格納結果は以下の通りです。
% aws s3 ls chibayuki-prefix-test --recursive 2024-02-19 18:25:48 0 hoge/ 2024-02-19 18:56:27 37150 hoge/hoge.txt 2024-02-19 19:00:48 0 hoge/test-test/ 2024-02-19 18:49:04 875 hoge/test.html 2024-02-19 18:49:04 6 hoge/test.txt 2024-02-19 18:51:10 9 hoge/test2.txt 2024-02-19 18:33:55 0 hoge/test2/ 2024-02-19 18:34:05 37150 hoge/test2/hoge.txt 2024-02-19 18:57:29 6 test.txt
CloudTrail 証跡のログ出力 S3 バケットへの Athena によるクエリ
CloudTrail 証跡によるイベントログが S3 バケットに出力されているので、Athena によるクエリを行います。イベント記録はリアルタイムではないため、15分程度の十分な時間をおいてから実行しました。
CloudTrail ログ用の Athena テーブルの作成は、マネジメントコンソールの CloudTrail 「イベント履歴」画面から簡単に行えます。
今回はdefault
データベースにcloudtrail_logs_aws_cloudtrail_logs_000000000000_5532c57a
というテーブルが作成されました。
CloudTrail ログ用バケットを新規作成しているため、格納されているログはデータイベント用証跡によるもののみです。
バケット全体を対象に、ログのクエリを行いました。
SELECT eventtime, eventsource, eventname, resources FROM "default"."cloudtrail_logs_aws_cloudtrail_logs_000000000000_5532c57a" LIMIT 10;
hoge/test
プレフィックスを持つ全てのオブジェクトへのデータイベントが記録されており、それ以外は記録されていないことが確認できました。
終わりに
CloudTrail 証跡で S3 データイベントを記録対象にする場合、プレフィックスの末尾が/
である必要があるのかどうかを確認してみました。
結果として、「無い」ということが分かりました。
ブログの本文中に記載するのは省略しましたが、例えば/hoge/test.txt
のようにオブジェクト名まで指定しても記録は有効です。(ただ、/hoge/test.txt.gz
のようなオブジェクトがあった場合はそれも対象になります。)
CloudTrail 証跡のコストを抑えるために、同一フォルダ内の特定のオブジェクトのみを記録対象にしたい、というケースがある場合には思い出してみてください。
以上、 チバユキ (@batchicchi) がお送りしました。