SJ blog
security
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

AWS Config vs CloudTrail — 監査・コンプライアンスツールの使い分け

AWS ConfigとCloudTrailの役割の違い、Configが記録するリソース設定変更とCloudTrailが記録するAPI操作ログ、GuardDutyとの組み合わせ、セキュリティ調査フロー、両者を補完的に使う設計を解説。

一言結論

セキュリティ調査では「何が変わったか」をConfigで特定し「誰がやったか」をCloudTrailで追跡する2段階アプローチが基本であり、どちらか一方だけでは調査が完結しないため両サービスを同時に有効化しておくことが前提となる。

Config と CloudTrail の根本的な違い

CloudTrail:
  → 「誰が何のAPI操作をしたか」を記録
  → 例: IAMユーザー alice が s3:PutBucketPolicy を実行
  → いつ・誰が・何をしたか(操作ログ)
  → デフォルト: 管理イベント(マネジメントコンソール/API操作)

AWS Config:
  → 「リソースの設定がどう変わったか」を記録
  → 例: S3バケット my-bucket のパブリックアクセスが有効になった
  → いつ・何が変わったか(設定変更履歴)
  → Config Rulesで設定の準拠状況を継続評価

記録する情報の違い

CloudTrail が記録する情報(管理イベント):
  - API操作の名前(CreateBucket, PutBucketPolicy等)
  - 実行者(IAMユーザー、ロール、サービス)
  - 送信元IPアドレス
  - タイムスタンプ
  - リクエスト/レスポンスの詳細
  
CloudTrail が記録しないもの(デフォルト):
  - データイベント(S3 GetObject等)→ 有効化が必要で料金がかかる
  - コンソールへのログイン(マネジメントコンソールはサインイン記録あり)

AWS Config が記録する情報:
  - リソースの設定の全スナップショット
  - 変更前と変更後の設定の差分
  - 変更をトリガーしたCloudTrailイベントへのリンク
  - リソース間の関係(依存関係グラフ)
  
AWS Config が記録しないもの:
  - APIの呼び出し操作(誰がやったか)
  - データ操作(S3バケットへのファイルアップロード等)

相互補完の使い方

調査シナリオ: S3バケットのパブリックアクセスが有効になった

1. AWS Config でリソース変更を確認:
   「いつ」「何が変わったか」を特定
   → my-bucket の BlockPublicAcls が true → false に変更
   → 変更タイムスタンプ: 2026-04-08T10:30:00Z

2. CloudTrail でAPI操作を確認:
   「誰が」操作したかを特定
   → s3:PutBucketPublicAccessBlock API が実行された
   → 実行者: arn:aws:iam::123456789012:user/developer-bob
   → 送信元IP: 203.0.113.50

3. GuardDuty で脅威を確認:
   → 悪意のある操作か判定
   → 既知の脅威IPからの操作か等

CloudTrail で調査する操作の例

# 特定リソースへのAPI操作をCloudTrailで検索
aws cloudtrail lookup-events \
  --lookup-attributes '[{
    "AttributeKey": "ResourceName",
    "AttributeValue": "my-bucket"
  }]' \
  --start-time "2026-04-08T00:00:00Z" \
  --end-time "2026-04-09T00:00:00Z"

# 特定ユーザーの操作を検索
aws cloudtrail lookup-events \
  --lookup-attributes '[{
    "AttributeKey": "Username",
    "AttributeValue": "developer-bob"
  }]'

Config の設定履歴確認

# リソースの設定変更履歴を確認
aws configservice get-resource-config-history \
  --resource-type AWS::S3::Bucket \
  --resource-id my-bucket \
  --start-time "2026-04-01T00:00:00Z" \
  --end-time "2026-04-09T00:00:00Z"

# リソースの現在の設定を確認
aws configservice get-discovered-resource-counts \
  --resource-types AWS::S3::Bucket AWS::EC2::Instance

CloudTrail Lake

CloudTrail Lakeは構造化されたクエリで長期的なAudit分析が可能なサービスだ。

-- CloudTrail Lake でS3パブリックアクセス変更を検索
SELECT
  eventTime,
  userIdentity.arn,
  requestParameters,
  sourceIPAddress
FROM
  my-event-data-store
WHERE
  eventName = 'PutBucketPublicAccessBlock'
  AND requestParameters like '%"BlockPublicAcls":false%'
ORDER BY eventTime DESC

各サービスの保存期間

CloudTrail(標準):
  → 90日間(無料、S3への保存なし)
  → S3に保存: 無制限(S3料金がかかる)
  → CloudTrail Lake: 最大7年

AWS Config:
  → 設定スナップショット: S3に保存(無制限)
  → Config Rules 評価履歴: S3保存で無制限

GuardDuty:
  → 検出結果: 90日間
  → S3へのエクスポートで長期保存

試験頻出ポイント

シナリオ回答
リソース設定が変わった経緯を追跡AWS Config(設定変更履歴)
誰がEC2を停止したかを確認CloudTrail(API操作ログ)
S3バケットの現在の設定違反を検出Config Rules
コンソールログインを追跡CloudTrail(サインインイベント)
セキュリティ調査でConfigとCloudTrailを組み合わせConfig→「何が変わったか」、CloudTrail→「誰がやったか」

まとめ

ConfigとCloudTrailは相互補完的なサービスだ。設定変更の事実(何が変わったか)はConfigで、その変更を実行したAPI操作(誰がやったか)はCloudTrailで確認する。セキュリティ調査では両者を組み合わせて完全な状況把握を行う。