📕

【初心者向け】AWS CloudTrail 管理イベントをS3バケット(SSE-KMS)に保存する

2024/08/24に公開

はじめに

本ページは個人の勉強で使用することを目的に作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報についてはAWS公式ドキュメントをご参照ください。

やること

  • CloudTrailで管理イベントの証跡を作成し、S3バケットに保存する。
  • S3バケットはKMS CMKキーで暗号化する。

1. KMS CMKの作成

  1. KMSカスタマーマネージドキーを作成します。
  • エイリアス:/mori/kms
  • キーのタイプ:対称
  • キーの仕様:SYMMETRIC_DEFAULT
  • キーの使用法:暗号化および復号化
  • オリジン:AWS KMS
  • リージョンごと:単一リージョンキー
  1. 作成した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バケットの作成

  1. CloudTrail管理イベント保存用のS3バケットを作成します。
  • バケットタイプ:汎用バケット
  • バケット名:mori-s3-cloudtrail-management-event
  • タグ - オプション:未設定
  • デフォルトの暗号化
    • 暗号化タイプ:AWS Key Management Service キーを使用したサーバー側の暗号化 (SSE-KMS)
    • AWS KMSキー:/mori/kms
    • バケットキー:有効にする
  1. バケットポリシーが未設定となっている事を確認します。

3. CloudTrail証跡の作成

  1. CloudTrailコンソールから証跡の作成をクリックします。
  2. 証跡属性の設定画面で以下の設定値を入力し、次へをクリックします。
  • 全般的な詳細
    • 証跡名:mori-cloudtrail-management-event
    • ストレージの場所:既存のS3バケットを使用する
    • 証跡ログバケット名:mori-s3-cloudtrail-management-event
    • プレフィックス - オプション:未記入
    • ログファイルの SSE-KMS 暗号化:有効
    • カスタマー管理の AWS KMS キー:/mori/kms
    • その他の設定
      • ログファイルの検証:有効
      • SNS通知の検証:無効
  • CloudWatch Logs - オプション
    • CloudWatch Logs:無効
  • タグ - オプション:未設定


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

  1. 確認と作成の画面で証跡の作成をクリックする。

4. S3バケットの内容確認

  1. S3コンソールからS3バケットmori-s3-cloudtrail-management-eventに移動します。
  2. CloudTrail管理イベントの証跡が配信されています。


  1. S3バケットmori-s3-cloudtrail-management-eventのアクセス許可タブをクリックします。
  2. バケットポリシーが自動的に更新されています。


バケットポリシー

{
    "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日間配信を試みるので注意です。

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/get-and-view-cloudtrail-log-files.html

参考

  • CloudTrailからS3バケット(SSE-KMS)にログを配信する際のKMSキーポリシー

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/create-kms-key-policy-for-cloudtrail.html

  • CloudTrail証跡のログファイル名について

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-log-file-examples.html

Discussion