のぴぴのメモ

自分用のLinuxとかの技術メモ

CloudTrailの「組織の証跡」でOrganizationsメンバアカウントに一括CloudTrailを設定する手順 (ロギング専用アカウント+KMS暗号化)

はじめに

AWS Oraganizationsを利用したマルチアカウント構成で、Oraganizationsの配下のAWSアカウントに共通のCloudTrail設定を行うことができる「組織の証跡」が CloudTrailにあります。ドキュメントは以下になりますが、logging専用のAWSアカウントのS3バケットを利用してかつKMSによる暗号化と組み合わせたやり方の情報がなかったので試行錯誤の結果をまとめました。
docs.aws.amazon.com

構成の説明

f:id:nopipi:20190308003130p:plain
組織の証跡の設定概要

  • 設定のポイント
    • CloudTrailのログは、ロギングアカウントのS3バケットに保存します。
    • またS3保管時にKMSによる暗号化を行います。
    • KMSの鍵はロギングアカウントで管理します。
  • アカウントとOrganizations構成
    • マスターアカウント:111111111111
    • リリースアカウント:222222222222
    • ロギングアカウント:333333333333
    • OrganizationsのID: o-yyyyyyyyyy
  • S3バケットとKMSか
  • 設定時の権限
    • 今回は、AdministratorAccessポリシーが付与されている環境で作業しています

設定手順

ロギングアカウント(S3とKMSの作成)

S3バケットの準備

S3バケットを作成します。CloudTrail設定で最も重要なバケットポリシーには、以下の設定を行います。

  • 1つめ: CloudTrailサービスからのバケットACL変更を許可する
  • 2つめ:マスターアカウントの証跡書き込みを許可する
  • 3つめ: 「組織の証跡」を許可する
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AWSCloudTrailAclCheck20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::trailbucket"
        },
        {
            "Sid": "AWSCloudTrailWrite20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::trailbucket/AWSLogs/111111111111/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": "AWSCloudTrailWrite20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::trailbucket/AWSLogs/o-yyyyyyyyyy/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

ドキュメントでは設定は以下に説明があります。
docs.aws.amazon.com

KMSの準備

CloudTrailがS3にPUTするときの暗号化に利用するKMSのカスタマーマスターキー(CMK) を作成します。
カスタマーポリシーは、今回はCloudTrailの書き込みに必要な最低限のポリシーを付与しています。

{
    "Version": "2012-10-17",
    "Id": "Key policy created by CloudTrail",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:sts::333333333333:assumed-role/OrganizationAccountAccessRole/admin",
                    "arn:aws:iam::333333333333:root"
                ]
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow CloudTrail to encrypt logs",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "kms:GenerateDataKey*",
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:EncryptionContext:aws:cloudtrail:arn": "arn:aws:cloudtrail:*:111111111111:trail/*"
                }
            }
        },
        {
            "Sid": "Allow CloudTrail to describe key",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "kms:DescribeKey",
            "Resource": "*"
        }
    ]
}

マスターアカウント(CloudTrailの設定)

マスターアカウントのCloudTrailに移動し、「監査情報」から「証跡の作成」を実行します。

  • ポイント
    • 「組織に証跡を適用」を「はい」とすると、「組織の証跡」が作成されます
    • 「証跡情報を全てのリージョンに適用」を「はい」にして全リージョンに設定を適用します

f:id:nopipi:20190308010258p:plain:w550

  • 出力先S3バケット設定
    • バケット名:「新しいバケットを作成する」を「いいえ」にし、バケット名を入力する
    • KMS暗号化
      • 「SSE-KMS を使用してログファイルを暗号化」を「はい」にし、
      • 「新規の KMS キーの作成」を「いいえ」にして、
      • ロギングアカウントで作成したCMKのARNを入力する

f:id:nopipi:20190308011020p:plain:w550

  • メモ
    • 作成した証跡はメンバーアカウントでは削除できません
    • マスターアカウントで証跡を削除するとメンバーアカウントの証跡も削除されます
    • 証跡作成時に、S3バケットポリシーの権限が不足していてもマネコン上では「KMSの権限不足」と表示されるようです(私はそれでハマりました)

完了

作成に成功してしばらく経つと、各メンバーアカウント状に同じ設定のCloudTrail設定が作成されます。
今回の例の場合、指定したS3バケットには以下のような構成でCloudTrailのログが出力されます。

trailbucket
└ AWSLogs
  ├ 111111111111
  │ ├ CloudTrail-Digest
  │ └ CloudTrail
  └ o-yyyyyyyyyy
    ├ 111111111111
    │ ├ CloudTrail-Digest
    │ └ CloudTrail
    ├ 222222222222
    │ ├ CloudTrail-Digest
    │ └ CloudTrail
    └ 333333333333
      ├ CloudTrail-Digest
      └ CloudTrail