기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS CDK 및 AWS를 사용하여 AWS 컨트롤 타워 컨트롤을 배포하고 관리합니다. CloudFormation
작성자: Iker Reina Fuente(AWS)와 Ivan Girardi(AWS)
환경: 프로덕션 | 기술: 보안, ID, 규정 CloudNative 준수, 인프라, 관리 및 거버넌스 | |
AWS 서비스: AWS CloudFormation, AWS 컨트롤 타워, AWS Organizations, AWS CDK |
요약
이 패턴은 AWS CloudFormation 및 AWS Cloud Development Kit (AWS CDK) 를 사용하여 예방적, 탐지적, 사전 예방적 AWS Control Tower 제어를 코드형 인프라 (IaC) 로 구현하고 관리하는 방법을 설명합니다. 제어 (가드레일로 알려지기도 함)는 전반적인 AWS 환경에 대한 지속적인 거버넌스를 제공하는 상위 수준 규칙이입니다. 예를 들어 컨트롤을 사용하여 AWS 계정에 대한 로깅을 요구한 다음 특정 보안 관련 이벤트가 발생할 경우 자동 알림을 구성할 수 있습니다.
AWS Control Tower를 사용하면 AWS 리소스를 관리하고 여러 AWS 계정의 규정 준수를 모니터링하는 예방적, 탐지적, 사전 예방적 제어를 구현할 수 있습니다. 각 컨트롤은 단일 규칙을 적용합니다. 이 패턴에서는 제공된 IaC 템플릿을 사용하여 환경에 배포할 컨트롤을 지정합니다.
AWS Control Tower 규제 항목은 전체 조직 유닛(OU)에 적용되며, 제어는 OU 내의 모든 AWS 계정에 영향을 미칩니다. 따라서 사용자가 랜딩 존의 어떤 계정에서든 작업을 수행하는 경우 해당 작업에는 OU를 제어하는 컨트롤이 적용됩니다.
AWS Control Tower 제어를 구현하면 AWS 랜딩 존을 위한 강력한 보안 기반을 구축하는 데 도움이 됩니다. 이 패턴을 사용하여 AWS CDK를 통해 CloudFormation IaC로 컨트롤을 배포하면 랜딩 존의 컨트롤을 표준화하고 더 효율적으로 배포 및 관리할 수 있습니다. 이 솔루션은 배포 중에 cdk_nag
AWS 컨트롤 타워 컨트롤을 IaC로 배포하려면 AWS CDK 대신 HashiCorp Terraform을 사용할 수도 있습니다. 자세한 내용은 Terraform을 사용한 Control Tower 제어 배포 및 관리를 참조하십시오.
대상 청중
이 패턴은 AWS 컨트롤 타워 CloudFormation, AWS CDK 및 AWS Organizations를 사용해 본 경험이 있는 사용자에게 권장됩니다.
사전 조건 및 제한 사항
사전 조건
AWS Organizations와 Control Tower 랜딩 존에서 하나의 조직으로 관리되는 활성 AWS 계정. 지침은 계정 구조 생성
(Well-Architected Labs)을 참조하십시오. 노드 패키지 관리자(npm), CDK용으로 설치 및 구성됨
. CDK를 위한 사전 조건.
배치 계정에서 Identity and Management (IAM) 역할을 맡을 수 있는 권한입니다.
CDK를 부트스트랩하는 데 사용할 수 있는 조직의 관리 계정에서 IAM 역할을 맡을 수 있는 권한. 역할에는 CloudFormation 리소스를 수정하고 배포할 수 있는 권한이 있어야 합니다. 자세한 내용은 AWS CDK 설명서의 부트스트래핑을 참조하세요.
조직의 관리 계정에서 IAM 역할과 정책을 생성할 수 있는 권한. 자세한 내용은 IAM 사용 설명서에서 Permissions required to access IAM 리소스에 액세스하는 데 필요한 권한을 참조하십시오.
식별자CT.CLOUDFORMATION.PR.1을 사용하여 서비스 제어 정책(SCP) 기반 제어를 적용합니다. 사전 예방적 제어를 배포하려면 이 SCP를 활성화해야 합니다. 지침은 AWS CloudFormation 레지스트리 내 리소스 유형, 모듈 및 후크 관리 금지 섹션을 참조하십시오.
제한 사항
이 패턴은 배포 계정에서 조직의 관리 계정에 이르기까지 AWS 계정 전반적으로 이 솔루션을 배포하기 위한 지침을 제공합니다. 테스트 목적으로 이 솔루션을 관리 계정에 직접 배포할 수 있지만 이 구성에 대한 지침은 명시적으로 제공되지 않습니다.
제품 버전
Python 버전 3.9 이상
npm 버전 8.9.0 이상
아키텍처
대상 아키텍처
이 섹션에서는 이 솔루션과 샘플 코드를 통해 설정된 아키텍처에 대한 종합적 개요를 제공합니다. 다음 다이어그램은 OU의 다양한 계정 전반적으로 배포된 제어를 보여줍니다.
![조직 단위의 모든 AWS 계정 전반적으로 배포된 제어에 대한 아키텍처 다이어그램](images/pattern-img/7d0d5e37-58ac-4621-b6b0-cb8c1c767ab0/images/787b7ca0-9d29-4294-a407-6019e38f08c7.png)
AWS Control Tower 컨트롤은 행동 및 지침에 따라 분류됩니다.
제어 동작에는 세 가지 기본 유형이 있습니다.
예방 제어는 조치가 발생하지 않도록 설계되었습니다. 이는 AWS Organizations의 서비스 제어 정책(SCP)을 통해 구현됩니다. 예방적 제어의 상태는 적용 또는 활성화되지 않음입니다. 예방적 제어는 모든 AWS 리전에서 지원됩니다.
Detective Controls는 특정 이벤트가 발생할 때 이를 탐지하고 해당 작업을 기록하도록 설계되었습니다. CloudTrail 이는 AWS Config 규칙을 사용하여 구현됩니다. 탐지적 제어의 상태는 정상, 위반 또는 활성화되지 않음입니다. 탐지 제어는 AWS Control Tower에서 지원하는 AWS 리전에만 적용됩니다.
사전 예방적 제어는 AWS에서 프로비저닝할 리소스를 스캔하고 해당 리소스가 회사 정책 CloudFormation 및 목표를 준수하는지 확인합니다. 규정을 준수하지 않는 리소스는 프로비저닝되지 않습니다. 이들은 AWS CloudFormation 후크로 구현됩니다. 선제적 제어의 상태는 합격, 불합격 또는 건너뛰기입니다.
제어 지침에는 각 제어를 OU에 적용하는 방법에 대한 권장 사례를 참조합니다. Control Tower 에서는 세 가지 범주 지침, 즉 필수, 적극 권장 및 선택을 제공합니다. 컨트롤의 지침은 동작과 무관합니다. 자세한 내용은 제어 동작 및 지침을 참조하십시오.
도구
서비스
AWS Cloud Development Kit(AWS CDK)는 AWS 클라우드 인프라를 코드로 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다. CDK Toolkit은 CDK 앱과 상호 작용하는 기본 도구입니다.
AWS는 AWS CloudFormation 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및 지역 전반의 수명 주기 전반에 걸쳐 리소스를 관리할 수 있도록 지원합니다.
AWS Config는 사용자의 AWS 계정에 있는 리소스와 그 구성 방식을 자세히 보여줍니다. 리소스가 서로 관련되는 방식과 리소스의 구성이 시간이 지남에 따라 변경된 방식을 식별하는 데 도움이 됩니다.
AWS Control Tower는 권장 모범 사례에 따라 AWS 다중 계정 환경을 설정하고 관리할 수 있도록 지원합니다.
Organizations는 사용자가 생성하고 중앙에서 관리하는 조직으로 여러 AWS 계정을 통합할 수 있는 계정 관리 서비스입니다.
기타 도구
코드 리포지토리
이 패턴의 코드는 AWS CDK 리포지토리를 사용한 AWS Control Tower GitHub 배포 컨트롤에서
모범 사례
최소 권한 원칙 (IAM 설명서)을 따르세요. 이 패턴에서 제공되는 IAM 정책 및 신뢰 정책 샘플에는 필요한 최소 권한이 포함되며, 관리 계정에서 생성되는 AWS CDK 스택은 이러한 권한으로 제한됩니다.
Control Tower 관리자를 위한 모범 사례(Control Tower 설명서)를 따르십시오.
CDK를 사용한 클라우드 인프라 개발 및 배포 모범 사례(CDK 설명서)를 따르십시오.
CDK를 부트스트래핑할 때는 부트스트랩 템플릿을 사용자 지정하여 관리 계정의 모든 리소스를 읽고 쓸 수 있어야 하는 신뢰할 수 있는 계정과 정책을 정의합니다. 자세한 내용은 부트스트래핑 사용자 지정하기를 참조하십시오.
cfn_nag와
같은 코드 분석 도구를 사용하여 생성된 템플릿을 스캔합니다. CloudFormation cfn-nag 도구는 CloudFormation 템플릿에서 인프라가 안전하지 않음을 나타낼 수 있는 패턴을 찾습니다. 클라우드포메이션-include 모듈을 사용하여 cdk-nag를 사용하여 템플릿을 확인할 수도 있습니다. CloudFormation
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
관리 계정에서 IAM 역할을 생성합니다. |
| DevOps 엔지니어, 일반 AWS |
CDK를 부트스트랩합니다. |
| DevOps 엔지니어, 일반 AWS, Python |
리포지토리를 복제합니다. | bash 쉘에서 다음 명령을 입력합니다. 이렇게 하면 AWS CDK 리포지토리를 사용하여 AWS Control Tower 배포 컨트롤이
| DevOps 엔지니어, 일반 AWS |
CDK 구성 파일을 편집합니다. |
|
작업 | 설명 | 필요한 기술 |
---|---|---|
배포 계정에서 IAM 역할을 수임합니다. | 배포 계정에서, 관리 계정의 CDK 스택을 배포할 수 있는 권한이 있는 IAM 역할을 떠맡습니다. AWS CLI에서 IAM 역할을 맡는 방법에 대한 자세한 내용은 AWS CLI에서의 IAM 역할 사용을 참조하십시오. | DevOps 엔지니어, 일반 AWS |
환경을 활성화합니다. | Linux 또는 MacOS를 사용하는 경우:
Windows를 사용하는 경우:
| DevOps 엔지니어, 일반 AWS |
종속성을 설치합니다. | 가상 환경이 활성화된 후, 다음 명령을 입력하여 install_deps.sh 스크립트를 실행합니다. 이 스크립트는 필수 종속성을 설치합니다.
| DevOps 엔지니어, 일반 AWS, Python |
스택을 배포합니다. | 다음 명령을 입력하여 CloudFormation 스택을 합성하고 배포합니다.
| DevOps 엔지니어, 일반 AWS, Python |
관련 리소스
설명서
제어에 대한 정보(Control Tower 설명서)
제어 라이브러리(Control Tower 설명서)
CDK Toolkit 명령(CDK 설명서)
Terraform을 사용한 제어 배포 및 관리 (권장 가이드)
기타 리소스
추가 정보
예제 constants.py 파일
다음은 업데이트된 constants.py 파일의 예입니다.
ACCOUNT_ID = 111122223333 AWS_CONTROL_TOWER_REGION = us-east-2 ROLE_ARN = "arn:aws:iam::111122223333:role/CT-Controls-Role" GUARDRAILS_CONFIGURATION = [ { "Enable-Control": { "AWS-GR_ENCRYPTED_VOLUMES", ... }, "OrganizationalUnitIds": ["ou-1111-11111111", "ou-2222-22222222"...], }, { "Enable-Control": { "AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED", ... }, "OrganizationalUnitIds": ["ou-2222-22222222"...], }, ]
IAM 정책
다음 샘플 정책은 배포 계정에서 관리 계정으로 AWS CDK 스택을 배포할 때 Control Tower 제어를 활성화 또는 비활성화하는 데 필요한 최소 작업을 허용합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "controltower:EnableControl", "controltower:DisableControl", "controltower:GetControlOperation", "controltower:ListEnabledControls", "organizations:AttachPolicy", "organizations:CreatePolicy", "organizations:DeletePolicy", "organizations:DescribeOrganization", "organizations:DescribeOrganizationalUnit", "organizations:DetachPolicy", "organizations:ListAccounts", "organizations:ListAWSServiceAccessForOrganization", "organizations:ListChildren", "organizations:ListOrganizationalUnitsForParent", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListRoots", "organizations:UpdatePolicy", "ssm:GetParameters" ], "Resource": "*" } ] }
신뢰 정책
다음 사용자 지정 신뢰 정책은 배포 계정의 특정 IAM 역할이 관리 계정의 IAM 역할을 떠맡을 수 있도록 허용합니다. 다음을 바꿉니다.
<DEPLOYMENT-ACCOUNT-ID>
(은)는 배포 계정의 ID입니다.<DEPLOYMENT-ROLE-NAME>
(은)는 관리 계정에서 역할을 맡을 수 있도록 허용되는 배포 계정의 역할 이름입니다.
{ “Version”: “2012-10-17”, “Statement”: [ { “Effect”: “Allow”, “Principal”: { “AWS”: “arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME>” }, “Action”: “sts:AssumeRole”, “Condition”: {} } ] }