AWS Control Tower でアイデンティティベースのポリシー (IAM ポリシー) を使用する - AWS Control Tower

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Control Tower でアイデンティティベースのポリシー (IAM ポリシー) を使用する

このトピックでは、アカウント管理者がどのようにして IAM アイデンティティ (ユーザー、グループ、ロール) に許可ポリシーをアタッチし、それによって AWS Control Tower リソースでのオペレーションを実行する許可を付与する方法を示す、アイデンティティベースのポリシーの例を示します。

重要

初めに、AWS Control Tower リソースへのアクセスを管理するための基本概念と使用可能なオプションについて説明する概要トピックをお読みになることをお勧めします。詳細については、「AWS Control Tower リソースへのアクセス許可の管理の概要」を参照してください。

AWS ControlTowerAdmin ロール

このロールは、ランディングゾーンの維持にきわめて重要なインフラストラクチャへのアクセス権を持つ AWS Control Tower を提供します。AWS ControlTowerAdmin ロールには、アタッチされたマネージドポリシーと、IAM ロールのロール信頼ポリシーが必要です。ロール信頼ポリシーは、リソースベースのポリシーで、どのプリンシパルがロールを引き受けることができるかを指定します。

このロール信頼ポリシーのスニペットの例を次に示します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "controltower.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

AWS CLI からこのロールを作成し、 という名前のファイルに入れるにはtrust.json、CLI コマンドの例を次に示します。

aws iam create-role --role-name AWSControlTowerAdmin --path /service-role/ --assume-role-policy-document file://trust.json

このロールには 2 つの IAM ポリシーが必要です。

  1. インラインポリシー。例:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DescribeAvailabilityZones", "Resource": "*" } ] }
  2. 以下の マネージドポリシー。これは ですAWS ControlTowerServiceRolePolicy

AWS ControlTowerServiceRolePolicy

AWS ControlTowerServiceRolePolicy は、スタックセットと CloudFormation スタックインスタンス、 AWS CloudTrail ログファイル、AWS Control Tower の設定アグリゲータ、AWS Control Tower によって管理される AWS Organizations アカウントと組織単位 (OUs) などの AWS AWS Control Tower リソースを作成および管理するためのアクセス許可を定義する AWSマネージドポリシーです。

この管理ポリシーの更新は、表 AWS Control Tower のマネージドポリシー にまとめられています。

詳細については、『AWS マネージドポリシーリファレンスガイド』の「AWSControlTowerServiceRolePolicy」を参照してください。

マネージドポリシー名: AWS ControlTowerServiceRolePolicy

