本日も乙

ただの自己満足な備忘録。

複数AWSアカウントのCloudTrailログファイルを一つのS3バケットに集約する

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)

図にすると以下のようになります。

https://contents.blog.jicoman.info/2018/04/cloudtrail-aggregation-architecture-1.png

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バケット名を入力してください。

https://contents.blog.jicoman.info/2018/04/cloudtrail_setting.png

確認

アカウント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 にログファイルが蓄積されれば完了です。

参考