mynavi_aws_organizations

はじめに

この回では、AWS CloudTrailをAWS Organizationsと連携させるときの初期セットアップ手順について説明します。
AWS CloudTrailはAWS Organizationsと連携させることで組織の証跡と呼ばれるAWS Organizations配下のすべてのAWSアカウントのイベントを記録する証跡を作ることができます。
この組織の証跡のセットアップ手順について紹介します。

想定する構成

本記事では実案件でよくあるマルチアカウント構成でのセットアップ手順を紹介します。具体的には下図のようにセキュリティアカウントとログアーカイブアカウントを用意します。 Architecutre

案件によってはセキュリティアカウントとログアーカイブアカウントを同一のAWSアカウントとする場合もありますので、ご自身の案件の状況に応じて適宜読み替えていただければと思います。

委任管理者アカウントの設定

前回の記事でも紹介しましたが、CloudTrailで委任管理者をサポートしましたので、まずは委任管理者アカウントの設定を行います。

  1. 委任管理者アカウントの設定は、管理アカウントでのみ実施が可能ですので、まず管理アカウントにログインを行い、CloudTrailの画面を開きます。
  2. サイドメニューから「設定」をクリックします。 CloudTrail1
  3. 「管理者を登録」ボタンをクリックし、ポップアップ画面で委任管理者として設定するAWSアカウントIDを入力します。 CloudTrail2

ログアーカイブアカウントの設定

CloudTrailの設定前に、Cloudtrailの証跡を保管するためのS3バケットを用意する必要がありますので、ログアーカイブアカウントにてその設定を行います。

  1. 組織の証跡用のS3バケットの作成を行います。付与すべきバケットポリシーは公式ドキュメントに記載がありますので、記載の通りの設定を行います。
    公式ドキュメントのバケットポリシーはわかりにくいところがありますので、少し補足をします。
    {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Sid": "AWSCloudTrailAclCheck20150319",
             "Effect": "Allow",
             "Principal": {
                 "Service": [
                     "cloudtrail.amazonaws.com"
                 ]
             },
             "Action": "s3:GetBucketAcl",
             "Resource": "arn:aws:s3:::myOrganizationBucket"※1,
             "Condition": {
                 "StringEquals": {
                     "aws:SourceArn": "arn:aws:cloudtrail:region:111111111111:trail/trailName"※2
                 }
             }
         },
         {
             "Sid": "AWSCloudTrailWrite20150319"※3,
             "Effect": "Allow",
             "Principal": {
                 "Service": [
                     "cloudtrail.amazonaws.com"
                 ]
             },
             "Action": "s3:PutObject",
             "Resource": "arn:aws:s3:::myOrganizationBucket/AWSLogs/111111111111/*",
             "Condition": {
                 "StringEquals": {
                     "s3:x-amz-acl": "bucket-owner-full-control",
                     "aws:SourceArn": "arn:aws:cloudtrail:region:111111111111:trail/trailName"
                 }
             }
         },
         {
             "Sid": "AWSCloudTrailOrganizationWrite20150319",
             "Effect": "Allow",
             "Principal": {
                 "Service": [
                     "cloudtrail.amazonaws.com"
                 ]
             },
             "Action": "s3:PutObject",
             "Resource": "arn:aws:s3:::myOrganizationBucket/AWSLogs/o-exampleorgid/*"※4,
             "Condition": {
                 "StringEquals": {
                     "s3:x-amz-acl": "bucket-owner-full-control",
                     "aws:SourceArn": "arn:aws:cloudtrail:region:111111111111:trail/trailName"
                 }
             }
         }
     ]
    }
    

※1 Resourceに指定している「myOrganizationBucket」は、今回作成するS3バケット名を指定してください
※2 記載例の「111111111111」は 管理アカウントのAWSアカウントID です。セキュリティアカウントのAWSアカウントIDではないのでご注意ください
※3 組織の証跡の場合、このブロックの記載は必須ではありません
※4 組織の証跡は「{バケット名}/AWSLogs/{組織ID}/{管理アカウントのAWSアカウントID}/{メンバーアカウントのAWSアカウントID}」という名前で保管されます。組織IDは管理アカウントで確認可能ですので、事前に確認しておきましょう。

セキュリティアカウントの設定

KMSの設定

