AWS Control Tower 타워가 역할을 활용하여 계정을 생성하고 관리하는 방법 - AWS Control Tower

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

AWS Control Tower 타워가 역할을 활용하여 계정을 생성하고 관리하는 방법

일반적으로 역할은 에서 IAM (자격 증명 및 액세스 관리) 의 일부입니다AWS. 의 IAM 및 역할에 대한 일반 정보는 IAM 사용 설명서의AWS IAM 역할 주제를 참조하십시오.AWS

AWS Control Tower 콘솔을 사용하는 데 필요한 역할에 대한 자세한 내용은 을 참조하십시오AWS Control Tower 콘솔을 사용하는 데 필요한 권한.

역할 및 계정 생성

AWS Control Tower 타워는 의CreateAccount API를 호출하여 고객의 계정을 생성합니다AWS Organizations. 이 계정을AWS Organizations 생성하면 해당 계정 내에 역할이 생성되며, AWS Control Tower는 파라미터를 API에 전달하여 이름을 지정합니다. 역할의 이름은 AWSControlTowerExecution입니다.

AWS Control Tower 타워는 Account Factory 팩토리에서 생성한 모든 계정의AWSControlTowerExecution 역할을 대신합니다. AWS Control Tower는 이 역할을 사용하여 계정을 기준화하고 필수 (및 기타 활성화된) 제어를 적용하여 다른 역할을 생성합니다. 이러한 역할은 다음과 같은 다른 서비스에서 차례로 사용됩니다AWS Config.

참고

계정을 기준으로 삼으려면 블루프린트라고도 하는 Account Factory 템플릿과 컨트롤이 포함된 리소스를 설정해야 합니다. 베이스라인 프로세스에서는 템플릿 배포의 일환으로 계정에 대한 중앙 집중식 로깅 및 보안 감사 역할도 설정합니다. AWS Control Tower 기준은 등록된 모든 계정에 적용하는 역할에 포함됩니다.

계정 및 리소스에 대한 자세한 내용은 섹션을 참조하세요AWS ControlAWS 계정 Tower에 대해 자세히 알아보기.

AWSControlTowerExecution 역할, 설명

등록된 모든 계정에 AWSControlTowerExecution 역할이 있어야 합니다. AWS Control Tower를 사용하면 에서 개별 계정을 관리하고 해당 계정에 대한 정보를 감사 및 로그 아카이브 계정에 보고할 수 있습니다.

다음과 같은 여러 가지 방법으로 계정에AWSControlTowerExecution 역할을 추가할 수 있습니다.

  • 보안 OU의 계정 (코어 계정이라고도 함) 의 경우 AWS Control Tower 타워는 초기 AWS Control Tower 설정 시 역할을 생성합니다.

  • AWS Control Tower 콘솔을 통해 생성된 Account Factory 계정의 경우, AWS Control Tower 타워는 계정 생성 시 이 역할을 생성합니다.

  • 단일 계정 등록의 경우 고객에게 수동으로 역할을 생성한 다음 AWS Control Tower에 계정을 등록하도록 요청합니다.

  • 거버넌스를 OU로 확장할 때 AWS Control Tower는 StackSetAWSControlTowerExecutionRole-를 사용하여 해당 OU의 모든 계정에서 역할을 생성합니다.

AWSControlTowerExecution역할의 목적:

  • AWSControlTowerExecution스크립트와 Lambda 함수를 사용하여 계정을 자동으로 생성하고 등록할 수 있습니다.

  • AWSControlTowerExecution을 통해 전체 계정의 모든 로그가 로깅 계정으로 전송되도록 조직의 로깅을 구성할 수 있습니다.

  • AWSControlTowerExecutionAWS Control Tower 타워에 개별 계정을 등록할 수 있습니다. 먼저 해당 계정에AWSControlTowerExecution 역할을 추가해야 합니다. 역할을 추가하는 방법에 대한 단계는 을 참조하십시오필요한 IAM 역할을 기존 역할에 수동으로AWS 계정 추가하고 등록합니다..

AWSControlTowerExecution역할이 OU와 함께 작동하는 방식:

AWSControlTowerExecution역할은 선택한 AWS Control Tower 컨트롤이 조직 내 모든 개별 계정, 각 OU 내, AWS Control Tower에서 생성한 모든 새 계정에 자동으로 적용되도록 합니다. 결과:

  • AWS Control Tower 컨트롤에 구현된 감사 및 로깅 기능을 기반으로 규정 준수 및 보안 보고서를 보다 쉽게 제공할 수 있습니다.

  • 보안 및 규정 준수 팀은 모든 요구 사항이 충족되었는지 그리고 조직 드리프트가 발생하지 않았는지 확인할 수 있습니다.

드리프트에 대한 자세한 내용은 AWS Control Tower Tool에서 드리프트 감지 및 해결 을 참조하세요.

요약하면 AWSControlTowerExecution 역할 및 관련 정책을 통해 조직 전체에서 보안 및 규정 준수를 유연하게 제어할 수 있습니다. 따라서 보안 또는 프로토콜 위반이 발생할 가능성이 적습니다.

역할 신뢰 관계를 위한 선택적 조건

역할 신뢰 정책에 조건을 설정하여 AWS Control Tower의 특정 역할과 상호 작용하는 계정 및 리소스를 제한할 수 있습니다. 광범위한 액세스 권한을 허용하므로AWSControlTowerAdmin 역할에 대한 액세스를 제한하는 것이 좋습니다.

공격자가 리소스에 액세스하는 것을 방지하려면 AWS Control Tower 신뢰 정책을 수동으로 편집하여 정책 설명에 하나 이상aws:SourceArn 또는aws:SourceAccount 조건부를 추가하십시오. 이aws:SourceArn 조건은 특정 계정과 특정 리소스에 대한 액세스를 제한하는 것보다aws:SourceAccount 더 구체적이므로 보안 모범 사례로서 조건을 추가하는 것이 좋습니다.

리소스의 전체 ARN을 모를 경우 또는 여러 리소스를 지정하는 경우, ARN의 알 수 없는 부분에 대해 와일드카드 (*) 를 포함한aws:SourceArn 조건을 사용할 수 있습니다. 예를 들어,arn:aws:controltower:*:123456789012:* 지역을 지정하지 않으려는 경우에 사용할 수 있습니다.

다음 예는 IAM 역할 신뢰 정책과 함께aws:SourceArn IAM 조건을 사용하는 방법을 보여줍니다. AWS Control Tower 서비스 주체가 AWSControlTowerAdmin역할과 상호 작용하므로 해당 역할에 대한 신뢰 관계에 조건을 추가하십시오.

예에서 볼 수 있듯이 소스 ARN의 형식은 다음과 같습니다.arn:aws:controltower:${HOME_REGION}:${CUSTOMER_AWSACCOUNT_id}:*

문자열을${HOME_REGION} 발신 계정의 홈 지역 및 계정${CUSTOMER_AWSACCOUNT_id} ID로 바꾸십시오.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "controltower.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:controltower:us-west-2:012345678901:*" } } } ] }

