📕
【初心者向け】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