AWS ControlTowerServiceRolePolicy の JSON アーティファクトは次のとおりです。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:CreateStackInstances", "cloudformation:CreateStackSet", "cloudformation:DeleteStack", "cloudformation:DeleteStackInstances", "cloudformation:DeleteStackSet", "cloudformation:DescribeStackInstance", "cloudformation:DescribeStacks", "cloudformation:DescribeStackSet", "cloudformation:DescribeStackSetOperation", "cloudformation:ListStackInstances", "cloudformation:UpdateStack", "cloudformation:UpdateStackInstances", "cloudformation:UpdateStackSet" ], "Resource": [ "arn:aws:cloudformation:*:*:type/resource/AWS-IAM-Role" ] }, { "Effect": "Allow", "Action": [ "account:EnableRegion", "account:ListRegions", "account:GetRegionOptStatus" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:CreateStackInstances", "cloudformation:CreateStackSet", "cloudformation:DeleteStack", "cloudformation:DeleteStackInstances", "cloudformation:DeleteStackSet", "cloudformation:DescribeStackInstance", "cloudformation:DescribeStacks", "cloudformation:DescribeStackSet", "cloudformation:DescribeStackSetOperation", "cloudformation:GetTemplate", "cloudformation:ListStackInstances", "cloudformation:UpdateStack", "cloudformation:UpdateStackInstances", "cloudformation:UpdateStackSet" ], "Resource": [ "arn:aws:cloudformation:*:*:stack/AWSControlTower*/*", "arn:aws:cloudformation:*:*:stack/StackSet-AWSControlTower*/*", "arn:aws:cloudformation:*:*:stackset/AWSControlTower*:*", "arn:aws:cloudformation:*:*:stackset-target/AWSControlTower*/*" ] }, { "Effect": "Allow", "Action": [ "cloudtrail:CreateTrail", "cloudtrail:DeleteTrail", "cloudtrail:GetTrailStatus", "cloudtrail:StartLogging", "cloudtrail:StopLogging", "cloudtrail:UpdateTrail", "cloudtrail:PutEventSelectors", "logs:CreateLogStream", "logs:PutLogEvents", "logs:PutRetentionPolicy" ], "Resource": [ "arn:aws:logs:*:*:log-group:aws-controltower/CloudTrailLogs:*", "arn:aws:cloudtrail:*:*:trail/aws-controltower*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::aws-controltower*/*" ] }, { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::*:role/AWSControlTowerExecution", "arn:aws:iam::*:role/AWSControlTowerBlueprintAccess" ] }, { "Effect": "Allow", "Action": [ "cloudtrail:DescribeTrails", "ec2:DescribeAvailabilityZones", "iam:ListRoles", "logs:CreateLogGroup", "logs:DescribeLogGroups", "organizations:CreateAccount", "organizations:DescribeAccount", "organizations:DescribeCreateAccountStatus", "organizations:DescribeOrganization", "organizations:DescribeOrganizationalUnit", "organizations:DescribePolicy", "organizations:ListAccounts", "organizations:ListAccountsForParent", "organizations:ListAWSServiceAccessForOrganization", "organizations:ListChildren", "organizations:ListOrganizationalUnitsForParent", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListTargetsForPolicy", "organizations:ListRoots", "organizations:MoveAccount", "servicecatalog:AssociatePrincipalWithPortfolio" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:GetUser", "iam:ListAttachedRolePolicies", "iam:GetRolePolicy" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::*:role/service-role/AWSControlTowerStackSetRole", "arn:aws:iam::*:role/service-role/AWSControlTowerCloudTrailRole", "arn:aws:iam::*:role/service-role/AWSControlTowerConfigAggregatorRoleForOrganizations" ] }, { "Effect": "Allow", "Action": [ "config:DeleteConfigurationAggregator", "config:PutConfigurationAggregator", "config:TagResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/aws-control-tower": "managed-by-control-tower" } } }, { "Effect": "Allow", "Action": [ "organizations:EnableAWSServiceAccess", "organizations:DisableAWSServiceAccess" ], "Resource": "*", "Condition": { "StringLike": { "organizations:ServicePrincipal": [ "config.amazonaws.com", "cloudtrail.amazonaws.com" ] } } }, { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "*", "Condition": { "StringEquals": { "iam:AWSServiceName": "cloudtrail.amazonaws.com" } } } ] }

ロール信頼ポリシー:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "controltower.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

インラインポリシーは AWSControlTowerAdminPolicy です。

{ "Version": "2012-10-17", "Statement": [ { "Action": "ec2:DescribeAvailabilityZones", "Resource": "*", "Effect": "Allow" } ] }

AWS ControlTowerStackSetRole

AWS CloudFormation は、AWS Control Tower によって作成されたアカウントにスタックセットをデプロイするために、このロールを引き受けます。インラインポリシー:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::*:role/AWSControlTowerExecution" ], "Effect": "Allow" } ] }

信頼ポリシー

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudformation.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

AWS ControlTowerCloudTrailRole

AWS Control Tower はベストプラクティス CloudTrail として を有効にし、このロールを に提供します CloudTrail。 CloudTrail は CloudTrail 、ログを作成および公開するためにこのロールを引き受けます。インラインポリシー:

{ "Version": "2012-10-17", "Statement": [ { "Action": "logs:CreateLogStream", "Resource": "arn:aws:logs:*:*:log-group:aws-controltower/CloudTrailLogs:*", "Effect": "Allow" }, { "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:*:*:log-group:aws-controltower/CloudTrailLogs:*", "Effect": "Allow" } ] }

信頼ポリシー

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

AWSControlTowerBlueprintAccess ロールの要件

AWS Control Tower では、同じ組織内の指定されたブループリントハブアカウントに AWSControlTowerBlueprintAccess ロールを作成する必要があります。

ロール名

ロールタイプは、AWSControlTowerBlueprintAccess である必要があります。

ロール信頼ポリシー

ロールは、以下のプリンシパルを信頼するように設定する必要があります。

  • 管理アカウントで AWS Control Tower を使用するプリンシパル。

  • 管理アカウントの AWSControlTowerAdmin ロール。