이 예에서는 로arn:aws:controltower:us-west-2:012345678901:* 지정된 소스 ARN만이 작업을 수행할 수 있는 유일한 ARN입니다.sts:AssumeRole 즉,us-west-2 리전에서 계정012345678901 ID에 로그인할 수 있는 사용자만 AWS Control Tower 서비스에 대해 다음과 같이 지정된 특정 역할 및 신뢰 관계가 필요한 작업을 수행할 수controltower.amazonaws.com 있습니다.

다음 예에서는 역할 신뢰 정책에 적용된aws:SourceAccountaws:SourceArn 조건을 보여줍니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "controltower.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "012345678901" }, "StringLike": { "aws:SourceArn": "arn:aws:controltower:us-west-2:012345678901:*" } } } ] }

이 예제에서는aws:SourceArn 조건문이 추가된aws:SourceAccount 조건문을 보여 줍니다. 자세한 정보는 교차 서비스 사칭 방지을 참조하세요.

AWS Control Tower 타워의 권한 정책에 대한 일반 정보는 을 참조하십시오리소스 액세스 관리.

권장 사항:

AWS Control Tower에서 생성하는 역할에 조건을 추가하는 것이 좋습니다. 이러한 역할은 다른 AWS 서비스에서 직접 맡기 때문입니다. 자세한 내용은 이 섹션의 앞부분에 표시된 의 예를 AWSControlTowerAdmin참조하세요. AWS Config레코더 역할의 경우 Config Recorder ARN을 허용된 소스 ARN으로 지정하여aws:SourceArn 조건을 추가하는 것이 좋습니다.

모든 관리 계정에서 AWS Control Tower Audit 계정에서 맡을 수 있는 역할과aws:PrincipalOrgID 같은 AWSControlTowerExecution역할의 경우 이러한 역할에aws:SourceArn 조건을 추가하여 리소스에 액세스하는 보안AWS 주체가 올바른 조직의 계정에 속하는지 확인하는 조건을 추가하는 것이 좋습니다.

참고

드리프트의 경우 특정 상황에서 AWS Control Tower 역할이 재설정될 수 있습니다. 역할을 사용자 정의한 경우 정기적으로 역할을 다시 확인하는 것이 좋습니다.

AWS Control Tower ConfigRecorderRole

AWS Control Tower는 이 역할을 로그 아카이브 계정, 감사 계정 및 Account Factory에서 생성한 각 계정에 리소스로 배포합니다. 역할은 이 섹션의 뒷부분에 나와 있는 역할 신뢰 관계 아티팩트에서 볼 수 있듯이 에서 맡을 수 있습니다.AWS Config 이 역할은 여러 사람이 여러 작업을 수행할 수 있기 때문에 길이가 1000줄이AWS 서비스 넘습니다. 역할은 구성을 기록하고 전송AWS Config 채널에 전달할 수 있는 권한을 부여합니다.

참고

이 IAM 역할을 생성할 때 이 역할에 대한 권한 정책에 정의된 대로AWS Config 리소스를 관리할 수 있는 권한을 AWS Control Tower에 부여합니다. AWS Control Tower에서 이 역할을 처음 사용하는 경우 계정에 새로운 서비스 연결 역할이AWS Config 생성될 수 있습니다. 이 역할은 원래 AWS Control Tower 요청을 완료하는 데 필요한 다른AWS 리소스에AWS Config 대한 액세스 권한을 부여합니다.

AWS Config또는 기타 서비스가 서비스 연결 역할을 생성하고 사용하는 방법에 대한 자세한 내용은 IAM으로 작업하는AWS 서비스 단원을 참조하세요. 서비스 연결 역할 열에 예가 있는 서비스를 찾아 서비스 연결 역할 사용을 지원한다고 표시합니다. 해당 서비스에 대한 서비스 연결 역할 설명서를 보려면 예(Yes) 링크를 선택합니다.

AWS서비스 연결 역할의 정의는 AWS서비스 연결 역할을 참조하십시오.

역할 이름:aws-controltower-ConfigRecorderRole

다음 계정에 배포: 로그 아카이브, 감사, 어카운트 팩토리 계정

가정:AWS Config

AWS관리형 정책:

