ログファイル・ダイジェストファイル・検証の仕組みを徹底解説
Log Integrity Validation
CloudTrailは、AWSで起きた全ての操作を記録する「監視カメラ」のようなものです。
でも、その記録が
悪意のある管理者に改ざんされたら?
そこで登場するのが
整合性検証機能
です。これは記録に「公証人の封印」を押すようなもの!
APIコール(誰が・いつ・何をしたか)を詳細に記録。1時間ごとにS3に保存される
過去1時間のログに対する「改ざん防止の封印」。ハッシュ値でログの正当性を証明
AWS CLIで封印が破られていないか、記録が改ざんされていないかをチェック
各ダイジェストが前のダイジェストを参照。1つでも改ざんすると鎖が切れる!
AWSアカウントで発生した全てのAPIアクティビティを記録したJSONファイル
過去1時間のログファイルのハッシュ値を記録した「改ざん検知用」ファイル
AWS CLIを使用してログとダイジェストの整合性を確認する作業
内部犯行者がAWS管理者権限を取得。
不正なリソース作成後、CloudTrailログを削除・改ざん。
証拠を隠滅して痕跡を消す。
同じ攻撃を試みるが...
ダイジェストファイルにはAWSの署名付きハッシュが残る。
検証コマンドで即座に改ざんを検知!
ダイジェストファイルは、ログファイルの「証明書」のような役割を果たします。
以下の重要な情報が含まれています:
// ダイジェストファイルの構造例 { "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つでも改ざんすると連鎖的に検知される
S3から指定期間のダイジェストファイルをダウンロード
AWSの公開鍵でダイジェストファイルの署名を検証
前のダイジェストへの参照が正しいかを確認
実際のログファイルのハッシュとダイジェスト内の記録を比較
全てパスなら「VALID」、問題があれば「INVALID」とレポート
# 新規証跡作成時に整合性検証を有効化 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
# 指定期間のログを検証(過去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
# ✅ 正常な場合 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!
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で暗号化し、さらに整合性検証で二重の保護を実現
バケットポリシーで削除を制限、S3 Object Lockで改ざん防止を強化
EventBridge + Lambdaで定期的に検証を自動実行し、結果をSNSで通知
全リージョンのログを一元管理。整合性検証も全リージョン分を対象に
ログ専用アカウントに保存し、本番アカウントの管理者でも削除不可に
CloudTrailの整合性検証機能自体に追加料金はかかりません。ただし、ダイジェストファイルもS3に保存されるため、その分のS3ストレージ料金は発生します(非常に小さいファイルなので、ほぼ無視できる程度です)。
自動通知機能はありません。検証は手動で
validate-logs
コマンドを実行する必要があります。自動化したい場合は、EventBridge + Lambda で定期的に検証を実行し、結果をSNSやSlackに通知する仕組みを構築してください。
同じS3バケット内ですが、異なるプレフィックス(フォルダ)に保存されます。ログファイルは
AWSLogs/[AccountID]/CloudTrail/
に、ダイジェストファイルは
AWSLogs/[AccountID]/CloudTrail-Digest/
に保存されます。
整合性検証 は「改ざんを検知する」機能で、 S3 Object Lock は「改ざんを防止する」機能です。両方を組み合わせることで、「改ざんできない + 万が一の改ざんも検知できる」という二重の保護を実現できます。
はい、使えます。Organizations証跡で整合性検証を有効にすると、組織内の全アカウントのログに対してダイジェストファイルが生成されます。検証時は組織証跡のARNを指定してください。
CloudTrailの整合性検証は「ログの信頼性を証明する」ための重要な機能です
コンプライアンス対応やセキュリティ監査には必須の設定と言えます
💡
一言でまとめると:
「誰かがログを改ざんしても、必ずバレる仕組み」を作れる機能です!
本番環境では
必ず有効化
しましょう 🔐
Created by SSuzuki1063
AWS SAP Learning Resources