🔐

CloudTrail 整合性検証 完全ガイド

ログファイル・ダイジェストファイル・検証の仕組みを徹底解説

Log Integrity Validation

📖 たとえ話で理解する整合性検証

🏛️ CloudTrail = 銀行の監視カメラ記録 + 公証人の封印

CloudTrailは、AWSで起きた全ての操作を記録する「監視カメラ」のようなものです。
でも、その記録が 悪意のある管理者に改ざんされたら?
そこで登場するのが 整合性検証機能 です。これは記録に「公証人の封印」を押すようなもの!

📹

ログファイル = 監視カメラの映像

APIコール(誰が・いつ・何をしたか)を詳細に記録。1時間ごとにS3に保存される

📜

ダイジェストファイル = 封印証明書

過去1時間のログに対する「改ざん防止の封印」。ハッシュ値でログの正当性を証明

🔍

検証 = 封印の確認作業

AWS CLIで封印が破られていないか、記録が改ざんされていないかをチェック

⛓️

ハッシュチェーン = 鎖でつながった封印

各ダイジェストが前のダイジェストを参照。1つでも改ざんすると鎖が切れる!

📦 3つの構成要素を理解する

📄
ログファイル

AWSアカウントで発生した全てのAPIアクティビティを記録したJSONファイル

  • 📍 S3バケットに保存
  • ⏰ 約5分ごとに配信
  • 📊 GZIP形式で圧縮
  • 🔑 誰が・いつ・何をしたか
  • 🌐 IPアドレス・ユーザーエージェント含む
  • 🛡️
    ダイジェストファイル

    過去1時間のログファイルのハッシュ値を記録した「改ざん検知用」ファイル

  • ⏰ 1時間ごとに生成
  • 🔗 前のダイジェストへのリンク
  • ✍️ AWSによるデジタル署名
  • #️⃣ 各ログのSHA-256ハッシュ
  • 📁 別フォルダに保存
  • 検証プロセス

    AWS CLIを使用してログとダイジェストの整合性を確認する作業

  • 🔐 署名の検証
  • #️⃣ ハッシュ値の照合
  • ⛓️ チェーンの連続性確認
  • 📋 検証レポート出力
  • 🚨 改ざん検知時はアラート
  • ⚖️ 整合性検証「あり」と「なし」の違い

    ❌ 検証なし

    整合性検証を有効化していない場合

    😈 攻撃シナリオ

    内部犯行者がAWS管理者権限を取得。
    不正なリソース作成後、CloudTrailログを削除・改ざん。
    証拠を隠滅して痕跡を消す。

    😱 結果: ログが改ざんされても気づけない。監査時に「何が起きたか」を証明できない!
    ✅ 検証あり

    整合性検証を有効化している場合

    🛡️ 防御シナリオ

    同じ攻撃を試みるが...
    ダイジェストファイルにはAWSの署名付きハッシュが残る。
    検証コマンドで即座に改ざんを検知!

    😌 結果: 改ざんが発生しても検証で即発覚。法的証拠としてログの信頼性を証明できる!

    📜 ダイジェストファイルの構造

    ダイジェストファイルは、ログファイルの「証明書」のような役割を果たします。
    以下の重要な情報が含まれています:

    📁 ダイジェストファイルの中身(JSON形式)
    // ダイジェストファイルの構造例
    {
      "awsAccountId": "123456789012",
      "digestStartTime": "2025-01-01T00:00:00Z",
      "digestEndTime": "2025-01-01T01:00:00Z",
      "digestS3Bucket": "my-cloudtrail-bucket",
      
      // 🔗 前のダイジェストへのリンク(チェーン構造)
      "previousDigestS3Object": "...previous-digest.json.gz",
      "previousDigestHashValue": "abc123...前のダイジェストのハッシュ",
      "previousDigestSignature": "xyz789...前のダイジェストの署名",
      
      // 📄 このダイジェストが証明するログファイル一覧
      "logFiles": [
        {
          "s3Object": "...log-file-1.json.gz",
          "hashValue": "sha256ハッシュ値...",  // ログファイルのハッシュ
          "hashAlgorithm": "SHA-256"
        },
        // ... 他のログファイル
      ],
      
      // ✍️ AWSによるデジタル署名
      "digestPublicKeyFingerprint": "公開鍵のフィンガープリント",
      "digestSignatureAlgorithm": "SHA256withRSA"
    }
    ⛓️ ダイジェストのハッシュチェーン構造
    📜
    ダイジェスト #1
    00:00-01:00
    📜
    ダイジェスト #2
    01:00-02:00
    📜
    ダイジェスト #3
    02:00-03:00

    💡 各ダイジェストは前のダイジェストのハッシュを含む → どこか1つでも改ざんすると連鎖的に検知される

    🔄 整合性検証の流れ

    📋 検証プロセスのステップ
    1
    📥

    ダイジェストファイルの取得

    S3から指定期間のダイジェストファイルをダウンロード

    2
    ✍️

    デジタル署名の検証

    AWSの公開鍵でダイジェストファイルの署名を検証

    3
    ⛓️

    チェーンの連続性確認

    前のダイジェストへの参照が正しいかを確認

    4
    #️⃣

    ログファイルのハッシュ照合

    実際のログファイルのハッシュとダイジェスト内の記録を比較

    5
    📊

    検証結果の出力

    全てパスなら「VALID」、問題があれば「INVALID」とレポート

    ⚙️ 整合性検証の設定と実行方法

    1️⃣ 整合性検証を有効化する(証跡作成時)

    AWS CLI
    # 新規証跡作成時に整合性検証を有効化
    aws cloudtrail create-trail \
      --name "my-trail" \
      --s3-bucket-name "my-cloudtrail-bucket" \
      --enable-log-file-validation  # ← これが重要!
    
    # 既存の証跡に整合性検証を追加
    aws cloudtrail update-trail \
      --name "my-trail" \
      --enable-log-file-validation

    2️⃣ ログの整合性を検証する

    AWS CLI
    # 指定期間のログを検証(過去24時間)
    aws cloudtrail validate-logs \
      --trail-arn "arn:aws:cloudtrail:ap-northeast-1:123456789012:trail/my-trail" \
      --start-time "2025-01-01T00:00:00Z" \
      --end-time "2025-01-02T00:00:00Z"
    
    # 詳細出力(verbose)モード
    aws cloudtrail validate-logs \
      --trail-arn "arn:aws:cloudtrail:..." \
      --start-time "2025-01-01T00:00:00Z" \
      --verbose

    3️⃣ 検証結果の見方

    検証結果例
    # ✅ 正常な場合
    Results requested for 2025-01-01T00:00:00Z to 2025-01-02T00:00:00Z
    Results found for 2025-01-01T00:00:00Z to 2025-01-02T00:00:00Z:
    
    24/24 digest files valid
    156/156 log files valid
    
    # ❌ 改ざんが検出された場合
    Results requested for 2025-01-01T00:00:00Z to 2025-01-02T00:00:00Z
    
    Log file INVALID: hash mismatch
      S3 object: s3://bucket/AWSLogs/.../20250101T0000Z.json.gz
      Expected hash: abc123...
      Calculated hash: xyz789...
      ⚠️ This log file may have been tampered with!

    4️⃣ CloudFormationでの設定

    CloudFormation
    CloudTrailTrail:
      Type: AWS::CloudTrail::Trail
      Properties:
        TrailName: my-secure-trail
        S3BucketName: !Ref CloudTrailBucket
        IsMultiRegionTrail: true
        IncludeGlobalServiceEvents: true
        IsLogging: true
        # ✅ 整合性検証を有効化
        EnableLogFileValidation: true
        # 🔐 推奨:KMS暗号化も併用
        KMSKeyId: !Ref CloudTrailKMSKey

    ベストプラクティス

    🔐
    必ず有効化する

    本番環境では必須。コンプライアンス要件(PCI-DSS, SOC2等)でも求められる重要な機能

    🗝️
    KMS暗号化と併用

    ログファイルをKMSで暗号化し、さらに整合性検証で二重の保護を実現

    🚫
    S3バケットの保護

    バケットポリシーで削除を制限、S3 Object Lockで改ざん防止を強化

    定期的な検証

    EventBridge + Lambdaで定期的に検証を自動実行し、結果をSNSで通知

    🌍
    マルチリージョン証跡

    全リージョンのログを一元管理。整合性検証も全リージョン分を対象に

    📦
    別アカウントに保存

    ログ専用アカウントに保存し、本番アカウントの管理者でも削除不可に

    ⚠️ 知っておくべき注意点

    📋 導入時・運用時の注意点
    • ダイジェストファイルは 1時間ごと に生成されるため、最新1時間のログは検証対象外になる場合がある
    • 検証はAWS CLI(または SDK)でのみ可能。マネジメントコンソールでは検証できない
    • 検証にはS3へのアクセス権限が必要。クロスアカウントの場合はバケットポリシーの設定が必要
    • 整合性検証を 後から有効化 しても、有効化前のログは検証できない
    • ダイジェストファイルを削除すると、対応するログファイルの検証が不可能になる
    • 大量のログがある場合、検証に時間がかかることがある(長期間の検証は分割推奨)

    よくある質問

    Q. 整合性検証を有効にすると追加料金はかかりますか?

    CloudTrailの整合性検証機能自体に追加料金はかかりません。ただし、ダイジェストファイルもS3に保存されるため、その分のS3ストレージ料金は発生します(非常に小さいファイルなので、ほぼ無視できる程度です)。

    Q. ログファイルが改ざんされた場合、自動で通知されますか?

    自動通知機能はありません。検証は手動で validate-logs コマンドを実行する必要があります。自動化したい場合は、EventBridge + Lambda で定期的に検証を実行し、結果をSNSやSlackに通知する仕組みを構築してください。

    Q. ダイジェストファイルとログファイルの保存場所は同じですか?

    同じS3バケット内ですが、異なるプレフィックス(フォルダ)に保存されます。ログファイルは AWSLogs/[AccountID]/CloudTrail/ に、ダイジェストファイルは AWSLogs/[AccountID]/CloudTrail-Digest/ に保存されます。

    Q. 整合性検証とS3 Object Lockの違いは何ですか?

    整合性検証 は「改ざんを検知する」機能で、 S3 Object Lock は「改ざんを防止する」機能です。両方を組み合わせることで、「改ざんできない + 万が一の改ざんも検知できる」という二重の保護を実現できます。

    Q. Organizations証跡でも整合性検証は使えますか?

    はい、使えます。Organizations証跡で整合性検証を有効にすると、組織内の全アカウントのログに対してダイジェストファイルが生成されます。検証時は組織証跡のARNを指定してください。

    📝 まとめ

    CloudTrailの整合性検証は「ログの信頼性を証明する」ための重要な機能です
    コンプライアンス対応やセキュリティ監査には必須の設定と言えます

    📄 ログファイル = 操作記録 📜 ダイジェスト = 封印証明 ⛓️ ハッシュチェーン = 連鎖保護 🔍 検証 = 改ざん検知

    💡 一言でまとめると:
    「誰かがログを改ざんしても、必ずバレる仕組み」を作れる機能です!
    本番環境では 必ず有効化 しましょう 🔐

    Created by SSuzuki1063

    AWS SAP Learning Resources