다음 JSON 아티팩트는 역할을 보여줍니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "a4b:Get*", "a4b:List*", "a4b:Search*", "access-analyzer:GetAccessPreview", "access-analyzer:GetAnalyzedResource", "access-analyzer:GetAnalyzer", "access-analyzer:GetArchiveRule", "access-analyzer:GetFinding", "access-analyzer:GetGeneratedPolicy", "access-analyzer:ListAccessPreviewFindings", "access-analyzer:ListAccessPreviews", "access-analyzer:ListAnalyzedResources", "access-analyzer:ListAnalyzers", "access-analyzer:ListArchiveRules", "access-analyzer:ListFindings", "access-analyzer:ListPolicyGenerations", "access-analyzer:ListTagsForResource", "access-analyzer:ValidatePolicy", "acm-pca:Describe*", "acm-pca:Get*", "acm-pca:List*", "acm:Describe*", "acm:Get*", "acm:List*", "airflow:ListEnvironments", "airflow:ListTagsForResource", "amplify:GetApp", "amplify:GetBranch", "amplify:GetDomainAssociation", "amplify:GetJob", "amplify:ListApps", "amplify:ListBranches", "amplify:ListDomainAssociations", "amplify:ListJobs", "apigateway:GET", "appconfig:GetApplication", "appconfig:GetConfiguration", "appconfig:GetConfigurationProfile", "appconfig:GetDeployment", "appconfig:GetDeploymentStrategy", "appconfig:GetEnvironment", "appconfig:GetHostedConfigurationVersion", "appconfig:ListApplications", "appconfig:ListConfigurationProfiles", "appconfig:ListDeployments", "appconfig:ListDeploymentStrategies", "appconfig:ListEnvironments", "appconfig:ListHostedConfigurationVersions", "appconfig:ListTagsForResource", "application-autoscaling:Describe*", "applicationinsights:Describe*", "applicationinsights:List*", "appmesh:Describe*", "appmesh:List*", "appstream:Describe*", "appstream:List*", "appsync:Get*", "appsync:List*", "aps:DescribeAlertManagerDefinition", "aps:DescribeRuleGroupsNamespace", "aps:DescribeWorkspace", "aps:GetAlertManagerSilence", "aps:GetAlertManagerStatus", "aps:GetLabels", "aps:GetMetricMetadata", "aps:GetSeries", "aps:ListAlerts", "aps:ListAlertManagerAlerts", "aps:ListAlertManagerAlertGroups", "aps:ListAlertManagerReceivers", "aps:ListAlertManagerSilences", "aps:ListRules", "aps:ListRuleGroupsNamespaces", "aps:ListTagsForResource", "aps:ListWorkspaces", "aps:QueryMetrics", "athena:Batch*", "athena:Get*", "athena:List*", "auditmanager:GetAccountStatus", "auditmanager:GetAssessment", "auditmanager:GetAssessmentFramework", "auditmanager:GetAssessmentReportUrl", "auditmanager:GetChangeLogs", "auditmanager:GetControl", "auditmanager:GetDelegations", "auditmanager:GetEvidence", "auditmanager:GetEvidenceByEvidenceFolder", "auditmanager:GetEvidenceFolder", "auditmanager:GetEvidenceFoldersByAssessment", "auditmanager:GetEvidenceFoldersByAssessmentControl", "auditmanager:GetOrganizationAdminAccount", "auditmanager:GetServicesInScope", "auditmanager:GetSettings", "auditmanager:ListAssessmentFrameworks", "auditmanager:ListAssessmentReports", "auditmanager:ListAssessments", "auditmanager:ListControls", "auditmanager:ListKeywordsForDataSource", "auditmanager:ListNotifications", "auditmanager:ListTagsForResource", "auditmanager:ValidateAssessmentReportIntegrity", "autoscaling-plans:Describe*", "autoscaling-plans:GetScalingPlanResourceForecastData", "autoscaling:Describe*", "aws-portal:View*", "backup:Describe*", "backup:Get*", "backup:List*", "batch:Describe*", "batch:List*", "braket:GetDevice", "braket:GetQuantumTask", "braket:SearchDevices", "braket:SearchQuantumTasks", "budgets:Describe*", "budgets:View*", "cassandra:Select", "ce:DescribeCostCategoryDefinition", "ce:DescribeNotificationSubscription", "ce:DescribeReport", "ce:GetAnomalies", "ce:GetAnomalyMonitors", "ce:GetAnomalySubscriptions", "ce:GetCostAndUsage", "ce:GetCostAndUsageWithResources", "ce:GetCostCategories", "ce:GetCostForecast", "ce:GetDimensionValues", "ce:GetPreferences", "ce:GetReservationCoverage", "ce:GetReservationPurchaseRecommendation", "ce:GetReservationUtilization", "ce:GetRightsizingRecommendation", "ce:GetSavingsPlansCoverage", "ce:GetSavingsPlansPurchaseRecommendation", "ce:GetSavingsPlansUtilization", "ce:GetSavingsPlansUtilizationDetails", "ce:GetTags", "ce:GetUsageForecast", "ce:ListCostCategoryDefinitions", "chatbot:Describe*", "chatbot:Get*", "chime:Get*", "chime:List*", "chime:Retrieve*", "chime:Search*", "chime:Validate*", "cloud9:Describe*", "cloud9:List*", "clouddirectory:BatchRead", "clouddirectory:Get*", "clouddirectory:List*", "clouddirectory:LookupPolicy", "cloudformation:Describe*", "cloudformation:Detect*", "cloudformation:Estimate*", "cloudformation:Get*", "cloudformation:List*", "cloudfront:DescribeFunction", "cloudfront:Get*", "cloudfront:List*", "cloudhsm:Describe*", "cloudhsm:Get*", "cloudhsm:List*", "cloudsearch:Describe*", "cloudsearch:List*", "cloudtrail:Describe*", "cloudtrail:Get*", "cloudtrail:List*", "cloudtrail:LookupEvents", "cloudwatch:Describe*", "cloudwatch:Get*", "cloudwatch:List*", "codeartifact:DescribeDomain", "codeartifact:DescribePackageVersion", "codeartifact:DescribeRepository", "codeartifact:GetAuthorizationToken", "codeartifact:GetDomainPermissionsPolicy", "codeartifact:GetPackageVersionAsset", "codeartifact:GetPackageVersionReadme", "codeartifact:GetRepositoryEndpoint", "codeartifact:GetRepositoryPermissionsPolicy", "codeartifact:ListDomains", "codeartifact:ListPackages", "codeartifact:ListPackageVersionAssets", "codeartifact:ListPackageVersionDependencies", "codeartifact:ListPackageVersions", "codeartifact:ListRepositories", "codeartifact:ListRepositoriesInDomain", "codeartifact:ListTagsForResource", "codeartifact:ReadFromRepository", "codebuild:BatchGet*", "codebuild:DescribeCodeCoverages", "codebuild:DescribeTestCases", "codebuild:List*", "codecommit:BatchGet*", "codecommit:Describe*", "codecommit:Get*", "codecommit:GitPull", "codecommit:List*", "codedeploy:BatchGet*", "codedeploy:Get*", "codedeploy:List*", "codeguru-profiler:Describe*", "codeguru-profiler:Get*", "codeguru-profiler:List*", "codeguru-reviewer:Describe*", "codeguru-reviewer:Get*", "codeguru-reviewer:List*", "codepipeline:Get*", "codepipeline:List*", "codestar-connections:GetConnection", "codestar-connections:GetHost", "codestar-connections:ListConnections", "codestar-connections:ListHosts", "codestar-connections:ListTagsForResource", "codestar-notifications:describeNotificationRule", "codestar-notifications:listEventTypes", "codestar-notifications:listNotificationRules", "codestar-notifications:listTagsForResource", "codestar-notifications:ListTargets", "codestar:Describe*", "codestar:Get*", "codestar:List*", "codestar:Verify*", "cognito-identity:Describe*", "cognito-identity:GetCredentialsForIdentity", "cognito-identity:GetIdentityPoolRoles", "cognito-identity:GetOpenIdToken", "cognito-identity:GetOpenIdTokenForDeveloperIdentity", "cognito-identity:List*", "cognito-identity:Lookup*", "cognito-idp:AdminGet*", "cognito-idp:AdminList*", "cognito-idp:Describe*", "cognito-idp:Get*", "cognito-idp:List*", "cognito-sync:Describe*", "cognito-sync:Get*", "cognito-sync:List*", "cognito-sync:QueryRecords", "compute-optimizer:DescribeRecommendationExportJobs", "compute-optimizer:GetAutoScalingGroupRecommendations", "compute-optimizer:GetEBSVolumeRecommendations", "compute-optimizer:GetEC2InstanceRecommendations", "compute-optimizer:GetEC2RecommendationProjectedMetrics", "compute-optimizer:GetEnrollmentStatus", "compute-optimizer:GetEnrollmentStatusesForOrganization", "compute-optimizer:GetLambdaFunctionRecommendations", "compute-optimizer:GetRecommendationSummaries", "config:BatchGetAggregateResourceConfig", "config:BatchGetResourceConfig", "config:Deliver*", "config:Describe*", "config:Get*", "config:List*", "config:SelectAggregateResourceConfig", "config:SelectResourceConfig", "connect:Describe*", "connect:GetFederationToken", "connect:List*", "dataexchange:Get*", "dataexchange:List*", "datapipeline:Describe*", "datapipeline:EvaluateExpression", "datapipeline:Get*", "datapipeline:List*", "datapipeline:QueryObjects", "datapipeline:Validate*", "datasync:Describe*", "datasync:List*", "dax:BatchGetItem", "dax:Describe*", "dax:GetItem", "dax:ListTags", "dax:Query", "dax:Scan", "deepcomposer:GetComposition", "deepcomposer:GetModel", "deepcomposer:GetSampleModel", "deepcomposer:ListCompositions", "deepcomposer:ListModels", "deepcomposer:ListSampleModels", "deepcomposer:ListTrainingTopics", "detective:Get*", "detective:List*", "detective:SearchGraph", "devicefarm:Get*", "devicefarm:List*", "devops-guru:DescribeAccountHealth", "devops-guru:DescribeAccountOverview", "devops-guru:DescribeAnomaly", "devops-guru:DescribeFeedback", "devops-guru:DescribeInsight", "devops-guru:DescribeResourceCollectionHealth", "devops-guru:DescribeServiceIntegration", "devops-guru:GetCostEstimation", "devops-guru:GetResourceCollection", "devops-guru:ListAnomaliesForInsight", "devops-guru:ListEvents", "devops-guru:ListInsights", "devops-guru:ListNotificationChannels", "devops-guru:ListRecommendations", "devops-guru:SearchInsights", "devops-guru:StartCostEstimation", "directconnect:Describe*", "discovery:Describe*", "discovery:Get*", "discovery:List*", "dlm:Get*", "dms:Describe*", "dms:List*", "dms:Test*", "ds:Check*", "ds:Describe*", "ds:Get*", "ds:List*", "ds:Verify*", "dynamodb:BatchGet*", "dynamodb:Describe*", "dynamodb:Get*", "dynamodb:List*", "dynamodb:Query", "dynamodb:Scan", "ec2:Describe*", "ec2:Get*", "ec2:SearchTransitGatewayRoutes", "ec2messages:Get*", "ecr-public:BatchCheckLayerAvailability", "ecr-public:DescribeImages", "ecr-public:DescribeImageTags", "ecr-public:DescribeRegistries", "ecr-public:DescribeRepositories", "ecr-public:GetAuthorizationToken", "ecr-public:GetRegistryCatalogData", "ecr-public:GetRepositoryCatalogData", "ecr-public:GetRepositoryPolicy", "ecr-public:ListTagsForResource", "ecr:BatchCheck*", "ecr:BatchGet*", "ecr:Describe*", "ecr:Get*", "ecr:List*", "ecs:Describe*", "ecs:List*", "eks:Describe*", "eks:List*", "elasticache:Describe*", "elasticache:List*", "elasticbeanstalk:Check*", "elasticbeanstalk:Describe*", "elasticbeanstalk:List*", "elasticbeanstalk:Request*", "elasticbeanstalk:Retrieve*", "elasticbeanstalk:Validate*", "elasticfilesystem:Describe*", "elasticloadbalancing:Describe*", "elasticmapreduce:Describe*", "elasticmapreduce:GetBlockPublicAccessConfiguration", "elasticmapreduce:List*", "elasticmapreduce:View*", "elastictranscoder:List*", "elastictranscoder:Read*", "elemental-appliances-software:Get*", "elemental-appliances-software:List*", "es:Describe*", "es:ESHttpGet", "es:ESHttpHead", "es:Get*", "es:List*", "events:Describe*", "events:List*", "events:Test*", "firehose:Describe*", "firehose:List*", "fis:GetAction", "fis:GetExperiment", "fis:GetExperimentTemplate", "fis:ListActions", "fis:ListExperiments", "fis:ListExperimentTemplates", "fis:ListTagsForResource", "fms:GetAdminAccount", "fms:GetAppsList", "fms:GetComplianceDetail", "fms:GetNotificationChannel", "fms:GetPolicy", "fms:GetProtectionStatus", "fms:GetProtocolsList", "fms:GetViolationDetails", "fms:ListAppsLists", "fms:ListComplianceStatus", "fms:ListMemberAccounts", "fms:ListPolicies", "fms:ListProtocolsLists", "fms:ListTagsForResource", "forecast:DescribeDataset", "forecast:DescribeDatasetGroup", "forecast:DescribeDatasetImportJob", "forecast:DescribeForecast", "forecast:DescribeForecastExportJob", "forecast:DescribePredictor", "forecast:DescribePredictorBacktestExportJob", "forecast:GetAccuracyMetrics", "forecast:ListDatasetGroups", "forecast:ListDatasetImportJobs", "forecast:ListDatasets", "forecast:ListForecastExportJobs", "forecast:ListForecasts", "forecast:ListPredictorBacktestExportJobs", "forecast:ListPredictors", "forecast:QueryForecast", "freertos:Describe*", "freertos:List*", "fsx:Describe*", "fsx:List*", "gamelift:Describe*", "gamelift:Get*", "gamelift:List*", "gamelift:ResolveAlias", "gamelift:Search*", "glacier:Describe*", "glacier:Get*", "glacier:List*", "globalaccelerator:Describe*", "globalaccelerator:List*", "glue:BatchGetDevEndpoints", "glue:BatchGetJobs", "glue:BatchGetPartition", "glue:BatchGetTriggers", "glue:BatchGetWorkflows", "glue:CheckSchemaVersionValidity", "glue:GetCatalogImportStatus", "glue:GetClassifier", "glue:GetClassifiers", "glue:GetCrawler", "glue:GetCrawlerMetrics", "glue:GetCrawlers", "glue:GetDatabase", "glue:GetDatabases", "glue:GetDataCatalogEncryptionSettings", "glue:GetDataflowGraph", "glue:GetDevEndpoint", "glue:GetDevEndpoints", "glue:GetJob", "glue:GetJobBookmark", "glue:GetJobRun", "glue:GetJobRuns", "glue:GetJobs", "glue:GetMapping", "glue:GetMLTaskRun", "glue:GetMLTaskRuns", "glue:GetMLTransform", "glue:GetMLTransforms", "glue:GetPartition", "glue:GetPartitions", "glue:GetPlan", "glue:GetRegistry", "glue:GetResourcePolicy", "glue:GetSchema", "glue:GetSchemaByDefinition", "glue:GetSchemaVersion", "glue:GetSchemaVersionsDiff", "glue:GetSecurityConfiguration", "glue:GetSecurityConfigurations", "glue:GetTable", "glue:GetTables", "glue:GetTableVersion", "glue:GetTableVersions", "glue:GetTags", "glue:GetTrigger", "glue:GetTriggers", "glue:GetUserDefinedFunction", "glue:GetUserDefinedFunctions", "glue:GetWorkflow", "glue:GetWorkflowRun", "glue:GetWorkflowRunProperties", "glue:GetWorkflowRuns", "glue:ListCrawlers", "glue:ListDevEndpoints", "glue:ListJobs", "glue:ListMLTransforms", "glue:ListRegistries", "glue:ListSchemas", "glue:ListSchemaVersions", "glue:ListTriggers", "glue:ListWorkflows", "glue:QuerySchemaVersionMetadata", "greengrass:DescribeComponent", "greengrass:Get*", "greengrass:List*", "groundstation:DescribeContact", "groundstation:GetConfig", "groundstation:GetDataflowEndpointGroup", "groundstation:GetMinuteUsage", "groundstation:GetMissionProfile", "groundstation:GetSatellite", "groundstation:ListConfigs", "groundstation:ListContacts", "groundstation:ListDataflowEndpointGroups", "groundstation:ListGroundStations", "groundstation:ListMissionProfiles", "groundstation:ListSatellites", "groundstation:ListTagsForResource", "guardduty:DescribeOrganizationConfiguration", "guardduty:DescribePublishingDestination", "guardduty:Get*", "guardduty:List*", "health:Describe*", "iam:Generate*", "iam:Get*", "iam:List*", "iam:Simulate*", "imagebuilder:Get*", "imagebuilder:List*", "importexport:Get*", "importexport:List*", "inspector:Describe*", "inspector:Get*", "inspector:List*", "inspector:Preview*", "iot:Describe*", "iot:Get*", "iot:List*", "iot1click:DescribeDevice", "iot1click:DescribePlacement", "iot1click:DescribeProject", "iot1click:GetDeviceMethods", "iot1click:GetDevicesInPlacement", "iot1click:ListDeviceEvents", "iot1click:ListDevices", "iot1click:ListPlacements", "iot1click:ListProjects", "iot1click:ListTagsForResource", "iotanalytics:Describe*", "iotanalytics:Get*", "iotanalytics:List*", "iotanalytics:SampleChannelData", "iotevents:DescribeAlarm", "iotevents:DescribeAlarmModel", "iotevents:DescribeDetector", "iotevents:DescribeDetectorModel", "iotevents:DescribeInput", "iotevents:DescribeLoggingOptions", "iotevents:ListAlarmModels", "iotevents:ListAlarmModelVersions", "iotevents:ListAlarms", "iotevents:ListDetectorModels", "iotevents:ListDetectorModelVersions", "iotevents:ListDetectors", "iotevents:ListInputs", "iotevents:ListTagsForResource", "iotfleethub:DescribeApplication", "iotfleethub:ListApplications", "iotsitewise:Describe*", "iotsitewise:Get*", "iotsitewise:List*", "iotwireless:GetDestination", "iotwireless:GetDeviceProfile", "iotwireless:GetPartnerAccount", "iotwireless:GetServiceEndpoint", "iotwireless:GetServiceProfile", "iotwireless:GetWirelessDevice", "iotwireless:GetWirelessDeviceStatistics", "iotwireless:GetWirelessGateway", "iotwireless:GetWirelessGatewayCertificate", "iotwireless:GetWirelessGatewayFirmwareInformation", "iotwireless:GetWirelessGatewayStatistics", "iotwireless:GetWirelessGatewayTask", "iotwireless:GetWirelessGatewayTaskDefinition", "iotwireless:ListDestinations", "iotwireless:ListDeviceProfiles", "iotwireless:ListPartnerAccounts", "iotwireless:ListServiceProfiles", "iotwireless:ListTagsForResource", "iotwireless:ListWirelessDevices", "iotwireless:ListWirelessGateways", "iotwireless:ListWirelessGatewayTaskDefinitions", "ivs:BatchGetChannel", "ivs:GetChannel", "ivs:GetPlaybackKeyPair", "ivs:GetRecordingConfiguration", "ivs:ListChannels", "ivs:ListPlaybackKeyPairs", "ivs:ListRecordingConfigurations", "ivs:ListStreams", "ivs:ListTagsForResource", "kafka:Describe*", "kafka:Get*", "kafka:List*", "kendra:DescribeDataSource", "kendra:DescribeFaq", "kendra:DescribeIndex", "kendra:DescribeQuerySuggestionsBlockList", "kendra:DescribeQuerySuggestionsConfig", "kendra:DescribeThesaurus", "kendra:GetQuerySuggestions", "kendra:ListDataSources", "kendra:ListDataSourceSyncJobs", "kendra:ListFaqs", "kendra:ListIndices", "kendra:ListQuerySuggestionsBlockLists", "kendra:ListTagsForResource", "kendra:ListThesauri", "kendra:Query", "kinesis:Describe*", "kinesis:Get*", "kinesis:List*", "kinesisanalytics:Describe*", "kinesisanalytics:Discover*", "kinesisanalytics:Get*", "kinesisanalytics:List*", "kinesisvideo:Describe*", "kinesisvideo:Get*", "kinesisvideo:List*", "kms:Describe*", "kms:Get*", "kms:List*", "lambda:Get*", "lambda:List*", "lex:DescribeBot", "lex:DescribeBotAlias", "lex:DescribeBotChannel", "lex:DescribeBotLocale", "lex:DescribeBotVersion", "lex:DescribeExport", "lex:DescribeImport", "lex:DescribeIntent", "lex:DescribeResourcePolicy", "lex:DescribeSlot", "lex:DescribeSlotType", "lex:Get*", "lex:ListBotAliases", "lex:ListBotChannels", "lex:ListBotLocales", "lex:ListBots", "lex:ListBotVersions", "lex:ListBuiltInIntents", "lex:ListBuiltInSlotTypes", "lex:ListExports", "lex:ListImports", "lex:ListIntents", "lex:ListSlots", "lex:ListSlotTypes", "lex:ListTagsForResource", "license-manager:Get*", "license-manager:List*", "lightsail:GetActiveNames", "lightsail:GetAlarms", "lightsail:GetAutoSnapshots", "lightsail:GetBlueprints", "lightsail:GetBucketAccessKeys", "lightsail:GetBucketBundles", "lightsail:GetBucketMetricData", "lightsail:GetBuckets", "lightsail:GetBundles", "lightsail:GetCertificates", "lightsail:GetCloudFormationStackRecords", "lightsail:GetContainerAPIMetadata", "lightsail:GetContainerImages", "lightsail:GetContainerServiceDeployments", "lightsail:GetContainerServiceMetricData", "lightsail:GetContainerServicePowers", "lightsail:GetContainerServices", "lightsail:GetDisk", "lightsail:GetDisks", "lightsail:GetDiskSnapshot", "lightsail:GetDiskSnapshots", "lightsail:GetDistributionBundles", "lightsail:GetDistributionLatestCacheReset", "lightsail:GetDistributionMetricData", "lightsail:GetDistributions", "lightsail:GetDomain", "lightsail:GetDomains", "lightsail:GetExportSnapshotRecords", "lightsail:GetInstance", "lightsail:GetInstanceMetricData", "lightsail:GetInstancePortStates", "lightsail:GetInstances", "lightsail:GetInstanceSnapshot", "lightsail:GetInstanceSnapshots", "lightsail:GetInstanceState", "lightsail:GetKeyPair", "lightsail:GetKeyPairs", "lightsail:GetLoadBalancer", "lightsail:GetLoadBalancerMetricData", "lightsail:GetLoadBalancers", "lightsail:GetLoadBalancerTlsCertificates", "lightsail:GetOperation", "lightsail:GetOperations", "lightsail:GetOperationsForResource", "lightsail:GetRegions", "lightsail:GetRelationalDatabase", "lightsail:GetRelationalDatabaseBlueprints", "lightsail:GetRelationalDatabaseBundles", "lightsail:GetRelationalDatabaseEvents", "lightsail:GetRelationalDatabaseLogEvents", "lightsail:GetRelationalDatabaseLogStreams", "lightsail:GetRelationalDatabaseMetricData", "lightsail:GetRelationalDatabaseParameters", "lightsail:GetRelationalDatabases", "lightsail:GetRelationalDatabaseSnapshot", "lightsail:GetRelationalDatabaseSnapshots", "lightsail:GetStaticIp", "lightsail:GetStaticIps", "lightsail:Is*", "logs:Describe*", "logs:FilterLogEvents", "logs:Get*", "logs:ListTagsLogGroup", "logs:StartQuery", "logs:StopQuery", "logs:TestMetricFilter", "lookoutvision:DescribeDataset", "lookoutvision:DescribeModel", "lookoutvision:DescribeProject", "lookoutvision:ListDatasetEntries", "lookoutvision:ListModels", "lookoutvision:ListProjects", "lookoutvision:ListTagsForResource", "machinelearning:Describe*", "machinelearning:Get*", "macie:ListMemberAccounts", "macie:ListS3Resources", "macie2:BatchGetCustomDataIdentifiers", "macie2:DescribeBuckets", "macie2:DescribeClassificationJob", "macie2:DescribeOrganizationConfiguration", "macie2:GetAdministratorAccount", "macie2:GetBucketStatistics", "macie2:GetClassificationExportConfiguration", "macie2:GetCustomDataIdentifier", "macie2:GetFindings", "macie2:GetFindingsFilter", "macie2:GetFindingsPublicationConfiguration", "macie2:GetFindingStatistics", "macie2:GetInvitationsCount", "macie2:GetMacieSession", "macie2:GetMember", "macie2:GetUsageStatistics", "macie2:GetUsageTotals", "macie2:ListClassificationJobs", "macie2:ListCustomDataIdentifiers", "macie2:ListFindings", "macie2:ListFindingsFilters", "macie2:ListInvitations", "macie2:ListMembers", "macie2:ListOrganizationAdminAccounts", "macie2:ListTagsForResource", "macie2:SearchResources", "managedblockchain:GetNetwork", "managedblockchain:GetProposal", "managedblockchain:GetMember", "managedblockchain:GetNode", "managedblockchain:ListNetworks", "managedblockchain:ListProposals", "managedblockchain:ListProposalVotes", "managedblockchain:ListInvitations", "managedblockchain:ListMembers", "managedblockchain:ListNodes", "managedblockchain:ListTagsForResource", "mediaconnect:DescribeFlow", "mediaconnect:DescribeOffering", "mediaconnect:DescribeReservation", "mediaconnect:ListFlows", "mediaconvert:DescribeEndpoints", "mediaconvert:Get*", "mediaconvert:List*", "mediapackage:Describe*", "mediapackage:List*", "mediastore:DescribeContainer", "mediastore:DescribeObject", "mediastore:GetContainerPolicy", "mediastore:GetCorsPolicy", "mediastore:GetLifecyclePolicy", "mediastore:GetMetricPolicy", "mediastore:GetObject", "mediastore:ListContainers", "mediastore:ListItems", "mediastore:ListTagsForResource", "mgh:Describe*", "mgh:GetHomeRegion", "mgh:List*", "mgn:DescribeJobLogItems", "mgn:DescribeJobs", "mgn:DescribeReplicationConfigurationTemplates", "mgn:DescribeSourceServers", "mgn:GetLaunchConfiguration", "mgn:GetReplicationConfiguration", "mobileanalytics:Get*", "mobilehub:Describe*", "mobilehub:Export*", "mobilehub:Generate*", "mobilehub:Get*", "mobilehub:List*", "mobilehub:Validate*", "mobilehub:Verify*", "mobiletargeting:Get*", "mobiletargeting:List*", "monitron:GetProject", "monitron:GetProjectAdminUser", "monitron:ListProjects", "monitron:ListTagsForResource", "mq:Describe*", "mq:List*", "network-firewall:DescribeFirewall", "network-firewall:DescribeFirewallPolicy", "network-firewall:DescribeLoggingConfiguration", "network-firewall:DescribeResourcePolicy", "network-firewall:DescribeRuleGroup", "network-firewall:ListFirewallPolicies", "network-firewall:ListFirewalls", "network-firewall:ListRuleGroups", "network-firewall:ListTagsForResource", "networkmanager:DescribeGlobalNetworks", "networkmanager:GetConnections", "networkmanager:GetCustomerGatewayAssociations", "networkmanager:GetDevices", "networkmanager:GetLinkAssociations", "networkmanager:GetLinks", "networkmanager:GetSites", "networkmanager:GetTransitGatewayConnectPeerassociations", "networkmanager:GetTransitGatewayRegistrations", "opsworks-cm:Describe*", "opsworks-cm:List*", "opsworks:Describe*", "opsworks:Get*", "organizations:Describe*", "organizations:List*", "outposts:Get*", "outposts:List*", "personalize:Describe*", "personalize:Get*", "personalize:List*", "pi:DescribeDimensionKeys", "pi:GetDimensionKeyDetails", "pi:GetResourceMetrics", "polly:Describe*", "polly:Get*", "polly:List*", "polly:SynthesizeSpeech", "proton:GetEnvironment", "proton:GetEnvironmentTemplate", "proton:GetEnvironmentTemplateVersion", "proton:GetService", "proton:GetServiceInstance", "proton:GetServiceTemplate", "proton:GetServiceTemplateVersion", "proton:ListEnvironmentAccountConnections", "proton:ListEnvironments", "proton:ListEnvironmentTemplates", "proton:ListServiceInstances", "proton:ListServices", "proton:ListServiceTemplates", "proton:ListTagsForResource", "qldb:DescribeJournalS3Export", "qldb:DescribeLedger", "qldb:GetBlock", "qldb:GetDigest", "qldb:GetRevision", "qldb:ListJournalS3Exports", "qldb:ListJournalS3ExportsForLedger", "qldb:ListLedgers", "qldb:ListTagsForResource", "ram:Get*", "ram:List*", "rds:Describe*", "rds:Download*", "rds:List*", "redshift:Describe*", "redshift:GetReservedNodeExchangeOfferings", "redshift:View*", "rekognition:CompareFaces", "rekognition:Detect*", "rekognition:List*", "rekognition:Search*", "resource-groups:Get*", "resource-groups:List*", "resource-groups:Search*", "robomaker:BatchDescribe*", "robomaker:Describe*", "robomaker:Get*", "robomaker:List*", "route53-recovery-cluster:Get*", "route53-recovery-control-config:Describe*", "route53-recovery-control-config:List*", "route53-recovery-readiness:Get*", "route53-recovery-readiness:List*", "route53:Get*", "route53:List*", "route53:Test*", "route53domains:Check*", "route53domains:Get*", "route53domains:List*", "route53domains:View*", "route53resolver:Get*", "route53resolver:List*", "s3-object-lambda:GetObject", "s3-object-lambda:GetObjectAcl", "s3-object-lambda:GetObjectLegalHold", "s3-object-lambda:GetObjectRetention", "s3-object-lambda:GetObjectTagging", "s3-object-lambda:GetObjectVersion", "s3-object-lambda:GetObjectVersionAcl", "s3-object-lambda:GetObjectVersionTagging", "s3-object-lambda:ListBucket", "s3-object-lambda:ListBucketMultipartUploads", "s3-object-lambda:ListBucketVersions", "s3-object-lambda:ListMultipartUploadParts", "s3:DescribeJob", "s3:Get*", "s3:List*", "sagemaker:Describe*", "sagemaker:GetSearchSuggestions", "sagemaker:List*", "sagemaker:Search", "savingsplans:DescribeSavingsPlanRates", "savingsplans:DescribeSavingsPlans", "savingsplans:DescribeSavingsPlansOfferingRates", "savingsplans:DescribeSavingsPlansOfferings", "savingsplans:ListTagsForResource", "schemas:Describe*", "schemas:Get*", "schemas:List*", "schemas:Search*", "sdb:Get*", "sdb:List*", "sdb:Select*", "secretsmanager:Describe*", "secretsmanager:GetResourcePolicy", "secretsmanager:List*", "securityhub:Describe*", "securityhub:Get*", "securityhub:List*", "serverlessrepo:Get*", "serverlessrepo:List*", "serverlessrepo:SearchApplications", "servicecatalog:Describe*", "servicecatalog:GetApplication", "servicecatalog:GetAttributeGroup", "servicecatalog:List*", "servicecatalog:Scan*", "servicecatalog:Search*", "servicediscovery:Get*", "servicediscovery:List*", "servicequotas:GetAssociationForServiceQuotaTemplate", "servicequotas:GetAWSDefaultServiceQuota", "servicequotas:GetRequestedServiceQuotaChange", "servicequotas:GetServiceQuota", "servicequotas:GetServiceQuotaIncreaseRequestFromTemplate", "servicequotas:ListAWSDefaultServiceQuotas", "servicequotas:ListRequestedServiceQuotaChangeHistory", "servicequotas:ListRequestedServiceQuotaChangeHistoryByQuota", "servicequotas:ListServiceQuotaIncreaseRequestsInTemplate", "servicequotas:ListServiceQuotas", "servicequotas:ListServices", "ses:Describe*", "ses:Get*", "ses:List*", "shield:Describe*", "shield:Get*", "shield:List*", "signer:DescribeSigningJob", "signer:GetSigningPlatform", "signer:GetSigningProfile", "signer:ListProfilePermissions", "signer:ListSigningJobs", "signer:ListSigningPlatforms", "signer:ListSigningProfiles", "signer:ListTagsForResource", "snowball:Describe*", "snowball:Get*", "snowball:List*", "sns:Check*", "sns:Get*", "sns:List*", "sqs:Get*", "sqs:List*", "sqs:Receive*", "ssm-contacts:DescribeEngagement", "ssm-contacts:DescribePage", "ssm-contacts:GetContact", "ssm-contacts:GetContactChannel", "ssm-contacts:ListContactChannels", "ssm-contacts:ListContacts", "ssm-contacts:ListEngagements", "ssm-contacts:ListPageReceipts", "ssm-contacts:ListPagesByContact", "ssm-contacts:ListPagesByEngagement", "ssm-incidents:GetIncidentRecord", "ssm-incidents:GetReplicationSet", "ssm-incidents:GetResourcePolicies", "ssm-incidents:GetResponsePlan", "ssm-incidents:GetTimelineEvent", "ssm-incidents:ListIncidentRecords", "ssm-incidents:ListRelatedItems", "ssm-incidents:ListReplicationSets", "ssm-incidents:ListResponsePlans", "ssm-incidents:ListTagsForResource", "ssm-incidents:ListTimelineEvents", "ssm:Describe*", "ssm:Get*", "ssm:List*", "sso-directory:Describe*", "sso-directory:List*", "sso-directory:Search*", "sso:Describe*", "sso:Get*", "sso:List*", "sso:Search*", "states:Describe*", "states:GetExecutionHistory", "states:List*", "storagegateway:Describe*", "storagegateway:List*", "sts:GetAccessKeyInfo", "sts:GetCallerIdentity", "sts:GetSessionToken", "support:DescribeCases", "swf:Count*", "swf:Describe*", "swf:Get*", "swf:List*", "synthetics:Describe*", "synthetics:Get*", "synthetics:List*", "tag:Get*", "timestream:DescribeDatabase", "timestream:DescribeEndpoints", "timestream:DescribeTable", "timestream:ListDatabases", "timestream:ListMeasures", "timestream:ListTables", "timestream:ListTagsForResource", "transcribe:Get*", "transcribe:List*", "transfer:Describe*", "transfer:List*", "transfer:TestIdentityProvider", "trustedadvisor:Describe*", "waf-regional:Get*", "waf-regional:List*", "waf:Get*", "waf:List*", "wafv2:CheckCapacity", "wafv2:Describe*", "wafv2:Get*", "wafv2:List*", "workdocs:CheckAlias", "workdocs:Describe*", "workdocs:Get*", "worklink:Describe*", "worklink:List*", "workmail:Describe*", "workmail:Get*", "workmail:List*", "workmail:Search*", "workspaces:Describe*", "xray:BatchGet*", "xray:Get*" ], "Resource": "*" } ] }

