AWS CloudTrail で s3 ls コマンド(バケット指定あり)の api コール記録を確認する方法を教えてください。

テクニカルサポートノート。サービス名: AWS CloudTrail, Amazon S3, Amazon Athena
2021.01.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

以下のコマンドを実行しましたが、AWS CloudTrail に ListBuckets として記録されていません。 AWS CloudTrail で対象の api コールを確認する方法を教えてください。

s3 ls s3://{バケット指定あり}

どう対応すればいいの?

AWS CloudTrail にて証跡のデータイベントのログ記録設定の有効化をしている前提で、 ListBuckets ではなく ListObjects を証跡ログで確認できます。

以下、詳細な説明を記載します。

詳細

ListBuckets はaws s3 ls {バケット指定なし}の場合に記録されます。
ListObjects はaws s3 ls {バケット指定あり}の場合に記録されます。

各コマンドの場合における AWS CloudTrail への記録先は以下の通りになります。

  • ListBuckets として記録されるコマンドを実行した場合
    • イベント履歴:表示される
    • 証跡ログ:表示される
  • ListObjects として記録されるコマンドを実行した場合
    • イベント履歴:表示されない
    • 証跡ログ:表示される(証跡のデータイベントのログ記録設定の有効化時)

ついては、対象の api コール(aws s3 ls {バケット指定あり})を確認するには、 事前に証跡のデータイベントのログ記録設定の有効化いただき、 証跡ログにて ListObjects をご確認ください。

証跡のデータイベントのログ記録 | AWS

以下のデータ型が記録されます。
・Amazon S3 オブジェクトレベルの API アクティビティ (例: GetObject、DeleteObject、PutObject API オペレーション)
・AWS Lambda 関数の実行アクティビティ (Invoke API)

デフォルトでは、証跡の作成時にデータイベントは記録されません。CloudTrail データイベントを記録するには、証跡にアクティビティを収集する、サポート対象のリソースまたはリソースタイプを明示的に追加する必要があります。

CloudTrail のログ記録によって追跡される Amazon S3 オブジェクトレベルのアクション | AWS

これらのオペレーションに加えて、次のバケットレベルのオペレーションを使用して、特定の条件下で CloudTrail ログをオブジェクトレベルの Amazon S3 アクションとして取得できます。 GET Bucket (List Objects) Version 2 – 証跡に指定されたプレフィックスを選択します。


参考までに Amazon Athena における対象ログのクエリ例を記載します。

  • ListObjectsでフィルタ
SELECT *
FROM "{対象 Database}"."{対象 Table}"
WHERE eventname LIKE 'ListObjects'
AND eventtime > '2021-01-01T12:00:00Z'
ORDER BY eventtime DESC;
  • ユーザ名でフィルタ
SELECT *
FROM "{対象 Database}"."{対象 Table}"
WHERE WHERE useridentity.userName LIKE '{ユーザ名}'
AND eventtime > '2021-01-01T12:00:00Z'
ORDER BY eventtime DESC;