🎃

AWS Organizationsの組織で証跡ログを収集しログ保存用アカウントのS3に収集してみた

2024/02/09に公開

はじめに

こんにちは!みゃっちーです。🦔

最近こちらの「AWS個人検証アカウントどう運用してる?ランチ共有会」を見ていた影響で個人の検証環境をマルチアカウント環境にしていろいろ触ってます。
https://jawsug.connpass.com/event/308155/?utm_campaign=event_participate_to_follower&utm_source=notifications&utm_medium=twitter

今回作るもの

現在自分の環境ではこのような感じでorganizationsを設定して、アカウント管理をしています。
※まだどんなアカウント管理の構成がいいのか全然定まっていないです。

この管理アカウントで組織のCloudTrailを設定し、ログ保存OU内にあるアカウントのS3バケットに保存します。

やってみた

1.組織でのCloudtrailの許可(管理アカウント)

organaizationsのサービスでCloudTrailの使用を許可します。

2.ログ保存用S3を作成(ログ保存アカウント)

今回はこんな感じで設定。

  • バケットタイプ: 汎用
  • オブジェクト所有者: ACL無効
  • バケットのブロックパブリックアクセス設定: パブリックアクセスをすべてブロック
  • バージョニング: 無効

3.バケットポリシーの設定(ログ保存アカウント)

管理アカウントのCloudTrailからのアクセスを許可し、取得した組織の証跡を保存するためのバケットポリシーはこちらのドキュメントのものを参考にしました。使用する場合は{}のパラメータを差し替えてください。
https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/create-s3-bucket-policy-for-cloudtrail.html

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AWSCloudTrailAclCheck20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::{S3バケット名}",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:cloudtrail:{CloudTrailを起動するリージョン}:{管理アカウントID}:trail/{CloudTrailの名前}"
                }
            }
        },
        {
            "Sid": "AWSCloudTrailWrite20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::{S3バケット名}/AWSLogs/{管理アカウントID}/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:cloudtrail:{CloudTrailを起動するリージョン}:{管理アカウントID}:trail/{CloudTrailの名前}",
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": "AWSCloudTrailOrganizationWrite20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::{S3バケット名}/AWSLogs/{組織のID}/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:cloudtrail:{CloudTrailを起動するリージョン}:{管理アカウントID}:trail/{CloudTrailの名前}",
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

なお、、管理アカウント、組織のIDはOrganizationsのダッシュボードから確認することができます。

4.ライフサイクルルールの設定(ログ保存アカウント)

保存するログの保存ルールを設定します。
あくまで個人の検証環境なので自分は30日で削除されるように設定しました。

5.CloudTrailの設定(管理アカウント)

特に注意すべき設定項目は下記の通りです。

  • 証跡名: 証跡名にはS3バケットのIAMに登録した{CloudTrailの名前}を設定
  • 組織内のすべてのアカウントについて有効化: 有効化
  • ストレージの場所: 既存のストレージを使用
  • 証跡ログバケット名: 設定したS3のバケット名を入力

その他証跡を集めるうえで必要な設定はこちらに書いてます。
https://zenn.dev/devcamp/articles/5fdc895633aaed

確認

以上の設定を行うと、このようにアカウントごとにログが収集されます。

さいごに

読んでいただきありがとうございました!

個人の検証環境をマルチアカウントしたほうがいいのか迷っていたのですが、マルチアカウントにしたからこそ検証してみたいことがたくさん出てきたのでしてよかったと思いました。

Discussion