역할 신뢰 관계

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

AWS Control Tower 타워가 비관리형 OU 및 계정에서AWS Config 규칙을 집계하는 방법

AWS Control Tower 관리 계정은 외부AWS Config 규칙을 탐지하는 데 도움이 되는 조직 수준의 애그리게이터를 생성하므로 AWS Control Tower는 관리되지 않는 계정에 액세스할 필요가 없습니다. AWS Control Tower 콘솔은 특정 계정에 대해 외부에서 생성한AWS Config 규칙의 수를 보여 주고,AWS Config 콘솔로 연결하면 해당 외부 규칙에 대한 세부 정보를 볼 수 있습니다.

애그리게이터를 생성하기 위해 AWS Control Tower는 조직을 설명하고 해당 조직에 속한 계정을 나열하는 데 필요한 권한을 가진 역할을 추가합니다. AWSControlTowerConfigAggregatorRoleForOrganizations역할에는AWSConfigRoleForOrganizations 관리형 정책과 신뢰 관계가 필요합니다config.amazonaws.com.

역할에 연결된 IAM 정책 (JSON 아티팩트) 은 다음과 같습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "organizations:ListAccounts", "organizations:DescribeOrganization", "organizations:ListAWSServiceAccessForOrganization" ], "Resource": "*" } ] }

