CloudTrail + AWS Config ハンズオン

API 操作の証跡を記録し、リソースのコンプライアンスを継続的に評価・監視する

AWS CloudTrail AWS Config Amazon S3 マネコン操作 初〜中級 所要時間 60〜75 分 v1.0

📋 概要

このハンズオンでは、AWS の 2 つのガバナンスサービスを組み合わせます。AWS CloudTrail で AWS API の操作ログを S3 に記録し、誰がいつ何をしたかを証跡として残す方法を学びます。次に AWS Config で AWS リソースの設定変更を継続的に記録・評価し、セキュリティポリシーへの準拠状況を把握する方法を学びます。

項目内容
所要時間60〜75 分
難易度初〜中級
主要サービスAWS CloudTrail、AWS Config、Amazon S3
前提リソースなし(新規アカウントでも実施可能)
課金目安CloudTrail: 管理イベントの 1 つ目の証跡は無料(追加の証跡や S3 保管は別途)。Config: 記録した設定アイテム数 + ルール評価回数 + コンフォーマンスパック評価の従量課金(固定の月額ルール料金ではない)。最新単価はConfig 料金ページ
ℹ️ CloudTrail と Config の違い
サービス記録するもの主な用途
CloudTrailAPI コール(誰が・いつ・何をしたか)セキュリティ監査、コンプライアンス、インシデント調査
Configリソースの設定状態と変更履歴コンプライアンス評価、設定ドリフト検出、変更管理

🏗️ 構成図

👤 IAM ユーザー / サービス(API 呼び出し)
↓ すべての API コール
📋 AWS CloudTrail
マネジメントイベントを記録(証跡)
↓ ログファイルを配信
🪣 S3 バケット(handson-cloudtrail-logs-<アカウントID>)

🔧 AWS リソース(EC2, S3, IAM など)の設定変更
↓ 変更を記録
⚙️ AWS Config
設定アイテムを記録 → Config Rules でコンプライアンス評価
↓ 非準拠を検出
🚨 コンプライアンス違反アラート(SNS / Security Hub と連携可能)

✅ 前提条件

ℹ️ AWS アカウント ID の確認方法

コンソール右上のアカウント名をクリック → 「アカウント ID」が 12 桁の数字で表示されます。S3 バケット名に使用するためメモしておいてください。

🔧 ステップ 1: AWS CloudTrail 証跡の作成

証跡(Trail)は CloudTrail が API ログを配信する設定単位です。S3 バケットへのログ配信を設定します。

1-1. CloudTrail コンソールを開く

手順
  1. AWS コンソールで「CloudTrail」を検索して開く
  2. 左メニュー → 「証跡」「証跡の作成」

1-2. 証跡の設定

設定値
証跡名
handson-trail
ストレージの場所
新しい S3 バケットを作成する
S3 バケット名
handson-cloudtrail-logs-<アカウントID>
ログファイルの SSE-KMS 暗号化
無効(ハンズオンのため)
ログファイルの検証
有効(デフォルト)
SNS 通知配信
無効(ハンズオンのためスキップ)
CloudWatch Logs
無効(ハンズオンのためスキップ)

1-3. ログイベントの設定

設定値(「次のステップ」でログイベントの選択へ)
イベントタイプ
マネジメントイベント(チェックあり)
API アクティビティ
読み取り・書き込みの両方(両方チェック)
データイベント
無効(S3 オブジェクト操作等。追加料金発生のためスキップ)
Insights イベント
無効(ハンズオンのためスキップ)

「証跡の作成」 をクリックして完了します。

✅ 確認

証跡の一覧に「handson-trail」が表示され、ステータスが「ログ記録中」になれば作成成功です。S3 コンソールで handson-cloudtrail-logs-<アカウントID> バケットが作成されていることも確認してください。

ℹ️ ログの反映タイミング

CloudTrail のログは通常 15 分以内に S3 へ配信されます。イベント履歴(コンソール上での確認)はリアルタイムに近いですが、S3 のログファイルには若干の遅延があります。

🔧 ステップ 2: CloudTrail イベント履歴の確認

コンソールから過去の API 操作履歴を検索・確認します。証跡の作成前のイベントも過去 90 日分は確認できます。

2-1. イベント履歴を開く

手順
  1. CloudTrail コンソール → 左メニュー 「イベント履歴」 をクリック
  2. 過去 90 日間の API 操作が一覧表示される
  3. 各イベントをクリックすると詳細(リクエストパラメータ、レスポンス、リソース情報)が確認できる

2-2. 特定のイベントを検索する

