🐕

Amazon S3 オブジェクトレベルのアクションログを取得してみる

2024/01/11に公開


はじめに

AWS初心者のArishoです!
「S3 内のオブジェクトが消えている!!」といった経験はありますでしょうか。
AWS CloudTrail を使用することで、いつ、だれが削除したのかを確認することができます。
今回は、AWS CloudTrail を使用して、Amazon S3 オブジェクトレベルのアクションログを取得してみます。



AWS CloudTrailとは

AWS CloudTrail は、AWS アカウントの運用とリスクの監査、ガバナンス、コンプライアンスを行えるように支援する AWS のサービスです。
ユーザー、ロール、または AWS のサービスによって実行されたアクションを記録してくれます。
https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-user-guide.html



AWS CloudTrail がデフォルトで取得する Amazon S3 アクションログ

AWS CloudTrail(以下「CloudTrail」と称する)がデフォルトで取得する Amazon S3 アクションログは、以下になります。

詳しい API アクションは、下記の記事を参照ください。


※ CloudTrail ロギングによって追跡される Amazon S3 アカウントレベルのアクション
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/cloudtrail-logging-s3-info.html#cloudtrail-account-level-tracking

※ CloudTrail ログ記録によって追跡される Amazon S3 バケットレベルのアクション
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/cloudtrail-logging-s3-info.html#cloudtrail-bucket-level-tracking



では、オブジェクトの追加や削除といったオブジェクトレベルのアクションログは、どう取得すれば良いでしょうか。 答えは AWS 公式ドキュメントに記載がありました。

Amazon S3 バケットまたはアカウント内のすべてのバケットのデータイベントを有効にします。
オブジェクトレベルのアクションがアカウントで発生すると、CloudTrail によって証跡の設定が
評価されます。

つまり、「バケットのデータイベントを有効にする」 & 「証跡の作成」 をすることで取得が
できるようです。


※ CloudTrail ログ記録によって追跡される Amazon S3 オブジェクトレベルのアクション
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/cloudtrail-logging-s3-info.html#cloudtrail-object-level-tracking



CloudTrail データイベントとは

データイベントは、リソース上またはリソース内で実行されるリソース操作を可視化します。
例えば Amazon S3 の場合は、GetObject、DeleteObject、PutObject などの API アクションが
取得できるようになります。
データイベントは、証跡を作成する際に設定できます。詳しくは、下記の記事を参照ください。

https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#logging-data-events



やってみる - Amazon S3 オブジェクトレベルのアクションログを取得してみる

1. CloudTrail で証跡を作成

※ 対象となる Amazon S3(以下「S3」と称する)バケットが作成されている必要があります。

1-1. 証跡属性の選択

  1. CloudTrail のマネージドコンソールに移動し、証跡を選択します。

  2. 「証跡の作成」を選択します。


  3. 証跡名を入力します。

  4. アクションログを保管する S3 バケットを選択します。
    既に S3 バケットがある場合は、「既存の S3 バケットを使用する」を選択してください。


  5. 既存の S3 を使用する場合は、証跡ログバケット名に S3 バケット名を入力してください。

  6. プレフィック- オプションでは、ログを保管する階層を設定できます。
    (※ デフォルトでは、「/AWSLogs/アカウントID/CloudTrail/リージョン/年/月/日」配下に
    保管されます。)


  7. ログファイルの SSE - KMS 暗号化の有無を設定します。デフォルトでは有効になります。

  8. 新規の KMS キーを使用する場合は、エイリアス(キー名)を入力します。

  9. ログファイルの検証の有無を設定します。デフォルトでは有効になります。
    CloudTrail が配信した後でログファイルが変更、削除などされなかったかどうかを
    判断し、ダイジェストファイルで保管されます。
    ダイジェストファイルは、S3 バケットの「/AWSLogs/アカウントID/CloudTrail-Digest/
    リージョン/年/月/日」配下に保管されます。

  10. SNS 通知の配信の有無
    (※ S3 バケットにログが配信されるたびに通知を受け取る場合は、設定します。)


1-2. ログイベントの選択

  1. イベントタイプの選択をします。

今回は S3 のオブジェクトレベルのアクションを取得したいので、データイベントを追加で選択します。


  1. 上記選択したイベントタイプの詳細設定を行います。
  2. 管理イベントの設定。
    基本的には、「読み取り」「書き込み」で問題有りません。KMS および RDS の
    API アクションログを取得しない場合は、それぞれ「除外」を選択します。


  3. データイベントの設定。
    データイベントタイプは、「S3」を選択します。
    ログセレクターテンプレートは、「カスタム」を選択します。

高度なイベントセレクターで、対象バケットの指定が可能です。
フィールドは、「resources.ARN」を選択します。
オペレーターは、「次で始まる:」を選択します。
Value は、「対象 S3 バケットの ARN /」を入力します。


  1. 確認と作成で設定値に問題がなければ、「証跡の作成」を選択し作成します。



2. ログの確認

対象の S3 バケットに「CloudTrail-Digest/」と「CloudTrail/」があれば成功になります。
今後、S3 バケットのオブジェクト追加、削除を行った場合は、「CloudTrail/」のログを確認
することで、いつ、だれが、何を実行したのかオブジェクトレベルで把握することができます。




終わりに

今回は、AWS CloudTrail を使用して Amazon S3 オブジェクトレベルのアクションログを取得することをおこないました。
本番環境では、オブジェクトレベルのアクションログ取得を設定することをお勧めします。

Discussion