다음은AWSControlTowerConfigAggregatorRoleForOrganizations 신뢰 관계입니다.

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

관리 계정에 이 기능을 배포하기 위해 관리형 정책에 다음과 같은 권한이 추가됩니다. 관리형 정책은AWSControlTowerServiceRolePolicyAWS Config 애그리게이터를 만들 때AWSControlTowerAdmin 역할에서 사용됩니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "config:PutConfigurationAggregator", "config:DeleteConfigurationAggregator", "iam:PassRole" ], "Resource": [ "arn:aws:iam:::role/service-role/AWSControlTowerConfigAggregatorRoleForOrganizations", "arn:aws:config:::config-aggregator/" ] }, { "Effect": "Allow", "Action": "organizations:EnableAWSServiceAccess", "Resource": "*" } ] }

새 리소스 생성:AWSControlTowerConfigAggregatorRoleForOrganizationsaws-controltower-ConfigAggregatorForOrganizations

준비가 되면 계정을 개별적으로 등록하거나 OU를 등록하여 그룹으로 등록할 수 있습니다. 계정을 등록한 후 규칙을 생성하면 AWS Control Tower가 새 규칙을 감지합니다.AWS Config 애그리게이터는 외부 규칙의 수를 표시하고 계정에 대한 각 외부 규칙의 세부 정보를 볼 수 있는AWS Config 콘솔 링크를 제공합니다. AWS Config콘솔과 AWS Control Tower 콘솔의 정보를 사용하여 계정에 적절한 컨트롤을 활성화했는지 확인하십시오.

