📑

【初心者向け】AWS CloudTrailの管理イベントをKMSで暗号化されたCoudWatch Logsへ送信

2024/08/25に公開

はじめに

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

やること

  • AWS CloudTrailの管理イベントをCloudWatch Logs(KMS CMK暗号化) へ送信する。
  • 複数リージョンのConsoleLoginイベントが配信される事を確認する。

前提条件

  • CloudTrailの管理イベントの証跡を作成済みであること。
  • KMSカスタマーマネージドキーを作成済みであること。

1. KMSキーポリシーの修正

  1. KMSカスタマーマネージドキーのキーポリシーに以下のステートメントを追加します。
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.region.amazonaws.com"
            },
            "Action": [
                "kms:Encrypt*",
                "kms:Decrypt*",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:Describe*"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "kms:EncryptionContext:aws:logs:arn": "${ロググループ名}"
                }
            }
        }    

参考:https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html


2. CloudTrail用のIAMロールの作成

  1. CloudTrailコンソールのナビゲーションペインからダッシュボードをクリックします。
  2. 作成済みの証跡の管理画面に移動し、CloudWatch Logs編集をクリックします。

  1. CloudWatch Logs - オプションの設定画面で以下の設定値を入力し、変更の保存をクリックします。
  • CloudWatch Logs:有効
  • ロググループ:新規
  • ロググループ名:/aws/cloudtrail/management-event
  • IAMロール:新規
  • ロール名:mori-role-cloudtrail-management-event


  1. 以下のIAMロールが自動生成されます。
  • ロール名:mori-role-cloudtrail-management-event

ロールの信頼ポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}


  • ポリシー名:Cloudtrail-CW-access-policy-mori-cloudtrail-management-event-77992e95-c167-4d1c-a9a1-86d337ad3060 ※自動生成されたポリシー名

許可ポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AWSCloudTrailCreateLogStream2014110",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream"
            ],
            "Resource": [
                "${ログストリーム名}*"
            ]
        },
        {
            "Sid": "AWSCloudTrailPutLogEvents20141101",
            "Effect": "Allow",
            "Action": [
                "logs:PutLogEvents"
            ],
            "Resource": [
                "${ログストリーム名}*"
            ]
        }
    ]
}

ポリシーについて

  • ログストリーム名は以下の形式になります。

${アカウントID}_CloudTrail_${証跡を作成したリージョン名}

参考:https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudwatch-log-group-log-stream-naming-for-cloudtrail.html


3. 複数リージョンのCloudTrailログが配信される事を確認する

  1. AWSアカウントからサインアウトし、以下のURLからサインインします。
https://${アカウントエイリアス}.signin.aws.amazon.com/console?region=ap-northeast-1

※ap-northeast-1:東京リージョン


  1. AWSアカウントからサインアウトし、以下のURLからサインインする。
https://${アカウントエイリアス}.signin.aws.amazon.com/console?region=ap-northeast-3

※ap-northeast-3:大阪リージョン


  1. CloudWatchロググループ/aws/cloudtrail/management-eventのログストリームタブからすべてのログストリームを検索をクリックします。


  1. ログイベント画面の入力欄に下記を入力し、Enterキーをクリックします。
{ $.eventName = "ConsoleLogin" }



  1. 東京リージョン・大阪リージョンのサインインイベントがJSONで出力されています。

東京リージョン(ap-northeast-1)のサインインイベント


大阪リージョン(ap-northeast-3)のサインインイベント

おわりに

  • ConsoleLoginなど、複数リージョンにわたるイベントを検索するのに有効です。ただし高コストなので 「リアルタイムでイベントを検知したい」 などの要件が無い場合はやめておいた方がよいかも知れません。

https://zenn.dev/smori/articles/1256fcf835e641

  • 次回はCloudTrailのログをDataFirehoseでS3に配信する方法を記事にしたいと思います。

参考

  • CloudTrailログをCloudWatch Logsへ配信

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html

  • CloudWatch のロググループとログストリームの命名

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudwatch-log-group-log-stream-naming-for-cloudtrail.html

  • CloudWatch Logsの検索フィルターパターン

https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html#matching-terms-events

Discussion