目次
S3アクセスログとCloudTrailデータイベントの違いのまとめ
| 主な用途 | 粒度 | 遅延 | |
|---|---|---|---|
| S3アクセスログ | 詳細なアクセス解析・デバッグ | 最も詳細(HTTPエラーや署名情報も含む) | 数時間程度 (ベストエフォート) |
| CloudTrail データイベント | セキュリティ監視・コンプライアンス | オブジェクト操作(Get/Put等)が中心 | ほぼリアルタイム |
S3アクセスログは、Webサーバーのアクセスログに相当します。
CloudTrailデータイベントは、誰の認証情報でどのAPIを呼んだかという操作監査ログに相当します。
主な違い
| 項目 | S3アクセスログ | CloudTrail データイベント |
|---|---|---|
| 匿名アクセス | ◯ 記録される | ❌ 記録されない |
| 署名なしリクエスト | ◯ 記録される | ❌ 記録されない |
| 失敗したリクエスト | ◯ 記録される | △ 一部のみ |
| HTTPヘッダー情報 | ◯ Referer, User-Agentなど | ❌ なし |
| 転送バイト数 | ◯ あり | ❌ なし |
| レイテンシ情報 | ◯ あり | ❌ なし |
| 配信の確実性 | △ ベストエフォート(遅延・欠損あり) | ◯ 高い |
| リアルタイム性 | ❌ 数時間遅延 | ◯ ほぼリアルタイム |
| IAMユーザー/ロール情報 | △ 限定的 | ◯ 詳細あり |
| 保存形式 | 独自のテキスト形式 | JSON形式 |
CloudTrail データイベントだけで十分なケース
- IAMユーザー・ロールによるアクセスの監査が目的
- 誰が・いつ・何をしたかのセキュリティ監査が主目的
- 匿名アクセスが発生しないプライベートバケット
S3アクセスログも必要なケース
- 公開バケット(匿名アクセスを記録したい)
- 帯域・転送量の分析をしたい
- User-Agent / Refererでアクセス元を把握したい
- 全リクエストの完全な記録がコンプライアンス上必要
- CloudFrontを使わずS3を直接公開していてアクセス解析をしたい
S3アクセスログとは
S3バケットに対して行われたすべてのHTTPリクエストを記録するログです。
誰が・いつ・どのオブジェクトに・どんな操作をしたかを、ファイル形式で別のS3バケットに保存します。
主なフィールド
リクエスト日時、クライアントIPアドレス、操作の種類(GET/PUT/DELETEなど)、対象オブジェクト、HTTPステータスコード、転送バイト数、処理時間(レイテンシ)、User-Agent、エラーコードなど
取得が不要なケース
- 一時的・使い捨てのバケット(CI/CDの一時アーティファクトなど)
- すでに他の手段でログを取得している場合(CloudTrailのデータイベントなど)
- ログ保存先バケット自体(ログのループを避けるため)
- Athena / データレイク用途
- 内部限定バケット
注意点
- ログ自体はS3に保存されるため、ストレージコストが発生する
- 高トラフィックなバケットでは大量のログが生成される
- ログの保存先にもアクセス料金がかかる
CloudTrailデータイベントとは
AWSリソース上のオブジェクトに対する個々のAPI操作を記録するログです。
誰が・いつ・どのリソースに・何をしたかをAPIレベルで記録します。
管理イベントとデータイベント
CloudTrailには大きく2種類のイベントがあります。
データイベントはデフォルトでは無効で、明示的に有効化が必要です。
| 種類 | 内容 | 例 |
|---|---|---|
| 管理イベント | AWSリソース自体の操作 | バケットの作成・削除、IAMユーザーの作成など |
| データイベント | リソース内のデータ操作 | S3オブジェクトのGET・PUT・DELETE など |
主なフィールド
操作日時、API操作名、実行したIAMユーザー/ロール、送信元IPアドレス、対象バケット・オブジェクト、成功/失敗のステータスなど
目的
- 誰が機密ファイルをダウンロードしたかを特定できる
- 想定外のIAMユーザー・ロールによるアクセスを検知できる
- 認証情報が漏洩した場合に何にアクセスされたかを調査できる
- セキュリティインシデント発生時に何が起きたかを時系列で追跡できる
- 削除されたオブジェクトがいつ・誰に削除されたかを確認できる
設定
CloudTrailのデータイベントは、すべてのS3バケットをまとめて対象にする設定が可能です。
この設定にしておけば、新しいバケットを追加しても自動的に記録対象になります。
ただし、全バケット対象にすると、すべてのGetObject・PutObjectなどが課金対象になります。
その場合、高頻度アクセスのバケット(ログ保存先・CI/CDアーティファクトなど)が含まれるとコストが膨らみやすいです。
除外したいバケットがある場合は高度なイベントセレクターで特定バケットを除外します。
アプリログとの違い
アプリログで取れる情報はあくまでアプリを経由したアクセスだけです。
S3に対するアクセスはアプリ以外からも発生するため、完全な代替にはなりません。
| 目的 | アプリログ | S3アクセスログ | CloudTrail |
|---|---|---|---|
| アプリ経由の操作記録 | ◯ | ◯ | ◯ |
| コンソール・CLI操作 | ❌ | ◯ | ◯ |
| 不正アクセスの検知 | ❌ | ◯ | ◯ |
| 業務コンテキストの記録 | ◯ | ❌ | ❌ |
アプリログの有効な場面
アプリログはS3ログの代替ではなく、補完するものとして考えると有効です。
・ユーザーIDや業務コンテキストなど、S3ログには含まれないアプリ固有の情報を記録できます。
・誰のリクエストでどのユーザー操作の結果としてS3にアクセスしたかを紐付けられます。
関連の記事