참고

AWS Control Tower 콘솔에서 집계된AWS Config 규칙 목록에 직접 연결하려면 관리 계정의 홈 리전에 있는AWS Config Config Recorder 및 전송 채널을 사용하여 콘솔을 구성하십시오.

AWS Control Tower 감사 계정의 프로그래밍 방식 역할 및 신뢰 관계

감사 계정에 로그인하여 프로그래밍 방식으로 다른 계정을 검토하는 역할을 맡을 수 있습니다. 감사 계정을 이용해 다른 계정에 수동으로 로그인할 수 없습니다.

감사 계정을 사용하면AWS Lambda 함수에만 부여되는 일부 역할을 통해 다른 계정에 프로그래밍 방식으로 액세스할 수 있습니다. 보안을 위해 이러한 역할은 다른 역할과 신뢰 관계를 갖습니다. 즉, 역할을 활용할 수 있는 조건이 엄격하게 정의됩니다.

AWS Control Tower 스택 세트는 감사 계정에서 다음과 같은 프로그래밍 전용 교차 계정 역할을StackSet-AWSControlTowerBP-BASELINE-ROLES 생성합니다.

  • aws-컨트롤 타워-AdministratorExecutionRole

  • aws-컨트롤 타워-AuditAdministratorRole

  • aws-컨트롤 타워-ReadOnlyExecutionRole

  • aws-컨트롤 타워-AuditReadOnlyRole

