AWS Control Tower에 대한 자격 증명 기반 정책 (IAM 정책) 사용 - AWS Control Tower

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS Control Tower에 대한 자격 증명 기반 정책 (IAM 정책) 사용

이 주제에서는 계정 관리자가 IAM ID (즉, 사용자, 그룹, 역할) 에 권한 정책을 연결하여 AWS Control Tower 리소스에서 작업을 수행할 수 있는 권한을 부여하는 방법을 보여주는 ID 기반 정책의 예를 제공합니다.

중요

먼저 AWS Control Tower 리소스에 대한 액세스를 관리하는 데 사용할 수 있는 기본 개념과 옵션을 설명하는 소개 주제를 검토하는 것이 좋습니다. 자세한 설명은 AWS Control Tower 리소스에 대한 액세스 권한 관리 개요 섹션을 참조하세요.

AWSControlTowerAdmin 역할

이 역할을 통해 AWS Control Tower는 착륙 지대를 유지하는 데 중요한 인프라에 액세스할 수 있습니다. AWSControlTowerAdmin역할에는 연결된 관리형 정책과 IAM 역할을 위한 역할 신뢰 정책이 필요합니다. 역할 신뢰 정책은 역할을 수임할 수 있는 보안 주체를 지정하는 리소스 기반 정책입니다.

다음은 이 역할 신뢰 정책의 예제 코드입니다.

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

CLI에서 이 역할을 생성하여 이라는 파일에 넣는 AWS CLI trust.json 명령 예는 다음과 같습니다.

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

이 역할에는 두 개의 IAM 정책이 필요합니다.

  1. 인라인 정책, 예:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DescribeAvailabilityZones", "Resource": "*" } ] }
  2. 다음에 나오는 관리형 정책은 다음과 같습니다. AWSControlTowerServiceRolePolicy

AWSControlTowerServiceRolePolicy

AWSControlTowerServiceRolePolicy이 정책은 AWS CloudFormation 스택세트와 스택 인스턴스, AWS CloudTrail 로그 파일, AWS Control Tower의 구성 애그리게이터, AWS Control Tower에서 관리하는 AWS Organizations 계정 및 조직 단위 (OU) 와 같은 AWS Control Tower 리소스를 생성하고 관리할 권한을 정의하는 AWS관리형 정책입니다.

이 관리형 정책에 대한 업데이트는 표에 요약되어 있습니다. AWS Control Tower의 관리형 정책

자세한 내용은 AWSControlTowerServiceRolePolicyAWS 관리형 정책 참조 안내서를 참조하십시오.

관리형 정책 이름: AWSControlTowerServiceRolePolicy

의 JSON AWSControlTowerServiceRolePolicy 아티팩트는 다음과 같습니다.

{ "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" } ] }

AWSControlTowerStackSetRole

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" } ] }

AWSControlTowerCloudTrailRole

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 역할.

다음 예는 최소 권한 신뢰 정책을 보여줍니다.

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

역할 권한

관리형 정책을 역할에 AWSServiceCatalogAdminFullAccess연결해야 합니다.

AWSServiceRoleForAWSControlTower

이 역할을 통해 AWS Control Tower는 Log Archive 계정, 감사 계정 및 멤버 계정에 대한 액세스 권한을 부여하여 드리프트 리소스 알림 등 랜딩 존 유지 관리에 중요한 작업을 수행할 수 있습니다.

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

의 JSON AWSControlTowerAccountServiceRolePolicy 아티팩트는 다음과 같습니다.

{ "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의 관리형 정책