📕
【初心者向け】AWS CloudTrail 管理イベントをS3バケット(SSE-KMS)に保存する
はじめに
本ページは個人の勉強で使用することを目的に作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報についてはAWS公式ドキュメントをご参照ください。
やること
- CloudTrailで管理イベントの証跡を作成し、S3バケットに保存する。
- S3バケットはKMS CMKキーで暗号化する。
1. KMS CMKの作成
- KMSカスタマーマネージドキーを作成します。
- エイリアス:
/mori/kms - キーのタイプ:
対称 - キーの仕様:
SYMMETRIC_DEFAULT - キーの使用法:
暗号化および復号化 - オリジン:
AWS KMS - リージョンごと:
単一リージョンキー
- 作成したCMKのキーポリシーに以下のステートメント追加します。
{
"Sid": "Allow CloudTrail to encrypt logs",
"Effect": "Allow",
"Principal": {
"Service": "cloudtrail.amazonaws.com"
},
"Action": "kms:GenerateDataKey*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:SourceArn": "${CloudTrail証跡名}"
},
"StringLike": {
"kms:EncryptionContext:aws:cloudtrail:arn": "arn:aws:cloudtrail:*:${アカウントID}:trail/*"
}
}
}
2. S3バケットの作成
- CloudTrail管理イベント保存用のS3バケットを作成します。
- バケットタイプ:
汎用バケット - バケット名:
mori-s3-cloudtrail-management-event - タグ - オプション:
未設定 - デフォルトの暗号化
- 暗号化タイプ:
AWS Key Management Service キーを使用したサーバー側の暗号化 (SSE-KMS) - AWS KMSキー:
/mori/kms - バケットキー:有効にする
- 暗号化タイプ:
- バケットポリシーが未設定となっている事を確認します。
3. CloudTrail証跡の作成
- CloudTrailコンソールから証跡の作成をクリックします。
- 証跡属性の設定画面で以下の設定値を入力し、次へをクリックします。
- 全般的な詳細
- 証跡名:
mori-cloudtrail-management-event - ストレージの場所:
既存のS3バケットを使用する - 証跡ログバケット名:
mori-s3-cloudtrail-management-event - プレフィックス - オプション:
未記入 - ログファイルの SSE-KMS 暗号化:
有効 - カスタマー管理の AWS KMS キー:
/mori/kms - その他の設定
- ログファイルの検証:
有効 - SNS通知の検証:
無効
- ログファイルの検証:
- 証跡名:
- CloudWatch Logs - オプション
- CloudWatch Logs:
無効
- CloudWatch Logs:
- タグ - オプション:
未設定


- ログイベントの選択の設定画面で以下の選択値を入力し、次へをクリックします。
- イベント
- イベントタイプ:
管理イベント
- イベントタイプ:
- 管理イベント
- APIアクティビティ
- 読み取り:
選択 - 書き込み:
選択 - AWS KMS イベントの除外:
未選択 - Amazon RDS のデータ API イベントを除外:
未選択
- 読み取り:
- APIアクティビティ

-
確認と作成の画面で証跡の作成をクリックする。
4. S3バケットの内容確認
- S3コンソールからS3バケット
mori-s3-cloudtrail-management-eventに移動します。 - CloudTrail管理イベントの証跡が配信されています。
- S3バケット
mori-s3-cloudtrail-management-eventのアクセス許可タブをクリックします。 - バケットポリシーが自動的に更新されています。

バケットポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AWSCloudTrailAclCheck20150319-459577f5-b4a6-4e5f-82ca-4ca6ed3d6840",
"Effect": "Allow",
"Principal": {
"Service": "cloudtrail.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::mori-s3-cloudtrail-management-event",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "${CloudTrail証跡名}"
}
}
},
{
"Sid": "AWSCloudTrailWrite20150319-664cdffa-a0a0-4e6b-ba04-3bec10f6e83b",
"Effect": "Allow",
"Principal": {
"Service": "cloudtrail.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::mori-s3-cloudtrail-management-event/AWSLogs/${アカウントID}/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "${CloudTrail証跡名}",
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
バケットポリシーについて
- CloudTrail証跡mori-cloudtrail-management-eventからバケットACL読み取りを許可。
- CloudTrail証跡mori-cloudtrail-management-eventからバケットへの書き込みを許可し、オブジェクト所有権をバケット所有者にする。
おわりに
- CloudTrailでは90日間以上イベントを保持せず、それ以上の期間保存する場合はS3バケットに保存する必要があります。
- CloudTrail証跡のS3への配信を有効化しているがアクセスが失敗する場合、CloudTrailは30日間配信を試みるので注意です。
参考
- CloudTrailからS3バケット(SSE-KMS)にログを配信する際のKMSキーポリシー
- CloudTrail証跡のログファイル名について
Discussion