ReadOnlyExecutionRole:이 역할을 통해 감사 계정은 전체 조직의 Amazon S3 버킷에 있는 객체를 읽을 수 있습니다 (이는 메타데이터 액세스만 허용하는SecurityAudit 정책과는 대조적입니다).

aws-컨트롤 타워-AdministratorExecutionRole:
  • 관리자 권한 보유

  • 콘솔에서는 가정할 수 없습니다.

  • 감사 계정에서의 역할만 맡을 수 있습니다.aws-controltower-AuditAdministratorRole

다음 아티팩트는 에 대한 트러스트 관계를 보여줍니다aws-controltower-AdministratorExecutionRole. 플레이스홀더 번호는012345678901 감사 계정Audit_acct_ID 번호로 대체됩니다.

{   "Version": "2012-10-17",   "Statement": [     {       "Effect": "Allow",       "Principal": {         "AWS": "arn:aws:iam::012345678901:role/aws-controltower-AuditAdministratorRole"       },       "Action": "sts:AssumeRole"     }   ] }
aws-컨트롤 타워-AuditAdministratorRole:
  • AWSLambda 서비스에서만 사용할 수 있습니다.

  • 문자열 로그로 시작하는 이름을 가진 Amazon S3 객체에 대해 읽기 (Get) 및 쓰기 (Put) 작업을 수행할 권한이 있습니다.