検索例
  1. フィルター → 「イベント名」 を選択
  2. 検索値に CreateTrail を入力 → Enter
  3. 先ほど作成した証跡のイベントが表示される → クリックして詳細を確認

2-3. 便利なフィルター条件

フィルター使用例説明
イベント名RunInstances, TerminateInstances特定の API 操作を検索
ユーザー名IAM ユーザー名特定ユーザーの操作を追跡
リソースタイプAWS::EC2::Instance特定リソースへの操作を検索
リソース名i-0abc1234 など特定リソース ID の操作を検索
イベントソースec2.amazonaws.com特定サービスへの API 呼び出しを検索

2-4. S3 のログファイルを確認する(任意)

15〜20 分後に S3 バケットにログファイルが配信されます。

手順
  1. S3 コンソール → handson-cloudtrail-logs-<アカウントID> を開く
  2. パス: AWSLogs/<アカウントID>/CloudTrail/ap-northeast-1/<年>/<月>/<日>/
  3. JSON.gz ファイルをダウンロードして展開すると、JSON 形式のログが確認できる
ℹ️ ログの内容

各ログエントリには eventTime(操作時刻)、userIdentity(誰が)、eventName(何をしたか)、sourceIPAddress(どこから)、requestParameters(どのリソースに)が含まれます。インシデント調査時はこれらを組み合わせて追跡します。

🔧 ステップ 3: AWS Config の有効化

AWS Config を有効化し、リソースの設定変更を記録する配信チャンネルを設定します。

3-1. Config コンソールを開く

手順
  1. AWS コンソールで「Config」を検索して AWS Config を開く
  2. 初回アクセスの場合、セットアップ画面が表示される → 「今すぐ始める」
  3. または左メニュー → 「設定」 → 「設定のセットアップ」

3-2. 設定の記録対象を設定

設定値(一般的な設定)
記録の方法
このリージョンでサポートされているすべてのリソース
グローバルリソース
IAM リソースを含める(チェックあり)
⚠️ 設定アイテムの課金について

「すべてのリソース」を選択するとリソース数が多い場合に設定アイテム数が増え、課金が増える可能性があります。費用を抑えたい場合は「特定のリソースタイプ」を選択し、AWS::EC2::InstanceAWS::S3::BucketAWS::IAM::User などに絞ることを推奨します。

3-3. 配信方法の設定

設定値
S3 バケット
新しいバケットを作成(自動命名)または既存バケットを選択
バケット名(新規作成時)
config-bucket-<アカウントID>(自動提案される)
SNS トピック
なし(ハンズオンのためスキップ)

3-4. AWS Config の IAM ロール

設定値
AWS Config サービスロール
ロールを自動的に作成する(デフォルト推奨)

「確認」「確認して保存」 をクリックします。

✅ 確認

Config のダッシュボードが表示され、リソースの記録が開始されます。左メニューの「リソースインベントリ」でリソースの一覧が確認できます(反映に数分かかる場合があります)。

🔧 ステップ 4: Config Rules の設定

Config Rules はリソースの設定が組織のポリシーに準拠しているかを自動評価します。AWS マネージドルールを使って一般的なセキュリティチェックを設定します。

4-1. ルールの追加

手順
  1. Config コンソール → 左メニュー 「ルール」「ルールの追加」
  2. 「AWS マネージドルール」タブでルールを検索・選択
  3. 以下のルールを順番に追加していく

追加するルール一覧

ルール名チェック内容トリガー
s3-bucket-public-read-prohibitedS3 バケットのパブリック読み取りアクセスが禁止されているか設定変更時
s3-bucket-public-write-prohibitedS3 バケットのパブリック書き込みアクセスが禁止されているか設定変更時
ec2-instances-in-vpcEC2 インスタンスが VPC 内に存在するか(EC2-Classic 不使用確認)設定変更時
iam-root-access-key-checkルートアカウントのアクセスキーが無効になっているか定期的(24 時間)
mfa-enabled-for-iam-console-accessコンソールアクセス可能な IAM ユーザーに MFA が設定されているか定期的(24 時間)

4-2. ルールの追加手順(s3-bucket-public-read-prohibited を例に)

手順
  1. 検索ボックスに s3-bucket-public-read と入力
  2. 「s3-bucket-public-read-prohibited」を選択 → 「次へ」
  3. ルール名はデフォルトのまま、パラメータも変更不要
  4. 「保存」 をクリック
  5. 上記手順を残りのルールについても繰り返す
ℹ️ Config Rules の課金

