はじめに
AWS Oraganizationsを利用したマルチアカウント構成で、Oraganizationsの配下のAWSアカウントに共通のCloudTrail設定を行うことができる「組織の証跡」が CloudTrailにあります。ドキュメントは以下になりますが、logging専用のAWSアカウントのS3バケットを利用してかつKMSによる暗号化と組み合わせたやり方の情報がなかったので試行錯誤の結果をまとめました。
docs.aws.amazon.com
構成の説明
- 設定のポイント
- CloudTrailのログは、ロギングアカウントのS3バケットに保存します。
- またS3保管時にKMSによる暗号化を行います。
- KMSの鍵はロギングアカウントで管理します。
- アカウントとOrganizations構成
- マスターアカウント:111111111111
- リリースアカウント:222222222222
- ロギングアカウント:333333333333
- OrganizationsのID: o-yyyyyyyyyy
- S3バケットとKMSか
- バケット名称: trailbucket
- KMS鍵: logging-CMK
- 設定時の権限
- 今回は、AdministratorAccessポリシーが付与されている環境で作業しています
設定手順
ロギングアカウント(S3とKMSの作成)
S3バケットの準備
S3バケットを作成します。CloudTrail設定で最も重要なバケットポリシーには、以下の設定を行います。
{ "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の書き込みに必要な最低限のポリシーを付与しています。
- 1つめ:このCMKの管理用
- 2つめ:CloudTrailへのKMSを利用した暗号化権限の付与
- 3つめ:CloudTrail での CMK プロパティの記述の有効化 - AWS 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に移動し、「監査情報」から「証跡の作成」を実行します。
- ポイント
- 「組織に証跡を適用」を「はい」とすると、「組織の証跡」が作成されます
- 「証跡情報を全てのリージョンに適用」を「はい」にして全リージョンに設定を適用します
- 出力先S3バケット設定
- メモ
- 作成した証跡はメンバーアカウントでは削除できません
- マスターアカウントで証跡を削除するとメンバーアカウントの証跡も削除されます
- 証跡作成時に、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