CloudTrailの設定を行う前に、KMSにて顧客管理キー(CMK)を作成します。組織の証跡作成時にCMKを新規作成することも可能ですが、今回は事前にCMKを作成し、そのCMKを指定するという流れでのセットアップを紹介します。

  1. CloudTrailの証跡イベントを暗号化するためのCMKの作成を行います。キーポリシーは下記が必要最低限となります。案件状況に応じて適宜権限の追加をご検討ください。
    Conditionで指定するCloudTrailのARNに注意が必要です。前述のS3バケットでも記載した通り、指定するARNのアカウントIDは 管理アカウントのAWSアカウントID です。セキュリティアカウントのAWSアカウントIDではありません。
    {
     "Version": "2012-10-17",
     "Id": "Key policy for CloudTrail",
     "Statement": [
         {
             "Sid": "Enable IAM User Permissions For Security Account",
             "Effect": "Allow",
             "Principal": {
                 "AWS": [
                     "arn:aws:iam::セキュリティアカウントのID:root"
                 ]
             },
             "Action": "kms:*",
             "Resource": "*"
         },
         {
             "Sid": "Enable IAM User Permissions For Log Archive Account",
             "Effect": "Allow",
             "Principal": {
                 "AWS": [
                     "arn:aws:iam::ログアーカイブアカウントのID:root"
                 ]
             },
             "Action": "kms:Decrypt",
             "Resource": "*"
         },
         {
             "Sid": "Allow CloudTrail to encrypt logs",
             "Effect": "Allow",
             "Principal": {
                 "Service": "cloudtrail.amazonaws.com"
             },
             "Action": [
                 "kms:Decrypt",
                 "kms:GenerateDataKey*"
             ],
             "Resource": "*",
             "Condition": {
                 "StringLike": {
                     "kms:EncryptionContext:aws:cloudtrail:arn": [
                         "arn:aws:cloudtrail:ap-northeast-1:管理アカウントのID:trail/作成するCloudTrailの名前"
                     ]
                 }
             }
         },
         {
             "Sid": "Allow CloudTrail to describe key",
             "Effect": "Allow",
             "Principal": {
                 "Service": "cloudtrail.amazonaws.com"
             },
             "Action": "kms:DescribeKey",
             "Resource": "*",
             "Condition": {
                 "StringEquals": {
                     "aws:SourceArn": "arn:aws:cloudtrail:ap-northeast-1:管理アカウントのID:trail/作成するCloudTrailの名前"
                 }
             }
         }
     ]
    }
    

CloudTrailの設定

最後にCloudTrailの設定を行います。本操作はセキュリティアカウントで行います。

  1. CloudTrailのメニューで「証跡の作成」ボタンをクリックします CloudTrail3
  2. S3バケットとしてログアーカイブアカウントのS3バケットを指定し、暗号化キーとしてセキュリティアカウントのCMKを指定し、「次へ」をクリックします。 CloudTrail4
  3. 記録するログイベントの設定を行います。下記画像ではデータイベントやInsightsイベントにチェックを入れておりませんが、以下の記事を参考に必要に応じて設定を検討ください。
  4. 確認画面で「証跡の作成」をクリックし、完了します。

課題となりやすいポイント

最後にCloudtrailをOrganizationsと連携させるにあたり、課題となりやすい個所について紹介します。

  1. 複数のアカウントをまたがった操作が多いため、どこで何をすれば良いかがわかりにくいかと思いますので、本記事を参考に手順の確認をいただければと思います
  2. 組織の証跡は特定のAWSアカウントを対象外にすることができないため、Organizations内に既存のAWSアカウントがいる場合、既存のAWSアカウントでは既存の証跡に加えて、組織の証跡が作成され、二重で証跡が取得されることになります。コストや管理面で問題となりますのでご注意ください。既存の証跡は過去ログがあり、削除することも難しいかと思いますので、できるだけ既存のAWSアカウントがいない新規のOrganizationsの環境で組織の証跡をご利用いただくことをおすすめします。
  3. 上述の課題に関連しますが、管理アカウントのログも対象外にすることができないため、今回のような構成ですとログアーカイブアカウントに管理アカウントのログも集約されます。管理アカウント内の操作ログは見られたくないといった場合もあるかと思いますので、そうした場合の利用はご注意いただければと思います。
  4. CloudTrail Lakeと併用する場合に、今回のように委任管理者アカウントを利用できないケースがあります。公式ドキュメントにも記載がありますが、CloudTrail Lakeのイベントストアを作成するのオプションとしてイベントデータストアのコピーは委任管理者では対応していません。そのためCloudTrail Lakeの利用時には注意が必要です。
    証跡イベントを組織のイベントデータストアにコピーするには、組織の管理アカウントを使用する必要があります。組織の委任された管理者アカウントを使用して、証跡イベントをコピーすることはできません。
    

    まとめ

    今回は、CloudTrailの組織の証跡の作成ステップや組織の証跡を利用時に課題となりやすいポイントについても紹介しました。それほどメジャーな操作ではないため、初めて実施される時には戸惑われたり、手戻りが発生してしまうことも起きやすいかと思います。本記事がそうした課題の解決の一助になれば幸いです。
    次回は、AWS ConfigのOrganizations連携について紹介いたします。