AWS Config の料金は ルール評価 1 回ごとの従量課金です(「1 ルールあたり固定の月額 $1」という旧来の体系ではありません)。ルールは設定変更やスケジュールのたびに評価され、その評価回数に応じて課金されます。加えて、記録した設定アイテム数にも課金されます。このハンズオンの規模なら少額(数十〜数百円程度)に収まりますが、変更が多い環境では評価回数が増える点に注意してください。最新単価は AWS Config 料金ページを参照してください。ハンズオン後は削除してください。

🔧 ステップ 5: コンプライアンス確認と違反テスト

5-1. ルールの評価結果を確認する

手順
  1. Config コンソール → 左メニュー 「ルール」
  2. 各ルールの「準拠」列でコンプライアンス状況を確認する
  3. 「準拠」(緑): ポリシーを満たしている
  4. 「非準拠」(赤): ポリシー違反のリソースがある
  5. 「評価なし」: まだ評価が完了していない(しばらく待つ)

5-2. 違反テスト:S3 バケットをパブリックに変更する

動作確認のため、S3 バケットのパブリックアクセスブロックを無効化して非準拠を意図的に作り出します。

手順
  1. S3 コンソールで既存のバケットを 1 つ選択(または新規作成)
  2. 「アクセス許可」タブ → 「パブリックアクセスのブロック(バケット設定)」→ 「編集」
  3. 「パブリックアクセスをすべてブロック」の チェックを外す「変更の保存」
  4. 確認ダイアログに「confirm」と入力 → 「確認」

5-3. Config による非準拠検出を確認する

手順
  1. Config コンソール → ルール → 「s3-bucket-public-read-prohibited」 をクリック
  2. 「ルールの詳細」画面で 「今すぐ再評価」 ボタンをクリック
  3. 数分後、コンプライアンスが 「非準拠」 に変わる
  4. 「準拠していないリソース」セクションに変更したバケットが表示される
✅ 期待結果

パブリックアクセスを許可した S3 バケットが「非準拠リソース」として検出されます。これが Config による継続的なコンプライアンス評価の仕組みです。

5-4. 元に戻す(S3 バケットのパブリックアクセスを再びブロック)

手順
  1. S3 コンソール → 該当バケット → 「アクセス許可」→ 「パブリックアクセスのブロック」→ 「編集」
  2. 「パブリックアクセスをすべてブロック」に チェックを入れる「変更の保存」
  3. Config でルールを再評価すると「準拠」に戻る

5-5. リソースタイムラインの確認(Config の強力な機能)

手順
  1. Config コンソール → 左メニュー 「リソースインベントリ」
  2. リソースタイプ: AWS::S3::Bucket を選択
  3. テストに使用したバケットをクリック
  4. 「リソースタイムライン」 ボタンをクリック
  5. 設定変更(パブリックアクセスの無効化 → 再有効化)が時系列で記録されていることを確認
ℹ️ リソースタイムラインの活用

「いつ設定が変わったのか」「誰がいつ変更したのか(CloudTrail との連携)」を追跡できます。セキュリティインシデント調査時に、問題のリソースの設定変更履歴を素早く確認するのに非常に役立ちます。

🧹 クリーンアップ

⚠️ 課金注意

CloudTrail の証跡(S3 への配信がある場合)と Config Rules は課金が発生します。ハンズオン完了後は以下の手順で削除してください。

削除手順(逆順で実施)

  1. Config Rules の削除
    Config コンソール → ルール → 各ルールを選択 → 「削除」
    (5 つのルールを順番に削除)
  2. AWS Config の記録停止
    Config コンソール → 「設定」→ 「設定レコーダー」セクション → 「記録を停止する」
    注: Config 自体を完全に削除するには設定レコーダーの停止と配信チャンネルの削除が必要
  3. CloudTrail 証跡の削除
    CloudTrail コンソール → 証跡 → handson-trail を選択 → 「削除」
  4. S3 バケットの削除(2 つ)
    S3 コンソール → handson-cloudtrail-logs-<アカウントID> → 「空にする」→ 「削除」
    S3 コンソール → config-bucket-<アカウントID> → 「空にする」→ 「削除」
    注: S3 バケットを削除するにはオブジェクトを先に空にする必要があります
✅ 削除確認

CloudTrail の証跡一覧が空になり、Config の設定レコーダーが停止し、S3 バケットが 2 つとも削除されていれば完了です。

ℹ️ 本番環境では削除しないこと

実際の AWS 環境では、CloudTrail と Config はセキュリティ・コンプライアンス要件から常時有効にすることを強く推奨します。多くのコンプライアンスフレームワーク(PCI DSS、SOC 2、ISO 27001 等)で CloudTrail の証跡が必須要件となっています。このハンズオン環境は学習目的のため削除していますが、本番アカウントでは継続稼働させてください。