첨부된 정책:

1. AWSLambdaExecute—AWS 관리형 정책

2. AssumeRole-aws-컨트롤타워-AuditAdministratorRole — 인라인 정책 — AWS Control Tower 타워에서 생성한 아티팩트는 다음과 같습니다.

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

다음 아티팩트는 에 대한 신뢰 관계를 보여줍니다aws-controltower-AuditAdministratorRole.

{   "Version": "2012-10-17",   "Statement": [     {       "Effect": "Allow",       "Principal": {         "Service": "lambda.amazonaws.com"       },       "Action": "sts:AssumeRole"     }   ] }
aws-컨트롤 타워-ReadOnlyExecutionRole:
  • 콘솔에서는 가정할 수 없습니다.

  • 감사 계정에서 다른 역할만 맡을 수 있습니다.AuditReadOnlyRole

다음 아티팩트는 에 대한 트러스트 관계를 보여줍니다aws-controltower-ReadOnlyExecutionRole. 플레이스홀더 번호는012345678901 감사 계정Audit_acct_ID 번호로 대체됩니다.

{   "Version": "2012-10-17",   "Statement": [     {       "Effect": "Allow",       "Principal": {         "AWS": "arn:aws:iam::012345678901:role/aws-controltower-AuditReadOnlyRole "       },       "Action": "sts:AssumeRole"     }   ] }
aws-컨트롤 타워-AuditReadOnlyRole:
  • AWSLambda 서비스에서만 사용할 수 있습니다.

  • 문자열 로그로 시작하는 이름을 가진 Amazon S3 객체에 대해 읽기 (Get) 및 쓰기 (Put) 작업을 수행할 권한이 있습니다.

첨부된 정책:

1. AWSLambdaExecute—AWS 관리형 정책

2. AssumeRole-aws-컨트롤타워-AuditReadOnlyRole — 인라인 정책 — AWS Control Tower 타워에서 생성한 아티팩트는 다음과 같습니다.

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

다음 아티팩트는 에 대한 신뢰 관계를 보여줍니다aws-controltower-AuditAdministratorRole.

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

IAM 역할을 사용한 자동화된 계정 프로비저닝

Account Factory 계정을 보다 자동화된 방식으로 구성하려면 AWS Control Tower 관리 계정에서 멤버 계정에서의 AWSControlTowerExecution역할을 담당하는 Lambda 함수를 생성할 수 있습니다. 그런 다음 관리 계정은 역할을 사용하여 각 구성원 계정에서 원하는 구성 단계를 수행합니다.

Lambda 함수를 사용하여 계정을 프로비저닝하는 경우 이 작업을 수행할 ID에는 다음과 같은 IAM 권한 정책과 함께 포함되어야AWSServiceCatalogEndUserFullAccess 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSControlTowerAccountFactoryAccess", "Effect": "Allow", "Action": [ "sso:GetProfile", "sso:CreateProfile", "sso:UpdateProfile", "sso:AssociateProfile", "sso:CreateApplicationInstance", "sso:GetSSOStatus", "sso:GetTrust", "sso:CreateTrust", "sso:UpdateTrust", "sso:GetPeregrineStatus", "sso:GetApplicationInstance", "sso:ListDirectoryAssociations", "sso:ListPermissionSets", "sso:GetPermissionSet", "sso:ProvisionApplicationInstanceForAWSAccount", "sso:ProvisionApplicationProfileForAWSAccountInstance", "sso:ProvisionSAMLProvider", "sso:ListProfileAssociations", "sso-directory:ListMembersInGroup", "sso-directory:AddMemberToGroup", "sso-directory:SearchGroups", "sso-directory:SearchGroupsWithGroupName", "sso-directory:SearchUsers", "sso-directory:CreateUser", "sso-directory:DescribeGroups", "sso-directory:DescribeDirectory", "sso-directory:GetUserPoolInfo", "controltower:CreateManagedAccount", "controltower:DescribeManagedAccount", "controltower:DeregisterManagedAccount", "s3:GetObject", "organizations:describeOrganization", "sso:DescribeRegisteredRegions" ], "Resource": "*" } ] }