次の例は、最小特権の信頼ポリシーを示しています。独自のポリシーを作成するときは、 という用語を AWS Control Tower 管理アカウントの実際のアカウント ID YourManagementAccountIdに置き換え、 という用語を管理アカウントの IAM ロールのYourControlTowerUserRole識別子に置き換えます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::YourManagementAccountId:role/service-role/AWSControlTowerAdmin", "arn:aws:iam::YourManagementAccountId:role/YourControlTowerUserRole" ] }, "Action": "sts:AssumeRole", "Condition": {} } ] }

ロールのアクセス許可

管理ポリシーをロールAWSServiceCatalogAdminFullAccessにアタッチする必要があります。

AWSServiceRoleForAWSControlTower

このロールは、ランディングゾーンの維持に不可欠な操作 (ドリフトしたリソースの通知など) のために、Log Archive アカウント、監査アカウント、およびメンバーアカウントへのアクセス権を AWS Control Tower に 付与します。

AWSServiceRoleForAWSControlTower ロールには、アタッチされたマネージドポリシーと、IAM ロールのロール信頼ポリシーが必要です。

このロールのマネージドポリシー: AWSControlTowerAccountServiceRolePolicy

ロール信頼ポリシー:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "controltower.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

AWSControlTowerAccountServiceRolePolicy

この AWS管理ポリシーにより、AWS Control Tower は自動アカウント設定と一元化されたガバナンスを提供する AWS サービスをユーザーに代わって呼び出すことができます。

このポリシーには、Security Hub サービスマネージドスタンダード: AWS Control Tower の一部である Security Hub コントロールによって管理されるリソースの検出 AWS Security Hub 結果転送を実装するための AWS Control Tower の最小限のアクセス許可が含まれており、カスタマーアカウントを管理する機能を制限する変更が防止されます。 これはバックグラウンド AWS Security Hub ドリフト検出プロセスの一部であり、顧客によって直接開始されません。

このポリシーは、各メンバーアカウントで、特に Security Hub コントロール用に Amazon EventBridge ルールを作成するアクセス許可を付与します。これらのルールでは、正確な を指定する必要があります EventPattern。また、ルールはサービスプリンシパルが管理するルールにのみ適用されます。

サービスプリンシパル:  controltower.amazonaws.com

AWSControlTowerAccountServiceRolePolicy の JSON アーティファクトは次のとおりです。

{ "Version": "2012-10-17", "Statement": [ { //For creating the managed rule "Sid": "AllowPutRuleOnSpecificSourcesAndDetailTypes", "Effect": "Allow", "Action": "events:PutRule", "Resource": "arn:aws:events:*:*:rule/*ControlTower*", "Condition": { "ForAnyValue:StringEquals": { "events:source": "aws.securityhub" }, "Null": { "events:detail-type": "false" }, "StringEquals": { "events:ManagedBy": "controltower.amazonaws.com", "events:detail-type": "Security Hub Findings - Imported" } } }, // Other operations to manage the managed rule { "Sid": "AllowOtherOperationsOnRulesManagedByControlTower", "Effect": "Allow", "Action": [ "events:DeleteRule", "events:EnableRule", "events:DisableRule", "events:PutTargets", "events:RemoveTargets" ], "Resource": "arn:aws:events:*:*:rule/*ControlTower*", "Condition": { "StringEquals": { "events:ManagedBy": "controltower.amazonaws.com" } } }, // More managed rule permissions { "Sid": "AllowDescribeOperationsOnRulesManagedByControlTower", "Effect": "Allow", "Action": [ "events:DescribeRule", "events:ListTargetsByRule" ], "Resource": "arn:aws:events:*:*:rule/*ControlTower*" }, // Add permission to publish the security notifications to SNS { "Sid": "AllowControlTowerToPublishSecurityNotifications", "Effect": "Allow", "Action": "sns:publish", "Resource": "arn:aws:sns:*:*:aws-controltower-AggregateSecurityNotifications", "Condition": { "StringEquals": { "aws:PrincipalAccount": "${aws:ResourceAccount}" } } }, // For drift verification { "Sid": "AllowActionsForSecurityHubIntegration", "Effect": "Allow", "Action": [ "securityhub:DescribeStandardsControls", "securityhub:GetEnabledStandards" ], "Resource": "arn:aws:securityhub:*:*:hub/default" } ] }

この管理ポリシーの更新は、表 AWS Control Tower のマネージドポリシー にまとめられています。