目次

サービス-CloudTrail

はじめに

証跡取得ケースの以下のケースで使える
②組織内の特定アカウントで証跡を集中管理
③Rootアカウントで証跡を集中管理

・別アカウントのS3バケットに格納するのでひと手間必要です。
・[②組織内の特定アカウントで証跡を集中管理]を例に設定例を記載します。

②組織内の特定アカウントで証跡を集中管理

証跡管理アカウントの設定

Trailで利用するKMS

・組織に対してDecryptも付与しているのは、AccessAnalyzerのポリシー生成を考慮

KMSポリシーサンプル
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Enable IAM User Permissions",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::[証跡管理を行うアカウントID]:root"
      },
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Sid": "Allow use of the key for Organization",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalOrgID": "[組織ID]"
        }
      }
    },
    {
      "Sid": "Allow use of the key for trail",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudtrail.amazonaws.com"
      },
      "Action": [
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "arn:aws:kms:[証跡管理を行うリージョン]::[証跡管理を行うアカウントID]::key/*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": [
            "[組織内のアカウントID①]",
            "[組織内のアカウントID②]"
          ]
        }
      }
    }
  ]
}

Trailで利用するS3バケット

・S3バケットのオブジェクト所有者は[希望するバケット所有者]に変更すること
・組織に対してDecryptも付与しているのは、AccessAnalyzerのポリシー生成を考慮

S3バケットポリシーサンプル
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AWSCloudTrailAclCheck",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudtrail.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::[Trail用S3バケット名]"
    },
    {
      "Sid": "AWSCloudTrailWrite",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudtrail.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": [
        "arn:aws:s3:::[Trail用S3バケット名]",
        "arn:aws:s3:::[Trail用S3バケット名]/*"
      ],
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    },
    {
      "Sid": "Allow-Access-From-Same-Organization",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::[Trail用S3バケット名]",
        "arn:aws:s3:::[Trail用S3バケット名]/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:PrincipalOrgID": "[組織ID]"
        }
      }
    },
    {
      "Sid": "Deny non SSL request",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::[Trail用S3バケット名]",
        "arn:aws:s3:::[Trail用S3バケット名]/*"
      ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      }
    }
  ]
}

証跡を作成するアカウント(root)の設定

現状Trailは委任できないためrootアカウントから証跡を作成します。

CloudTrailの信頼されたアクセスを有効にする

CloudShellから以下を実行する。

# サービス-CloudTrailの信頼されたアクセスを有効にする
aws organizations enable-aws-service-access --service-principal=cloudtrail.amazonaws.com

AccessAnalyzerのポリシー生成用のロール

IAMポリシーサンプル
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "cloudtrail:GetTrail",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:GenerateServiceLastAccessedDetails",
        "iam:GetServiceLastAccessedDetails"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::[Trail用S3バケット名]",
        "arn:aws:s3:::[Trail用S3バケット名]/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
      ],
      "Resource": [
        "[Trail用KMSキーARN]"
      ],
      "Condition": {
        "StringLike": {
          "kms:ViaService": "s3.*.amazonaws.com"
        }
      }
    }
  ]
}

備考

組織で有効化すると、以下の通りTrailの証跡が作成される
・rootアカウント:証跡を作成したリージョンのみ[“IsMultiRegionTrail”: true]が付いているので、その他リージョンからも確認可能
・全てのメンバアカウント:[“IsMultiRegionTrail”: true]が付いているので、全てのリージョンから確認可能

メンバアカウントからは証跡が操作できない。[“IsOrganizationTrail”: true]のおかげ?