はじめに
AWS Organizationsを使わない場合、CloudTrailのログファイルを他アカウントのS3バケットに集約するやり方を確認したので備忘録として残したいと思います。
注意事項
各設定値に関しては状況によって適切な値をご設定いただくようにお願いいたします。
集約方法
- CloudTrailのログファイル配信先バケットが配置されるアカウントでCloudTrailを有効化する。
- 配信先S3バケットのポリシーを更新する。
- 配信元アカウントでCloudTrailを有効化する。その際に、1.で指定したログファイル配信先バケットを使用するように設定する。
イメージ図
実装
配信先でCloudTrailを有効化
ログ集約アカウント(アカウントID:111111111111)でCloudTrailを有効化します。
1.CloudTrailをコンソール上で開き、[証跡の作成]をクリックします。
2.証跡名ストレージの場所、ログファイルの検証、SNS通知の配信を入力します。
今回はSNS通知をオフに設定しました。
3.ログイベント、APIアクティビティを選択し、[次へ]をクリックします。
※今回は管理イベントを選択しました。データイベントを選択すると追加料金がかかるようです。
データイベントのログ記録には追加料金が適用されます。
参考:CloudTrail のデータイベントと管理イベントの違いは何ですか。
配信先S3バケットのポリシーを更新
S3バケットのポリシーを更新することで、他アカウントのCloudTrailにログファイルを配信することを許可します。
配信先バケットの場所が分からなくなってしまったので1,2の手順を踏んでいますが、配信先バケット名を把握していればS3からアクセス可能です。
上記で作成したCloudTrailのダッシュボードから作成した証跡をクリックします。
2.証跡ログの場所から配信先バケットを確認し、クリックする。
4.バケットポリシーの[編集]をクリックします。
5.バケットポリシーを変更します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AWSCloudTrailAclCheck20131101",
"Effect": "Allow",
"Principal": {
"Service": "cloudtrail.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::S3バケット名"
},
{
"Sid": "AWSCloudTrailWrite20131101",
"Effect": "Allow",
"Principal": {
"Service": "cloudtrail.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::S3バケット名/プレフィックス/AWSLogs/111111111111/*",
"arn:aws:s3:::S3バケット名/プレフィックス/AWSLogs/222222222222/*"
],
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control",
"aws:SourceArn": [
"arn:aws:cloudtrail:リージョン:111111111111:trail/management-events",
"arn:aws:cloudtrail:リージョン:222222222222:trail/management-events"
]
}
}
},
]
}
配信元アカウントでCloudTrailを有効化
配信元アカウント(アカウントID:222222222222)でCloudTrailを有効化します。
1.[証跡の作成]をクリックし、先ほどと同様に入力します。
ただし、今回は[既存のS3バケットを使用する]を選択し、証跡ログバケット名に先ほど作成したS3バケット名を入力します。
2.こちらも先ほどと同様に入力して[次へ]をクリックしていき、[証跡の作成]をクリックします。
まとめ
今回はCloudTrailを集約する方法を確認しました。
途中のバケットポリシー設定でつまづいてしまったので、
今後はしっかり手を動かしていきたいと思います。