はじめに
2025/6/12 にAWS CloudTrail(以下、CloudTrail 表記のみ)にアップデートがありました。
タイトルを直訳すると、Amazon S3 DeleteObjects API のロギングを強化したとのことです。
個人的に興味のあるアップデートでしたので、実際に試してみたことを書いていきます。
本記事は、筆者個人の見解、個人利用の範囲で試した結果です。検証不十分な箇所もあると思いますので、参考程度に留めてください。内容に間違い等がありましたらご指摘いただけますと幸いです。
アップデート概要
これまでは、DeleteObjects API 呼び出しを使用して複数の S3 オブジェクトを削除すると、CloudTrail は DeleteObjects API 呼び出しを単一のイベントとしてログに記録し、呼び出したユーザと削除されたオブジェクトについては記録されていませんでした。今回の更新で、これらが記録されるようになりました。
これまで本当に削除されたオブジェクトは記録されていなかったのか?
削除されたオブジェクト情報をログに記録しないなんてそんな…と思っていたのですが、そもそも、S3オブジェクトを削除する際のAPIは、
- DeleteObject
- DeleteObjects
の2種類あります。DeleteObject
は単体のオブジェクトを削除する際に使うAPI、DeleteObjects
が複数オブジェクトを削除する際に使うAPIです。DeleteObject
では削除されたオブジェクトを記録していたようですが、DeleteObjects
の方は削除されたオブジェクトを記録する仕様ではなかったようです。
CloudTrail証跡への記録を試してみた
実際に、DeleteObject 及び DeleteObjects の実行を、CloudShell から試しみました。
今回の環境
前提条件として、以下については割愛させていただきます。
- S3バケットの作成手順
- CloudTrailの証跡取得設定手順・証跡設定削除手順
- Amazon Athena へのテーブル設定
証跡取得用S3バケット(aws-cloudtrail-logs-trailtest2025061201)と、今回のテスト用S3バケット(s3deleteobjectapitest-2025061201)も作成しました。
CloudTrail証跡に管理イベントとデータイベントを記録するよう設定しました。なお、今回は検証のため、暗号化などは設定していません(検証が終わり次第、証跡記録は削除します)。
オブジェクトの単体削除
AWS CLI を使って削除します。s3 rm
と s3api delete-object
でログ内容に違いが無いか、確認しました。
s3 rm
s3api delete-object
s3api delete-object
の方はコマンドに問題なければ、何も返さないようです。test2.txt は削除されていました。
Athena でログ確認
s3 rm
で削除した test1.txt は、eventname がDeleteObject
で記録されていました。ちなみに、s3 rm
で削除したオブジェクトは、useragent列にcommand#s3.rm
(以下図の赤枠)、s3api delete-object
で削除したオブジェクトは、command#s3api.delete-object
(以下図の青枠)と書かれていました。
※test1.txt をs3 rm
とs3api delete-object
で何度か削除したので、ログが見づらくなってしまい恐縮です。
s3api delete-object
で削除した test2.txt もeventname がDeleteObject
で記録されていました。
オブジェクトの一括削除
AWS CLI から s3api delete-objects
で一括削除した場合、マネジメントコンソールから一括削除した場合、2パターン実施しました。
マネジメントコンソールから一括削除
AWS CLI から削除
Athena でログ確認
ログを確認したところ、DeleteObjects
のログはありましたが、その行に削除されたファイルが書かれているのではなく、DeleteObject
の実行結果が複数行に分かれて書かれていました。また、マネコンからの一括削除とAWS CLI からの一括削除で、ログの出方の違いは、useragent が違うくらいで、大きな差はありませんでした。
ちなみに、DeleteObjects
に紐づくDeleteObject
は、additionaleventdata列に"parentRequestID"が書かれており、それと紐づかれているように見受けられました。DeleteObjects
の requestid列に同じ文字列がありました。実行時間(eventtime)も同じため、関連するイベントと思われます。
最後に
アップデート前のDeleteObjects
のログ内容を見ることができれば、もっとしっくり来たのかもしませんが、それでも、オブジェクトが削除されたログを取得できるようになったのは良いアップデートだと思いました。また、ログからAPIがどう実行されたかも見ることができて、よい勉強になりました。
最後まで読んでいただき、ありがとうございました。