AWS CloudTrail で実現する API 監査ログ - 証跡の設計とセキュリティ分析

全 API アクティビティを記録し、CloudTrail Lake の SQL クエリで高度な分析を実行する。Insights による異常パターンの自動検出と EventBridge 連携のリアルタイム検出を紹介します。

CloudTrail の概要

CloudTrail は AWS アカウントの API アクティビティを記録するサービスです。EC2 インスタンスの起動、S3 バケットの作成、IAM ポリシーの変更など、あらゆる API コールが記録されます。デフォルトで過去 90 日間のマネジメントイベントが無料で閲覧でき、証跡を作成すると S3 バケットに無期限で保存されます。各イベントには呼び出し元の IAM エンティティ、送信元 IP アドレス、リクエストパラメータ、レスポンス要素が含まれ、「誰が、いつ、何を、どこから」を正確に追跡できます。イベント配信のレイテンシは通常 5〜15 分で、リアルタイム監視には EventBridge との統合が必要です。

証跡設計と CloudTrail Lake

証跡は全リージョンに適用する組織証跡が推奨です。S3 バケットに JSON 形式でイベントが保存され、SSE-KMS で暗号化します。組織証跡は AWS Organizations のマスターアカウントから作成し、全メンバーアカウントのイベントを 1 つの S3 バケットに集約します。バケットポリシーで CloudTrail サービスプリンシパルからの書き込みのみを許可し、オブジェクトロックで改ざんを防止します。CloudTrail Lake はイベントデータストアに最大 7 年間 (延長保持で最大 2,555 日) イベントを保持し、SQL クエリで検索・分析できます。Athena と異なり事前の Glue テーブル定義やパーティション設計が不要で、取り込み時にインデックスが自動生成されるためクエリ応答が高速です。「過去 30 日間に IAM ユーザーを作成したイベント」「特定の IP アドレスからの API コール」などのクエリを即座に実行できます。

データイベントとインサイト

データイベントは S3 オブジェクトレベルの操作 (GetObject、PutObject)、Lambda 関数の呼び出し、DynamoDB のテーブル操作を記録します。管理イベントと比較してイベント量が大幅に多いため、対象リソースを絞り込んで有効化します。CloudTrail Insights は管理イベントの異常パターン (API コール数の急増、エラー率の上昇) を自動検出し、通常とは異なるアクティビティをハイライトします。例えば、通常 1 日 10 回程度の RunInstances が突然 1,000 回呼び出された場合にインサイトイベントが生成されます。EventBridge との統合で、特定の API コール (DeleteBucket、StopLogging) をリアルタイムに検出して Lambda でアラートを発行できます。 CloudTrail の基礎から応用まで、書籍 (Amazon)で体系的に学べます。

設計のベストプラクティスと落とし穴

証跡の S3 バケットは専用アカウント (ログアーカイブアカウント) に配置し、本番アカウントの管理者がログを削除・改ざんできない構成にします。バケットポリシーで PutObject のみを許可し、削除系 API を明示的に Deny します。ログファイルの整合性検証 (ダイジェストファイル) を有効にすると、配信後のログ改ざんを暗号学的に検出できます。よくある落とし穴として、組織証跡を作成したのにメンバーアカウントで個別証跡を残すと二重課金が発生します。また、CloudTrail Lake のイベントデータストアに同一イベントを複数回取り込むとストレージコストが倍増するため、取り込みソース (組織証跡 vs アカウント別証跡) の重複を避ける設計が重要です。S3 バケットへの配信失敗はサイレントに発生するため、CloudWatch メトリクス (InsufficientS3BucketPolicy など) を監視し、ログ欠損を早期に検知する仕組みが不可欠です。

CloudTrail Lake と Athena の比較

S3 に保存された CloudTrail ログの分析には、CloudTrail Lake と Athena + S3 の 2 つのアプローチがあります。CloudTrail Lake はセットアップが容易でインデックス済みデータに即座にクエリを発行でき、スキャン量あたり約 0.005 ドル/GB で課金されます。一方 Athena は S3 上の生ログを直接スキャンし、スキャンデータ量あたり約 5 ドル/TB (Parquet 変換すればデータ削減可能) で課金されます。少量の調査クエリを頻繁に実行する用途では CloudTrail Lake が経済的で、大量の過去ログを横断分析する場合や独自のパーティション戦略を適用したい場合は Athena が柔軟です。両者は排他ではなく、直近の調査は Lake、長期傾向分析は Athena と使い分ける構成が実務的です。Lake のクエリ結果はダッシュボードとして保存でき、繰り返し実行する定型調査に便利です。

CloudTrail の料金最適化

管理イベントの最初の証跡は無料で、追加の証跡は 100,000 イベントあたり約 2 ドルです。データイベントは 100,000 イベントあたり約 0.10 ドルで、S3 の読み取り操作が多い環境ではコストが急増します。CloudTrail Lake のクエリはスキャンしたデータ量で課金され、1 GB あたり約 0.005 ドルです。データイベントの対象を機密性の高いバケットや重要な Lambda 関数に限定し、全リソースへの一律適用を避けることでコストを管理します。S3 に保存されたログの保持期間をライフサイクルルールで管理し、古いログを Glacier に移行してストレージコストを削減します。CloudTrail Lake のイベントデータストアは保持期間が長いほどストレージ料金が蓄積するため、コンプライアンス要件と照らし合わせて適切な保持期間 (1 年、3 年、7 年) を選択します。

まとめ

CloudTrail は AWS アカウントの全 API アクティビティを記録する監査ログサービスです。CloudTrail Lake で SQL クエリによる高度な分析を実行し、Insights で異常な API コールパターンを自動検出します。組織証跡で全アカウントのログを一元管理し、EventBridge 連携でセキュリティイベントのリアルタイム検出を実現します。