目次
AWS CloudTrail とは
AWS CloudTrail は、AWS上で行われた操作を記録する「操作履歴・監査ログ」のサービスです。ユーザー、ロール、または AWS サービスによって実行されたアクション「誰が、いつ、どこから、どのAWSサービスに対して、何をしたか」をイベントとして記録します。CloudTrail は、AWS アカウントの運用およびリスク監査、ガバナンス、コンプライアンスを可能にします。
例えば以下の操作が記録されます。
・IAMユーザーを作成した
・EC2を起動・停止した
・セキュリティグループを変更した
・S3バケットポリシーを変更した
・KMSキーを無効化した
・AssumeRoleした
・コンソールログインした
・API / CLI / SDK から操作した
CloudTrail は、AWS API の呼び出しを中心に記録し、監査、セキュリティ調査、コンプライアンス対応などに利用されます。
CloudTrail で記録されるもの
CloudTrail で記録されるものは以下の4つのイベントです。
1.管理イベント
AWS リソースの作成・変更・削除などリソースそのものを操作したログです。EC2起動、IAM変更、S3バケット作成など AWS 管理画面・CLI・SDK・APIで行った操作が対象です。CloudTrail のイベント履歴では、過去90日分の管理イベントを検索・表示・ダウンロードできます。これはAWSアカウント作成時から自動的に利用できます。
2.データイベント
リソースの中身に対する操作ログです。S3 オブジェクトの GetObject/PutObject、Lambda Invoke など。代表例は S3 です。
- S3 バケットを作成した、削除した、ポリシーを変更した → 管理イベント
- S3 オブジェクトを取得した、削除した → データイベント
データイベントは大量に発生しやすいため、デフォルトでは取得していません。明示的に有効化する必要があります。例えば特定の S3 オブジェクト(バケット内のファイル)が消えているので調査が必要という場面になったとしても、デフォルトでは操作ログを取得していませんので注意が必要です。
イベント履歴には表示されません。
3.Insightsイベント
通常と異なるAPIアクティビティの検知です。急激なAPI呼び出し増加など。
イベント履歴には表示されません。
4.ネットワークアクティビティイベント
VPCエンドポイント経由のAPIアクセスです。PrivateLink 経由の AWS API アクセスなど。
イベント履歴には表示されません。
CloudTrail の特徴
- ユーザーアクティビティのログを取得することができます。(誰がどのアクションを実行したのか調べることができます。)
- ユーザー、ロール、または AWS のサービスによって実行されたアクションがイベントとして記録されます。
- イベントは、AWS マネジメントコンソール、AWS CLI、AWS SDK、API コールで実行されたアクションが含まれます。
- AWS Config のすべての API コールをイベントとしてキャプチャします。
- CloudTrail はリアルタイム監査はしません。ログを取得するサービスです。
- ログは S3 バケットに保存されます。
AWS CloudTrail のアクティビティ監視の具体的な記録情報
Who, When, Where, What, What の5つのWが記録されます。
CloudTrailに記録される仕組み
AWSマネジメントコンソール、AWS CLI、SDKなどからAWSを操作すると、内部では多くの場合、AWS APIが呼び出されます。
例えば、コンソールからEC2を停止した場合も、内部的には概念上、次のAPIが呼び出されます。
StopInstances
CloudTrailは、このAPI呼び出しをイベントとして記録します。
利用者
↓
AWSマネジメントコンソール
↓
EC2 StopInstances API
↓
EC2インスタンス停止
↓
CloudTrailにイベントを記録
重要なのは、コンソールからの操作も、裏ではAPIとして実行されるという点です。
したがって CloudTrail には、次のような操作経路が記録されます。
- AWSマネジメントコンソール
- AWS CLI
- AWS SDK
- Terraform
- CloudFormation
- Lambda
- AWSサービスからの自動操作
- IAMロールを引き受けた処理
CloudTrailイベントに記録される情報
CloudTrailのイベントは、基本的にJSON形式です。
代表的な項目は次のとおりです。
| 項番 | 項目 | 意味 |
|---|---|---|
| 1 | eventTime | 操作が行われた時刻 |
| 2 | eventSource | 対象となったAWSサービス |
| 3 | eventName | 実行されたAPI |
| 4 | awsRegion | 操作対象のリージョン |
| 5 | userIdentity | 操作したユーザーやロール |
| 6 | sourceIPAddress | 操作元IPアドレス |
| 7 | userAgent | コンソール、CLI、SDKなどの操作元 |
| 8 | requestParameters | APIに渡された内容 |
| 9 | responseElements | APIの応答内容 |
| 10 | errorCode | 失敗した場合のエラーコード |
| 11 | errorMessage | エラーの詳細 |
CloudTrailのイベントには、API呼び出し元(eventName)、送信元IP(sourceIPAddress)、ユーザーエージェント(userAgent)、リクエスト内容(requestParameters)、エラー(errorCode)などが含まれます。
例:EC2を停止したイベント
{
"eventTime": "2026-06-16T12:30:00Z",
"eventSource": "ec2.amazonaws.com",
"eventName": "StopInstances",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "203.0.113.10",
"userIdentity": {
"type": "AssumedRole",
"arn": "arn:aws:sts::123456789012:assumed-role/DeveloperRole/user01"
},
"requestParameters": {
"instancesSet": {
"items": [
{
"instanceId": "i-0123456789abcdef0"
}
]
}
}
}
これを見ることで、以下の項目を調査できます。
- いつ
- どのリージョンで
- 誰が
- どのロールを使い
- どのIPアドレスから
- どのEC2を停止したか
CloudTrailのイベント種類
CloudTrail イベントは、大きく4種類あります。
- 管理イベント
- データイベント
- ネットワークアクティビティイベント
- Insightsイベント
Trail や CloudTrail Lake では、管理イベントは標準的に記録対象ですが、データイベント、ネットワークアクティビティイベント、Insights イベントはデフォルトでは記録されません。
管理イベント
管理イベントは、AWSリソースの設定や管理に関する操作です。別名、コントロールプレーン操作とも呼ばれます。
具体例は次のとおりです。
EC2を起動する
EC2を停止する
IAMロールを作成する
セキュリティグループを変更する
RDSを再起動する
CloudTrailの設定を変更する
KMSキーを無効化する
API名で見ると次のようになります。
RunInstances
StopInstances
CreateRole
AuthorizeSecurityGroupIngress
RebootDBInstance
DisableKey
管理イベントはさらに、読み取りと書き込みに分かれます。
読み取りイベント
設定を確認する操作です。
DescribeInstances
ListBuckets
GetRole
DescribeDBInstances
基本的にリソースを変更しません。
書き込みイベント
リソースを作成、変更、削除する操作です。
CreateBucket
DeleteBucket
StopInstances
PutRolePolicy
ModifyDBInstance
セキュリティ調査では、特に書き込みイベントが重要です。
データイベント
データイベントは、AWSリソースの中にあるデータを操作した記録です。
別名、データプレーン操作とも呼ばれます。
代表例は次のとおりです。
| 項番 | サービス | データイベントの例 |
|---|---|---|
| 1 | S3 | オブジェクトの取得、登録、削除 |
| 2 | Lambda | 関数の実行 |
| 3 | DynamoDB | アイテムの取得、登録、更新 |
| 4 | SQS | メッセージの送受信 |
| 5 | Secrets Manager | シークレット値へのアクセス |
| 6 | EBS | スナップショットの直接API操作 |
S3の場合は、次の違いが重要です。
S3バケットを作成した
→ 管理イベント
S3オブジェクトを取得した
→ データイベント
API名では次のようになります。
CreateBucket
→ 管理イベント
GetObject
PutObject
DeleteObject
→ データイベント
データイベントは大量に発生することがあるため、デフォルトでは記録されず、追加料金も発生します。必要なバケットやリソースに絞って有効化することが重要です。
以前、S3バケットのデータが削除される現象が発生して調査をしましたが、データイベントを取得していなかったため原因の特定までは至りませんでした。有効化作業やコストや費用対効果を考えると難しいところです。
ネットワークアクティビティイベント
ネットワークアクティビティイベントは、対応する AWS サービスに対する VPC エンドポイント経由の API アクセスについて、ネットワーク面の情報を記録するためのイベントです。
Insightsイベント
CloudTrail Insights は、通常とは異なる API の動きを検出します。
例えば、
- API 呼び出し回数が突然増えた
- API エラー率が急激に上昇した
- 普段ほとんど実行されない変更操作が大量に発生した
といった異常です。
CloudTrail Insights は、通常時の API 活動を基準として、そこから外れた異常な API 呼び出し回数やエラー率を検出します。
ただし、CloudTrail Insights は、GuardDuty のように攻撃そのものを総合的に判断するサービスではありません。
あくまで、API の利用傾向が普段と違うことを検出する機能です。
Event history(イベント履歴)、Trail(証跡)、CloudTrail Lake の違い
CloudTrailを理解するうえで、最も混乱しやすい部分です。
CloudTrailには主に、次の3つの確認・保存方法があります。
| 項番 | 機能 | 主な用途 |
|---|---|---|
| 1 | Event history(イベント履歴) | 直近の管理イベントを手軽に確認 |
| 2 | Trail(証跡) | CloudTrailログをS3などへ継続保存 |
| 3 | CloudTrail Lake | CloudTrailイベントを蓄積してSQL検索 |
Event history(イベント履歴)
イベント履歴は、Trail を作成していなくても、各リージョンについて直近90日間の管理イベントを確認できます。
確認できる代表的な条件は次のとおりです。
Event History(イベント履歴)履歴は 90日分だけ
イベント履歴は、過去90日分の管理イベントだけ表示されます。データイベント、Insights イベント、ネットワークアクティビティイベントはイベント履歴には表示されません。90日を超えて継続的に記録したい場合は、証跡(Trail)を作成する必要があります。
- イベント名
- イベントソース
- ユーザー名
- リソース名
- リソースタイプ
- アクセスキー
- 時刻
例えば、EC2が停止した原因を調べる場合は、
イベント名: StopInstances
で検索します。
ただし、イベント履歴には重要な制限があります。
- 直近90日間
- リージョン単位
- 基本的には管理イベント
- 長期保存用ではない
- 複雑な横断検索には向かない
「90日より前(90日以上の過去)を調査する可能性がある」場合は、Trail や CloudTrail Lake を事前に設定しておく必要があります。
Trail(証跡)
Trail は、CloudTrail イベントを継続的に保存先へ配信する設定です。
一般的には次の構成です。
AWSでAPI操作
↓
CloudTrail
↓
Trail
↓
S3バケットにJSONログを保存
必要に応じて、CloudWatch Logsにも配信できます。
CloudTrail
├─ S3:長期保存、Athena分析
└─ CloudWatch Logs:メトリクスフィルター、アラーム
Trail では、次のような設定が可能です。
- S3バケットへの保存
- CloudWatch Logsへの配信
- KMSキーによる暗号化
- SNSによるログ配信通知
- 管理イベントの記録
- データイベントの記録
- Insightsの有効化
- マルチリージョン対応
AWSは、すべての有効なリージョンの操作を取得するため、マルチリージョンTrailを推奨しています。コンソールから作成するTrailはマルチリージョンTrailになります。
CloudTrail Lake
CloudTrail Lakeは、CloudTrailイベントを専用のイベントデータストアに保存し、SQLで検索・分析する機能です。
例えば、次のような調査ができます。
SELECT
eventTime,
eventName,
eventSource,
userIdentity.arn,
sourceIPAddress
FROM
event_data_store_id
WHERE
eventName = 'StopInstances'
ORDER BY
eventTime DESC;
Trail+S3+Athena でも似たことはできますが、CloudTrail Lake では CloudTrail 向けに統合された保存・検索環境を使えます。
CloudTrail Lake では、取り込み、保存、クエリで料金が発生します。保持期間や料金体系はイベントデータストア作成時に選択します。
CloudTrail ログファイルの整合性の検証(Log File Integrity Validation)
CloudTrail が S3 に配信したログファイルが、その後に改ざん・削除されていないかを確認する仕組みです。これを有効にすると、CloudTrail は通常のログファイルに加えてダイジェストファイルも S3 に配信し、そのダイジェストを使って検証します。
目的は「この監査ログは本当に CloudTrail が出したままの状態か」を後から証明できるようにすることです。検証されたログファイルは、セキュリティおよびフォレンジック調査で非常に重要です。
CloudTrail の整合性検証(Integrity Validation)はログの改ざんを検出する機能なので、仮にログが改ざんされたとしてもログが閲覧できなくなるわけではありません。改ざんが検出した場合は、CloudTrail から警告が出るがログ自体は通常どおり S3 に保存されます。
ダイジェストファイル
ダイジェストファイルは、CloudTrail のログ本体ではなく、「この時間帯に配信されたログファイル一覧とそのハッシュ値をまとめた検証用ファイル」です。CloudTrail のログファイル整合性検証で使われます。
CloudTrail と CloudWatch と Config の違い
例えば、EC2インスタンスが突然停止していたとします。
CloudWatchを見ると、
22時30分からEC2が停止している
という「状態」は分かります。
一方、CloudTrailを見ると、
22時29分58秒に、IAMロール DeveloperRole を使って、
IPアドレス 203.0.113.10 から、
StopInstances APIが実行された
という「操作の経緯」が分かります。
つまり、ざっくり分けると次の関係です。
| サービス | 主に分かること |
|---|---|
| CloudWatch | システムがどういう状態か |
| CloudTrail | 誰が何を操作したか |
| AWS Config | リソースの設定がどう変化したか |
