CloudTrailの証跡とイベント履歴
管理イベントとデータイベントの証跡を作成し、ログをS3とCloudWatch Logsに配信して、コンソールで過去90日間のイベント履歴を検索します。
「CloudTrailの証跡とイベント履歴」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
AWS CloudTrail とは
AWS CloudTrailは、AWS アカウントで行われたすべての API 呼び出しを記録するサービスです。コンソール、CLI、SDK、その他の AWS サービスのいずれから実行された呼び出しも対象になります。各レコードはCloudTrail イベントと呼ばれ、API アクション、リクエスト元の ID、送信元 IP、リクエストパラメータ、レスポンスが含まれます。CloudTrail は、AWS におけるセキュリティ監査、コンプライアンス、運用調査の基盤です。SAA-C03 試験では、「誰がこの変更を行ったのか」と問われた場合の答えになります。
Event History:無料の90日間検索
デフォルトでは、すべての AWS アカウントがCloudTrail Event Historyを利用できます。これは、コンソールで表示したり CLI からクエリしたりできる、90日間のローリング形式の管理イベント記録です。リソース名、リソースタイプ、イベント名、ユーザー名でフィルタリングできます。Event History は無料で、設定は不要であり、すぐに利用できます。最近の変更を調査する最も簡単な方法ですが、より長い保持期間や高度なクエリが必要な場合は Trail を作成する必要があります。
# Search event history for who deleted an S3 bucket in the last 7 days
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=EventName,AttributeValue=DeleteBucket \
--start-time $(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ) \
--query 'Events[].{Time:EventTime,User:Username,Detail:CloudTrailEvent}' \
--output tableCloudTrail Trail の作成
Trailは、イベントを継続的に S3 バケット(必要に応じて CloudWatch Logs)へ配信する CloudTrail の設定です。料金は S3 のストレージとデータ転送に対して発生します。Trail は単一リージョンに範囲を限定することも、現在および将来のアカウント内のすべてのリージョンからイベントを取得するマルチリージョン Trailとして設定することもできます。SAA-C03 試験では、常にマルチリージョン Trail を推奨してください。単一リージョンの Trail では他のリージョンのアクティビティを見逃すため、セキュリティ上の欠陥と見なされます。
# Create a multi-region trail delivering to S3
aws cloudtrail create-trail \
--name OrgAuditTrail \
--s3-bucket-name my-cloudtrail-logs-111122223333 \
--is-multi-region-trail \
--include-global-service-events \
--enable-log-file-validation
# Start logging (trails are created in 'paused' state)
aws cloudtrail start-logging --name OrgAuditTrail管理イベントとデータイベントの比較
CloudTrail は、イベントを2つのカテゴリに分けて記録します。管理イベント(コントロールプレーンイベントとも呼ばれます)は、リソースに対する操作を記録します。たとえば、EC2 インスタンスの作成、セキュリティグループの変更、IAM ポリシーのアタッチなどです。これらはすべての Trail でデフォルトで有効になっており、イベントごとの追加料金はかかりません。データイベントは、オブジェクトレベルの操作を記録します。たとえば、S3 の GetObject、PutObject、DeleteObject、Lambda の Invoke などです。データイベントは非常に大量になる可能性があり、追加料金も発生するため、リソースまたはリソースタイプごとに明示的に有効化する必要があります。
# Add data event logging for all S3 objects in a specific bucket
aws cloudtrail put-event-selectors \
--trail-name OrgAuditTrail \
--event-selectors '[
{
"ReadWriteType": "All",
"IncludeManagementEvents": true,
"DataResources": [
{
"Type": "AWS::S3::Object",
"Values": ["arn:aws:s3:::my-sensitive-bucket/"]
}
]
}
]'CloudTrail と CloudWatch Logs の統合
CloudTrail イベントをCloudWatch Logsに配信すると、API アクティビティに対するリアルタイムアラートを有効にできます。CloudTrail のロググループにメトリクスフィルターを作成して、特定のイベントをカウントできます。たとえば、DeleteBucket や CreateUser の呼び出しを数え、CloudWatch アラームを設定して、不審な操作が行われてから数分以内にセキュリティチームへ通知できます。これはCIS AWS Foundations Benchmarkの中核的なパターンであり、SAA-C03 試験でも頻繁に参照されます。
# Update a trail to also deliver to CloudWatch Logs
aws cloudtrail update-trail \
--name OrgAuditTrail \
--cloud-watch-logs-log-group-arn arn:aws:logs:us-east-1:111122223333:log-group:CloudTrail/Logs:* \
--cloud-watch-logs-role-arn arn:aws:iam::111122223333:role/CloudTrailCWLogsRole
# Create a metric filter for root account login
aws logs put-metric-filter \
--log-group-name CloudTrail/Logs \
--filter-name RootLogin \
--filter-pattern '{$.userIdentity.type = "Root" && $.eventName = "ConsoleLogin"}' \
--metric-transformations metricName=RootLogins,metricNamespace=CISBenchmark,metricValue=1グローバルサービスイベント
IAM、STS、Route 53、CloudFrontなど、一部の AWS サービスはグローバルサービスであり、API 呼び出しをグローバルサービスイベントとして記録します。これらのイベントは、操作がどこで開始されたかに関係なく、常に us-east-1 リージョンに記録されます。Trail を作成するときは --include-global-service-events を有効にして、IAM ユーザーの作成、ポリシーの変更、STS ロールの引き受けを記録できるようにします。複数のリージョン固有の Trail がある場合は、ログレコードの重複を避けるため、グローバルサービスイベントを有効にする Trail は1つだけにしてください。
# Verify that global service events are enabled on a trail
aws cloudtrail get-trail \
--name OrgAuditTrail \
--query 'Trail.{MultiRegion:IsMultiRegionTrail,GlobalServiceEvents:IncludeGlobalServiceEvents}'CloudTrail ログ用の S3 バケットポリシー
CloudTrail では、CloudTrail サービスプリンシパル(cloudtrail.amazonaws.com)に対して、バケットで GetBucketAcl と PutObject を呼び出す権限を付与する、専用のS3 バケットポリシーが必要です。AWS は、バケットがパブリックアクセス可能でないこと、および Object Ownership が Bucket Owner Enforced に設定されていることを強制します。CloudTrail ログをアプリケーションが使用するバケットに保存しないでください。アプリケーションバケットのアクセスが制限された場合に監査ログへのアクセスも妨げられる、循環依存が発生するためです。
# Minimum S3 bucket policy for CloudTrail (abbreviated)
# {
# "Version": "2012-10-17",
# "Statement": [
# {
# "Sid": "AWSCloudTrailAclCheck",
# "Effect": "Allow",
# "Principal": {"Service": "cloudtrail.amazonaws.com"},
# "Action": "s3:GetBucketAcl",
# "Resource": "arn:aws:s3:::my-cloudtrail-logs-111122223333"
# },
# {
# "Sid": "AWSCloudTrailWrite",
# "Effect": "Allow",
# "Principal": {"Service": "cloudtrail.amazonaws.com"},
# "Action": "s3:PutObject",
# "Resource": "arn:aws:s3:::my-cloudtrail-logs-111122223333/AWSLogs/111122223333/*",
# "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}}
# }
# ]
# }組織 Trail
AWS Organisationでは、管理アカウントから組織 Trailを作成すると、現在および将来のすべてのメンバーアカウントに自動的に適用できます。メンバーアカウントは組織 Trail を変更または削除できないため、監査対象から逃れることを防止できます。組織 Trail は、アカウントごとのプレフィックスを付けてログを一元的な S3 バケットに配信します。これにより、セキュリティチームは Athena や SIEM ツールを使用して、すべてのアカウントの監査ログを1か所でクエリできます。
# Create an organisation trail from the management account
aws cloudtrail create-trail \
--name OrgCentralTrail \
--s3-bucket-name central-org-cloudtrail-logs \
--is-multi-region-trail \
--is-organization-trail \
--include-global-service-events \
--enable-log-file-validation
aws cloudtrail start-logging --name OrgCentralTrailログ分析のための Athena 統合
S3 に配信された CloudTrail ログは JSON 形式です。CloudTrail コンソールのAmazon Athena統合を使用すると、アカウント、リージョン、日付ごとに自動的にパーティション分割された Glue テーブルを作成できます。これにより、データをデータベースに読み込まずに、標準 SQL を使って数か月分の API 履歴をクエリできます。全テーブルスキャンを避けて Athena のコストを抑えるには、クエリで日付によるパーティションを指定してください(WHERE year='2024' AND month='01')。
-- Query CloudTrail logs in Athena for IAM policy changes in January 2024
SELECT
eventtime,
useridentity.arn AS principal,
eventname,
requestparameters
FROM cloudtrail_logs_111122223333
WHERE year = '2024'
AND month = '01'
AND eventsource = 'iam.amazonaws.com'
AND eventname IN ('PutUserPolicy','AttachRolePolicy','CreateUser')
ORDER BY eventtime DESC
LIMIT 100;イベント履歴とトレイルログのクエリ
CloudTrail レコードを検索する方法は2つあります。コンソールのイベント履歴(過去90日間、管理イベントのみ、フィルターは限定的)と、S3/Athena のトレイルログ(保持期間の制限なし、データイベントにも対応、SQLの機能をフルに利用可能)です。試験問題では、90日より前のイベントを調査する場合や、データイベント(S3 GetObject、Lambda Invoke)をクエリする場合は、必ずAthenaを使用してトレイルログをクエリする方法を推奨してください。最近発生した管理イベントを調査する最も簡単な方法を問われた場合は、イベント履歴で十分です。
試験で重要なCloudTrailのポイント
SAA-C03試験に向けて、次の内容を暗記してください。CloudTrailはリアルタイムではありません。S3へのイベント配信には最大15分かかることがあります(ほぼリアルタイムのアラートにはCloudWatch Logsを使用します)。イベント履歴の保持期間は90日間で、管理イベントのみが対象です。データイベントは明示的に有効化する必要があり、追加料金が発生します。ログファイルの検証にはSHA-256ハッシュが使用され、改ざんを検出します。グローバルサービスイベント(IAM、STS、Route 53)はus-east-1にのみ表示されます。組織トレイルはメンバーアカウントによって無効化できません。
理解度チェック
このレッスンで学んだAWS Solutions Architect(SAA-C03)の概念について、理解度を確認します。
レッスンのまとめ
このレッスンでは、次の内容を学びました。イベント履歴では、管理イベントを過去90日間無料で確認できます。トレイルでは、保持期間を設定してS3に継続的に配信でき、オプションでデータイベントも記録できます。また、組織トレイルはすべてのメンバーアカウントに適用され、メンバーアカウントから無効化することはできません。次は、CloudTrail Insightsとログファイル整合性検証について学びます。
よくある質問
「CloudTrailの証跡とイベント履歴」レッスンは無料ですか?
はい。「CloudTrailの証跡とイベント履歴」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
「CloudTrailの証跡とイベント履歴」で何を学びますか?
管理イベントとデータイベントの証跡を作成し、ログをS3とCloudWatch Logsに配信して、コンソールで過去90日間のイベント履歴を検索します。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cloud & IT Cert Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「CloudTrailの証跡とイベント履歴」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?
はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- CloudTrailの証跡とイベント履歴
- CloudTrail Insightsとログファイルの整合性
- AWS Configルールと修復
- Conformance Packsと組織の証跡