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 証跡を作成しました。証跡ログの格納バケットを併せて新規作成しています。

CloudTrail_data_event

  • 管理イベントの記録なし
  • データイベントは以下条件で記録
    • バケット:chikayuki-prefix-test
    • プレフィックス:/hoge/prefix
    • イベントの種別:書き込み

イベントの記録について編集画面のイメージは以下です。

CloudTrail_data_event

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プレフィックスを持つ全てのオブジェクトへのデータイベントが記録されており、それ以外は記録されていないことが確認できました。

Athena-prefix

終わりに

CloudTrail 証跡で S3 データイベントを記録対象にする場合、プレフィックスの末尾が/ である必要があるのかどうかを確認してみました。

結果として、「無い」ということが分かりました。

ブログの本文中に記載するのは省略しましたが、例えば/hoge/test.txtのようにオブジェクト名まで指定しても記録は有効です。(ただ、/hoge/test.txt.gzのようなオブジェクトがあった場合はそれも対象になります。)

CloudTrail 証跡のコストを抑えるために、同一フォルダ内の特定のオブジェクトのみを記録対象にしたい、というケースがある場合には思い出してみてください。

以上、 チバユキ (@batchicchi) がお送りしました。

参考