API操作ログの長期保存とアーカイブ ── CloudTrailとS3ライフサイクル
記事の「実践」を 1 項目ずつ進めるためのページです。AWS マネジメントコンソールで操作したら、右の一覧にチェックを入れてください。チェックはこのブラウザに保存されます。
前提条件
- リージョン:
ap-northeast-1(東京) - CloudTrail・S3の操作権限を持つIAMユーザーまたはロールでコンソールにログイン済みであること
このハンズオンで作成するリソースは以下のとおりです。
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| CloudTrailの証跡 | audit-trail-lab | API操作ログの記録用 |
| S3バケット | audit-trail-lab-<アカウントID> | ログの出力先 |
| ライフサイクルルール | archive-after-180-days | 180日でGlacier Deep Archiveへ移行 |
> [!NOTE] > 管理イベントの最初のコピーは無料ですが、同じアカウントで2つ目以降の証跡を作ると、管理イベントの配信が10万件あたり 2.00 USD の課金対象になります。既に証跡が有効なアカウントで試す場合は、検証後に作成した証跡を削除します。
手順1: 証跡を作成する
AWSマネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します。
上部の検索バーに CloudTrail と入力し、表示された「CloudTrail」を選択します。
左側ナビゲーションの「証跡」を選択し、「証跡の作成」をクリックします。
以下を設定します。
- 証跡名:
audit-trail-lab - ストレージの場所:
新しい S3 バケットを作成します - 証跡ログバケット名:
audit-trail-lab-<アカウントID> - ログファイルの SSE-KMS 暗号化: チェックを外す(この検証では既定の暗号化のまま進めます)
- ログファイルの検証:
有効
> [!NOTE] > 画面に「コンソールで作成された証跡は、マルチリージョンの証跡です」と表示されます。コンソールから作る証跡は常に全リージョンが対象で、単一リージョンの証跡にしたい場合はCLIまたはAPIで作成します。
「次へ」をクリックします。
手順2: 記録するイベントを選ぶ
「イベントタイプ」で「管理イベント」にチェックが入っていることを確認します。API アクティビティは「読み取り」「書き込み」の両方を選択します。
データイベント・Insightsイベント・ネットワークアクティビティイベントはチェックを入れません(いずれも課金対象のため)。
すでに管理イベントを記録する証跡があるアカウントでは、「複数の管理イベント証跡が検出されました。ログに記録された管理イベントが重複している場合は料金が発生します」という案内がこの画面に表示されます。
「次へ」→「証跡の作成」をクリックします。
手順3: ログが出力されることを確認する
証跡が作成されると、CloudTrailはおよそ5分ごとにログファイルをS3へ配信します。配信までしばらく時間がかかります。
S3コンソールで audit-trail-lab-<アカウントID> バケットを開きます。AWSLogs/<アカウントID>/CloudTrail/ap-northeast-1/<年>/<月>/<日>/ の階層にログファイル(.json.gz)が出力されていることを確認します。
マルチリージョンの証跡なので、CloudTrail/ の下にはリージョンごとのフォルダが並びます。グローバルサービスのイベントは us-east-1 の下に出力されるため、東京リージョンで操作していなくてもファイルが増えていきます。
同じ階層構造で CloudTrail-Digest の下にダイジェストファイルが出力されます。これがログファイル検証で使われるファイルです。
手順4: ライフサイクルルールを作成する
S3コンソールでバケットの「管理」タブを開き、「ライフサイクルルールを作成する」をクリックします。
以下を設定します。
- ライフサイクルルール名:
archive-after-180-days - ルールスコープ:
バケット内のすべてのオブジェクトに適用 - ライフサイクルルールのアクション:
ストレージクラス間でオブジェクトの現行バージョンを移行するにチェック
チェックを入れると確認のチェックボックスが現れるので、「このルールがバケット内のすべてのオブジェクトに適用されることを了承します」にチェックを入れます。
移行の設定で以下を指定します。
- ストレージクラスの移行を選択:
Glacier Deep Archive - オブジェクト作成後の日数:
180
「移行についてはリクエストごとに課金されます」の下にある「私は、このライフサイクルルールでは、リクエストごとに移行コストが発生することを了承します。」にもチェックを入れます。この2つにチェックを入れないと「ルールの作成」で先に進めません。
「ルールの作成」をクリックします。
手順5: ルールが有効になったことを確認する
「管理」タブのライフサイクルルール一覧で、archive-after-180-days のステータスが Enabled になっていることを確認します(この列だけ英語のまま表示されます)。「最新バージョンのアクション」に Glacier Deep Archive と出ていれば、移行先が正しく設定されています。ルールを開くと、移行のタイミングも確認できます。
> [!NOTE] > ライフサイクルによる移行は日次で評価され、指定日数を過ぎたオブジェクトが順次移行されます。作成直後に結果を確認することはできません。Glacier Deep Archiveは最低保存期間が180日のため、移行後すぐに削除すると残り期間ぶんが課金されます。
手順6: ログファイル検証を実行する
AWS CloudShellを開き、証跡のARNを指定して検証を実行します。開始時刻には証跡を作成した時刻より後を指定します。
TRAIL_ARN=$(aws cloudtrail describe-trails \
--query "trailList[?Name=='audit-trail-lab'].TrailARN" --output text)
aws cloudtrail validate-logs \
--trail-arn "$TRAIL_ARN" \
--start-time "$(date -u -d '2 hours ago' +%Y-%m-%dT%H:%M:%SZ)"
検証の対象になった期間と、検証できたファイル数が表示されます。
Validating log files for trail arn:aws:cloudtrail:ap-northeast-1:<アカウントID>:trail/audit-trail-lab between ... and ...
Results requested for 2026-09-12T05:33:59Z to 2026-09-12T07:34:00Z
Results found for 2026-09-12T06:06:49Z to 2026-09-12T07:06:49Z:
1/1 digest files valid
Results requested が指定した期間、Results found が実際にダイジェストが存在した期間です。digest files valid の分母と分子が一致していれば、その期間のダイジェストは署名どおりで改ざんされていません。ダイジェストが参照するログファイルも検証対象になった場合は、N/N log files valid の行が続けて表示されます。改ざんが検出された場合のみエラーが報告されます。
> [!NOTE] > ダイジェストファイルは1時間ごとに出力されるため、証跡の作成直後は検証できるファイルがありません。「ダイジェストファイルが見つからない」と表示された場合は、1時間ほど待ってから実行します。