AWS CloudTrailはAWSの操作(正確にはAPIコールの呼び出し)を記録するサービスです。誰がどのような操作をしたのかを追うことができるため、監査に役立ちます。
AWSを本格的に利用しているところでは、用途に応じてAWSアカウントを複数作成しているケースが多いかと思います。複数AWSアカウントそれぞれに対してCloudTrailを有効化して操作ログを収集しているのですが、アカウントまたいで検索したい場合があります。本記事は複数AWSアカウントのCloudTrailログファイルを一つのS3バケットに集約する方法を紹介します。
構成
- アカウントA (AWSアカウントID: 111111111111)
- CloudTrailの証跡を作成するAWSアカウント
- アカウントB (AWSアカウントID: 222222222222)
- CloudTrailの証跡を作成するAWSアカウント
- アカウントC (AWSアカウントID: 333333333333)
- CloudTrailログファイルを保存先S3バケットを所有しているAWSアカウント
- S3バケットのリージョン: 東京(ap-northeast-1)
図にすると以下のようになります。
S3バケットの作成
アカウントCで作業します。S3バケット名を cloudtrail-aggregate-test
とします。
S3バケットポリシーを以下のようにします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AWSCloudTrailAclCheck20150319",
"Effect": "Allow",
"Principal": {
"Service": "cloudtrail.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::cloudtrail-aggregate-test"
},
{
"Sid": "AWSCloudTrailWrite20150319",
"Effect": "Allow",
"Principal": {
"Service": "cloudtrail.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::cloudtrail-aggregate-test/AWSLogs/111111111111/*",
"arn:aws:s3:::cloudtrail-aggregate-test/AWSLogs/222222222222/*",
"arn:aws:s3:::cloudtrail-aggregate-test/AWSLogs/333333333333/*"
],
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
CloudTrailの証跡の作成
アカウントA、B、Cで作業します。
「ストレージの場所」の設定箇所で、「新しいS3バケットの作成」は「いいえ」、「S3バケット」は先ほど作成したS3バケット名を入力してください。
確認
アカウントCにある、cloudtrail-aggregate-test
に以下のようなファイルが置かれていればOKです。
AWSLogs以下にアカウントID毎にパスが別れており、
s3://cloudtrail-aggregate-test
└── AWSLogs
├── 111111111111
│ └── CloudTrail
│ ├── ap-northeast-1/YYYY/MM/DD/111111111111_CloudTrail_ap-northeast-1_YYYYMMDDTxxxxxx
│ └── ....
├── 222222222222
│ └── CloudTrail
│ ├── ap-northeast-1/YYYY/MM/DD/111111111111_CloudTrail_ap-northeast-1_YYYYMMDDTxxxxxx
│ └── ....
└── 333333333333
└── CloudTrail
├── ap-northeast-1/YYYY/MM/DD/111111111111_CloudTrail_ap-northeast-1_YYYYMMDDTxxxxxx
└── ....
CloudTrailの設定後、cloudtrail-aggregate-test にログファイルが蓄積されれば完了です。