

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

# AWS Control Tower 랜딩 존 사용자 지정
<a name="customize-landing-zone"></a>

리전 선택, 필요에 따른 제어 등 AWS Control Tower 랜딩 존의 특정 측면을 콘솔에서 구성할 수 있습니다. 다른 변경은 자동화를 통해 콘솔 외부에서 수행하면 됩니다.

예를 들어 AWS CloudFormation 템플릿 및 *AWS Control Tower 수명 주기 이벤트와 함께 작동하는 GitOps 스타일 사용자 지정 프레임워크인 Customizations for* AWS Control Tower 기능을 사용하여 랜딩 존을 보다 광범위하게 사용자 지정할 수 있습니다. GitOps

# AWS Control Tower 콘솔에서 사용자 지정
<a name="console-customize"></a>

랜딩 존을 사용자 지정하려면 AWS Control Tower 콘솔에서 제공하는 단계를 따르세요.

**설정 중 사용자 지정 이름 선택**
+ 설정 중에 최상위 OU 이름을 선택할 수 있습니다. AWS Organizations 콘솔을 사용하여 언제든지 OUs의 이름을 바꿀 수 있지만에서 OUs를 변경하면 복구 가능한 [드리프트](drift.md)가 발생할 AWS Organizations 수 있습니다.
+ 공유 **감사** 및 **로그 아카이브** 계정의 이름을 선택할 수 있지만, 설정 후에는 이름을 변경할 수 없습니다. (이는 일회성 선택입니다.)

**도움말**  
에서 OU의 이름을 변경해도 Account Factory에서 해당 프로비저닝된 제품은 업데이트되지 AWS Organizations 않습니다. 프로비저닝된 제품을 자동으로 업데이트하고 드리프트를 방지하려면 OU 생성, 삭제 또는 재등록을 포함하여 AWS Control Tower를 통해 OU 작업을 수행해야 합니다.

**AWS 리전 선택**
+ 거버넌스를 위해 특정 AWS 리전을 선택하여 랜딩 존을 사용자 지정할 수 있습니다. AWS Control Tower 콘솔의 단계를 따릅니다.
+ 랜딩 존을 업데이트할 때 거버넌스를 위한 AWS 리전을 선택하고 선택 취소할 수 있습니다.
+ 리전 거부 제어를 **활성화됨** 또는 **활성화되지** 않음으로 설정하고 관리되지 않는 AWS 리전의 대부분의 AWS 서비스에 대한 사용자 액세스를 제어할 수 있습니다.

CfCT에 배포 제한이 있는 AWS 리전 위치에 대한 자세한 내용은 섹션을 참조하세요[제어 제한 사항](control-limitations.md).

**선택적 제어를 추가하여 사용자 지정**
+ 권장 제어 및 선택적 제어는 필요에 따라 지정하면 됩니다. 따라서 무엇을 활성화할지 선택하여 랜딩 존의 적용 수준을 사용자 지정할 수 있습니다. [선택 사항인 제어](https://docs.aws.amazon.com//controltower/latest/userguide/optional-controls.html)는 기본적으로 비활성 상태입니다.
+ 선택적 [데이터 레지던시 제어](https://docs.aws.amazon.com//controltower/latest/userguide/data-residency-controls.html)를 사용하면 데이터를 저장하고 데이터에 대한 액세스를 허용하는 리전을 사용자 지정할 수 있습니다.
+ 통합 Security Hub CSPM 표준의 일부인 선택적 제어를 사용하면 AWS Control Tower 환경을 스캔하여 보안 위험을 확인할 수 있습니다.
+ 선택적 사전 예방적 제어를 사용하면 CloudFormation 리소스를 프로비저닝하기 전에 확인하여 새 리소스가 환경의 제어 목표를 준수하는지 확인할 수 있습니다.

**AWS CloudTrail 추적 사용자 지정**
+ 랜딩 존을 버전 3.0 이상으로 업데이트하면 AWS Control Tower에서 관리하는 조직 수준의 CloudTrail 추적을 옵트인하거나 옵트아웃할 수 있습니다. 랜딩 존을 업데이트할 때마다 선택을 변경할 수 있습니다. AWS Control Tower는 관리 계정에 조직 수준 추적을 생성하며, 해당 추적은 선택에 따라 활성 또는 비활성 상태로 전환됩니다. 랜딩 존 3.0은 계정 수준 CloudTrail 추적을 지원하지 않지만, 필요한 경우 자체 추적을 구성하고 관리할 수 있습니다. 중복 추적 시 추가 비용이 발생할 수 있습니다.

**콘솔에서 사용자 지정 멤버 계정 생성**
+ 사용자 지정된 AWS Control Tower 멤버 계정을 만들고 AWS Control Tower 콘솔에서 기존 멤버 계정을 업데이트하여 사용자 지정을 추가할 수 있습니다. 자세한 내용은 [Account Factory 사용자 지정(AFC)을 사용하여 계정 사용자 지정](af-customization-page.md) 단원을 참조하세요.

# AWS Control Tower 콘솔 외부에서 사용자 지정 자동화
<a name="automate-customizations"></a>

일부 사용자 지정은 AWS Control Tower 콘솔을 통해 설정할 수 없지만, 다른 방식으로 구현할 수 있습니다. 예제:
+ 프로비저닝 중에 [*Account Factory for Terraform(AFT)*](taf-account-provisioning.md)을 사용하여 GitOps 스타일 워크플로에서 계정을 사용자 지정할 수 있습니다.

  AFT는 [AFT 리포지토리](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main)에서 사용할 수 있는 Terraform 모듈과 함께 배포됩니다.
+  AWS CloudFormation 템플릿 및 서비스 제어 정책(SCP)을 기반으로 구축된 기능 패키지인 [*Customizations for AWS Control Tower(CfCT)를 사용하여 AWS Control Tower*](cfct-overview.md) 랜딩 존을 사용자 지정할 수 있습니다.CfCT SCPs 사용자 지정 템플릿과 정책을 조직 내 개별 계정 및 조직 단위(OU)에 배포할 수 있습니다.

  CfCT의 소스 코드는 [GitHub 리포지토리](https://github.com/aws-solutions/aws-control-tower-customizations)에 있습니다.
+ Landing Zone Accelerator(LZA) on AWS를 사용하여 AWS Control Tower 랜딩 존을 사용자 지정할 수 있습니다. LZA 솔루션은 AWS 모범 사례에 부합하고 여러 글로벌 규정 준수 프레임워크를 준수하도록 설계되었습니다. AWS Control Tower를 기본 랜딩 존으로 배포한 다음, 필요에 따라 LZA를 사용하여 랜딩 존 기능을 개선하는 것이 좋습니다. 자세한 내용은 [AWS Control Tower and Landing zone accelerator](https://docs.aws.amazon.com//controltower/latest/userguide/about-lza.html)를 참조하세요.

# AWS Control Tower 및 Landing Zone Accelerator
<a name="about-lza"></a>

이 섹션에서는 AWS Control Tower와 **Landing Zone Accelerator**(LZA) 솔루션을 함께 사용할 때 얻을 수 있는 이점을 설명합니다.

*Landing Zone Accelerator(LZA) on AWS를 사용하여 AWS Control Tower 랜딩 존을 사용자 지정할 수 있습니다.*

LZA는AWS모범 사례 및 여러 글로벌 규정 준수 프레임워크에 맞게 설계된 기본 기능 세트를 배포하여 다중 계정 환경을 관리하고 관리하는 데 도움이 되는 솔루션입니다. LZA는AWS클라우드 개발 키트(CDK)를 사용하여 빌드됩니다.

LZA는 보안 워크로드 호스팅에 적합한 클라우드 환경을 자동으로 설정합니다. 이 솔루션은 운영 및 거버넌스의 일관성을 유지하는AWS 리전데 도움이 되도록 모든에 배포할 수 있습니다. LZA 솔루션은AWS모범 사례에 부합하고 여러 글로벌 규정 준수 프레임워크를 준수하도록 설계되었습니다.

AWS Control Tower를 기본 랜딩 존으로 배포한 다음 필요에 따라 LZA를 사용하여 랜딩 존 기능을 개선하는 것이 좋습니다. LZA와 AWS Control Tower의 조합은 다중 계정 환경을 관리하고 제어하는 데 도움이 되는 포괄적인 노코드 솔루션을 제공합니다. 이는 고도로 규제되는 워크로드와 복잡한 규정 준수 요구 사항을 지원하도록 구축되었습니다. AWS Control Tower와 Landing Zone Accelerator를 함께 사용하면 보안, 규정 준수 및 운영 기능을 비롯한 플랫폼 준비 상태를 설정하는 데 도움이 됩니다.

LZA의 소스 코드는 [GitHub 리포지토리](https://github.com/awslabs/landing-zone-accelerator-on-aws)에 있습니다.

LZA와 AWS Control Tower를 결합하는 방법에 대한 자세한 내용은 [LZA 구현 가이드](https://docs.aws.amazon.com//solutions/latest/landing-zone-accelerator-on-aws/prerequisites.html)를 참조하세요.

## Customizations for AWS Control Tower(CfCT)의 이점
<a name="benefits-of-cfct"></a>

*Customizations for AWS Control Tower*(CfCT)라고 하는 기능 패키지는 AWS Control Tower 콘솔에서 만들 수 있는 것보다 랜딩 존에 대해 더 광범위한 사용자 지정을 만드는 데 도움이 됩니다. GitOps 스타일의 자동화된 프로세스를 제공합니다. 비즈니스 요구 사항에 맞게 랜딩 존을 재구성할 수 있습니다.

이 *infrastructure-as-code* 사용자 지정 프로세스는 AWS CloudFormation 템플릿을 AWS 서비스 제어 정책(SCPs) 및 AWS Control Tower [수명 주기 이벤트](lifecycle-events.md)와 통합하여 리소스 배포가 랜딩 존과 동기화된 상태로 유지됩니다. 예를 들어, Account Factory로 새 계정을 만들면 계정에 연결된 리소스와 OU를 자동으로 배포할 수 있습니다.

**참고**  
Account Factory 및 AFT와 달리 CfCT는 새 계정을 생성하는 것보다는 지정한 리소스를 배포하여 랜딩 존의 계정과 OU를 사용자 지정하는 것을 목표로 합니다.

**참고**  
CfCT에 구성된 대상 조직 단위(OU)는 AWS Control Tower에서 AWSControlTowerBaseline이 활성화되어 있어야 합니다. AWSControlTowerBaseline에 대한 자세한 내용은 섹션을 참조하세요[OU 수준에서 적용되는 기준 유형](types-of-baselines.md#ou-baseline-types).

**이점**
+ **사용자 지정되고 안전한 AWS 환경 확장** - 다중 계정 AWS Control Tower 환경을 더 빠르게 확장하고 AWS 모범 사례를 반복 가능한 사용자 지정 워크플로에 통합할 수 있습니다.
+ **요구 사항 인스턴스화** - 정책 의도를 나타내는 AWS CloudFormation 템플릿 및 서비스 제어 정책을 사용하여 비즈니스 요구 사항에 맞게 AWS Control Tower 랜딩 존을 사용자 지정할 수 있습니다.
+ **AWS Control Tower 수명 주기 이벤트로 추가 자동화** - 수명 주기 이벤트를 사용하면 완료한 일련의 이전 이벤트를 기반으로 리소스를 배포할 수 있습니다. 수명 주기 이벤트에 의존하여 계정 및 OU에 리소스를 자동으로 배포할 수 있습니다.
+ **네트워크 아키텍처 확장** - 전송 게이트웨이와 같이 연결을 개선하고 보호하는 사용자 지정 네트워크 아키텍처를 배포할 수 있습니다.

## 추가 CfCT 예제
<a name="cfct-examples"></a>
+ *Customizations for AWS Control Tower*(CfCT)를 사용한 네트워킹 사용 사례의 예는 AWS 아키텍처 블로그 게시물인 Deploy [consistent DNS with Service Catalog and AWS Control Tower customs](https://aws.amazon.com/blogs//architecture/deploy-consistent-dns-with-aws-service-catalog-and-aws-control-tower-customizations/)에 나와 있습니다.
+ [CfCT 및 Amazon GuardDuty와 관련된](https://github.com/aws-samples/aws-security-reference-architecture-examples/tree/main/aws_sra_examples/solutions/guardduty/guardduty_org/customizations_for_aws_control_tower) 특정 예제는 [`aws-samples` 리포지토리](https://github.com/aws-samples/aws-security-reference-architecture-examples)의 GitHub에서 사용할 수 있습니다.
+ CfCT에 대한 추가 코드 예제는 [`aws-samples` 리포지토리](https://github.com/aws-samples/aws-security-reference-architecture-examples)에서 AWS Security Reference Architecture의 일부로 사용할 수 있습니다. 이러한 예제 중 다수에는 `customizations_for_aws_control_tower`라는 디렉터리에 샘플 `manifest.yaml` 파일이 포함되어 있습니다.

 AWS 보안 참조 아키텍처에 대한 자세한 내용은 [AWS 권장 가이드 페이지를](https://docs.aws.amazon.com//prescriptive-guidance/latest/security-reference-architecture/welcome.html) 참조하세요.

# Customizations for AWS Control Tower(CfCT) 개요
<a name="cfct-overview"></a>

*Customizations for AWS Control Tower*(CfCT)를 사용하면 AWS Control Tower 랜딩 존을 사용자 지정하고 AWS 모범 사례에 맞게 조정할 수 있습니다. 사용자 지정은 AWS CloudFormation 템플릿 및 서비스 제어 정책(SCPs.

이 CfCT 기능은 AWS Control Tower 수명 주기 이벤트와 통합되어 리소스 배포가 랜딩 존과 동기화된 상태로 유지됩니다. 예를 들어, Account Factory를 통해 새 계정을 생성하면 계정에 연결된 모든 리소스가 자동으로 배포됩니다. 사용자 지정 템플릿과 정책을 조직 내 개별 계정 및 조직 단위(OU)에 배포할 수 있습니다.

**참고**  
CfCT에 구성된 대상 조직 단위(OU)는 AWS Control Tower에서 AWSControlTowerBaseline이 활성화되어 있어야 합니다. AWSControlTowerBaseline에 대한 자세한 내용은 섹션을 참조하세요[OU 수준에서 적용되는 기준 유형](types-of-baselines.md#ou-baseline-types).

 다음 비디오에서는 확장 가능한 CfCT 파이프라인 및 일반적인 CfCT 사용자 지정을 배포하는 모범 사례를 설명합니다.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/fDtxiBW_J8I/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/fDtxiBW_J8I)


다음 섹션에서는 Customizations for AWS Control Tower(CfCT)를 배포하기 위한 아키텍처 고려 사항 및 구성 단계를 제공합니다. 여기에는 보안 및 가용성 모범 AWS 사례에 따라 필요한 AWS 서비스를 시작, 구성 및 실행하는 [AWS CloudFormation](https://aws.amazon.com/cloudformation) 템플릿에 대한 링크가 포함되어 있습니다.

*이 주제는 AWS 클라우드에서 아키텍처를 설계한 실무 경험이 있는 IT 인프라 설계자 및 개발자를 대상으로 합니다.*

Customizations for AWS Control Tower(CfCT)의 최신 업데이트 및 변경 사항에 대한 자세한 내용은 GitHub 리포지토리의 [CHANGELOG.md 파일](https://github.com/aws-solutions/aws-control-tower-customizations/blob/master/CHANGELOG.md)을 참조하세요.

# 아키텍처 개요
<a name="architecture"></a>

CfCT를 배포하면 Amazon S3 버킷을 구성 소스로 사용하여 AWS 클라우드에 다음 환경이 빌드됩니다.

![\[Customizations for AWS Control Tower 아키텍처 다이어그램\]](http://docs.aws.amazon.com/ko_kr/controltower/latest/userguide/images/customizations-for-aws-control-tower-architecture-diagram.png)


CfCT에는 AWS Control Tower 관리 계정에 배포하는 AWS CloudFormation 템플릿이 포함되어 있습니다. 이 템플릿은 워크플로를 구축하는 데 필요한 모든 구성 요소를 시작하므로 AWS Control Tower 랜딩 존을 사용자 지정할 수 있습니다.

**Note**  
CfCT는 AWS Control Tower 홈 리전과 AWS Control Tower 관리 계정에 배포해야 합니다. 여기에 AWS Control Tower 랜딩 존이 배포되기 때문입니다. AWS Control Tower 랜딩 존 설정에 대한 자세한 내용은 [AWS Control Tower 시작하기](getting-started-with-control-tower.md) 섹션을 참조하세요.

CfCT를 배포하면 [Amazon Simple Storage Service](https://aws.amazon.com/s3/)(Amazon S3)를 통해 사용자 지정 리소스가 패키징되고 코드 파이프라인 소스에 업로드됩니다. 업로드 프로세스는 서비스 제어 정책(SCP) 상태 시스템 및 [AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) 상태 시스템을 자동으로 호출하여 OU 수준에서 SCP를 배포하거나 OU 또는 계정 수준에서 스택 인스턴스를 배포합니다.

**Note**  
기본적으로 CfCT는 파이프라인 소스를 저장할 Amazon S3 버킷을 생성합니다. 기존 AWS CodeCommit 리포지토리가 있는 경우 위치를 [CodeCommit](https://aws.amazon.com/codecommit/) 리포지토리로 변경할 수 있습니다. 자세한 내용은 [[구성 소스로 Amazon S3 설정](cfct-s3-source.md)을 참조하세요](cfct-s3-source.md).

**CfCT는 두 가지 워크플로를 배포합니다.**
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/) 워크플로
+ 및 AWS Control Tower 수명 주기 이벤트 워크플로.

** AWS CodePipeline 워크플로**

 AWS CodePipeline 워크플로는 조직의 AWS CloudFormation StackSets 및 SCP 관리를 오케스트레이션[AWS Step Functions](https://aws.amazon.com/step-functions/)하는 , AWS CodePipeline[AWS CodeBuild](https://aws.amazon.com/codebuild/) 프로젝트 및를 구성합니다. SCPs 

구성 패키지를 업로드하면 CfCT에서 코드 파이프라인을 호출하여 다음과 같은 3개 스테이지를 실행합니다.
+ **빌드 스테이지** - AWS CodeBuild를 사용하여 구성 패키지의 내용을 검증합니다.
+ **SCP 단계** - API를 호출 AWS Organizations 하여 SCPs.
+ **CloudFormation 단계** -는 스택 세트 상태 시스템을 호출하여 매[니페스트 파일에](the-manifest-file.md) 제공한 계정 또는 OUs 목록에 지정된 리소스를 배포합니다.

각 스테이지에서 코드 파이프라인은 스택 세트 및 SCP Step Functions를 호출하여 사용자 지정 스택 세트와 SCP를 대상 개별 계정 또는 전체 조직 단위에 배포합니다.

**Note**  
구성 패키지 사용자 지정에 대한 자세한 내용은 [CfCT 사용자 지정 가이드](cfct-customizations-dev-guide.md) 섹션을 참조하세요.

**AWS Control Tower 수명 주기 이벤트 워크플로**

AWS Control Tower에서 새 계정이 생성되면 [수명 주기 이벤트](lifecycle-events.md)가 AWS CodePipeline 워크플로를 호출할 수 있습니다. Amazon [ EventBridge](https://aws.amazon.com/eventbridge/) 이벤트 규칙, Amazon [Simple Queue Service](https://aws.amazon.com/sqs/)(Amazon SQS) 선입선출(FIFO) 대기열 및 [AWS Lambda](https://aws.amazon.com/lambda/) 함수로 구성된 이 워크플로를 통해 구성 패키지를 사용자 지정할 수 있습니다.

Amazon EventBridge 이벤트 규칙은 일치하는 수명 주기 이벤트를 감지하면 이벤트를 Amazon SQS FIFO 대기열에 전달하고, AWS Lambda 함수를 호출하고, 코드 파이프라인을 호출하여 스택 세트 및 SCPs의 다운스트림 배포를 수행합니다.

# 비용
<a name="cost"></a>

CfCT 실행 비용은 AWS CodePipeline 실행 횟수, AWS CodeBuild 실행 기간, AWS Lambda 함수 수 및 기간, 게시된 Amazon EventBridge 이벤트 수에 따라 달라집니다. 예를 들어 각 빌드가 5분 동안 실행되는 **build.general1.small**을 사용하여 한 달에 100개의 빌드를 실행하는 경우 CfCT 실행에 드는 대략적인 비용은 **월 \$13.00**입니다. 자세한 내용은 실행 중인 각 AWS 서비스의 요금 웹 페이지를 참조하세요.

Amazon Simple Storage Service(Amazon S3) 버킷 및 AWS CodeCommit Git 기반 리포지토리 리소스는 구성 정보를 보호하기 위해 템플릿을 삭제한 후에도 유지됩니다. 선택한 옵션에 따라 Amazon S3 버킷에 저장된 데이터의 양과 Git 요청 수를 기반으로 요금이 부과됩니다(Amazon S3 리소스에는 적용되지 않음). 자세한 내용은 [Amazon S3](https://aws.amazon.com/s3/pricing/) 및 [AWS CodeCommit](https://aws.amazon.com/codecommit/pricing/) 요금을 참조하세요.

# 구성 요소 서비스
<a name="components"></a>

 다음 AWS 서비스는 *Customizations for AWS Control Tower*(CfCT)의 구성 요소입니다.

## AWS CodeCommit
<a name="comp-aws-codecommit"></a>

기존 AWS CodeCommit 리포지토리가 있는 경우 Amazon S3의 대안으로 파이프라인의 소스로 구성할 수 있습니다.

 CloudFormation 템플릿에 대한 입력에 따라 CfCT는 Amazon Simple Storage Service 섹션에 설명된 것과 동일한 샘플 구성으로 [AWS CodeCommit](https://aws.amazon.com/codecommit/)리포지토리를 생성할 수 있습니다.

CfCT AWS CodeCommit 리포지토리를 로컬 컴퓨터에 복제하려면 [AWS CodeCommit 사용 설명서에](https://docs.aws.amazon.com//codecommit/latest/userguide/temporary-access.html#temporary-access-configure-credentials) 설명된 대로 리포지토리에 대한 임시 액세스 권한을 부여하는 자격 증명을 생성해야 합니다. 버전 호환성에 대한 자세한 내용은 [AWS CodeCommit설정](https://docs.aws.amazon.com//console/codecommit/connect-tc-alert-np)을 참조하세요.

**참고**  
CodeCommit를 아직 사용하지 않은 경우 유일한 옵션은 Amazon S3 버킷을 구성 패키지의 스토리지 위치로 설정하는 것입니다. CfCT를 처음으로 배포하는 경우 CodeCommit을 사용할 수 없습니다.

## AWS CodePipeline
<a name="comp-aws-codepipeline"></a>

AWS CodePipeline 는 기본 Amazon S3 버킷 또는 AWS CodeCommit 리포지토리에서 수행할 구성 패키지 업데이트를 기반으로 변경 사항을 검증, 테스트 및 구현합니다. 구성 소스 제어에 대한 자세한 내용은 [Amazon S3를 구성 소스로 사용](cfct-s3-source.md)을 참조하세요. 파이프라인에는 구성 파일 및 템플릿, 코어 계정, AWS Organizations 서비스 제어 정책 및 AWS CloudFormation StackSets. 파이프라인 단계에 대한 자세한 내용은 [CfCT 사용자 지정 가이드](cfct-customizations-dev-guide.md) 섹션을 참조하세요.

## AWS Key Management Service
<a name="comp-aws-kms"></a>

CfCT는 [AWS Key Management Service](https://aws.amazon.com/kms/)(AWS KMS) `CustomControlTowerKMSKey` 암호화 키를 생성합니다. 이 키는 Amazon S3 구성 버킷의 객체, Amazon SQS 대기열 및 AWS Systems Manager Parameter Store의 민감한 파라미터를 암호화하는 데 사용됩니다. 기본적으로 CfCT에서 프로비저닝한 역할만 이 키로 암호화 또는 복호화 작업을 수행할 수 있는 권한이 있습니다. 구성 파일, FIFO 대기열 또는 Parameter Store `SecureString` 값에 액세스하려면 관리자를 `CustomControlTowerKMSKey` 정책에 추가해야 합니다. 기본적으로 자동 키 교체는 활성화되지 않습니다.

## AWS Lambda
<a name="comp-aws-lambda"></a>

CfCT는 AWS Lambda 함수를 사용하여 AWS Control Tower 수명 주기 이벤트 중에 AWS CloudFormation StackSets 또는 AWS Organizations SCPs 중에 설치 구성 요소를 호출합니다.

## Amazon Simple Notification Service
<a name="comp-amazon-sns"></a>

 CfCT는 워크플로 중에 [Amazon Simple Notification Service](https://aws.amazon.com/sns/)(Amazon SNS) 주제에 파이프라인 승인과 같은 알림을 게시할 수 있습니다. Amazon SNS는 파이프라인 승인 알림을 수신하도록 선택한 경우에만 시작됩니다.

## Amazon Simple Storage Service
<a name="comp-amazon-s3"></a>

 CfCT를 배포하는 경우 CfCT는 고유한 이름을 가진 Amazon Simple Storage Service(Amazon S3) 버킷을 생성합니다.

 **예제: Amazon S3 버킷 이름** 

 `custom-control-tower-configuration-accountID-region` 

 버킷에 `_custom-control-tower-configuration.zip`이라는 샘플 구성 파일이 포함되어 있습니다.

파일 이름 맨 앞에 밑줄이 있는 것을 주목하세요.

 이 zip 파일은 필요한 폴더 구조를 설명하는 샘플 매니페스트와 관련 샘플 템플릿을 제공합니다. 이러한 예제는 AWS Control Tower 랜딩 존을 사용자 지정하는 구성 패키지를 개발하는 데 도움이 됩니다. 샘플 매니페스트는 사용자 지정을 구현할 때 필요한 스택 세트 및 서비스 제어 정책(SCP)에 대한 필수 구성을 식별합니다.

이 샘플 구성 패키지를 모델로 사용하여 CfCT 구성 파이프라인을 자동으로 트리거하는 사용자 지정 패키지를 개발하고 업로드할 수 있습니다.

구성 파일 사용자 지정에 대한 자세한 내용은 [CfCT 사용자 지정 가이드](cfct-customizations-dev-guide.md) 섹션을 참조하세요.

## Amazon Simple Queue Service
<a name="comp-amazon-sqs"></a>

CfCT는 Amazon Simple Queue Service(Amazon SQS) FIFO 대기열을 사용하여 Amazon EventBridge에서 수명 주기 이벤트를 캡처합니다. 함수를 트리거하여 AWS CloudFormation StackSets 또는 SCP를 배포 AWS CodePipeline 하도록 AWS Lambda 호출합니다. SCPs SCP에 대한 자세한 내용은 [AWS Organizations](https://aws.amazon.com/organizations/) 섹션을 참조하세요.

## AWS Step Functions
<a name="comp-aws-step-functions"></a>

 CfCT는 Step Functions를 생성하여 사용자 지정 배포를 오케스트레이션합니다. 이러한 Step Functions는 구성 파일을 변환하여 필요에 따라 환경 전체에 사용자 지정을 배포합니다.

## AWS Systems Manager 파라미터 스토어
<a name="comp-aws-sm-parameter-store"></a>

[AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)는 CfCT 구성 파라미터를 저장합니다. 이러한 파라미터를 사용하면 관련 구성 템플릿을 통합할 수 있습니다. 예를 들어 중앙 집중식 Amazon S3 버킷에 AWS CloudTrail 데이터를 로깅하도록 각 계정을 구성할 수 있습니다. 또한 Systems Manager Parameter Store는 관리자가 CfCT 입력 및 파라미터를 볼 수 있는 중앙 위치를 제공합니다.

# 배포 고려 사항
<a name="cfct-considerations"></a>

AWS Control Tower 랜딩 존이 배포된 동일한 계정 및 리전에서 *Customizations for AWS Control Tower*(CfCT)를 시작해야 합니다. 즉, AWS Control Tower 홈 리전의 AWS Control Tower 관리 계정에 배포해야 합니다. 기본적으로 CfCT는 해당 계정 및 리전에 구성 파이프라인을 설정하여 랜딩 존 구성 패키지를 생성하고 실행합니다.

## 배포 준비
<a name="deploy-custom-aws-ct-deploy"></a>

초기 배포를 위해 CloudFormation 템플릿을 준비할 때 몇 가지 옵션이 있습니다. 구성 소스를 선택하고 파이프라인 배포에 대한 수동 승인을 허용할 수 있습니다. 다음 두 섹션에서는 이러한 옵션에 대해 자세히 설명합니다.

### 구성 소스 선택
<a name="deploy-config-source"></a>

기본적으로 템플릿은 샘플 구성 패키지를 `_custom-control-tower-configuration.zip`이라는 `.zip` 파일로 저장하는 Amazon Simple Storage Service(Amazon S3) 버킷을 생성합니다. Amazon S3 버킷은 버전이 관리되며, 필요에 따라 구성 패키지를 업데이트할 수 있습니다. 구성 패키지 업데이트에 대한 자세한 내용은 [구성 소스로 Amazon S3 사용](cfct-s3-source.md)을 참조하세요.

**밑줄을 제거하세요**  
샘플 구성 패키지 파일 이름은 밑줄(\$1)로 시작되므로 AWS CodePipeline 가 자동으로 시작되지 않습니다. 구성 패키지 사용자 지정을 완료했으면 밑줄(\$1) 없이 `custom-control-tower-configuration.zip`을 업로드하여 AWS CodePipeline에서 배포를 시작해야 합니다.

기존 AWS CodeCommit Git 리포지토리가 있는 경우 구성 패키지의 스토리지 위치를 Amazon S3 버킷에서 AWS CodeCommit Git 리포지토리로 변경할 수 있습니다. 이렇게 하려면 CloudFormation 파라미터에서 `CodeCommit` 옵션을 선택합니다.

**압축 사용 여부**  
기본 S3 버킷을 사용하는 경우 구성 패키지를 `.zip` 파일로 사용할 수 있는지 확인합니다. AWS CodeCommit 리포지토리를 사용하는 경우 파일을 압축하지 않고 리포지토리에 구성 패키지를 배치해야 합니다. 구성 패키지를 생성하고에 저장하는 방법에 대한 자세한 내용은 단원을 AWS CodeCommit참조하십시오[CfCT 사용자 지정 가이드](cfct-customizations-dev-guide.md).

샘플 구성 패키지를 사용하여 사용자 지정 구성 소스를 생성할 수 있습니다. 사용자 지정 구성을 배포할 준비가 되면 Amazon S3 버킷 또는 AWS CodeCommit 리포지토리에 구성 패키지를 수동으로 업로드합니다. 구성 파일을 업로드하면 파이프라인이 자동으로 시작됩니다.

### 파이프라인 구성 승인 파라미터 선택
<a name="deploy-pipeline-config-parameters"></a>

 AWS CloudFormation 템플릿은 구성 변경 사항의 배포를 수동으로 승인하는 옵션을 제공합니다. 기본적으로 수동 승인은 활성화되지 않습니다. 자세한 정보는 [1단계. 스택 시작](step1.md)을 참조하세요.

수동 승인이 활성화되면 구성 파이프라인은 AWS Control Tower 파일 매니페스트 및 템플릿에 대한 사용자 지정을 검증한 다음 수동 승인이 부여될 때까지 프로세스를 일시 중지합니다. 승인 후 배포는 필요에 따라 나머지 파이프라인 단계를 실행하여 *Customizations for AWS Control Tower*(CfCT) 기능을 구현합니다.

수동 승인 파라미터를 사용하면 파이프라인을 통한 첫 번째 실행 시도를 거부하여 AWS Control Tower 구성에 대한 사용자 지정이 실행되지 않도록 할 수 있습니다. 또한 이 파라미터를 사용하면 구현하기 전 최종 제어로 AWS Control Tower 구성 변경에 대한 사용자 지정을 수동으로 검증할 수 있습니다.

## AWS Control Tower에 대한 사용자 지정을 업데이트하려면
<a name="update"></a>

이전에 CfCT를 배포한 경우 최신 버전의 CfCT 프레임워크를 가져오도록 CloudFormation 스택을 업데이트해야 합니다. 자세한 내용은 [스택 업데이트](update-stack.md)를 참조하세요.

# 템플릿 및 소스 코드
<a name="cfct-template"></a>

 AWS CloudFormation 템플릿을 시작한 후 Customizations for AWS Control Tower(CfCT)가 관리 계정에 배포됩니다. GitHub에서 [템플릿](  https://github.com/aws-solutions/aws-control-tower-customizations/blob/main/customizations-for-aws-control-tower.template)을 다운로드한 다음 [AWS CloudFormation](https://console.aws.amazon.com/cloudformation/home?region=us-east-1)에서 시작할 수 있습니다.

 **customs-for-aws-control-tower.template**은 다음을 배포합니다.
+  AWS CodeBuild 프로젝트 
+  AWS CodePipeline 프로젝트 
+  Amazon EventBridge 규칙 
+  AWS Lambda 함수 
+  Amazon Simple Queue Service 대기열 
+  샘플 구성 패키지가 있는 Amazon Simple Storage Service 버킷 
+  AWS Step Functions 

**참고**  
 특정 요구 사항에 따라 템플릿을 사용자 지정할 수 있습니다.

## 소스 코드 리포지토리
<a name="cfct-source-code"></a>

[GitHub 리포지토리](https://github.com/aws-solutions/aws-control-tower-customizations)를 방문하여 CfCT용 템플릿과 스크립트를 다운로드하고 랜딩 존 사용자 지정을 다른 사람들과 공유할 수 있습니다.

# 자동 배포
<a name="deployment"></a>

자동 배포를 시작하기 전에 [고려 사항](cfct-considerations.md)을 검토합니다. 이 섹션의 단계별 지침에 따라 솔루션을 구성하고 AWS Control Tower 관리 계정에 배포합니다.

**배포에 소요되는 시간:** 약 15분

## 사전 조건
<a name="prerequisites"></a>

CfCT는 AWS Control Tower 관리 계정과 AWS Control Tower 홈 리전에 배포해야 합니다. 랜딩 존을 설정하지 않은 경우 [AWS Control Tower 시작하기](getting-started-with-control-tower.md) 섹션을 참조하세요.

## 배포 단계
<a name="what-we-cover"></a>

CfCT 배포 절차는 두 가지 주요 단계로 구성됩니다. 자세한 지침은 각 단계에 대한 링크를 따르세요.

[1단계. 스택 시작](step1.md)
+ 관리 계정으로 CloudFormation 템플릿을 시작합니다.
+ 템플릿 파라미터를 검토하고 필요한 경우 조정합니다.

[2단계. 사용자 지정 패키지 생성](step2.md)
+ 사용자 지정 구성 패키지를 생성합니다.

**중요**  
올바른 AWS CloudFormation 템플릿을 다운로드하고 CfCT를 시작하려면 이 섹션에 제공된 GitHub 링크를 따르세요. 이전에 지정된 S3 버킷으로 연결되는 이전 링크를 따르지 마세요.

# 1단계. 스택 시작
<a name="step1"></a>

이 섹션의 CloudFormation 템플릿은 계정에 *Customizations for AWS Control Tower*(CfCT)를 배포합니다.

**참고**  
CfCT를 실행하는 동안 사용한 AWS 서비스 비용에 대한 책임은 귀하에게 있습니다. 자세한 내용은 [비용](cost.md) 섹션을 참조하세요.

1. *Customizations for AWS Control Tower*를 시작하려면 [GitHub에서 템플릿을 다운로드](  https://github.com/aws-solutions/aws-control-tower-customizations/blob/main/customizations-for-aws-control-tower.template)한 다음 [AWS CloudFormation](https://console.aws.amazon.com/cloudformation/home?region=us-east-1)에서 시작합니다.

1. 이 템플릿은 기본적으로 미국 동부(버지니아 북부) 리전에서 시작됩니다. 다른 AWS 리전에서 CfCT를 시작하려면 콘솔 탐색 표시줄의 리전 선택기를 사용하세요.
**참고**  
CfCT는 홈 리전인 AWS Control Tower 랜딩 존을 배포한 리전과 동일한 리전 및 계정에서 실행해야 합니다.

1. **스택 생성** 페이지에서 **URL** 텍스트 상자에 올바른 템플릿 URL이 표시되는지 확인하고 **다음**을 선택합니다.

1. **스택 세부 정보 지정** 페이지에서 CfCT 스택 이름을 할당합니다.

1. **파라미터**에서 다음 파라미터를 검토하고 필요한 경우 템플릿에서 수정합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/controltower/latest/userguide/step1.html)

1. **다음**을 선택합니다.

1. **스택 옵션 구성 페이지**에서 **다음**을 선택합니다.

1. **검토** 페이지에서 설정을 검토하고 확인합니다. 템플릿이 AWS Identity and Access Management(IAM) 리소스를 생성한다는 것을 확인하는 확인란을 선택해야 합니다.

1. **스택 생성**을 선택하여 스택을 배포합니다.

   CloudFormation 콘솔의 **상태** 열에서 스택의 상태를 볼 수 있습니다. 약 15분 후에 **CREATE\$1COMPLETE** 상태를 확인할 수 있습니다.

# 2단계. 사용자 지정 패키지 생성
<a name="step2"></a>

시작된 스택을 사용하면 포함된 구성 패키지를 사용자 지정하여 AWS Control Tower 랜딩 존 및 서비스 제어 정책(SCP)에 사용자 지정을 추가할 수 있습니다. 사용자 지정 패키지 생성에 대한 자세한 지침은 [CfCT 사용자 지정 가이드](cfct-customizations-dev-guide.md) 섹션을 참조하세요.

**참고**  
파이프라인은 사용자 지정 구성 패키지를 업로드하지 않으면 실행되지 않습니다.

# 스택 업데이트
<a name="update-stack"></a>

 이전에 *Customizations for AWS Control Tower*(CfCT)를 배포한 경우 절차에 따라 최신 버전의 CfCT 프레임워크에 대한 AWS CloudFormation 스택을 업데이트합니다.

**중요**  
 다음 절차를 완료하려면 먼저 [GitHub의 최신 템플릿](  https://github.com/aws-solutions/aws-control-tower-customizations/blob/main/customizations-for-aws-control-tower.template)을 Amazon Simple Storage Service(Amazon S3) 버킷에 업로드해야 합니다. Amazon S3를 시작하는 방법에 대한 지침은 *Amazon Simple Storage Service 사용 설명서*의 [ Getting started with Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)를 참조하세요.

1.  [AWS CloudFormation 콘솔](https://console.aws.amazon.com/cloudformation)에 로그인합니다.

1.  기존 **Customizations for AWS Control Tower**(CfCT) CloudFormation 스택을 선택한 다음 **업데이트**를 선택합니다.

1.  **사전 조건 - 템플릿 준비**에서 **현재 템플릿 교체**를 선택합니다.

1.  **템플릿 지정**에서 다음을 수행합니다.

   1.  **템플릿 소스**의 경우 **현재 템플릿 교체**를 선택합니다.

   1.  **Amazon S3 URL**의 경우 이전에 GitHub에서 Amazon S3로 업로드한 템플릿의 템플릿 URL을 입력한 다음 **다음**을 선택합니다.

   1.  템플릿 URL이 올바른지 확인합니다. **다음**을 선택한 후 **다음**을 다시 한 번 선택합니다.

1. **파라미터**에서 템플릿의 파라미터를 검토하고 필요에 따라 수정합니다. [1단계. 스택 시작](step1.md)에서 파라미터에 대한 세부 정보를 참조할 수 있습니다.

1. **다음**을 선택합니다.

1. **스택 옵션 구성** 페이지에서 **다음**을 선택합니다.

1. **검토** 페이지에서 설정을 검토하고 확인합니다. 템플릿이 AWS Identity and Access Management(IAM) 리소스를 생성할 수 있음을 확인하는 상자를 선택합니다.

1. **변경 세트 보기**를 선택하고 변경 사항을 확인합니다.

1. **스택 생성**을 선택하여 스택을 배포합니다.

   AWS CloudFormation 콘솔의 **상태** 열에서 스택의 상태를 볼 수 있습니다. 약 15분 후에 **UPDATE\$1COMPLETE** 상태를 확인할 수 있습니다.

# 스택 세트 삭제
<a name="cfct-delete-stack"></a>

매니페스트 파일에서 스택 세트 삭제를 활성화한 경우 스택 세트를 삭제할 수 있습니다. 기본적으로 `enable_stack_set_deletion` 파라미터는 `false`로 설정됩니다. 이 구성에서는 CfCT 매니페스트 파일에서 리소스를 제거할 때 연결된 스택 세트를 삭제하는 작업이 수행되지 않습니다.

매니페스트 파일에서 `enable_stack_set_deletion`의 값을 `true`로 변경하면 매니페스트 파일에서 연결된 리소스를 제거할 때 CfCT가 스택 세트와 모든 해당 리소스를 삭제합니다.

이 기능은 매니페스트 파일의 **v2**에서 지원됩니다.

**중요**  
`enable_stack_set_deletion`의 값을 `true`로 처음 설정하면 다음에 CfCT를 간접 호출할 때 연결된 키 태그 `Key:AWS_Solutions, Value: CustomControlTowerStackSet`가 있고 매니페스트 파일에 선언되지 않은, 접두사 `CustomControlTower-`로 시작하는 **모든** 리소스가 삭제를 위해 준비됩니다.

다음은 `manifest.yaml` 파일에서 이 파라미터를 설정하는 방법의 예제입니다.

```
version: 2021-03-15
region: us-east-1
enable_stack_set_deletion: true   #New opt-in functionality


resources: 
  - name: demo_resource_1
    resource_file: s3://demo_bucket/resource.template
    deployment_targets:
      accounts:
        - 012345678912
    deploy_method: stack_set
    ...
    regions:
    - us-east-1
    - us-west-2

  - name: demo_resource_2
    resource_file: s3://demo_bucket/resource.template
    deployment_targets:
      accounts:
        - 012345678912
    deploy_method: stack_set
    ...
    regions: 
    - us-east-1
    - eu-north-1
```

# 구성 소스로 Amazon S3 설정
<a name="cfct-s3-source"></a>

*Customizations for AWS Control Tower*를 설정하면 `_custom-control-tower-configuration.zip`이라는 초기 구성 파일이 `custom-control-tower-configuration-account-ID-region`이라는 Amazon Simple Storage Service(Amazon S3) 버킷에 저장됩니다.

**Note**  
이 파일을 다운로드하여 수정하는 경우 변경 사항을 압축하여 `custom-control-tower-configuration.zip`이라는 새 파일로 저장한 다음 동일한 Amazon S3 버킷에 다시 업로드해야 합니다.  
Amazon S3 버킷은 파이프라인의 기본 소스입니다. 기본 설정이 적용된 경우 파일 이름에 밑줄 접두사가 없는 구성 zip 파일을 S3 버킷에 업로드하면 파이프라인이 자동으로 시작됩니다.

zip 파일은 AWS Key Management Service(AWS KMS)를 사용한 [서버 측 암호화(SSE)](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html)와 KMS 키 [사용 거부](https://docs.aws.amazon.com/kms/latest/developerguide/determining-access.html)로 보호됩니다. zip 파일에 액세스하려면 KMS 키 정책을 업데이트하여 액세스 권한이 부여되어야 하는 역할을 지정해야 합니다. 역할은 관리자 역할, 사용자 또는 둘 다일 수 있습니다. 이 절차를 따릅니다.

1. [AWS Key Management Service 콘솔](https://console.aws.amazon.com/kms/home)로 이동합니다.

1. **고객 관리형 키**에서 **CustomControlTowerKMSKey**를 선택합니다.

1. **키 정책** 탭을 선택합니다. 그런 다음 **편집**을 선택합니다.

1. **키 정책 편집** 페이지에서 코드의 **키 사용 허용** 섹션을 찾아 다음 권한 중 하나를 추가합니다.
   + 관리 역할을 추가하려면:

     `arn:aws:iam::<account-ID>:role/<administrator-role>`
   + 사용자를 추가하려면:

     `arn:aws:iam::<account-ID>:user/<username>`

1. **변경 사항 저장**을 선택합니다.

1. [Amazon S3 콘솔](https://console.aws.amazon.com/s3/home)로 이동하여 구성 zip 파일이 포함된 S3 버킷을 찾은 다음 다운로드를 선택합니다.

1. 매니페스트 파일 및 템플릿 파일에 필요한 구성을 변경합니다. 매니페스트 및 템플릿 파일 사용자 지정에 대한 자세한 내용은 [CfCT 사용자 지정 가이드](cfct-customizations-dev-guide.md) 섹션을 참조하세요.

1. 변경 사항 업로드:

   1. 수정된 구성 파일을 압축하고 파일 이름을 `custom-control-tower-configuration.zip`으로 지정합니다.

   1. AWS KMS 마스터 키(`CustomControlTowerKMSKey`)와 함께 SSE를 사용하여 Amazon S3에 파일을 업로드합니다.

# 구성 소스로 GitHub 설정
<a name="cfct-github-configuration-source"></a>

이 섹션에서는 GitHub를 소스로 사용하여 AWS Control Tower(CfCT)에 대한 사용자 지정을 배포하는 방법을 설명합니다. 프로세스에는 세 가지 주요 단계가 있습니다.
+ GitHub 리포지토리를 준비합니다.
+ GitHub 코드 연결을 생성합니다.
+ CloudFormation스택 배포

## GitHub 리포지토리 준비
<a name="prepare-github-cfct-source"></a>

 GitHub 계정 내에 리포지토리를 생성합니다. 템플릿에 사용되는 기본 이름은 `custom-control-tower-configuration`입니다. 대상 리포지토리를 *비공개*로 설정하는 것이 좋습니다. CfCT 리포지토리의 [배포 폴더](https://github.com/aws-solutions/aws-control-tower-customizations/tree/main/deployment)에 있는 `manifest.yaml`이라는 `yaml` 파일에서 사용자 지정을 정의합니다.

[https://docs.aws.amazon.com//controltower/latest/userguide/cfct-customizations-dev-guide.html](https://docs.aws.amazon.com//controltower/latest/userguide/cfct-customizations-dev-guide.html)는 `manifest.yaml`을 생성하여 사용자 지정을 구성하는 방법에 대한 자세한 지침을 제공합니다.

## GitHub 연결 생성
<a name="create-github-cfct-connection"></a>

GitHub용 **개발자 도구 - 연결** 인스턴스에서 다음 단계를 수행합니다.

1. **연결 생성**을 선택하고 GitHub를 공급자로 선택합니다.

1. **GitHub 앱 연결 생성**을 선택하고 **연결 이름** 필드에 **GitHub CfCT** 또는 선택한 이름을 입력합니다.

1. **GitHub에 연결**을 선택한 다음 **새 앱 설치**를 선택합니다.

1. 리포지토리의 GitHub 사용자 또는 조직을 선택합니다.

1. **리포지토리 액세스**에서 **리포지토리만 선택**을 선택한 다음 이전에 생성한 리포지토리를 선택하고 작업을 **저장**합니다.

1. 코드 연결 ARN -CloudFormation스택을 배포할 때 필요합니다.

## CloudFormation스택 배포
<a name="deploy-github-cfct-stack"></a>
+ 리포지토리에서 `custom-control-tower-initiation.template` 파일을 다운로드합니다.
+ `custom-control-tower-initiation.template` 파일을 사용하여 새CloudFormation스택을 생성합니다.
+ **AWS CodePipeline 소스**에서 **GitHub(코드 연결을 통해)**를 선택합니다.
+ **GitHub 설정**에서 다음 필드를 지정합니다.
  + **코드 연결의 ARN**에 코드 연결 ARN을 입력합니다.
  + **GitHub 사용자 또는 조직**에 리포지토리가 생성되어 있는 GitHub 사용자 또는 조직의 이름을 입력합니다.
  + **GitHub 리포지토리 이름**에 리포지토리 이름(기본값은 `custom-control-tower-configuration`)을 입력합니다.
  + **GitHub 브랜치 이름**에 브랜치 이름(기본값은 `main`)을 입력합니다.

# 운영 지표 모음
<a name="cfct-metrics"></a>

 *Customizations for AWS Control Tower*(CfCT)에는 익명 운영 지표를 AWS로 전송하는 옵션이 포함되어 있습니다. AWS는 이 데이터를 사용하여 고객이 CfCT를 사용하는 방식과 기타 관련 서비스 및 제품을 이해합니다. 데이터 수집이 활성화되면 다음 정보가 AWS로 전송됩니다.
+ **솔루션 ID:** AWS 솔루션 식별자
+ **고유 ID(UUID):** 각 배포에 대해 무작위로 생성되는 고유 식별자
+ **타임스탬프:** 데이터 수집 타임스탬프
+ **상태 시스템 실행 횟수:** 이 상태 시스템이 실행되는 횟수를 증분식으로 계산합니다.
+ **매니페스트 버전:** 구성에 사용되는 매니페스트 버전

**참고**  
 AWS는 수집한 데이터를 소유합니다. 데이터 수집에는 [AWS 개인정보 보호정책](https://aws.amazon.com/privacy/)이 적용됩니다.

 익명 운영 지표를 AWS로 전송하지 않으려면 다음 태스크 중 하나를 수행합니다.
+  ** AWS CloudFormation 템플릿 매핑 섹션을 다음과 같이 업데이트합니다. ** 

   *시작* 

  ```
  AnonymousData:
       SendAnonymousData:
          Data: Yes
  ```

   *끝* 

  ```
  AnonymousData:
       SendAnonymousData:
          Data: No
  ```
+  ** CfCT를 배포한 후 Parameter Store 콘솔에서 `/org/primary/metrics_flag` SSM 파라미터 키를 찾아 값을 `No`로 업데이트합니다. ** 

# CfCT 사용자 지정 가이드
<a name="cfct-customizations-dev-guide"></a>

 *Customizations for AWS Control Tower*(CfCT) 가이드는 회사 및 고객을 위해 AWS Control Tower 환경을 사용자 지정하고 확장하려는 관리자, DevOps 전문가, 독립 소프트웨어 개발 판매 회사, IT 인프라 아키텍트 및 시스템 통합 사업자를 위한 것입니다. 이 가이드는 CfCT 사용자 지정 패키지를 사용하여 AWS Control Tower 환경을 사용자 지정하고 확장하는 방법에 대한 정보를 제공합니다.

**참고**  
 (CfCT)를 배포하고 구성하려면를 통해 구성 패키지를 배포하고 처리해야 합니다 AWS CodePipeline. 다음 섹션에서는 이 프로세스를 자세히 설명합니다.

# 코드 파이프라인 개요
<a name="cfct-codepipeline-overview"></a>

구성 패키지에는 Amazon Simple Storage Service(Amazon S3) 및가 필요합니다 AWS CodePipeline. 구성 패키지에는 다음 항목이 포함되어 있습니다.
+ 매니페스트 파일
+ 함께 제공되는 템플릿 세트
+ AWS Control Tower 환경 사용자 지정을 설명하고 구현하기 위한 기타 JSON 파일

기본적으로 `_custom-control-tower-configuration.zip` 구성 패키지는 다음과 같은 이름 지정 규칙을 사용하여 Amazon S3 버킷에 로드됩니다.

`custom-control-tower-configuration-accountID-region`.

**참고**  
 기본적으로 CfCT는 파이프라인 소스를 저장할 Amazon S3 버킷을 생성합니다. 대부분의 고객은 이 기본값을 유지합니다. 기존 AWS CodeCommit 리포지토리가 있는 경우 소스 위치를 AWS CodeCommit 리포지토리로 변경할 수 있습니다. 자세한 내용을 알아보려면 *AWS CodePipeline 사용 설명서*의 [Edit a pipeline in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-edit.html) 섹션을 참조하세요.

*매니페스트 파일*은 랜딩 존을 사용자 지정하기 위해 배포할 수 있는 AWS 리소스를 설명하는 텍스트 파일입니다. CodePipeline은 다음과 같은 태스크를 수행합니다.
+ 매니페스트 파일, 함께 제공되는 템플릿 세트 및 기타 JSON 파일을 추출합니다.
+ 매니페스트 및 템플릿 검증을 수행합니다.
+ CfCT 매니페스트 파일의 섹션을 간접적으로 호출하여 특정 [파이프라인 단계](#code-pipeline-stages)를 실행합니다.

매니페스트 파일을 사용자 지정하고 구성 패키지 파일 이름에서 밑줄(\$1)을 제거하여 구성 패키지를 업데이트하면 자동으로 AWS CodePipeline이 시작됩니다.

**밑줄에 유의하세요**  
샘플 구성 패키지 파일 이름은 밑줄(\$1)로 시작되므로 AWS CodePipeline 이 자동으로 트리거되지 않습니다. 구성 패키지의 사용자 지정을 완료했으면 밑줄(\$1) 없이 `custom-control-tower-configuration.zip` 파일을 업로드하여 AWS CodePipeline에서 배포를 트리거합니다.

## AWS CodePipeline 스테이지
<a name="code-pipeline-stages"></a>

CfCT 파이프라인은 AWS Control Tower 환경을 구현하고 업데이트하기 위해 여러 AWS CodePipeline 단계가 필요합니다.

1. **소스 스테이지**

   소스 스테이지는 초기 스테이지입니다. 사용자 지정 구성 패키지가 이 파이프라인 스테이지를 시작합니다. 의 소스는 구성 패키지를 호스팅할 AWS CodePipeline 수 있는 Amazon S3 버킷 또는 AWS CodeCommit 리포지토리일 수 있습니다.

1. **빌드 스테이지**

   빌드 단계에서는가 구성 패키지의 내용을 검증 AWS CodeBuild 해야 합니다. 이러한 검사에는 및를 사용하여 패키지에 포함되거나 원격으로 호스팅되는 모든 CloudFormation 템플릿과 함께 `manifest.yaml` 파일 구문 CloudFormation `validate-template` 및 스키마 테스트가 포함됩니다`cfn_nag`. 매니페스트 파일과 CloudFormation 템플릿이 테스트를 통과하면 파이프라인은 다음 단계로 계속 진행합니다. 테스트가 실패하면 CodeBuild 로그를 검토하여 문제를 식별하고 필요에 따라 구성 소스 파일을 편집할 수 있습니다.

1. **수동 승인 스테이지(선택 사항)**

   수동 승인 스테이지는 선택 사항입니다. 이 스테이지를 활성화하면 구성 파이프라인을 추가로 제어할 수 있습니다. 배포 중에 승인을 받을 때까지 파이프라인을 일시 중지합니다. 스택을 시작할 때 **파이프라인 승인 스테이지** 파라미터를 **예**로 편집하여 수동 승인을 옵트인할 수 있습니다.

1. **정책 스테이지**

   정책 단계는 서비스 제어 정책(SCP) 또는 리소스 제어 정책(RCP) 상태 시스템을 호출하여 SCPs 또는 RCP AWS Organizations APIs를 호출합니다. RCPs

1. **CloudFormation 리소스 단계**

    CloudFormation 리소스 단계는 스택 세트 상태 시스템을 호출하여 매니페스트 파일에 제공한 계정 또는 조직 단위(OUs) 목록에 지정된 리소스를 배포합니다. 상태 시스템은 매니페스트 파일에 지정된 순서대로 CloudFormation 리소스를 생성합니다. 리소스 종속성을 지정하려면 매니페스트 파일에 리소스가 지정되는 순서를 정렬합니다. 매니페스트 파일 내의 리소스 순서는 종속성을 지정하는 유일한 방법입니다.

# 사용자 지정 구성 정의
<a name="cfct-custom-configuration"></a>

CfCT 매니페스트 파일, 함께 제공되는 템플릿 세트 및 기타 JSON 파일을 사용하여 사용자 지정 AWS Control Tower 구성을 정의합니다. 다음 코드 예제와 같이 이러한 파일을 폴더 구조로 패키징하고 Amazon S3 버킷에 `.zip` 파일로 배치합니다.

**사용자 지정 구성 폴더 구조**

```
- manifest.yaml
- policies/                                                [optional]
   - service control policies files (*.json)
- templates/                                               [optional]
   - template files for AWS CloudFormation Resources (*.template)
```

앞의 예제는 사용자 지정 구성 폴더의 구조를 보여줍니다. Amazon S3 또는 AWS CodeCommit 리포지토리를 소스 스토리지 위치로 선택하더라도 폴더 구조는 동일하게 유지됩니다. 소스 스토리지로 Amazon S3를 선택한 경우 모든 폴더와 파일을 `custom-control-tower-configuration.zip` 파일로 압축하고 `.zip` 파일만 지정된 Amazon S3 버킷에 업로드합니다.

**참고**  
를 사용하는 경우 파일을 압축하지 않고 리포지토리에 파일을 AWS CodeCommit배치합니다.

# CfCT 매니페스트 파일
<a name="the-manifest-file"></a>

CfCT `manifest.yaml` 파일은 AWS 리소스를 설명하는 텍스트 파일입니다. 다음 예제는 CfCT 매니페스트 파일의 구조를 보여줍니다.

```
---
region: String
version: 2021-03-15

resources:
  #set of CloudFormation resources, SCP policies, or RCP policies
...
```

앞의 코드 예제에서 볼 수 있듯이 매니페스트 파일의 처음 두 줄은 **리전** 값과 **버전** 키워드를 지정합니다. 다음은 이러한 키워드의 정의입니다.

**리전** - AWS Control Tower 기본 리전의 텍스트 문자열입니다. 이 값은 유효한 AWS 리전 이름(예: `us-east-1`, `eu-west-1`또는 `ap-southeast-1`)이어야 합니다. 리소스별 리전을 지정하지 않는 한 AWS Control Tower 홈 리전은 사용자 지정 AWS Control Tower 리소스(예: CloudFormation StackSets)를 생성할 때 기본값입니다.

```
region:your-home-region
```

**버전** - 매니페스트 스키마 버전 번호입니다. 지원되는 최신 버전은 2021-03-15입니다.

```
version: 2021-03-15
```

**참고**  
최신 버전을 사용하는 것이 좋습니다. 최신 버전의 매니페스트 속성을 업데이트하려면 [CfCT 매니페스트의 버전 업그레이드](cfct-compatibility.md) 섹션을 참조하세요.

앞의 예제에 표시된 다음 키워드는 **리소스** 키워드입니다. 매니페스트 파일의 **리소스** 섹션은 체계적으로 구성되어 있습니다. 여기에는 CfCT 파이프라인에 의해 자동으로 배포되는 AWS 리소스의 세부 목록이 포함되어 있습니다. 리소스 및 사용 가능한 파라미터에 대한 이러한 설명은 다음 섹션에 나와 있습니다.

# CfCT 매니페스트 파일의 리소스 섹션
<a name="cfct-manifest-file-resources-section"></a>

 이 주제에서는 사용자 지정에 필요한 **리소스**를 정의하는 CfCT 매니페스트 파일의 리소스 섹션에 대해 설명합니다. CfCT 매니페스트 파일의 이 섹션은 키워드 **리소스**에서 시작되어 파일의 끝까지 계속됩니다.

 매니페스트 파일의 **리소스** 섹션은 CfCT가 CloudFormation 코드 파이프라인을 통해 자동으로 배포하는 StackSets, 또는 AWS Organizations SCPs 및 RCPs를 지정합니다. OU, 계정 및 리전을 나열하여 스택 인스턴스를 배포할 수 있습니다.

 스택 인스턴스는 OU 수준 대신 계정 수준에서 배포됩니다. SCP 및 RCP는 OU 수준에서 배포됩니다. 자세한 내용은 [자체 사용자 지정 구축](https://docs.aws.amazon.com/controltower/latest/userguide/cfcn-byo-customizations.html)을 참조하세요.

 다음 예제 템플릿은 매니페스트 파일의 **리소스** 섹션에 사용할 수 있는 가능한 항목을 설명합니다.

```
resources: # List of resources
  - name: [String]
    resource_file: [String] [Local File Path, S3 URI, S3 URL] 
    deployment_targets: # account and/or organizational unit names
      accounts: # array of strings, [0-9]{12}
        - 012345678912
        - AccountName1
      organizational_units: #array of strings
        - OuName1
        - OuName2 
    deploy_method: scp | stack_set | rcp
    parameters: # List of parameters [SSM, Alfred, Values]
      - parameter_key: [String]
        parameter_value: [String]  
    export_outputs: # list of ssm parameters to store output values
      - name: /org/member/test-ssm/app-id
        value: $[output_ApplicationId]    
    regions: #list of strings
    - [String]
```

**이 주제의 나머지 부분은 이전 코드 예제에 표시된 키워드에 대한 자세한 정의를 제공합니다.**

**name** - CloudFormation StackSets와 연결된 이름입니다. 제공하는 문자열은 스택 세트에 보다 사용자 친화적인 이름을 할당합니다.
+  **유형:** 문자열
+ **필수 항목 여부:** 예
+ **유효한 값:** a-z, A-Z, 0-9 및 하이픈(-). 이름은 영문자로 시작해야 합니다.

**description** - 리소스에 대한 설명입니다.
+ **유형:** 문자열
+ **필수 항목 여부**: 아니요

 **resource\$1file** -이 파일은 매니페스트 파일의 상대 위치, CloudFormation 리소스, SCPs 또는 RCP를 생성하기 위해 JSON의 CloudFormation 템플릿 또는 AWS Organizations 서비스 제어 정책을 가리키는 Amazon S3 URI 또는 URL로 지정할 수 있습니다. RCPs 
+ **유형**: 문자열
+ **필수 항목 여부:** 예 

1. 다음 예제는 구성 패키지 내의 리소스 파일에 대한 상대 위치로 지정된 `resource_file`을 보여줍니다.

   ```
   resources:
     - name: SecurityRoles
       resource_file: templates/custom-security.template
   ```

1. 다음 예제는 Amazon S3 URI로 지정된 리소스 파일을 보여줍니다.

   ```
   resources:
     - name: SecurityRoles
       resource_file: s3://amzn-s3-demo-bucket/[key-name]
   ```

1. 다음 예제는 Amazon S3 HTTPS URL로 지정된 리소스 파일을 보여줍니다.

   ```
   resources:
     - name: SecurityRoles
       resource_file: https://bucket-name.s3.Region.amazonaws.com/key-name
   ```
**참고**  
Amazon S3 URL을 제공하는 경우 버킷 정책에서 CfCT를 배포하는 AWS Control Tower 관리 계정에 대한 읽기 액세스를 허용하는지 확인합니다. Amazon S3 HTTPS URL을 제공하는 경우 경로가 점 표기법을 사용하는지 확인합니다. 예를 들어 `S3.us-west-1`입니다. CfCT는 `S3‐us-west-2`와 같이 S3와 리전 사이에 대시가 포함된 엔드포인트를 지원하지 않습니다.

1. 다음 예제는 Amazon S3 버킷 정책과 리소스가 저장되는 ARN을 보여줍니다.

   ```
   {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
           "Effect": "Allow",
           "Principal": {"AWS": "arn:aws:iam::AccountId:root"},
           "Action": "s3:GetObject",
           "Resource": "arn:aws:s3:::my-bucket/*”
          }
      ]
   }  
   ```

   예제에 표시된 *AccountId* 변수를 CfCT를 배포하는 관리 AWS 계정의 계정 ID로 바꿉니다. 추가 예제는 Amazon Simple Storage Service 사용 설명서의 [버킷 정책 예시](https://docs.aws.amazon.com//AmazonS3/latest/userguide/example-bucket-policies.html)를 참조하세요.

**parameters** - CloudFormation 파라미터의 이름과 값을 지정합니다.
+ **유형:** MapList
+ **필수 항목 여부:** 아니요

파라미터 섹션에는 키/값 파라미터 페어가 포함되어 있습니다. 다음 가상 템플릿에는 **parameters** 섹션이 요약되어 있습니다.

```
parameters:
  - parameter_key: [String]
    parameter_value: [String]
```
+ **parameter\$1key** – 파라미터와 연결된 키입니다.
  +  **유형:** 문자열
  + **필수 항목 여부:** 예(파라미터 속성 아래)
  + **유효한 값:** a-z, A-Z 및 0-9 
+ **parameter\$1value** – 파라미터와 연결된 입력 값입니다.
  + **유형:** 문자열 
  +  **필수 항목 여부:** 예(파라미터 속성 아래) 

**deploy\$1method** – 리소스를 계정에 배포하기 위한 배포 방법입니다. 현재 **deploy\$1method**는 CloudFormation StackSets를 통한 리소스 배포 `stack_set` 옵션, SCPs를 배포하는 경우 `scp` 옵션 또는 RCPs를 배포하는 경우 `rcp` 옵션을 사용하여 리소스 배포를 지원합니다.
+ **유형**: 문자열 
+ **유효한 값**: `stack_set` \$1 `scp` \$1 `rcp`
+ **필수 항목 여부:** 예

**deployment\$1targets** - CfCT가 계정 또는 organization\$1units로 지정된 CloudFormation 리소스를 배포할 **계정** 또는 조직 단위(OUs) 목록입니다. **** 

**참고**  
 SCP 또는 RCP를 배포하려는 경우 대상은 계정이 아닌 OU여야 합니다.
+ **유형:** 이 리소스가 지정된 계정 목록에 배포될 것임을 나타내는 문자열 `account name` 또는 `account number` 목록이거나 이 리소스가 지정된 OU 목록에 배포될 것임을 나타내는 `OU names`입니다.
+ **필수 항목 여부:** **accounts** 또는 **organizational\$1units** 중 하나 이상
  + **accounts**:

    **유형:** 이 리소스가 지정된 계정 목록에 배포될 것임을 나타내는 문자열 `account name` 또는 `account number` 목록입니다.
  + **organizational\$1units:**

    **유형:** 이 리소스가 지정된 OU 목록에 배포될 것임을 나타내는 문자열 `OU names` 목록입니다. 계정이 포함되지 않은 OU를 제공하고 **accounts** 속성이 추가되지 않은 경우 CfCT는 스택 세트만 생성합니다.
**참고**  
조직의 관리 계정 ID는 허용되는 값이 아닙니다. CfCT는 조직의 관리 계정에 스택 인스턴스를 배포하는 것을 기본적으로 지원하지 않습니다. 특별한 사용 사례가 있는 경우 [Root OU](https://docs.aws.amazon.com//controltower/latest/userguide/cfct-root-ou.html)를 참조하세요.

**export\$1outputs** - SSM 파라미터 키를 나타내는 이름/값 쌍의 목록입니다. 이러한 SSM 파라미터 키를 사용하면 템플릿 출력을 SSM Parameter Store에 저장할 수 있습니다. 출력은 매니페스트 파일의 앞부분에 정의된 다른 리소스에서 참조하기 위한 것입니다.

```
export_outputs: # List of SSM parameters
  - name: [String]
    value: [String]
```
+ **유형:** **name** 및 **value** 키 페어 목록입니다. **name**에는 SSM Parameter Store 키의 `name` 문자열이 포함되며 **value**에는 파라미터의 `value` 문자열이 포함됩니다.
+ **유효한 값:** 임의의 문자열 또는 `$[output_CfnOutput-Logical-ID]` 변수입니다(여기서 *CfnOutput-Logical-ID*는 템플릿 출력 변수에 해당). CloudFormation 템플릿의 출력 섹션에 대한 자세한 내용은 *CloudFormation 사용 설명서*의 [https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/outputs-section-structure.html](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/outputs-section-structure.html).
+ **필수 항목 여부**: 아니요 

예를 들어 다음 코드 조각은 템플릿 `VPCID` 출력 변수를 이름이 `/org/member/audit/vpc_id`인 SSM 파라미터 키에 저장합니다.

```
export_outputs: # List of SSM parameters
  - name: /org/member/audit/VPC-ID
    value: $[output_VPCID]
```

**참고**  
**export\$1outputs** 키 이름에는 `output` 이외의 값이 포함될 수 있습니다. 예를 들어 **name**이 `/org/environment-name`인 경우 **value**는 `production`일 수 있습니다.

**리전** - CfCT가 CloudFormation 스택 인스턴스를 배포할 리전 목록입니다.
+ **유형:**이 리소스가 지정된 리전 목록에 배포될 것임을 나타내는 모든 AWS 상용 리전 이름 목록입니다. 매니페스트 파일에 이 키워드가 없는 경우 리소스는 홈 리전에만 배포됩니다.
+ **필수 항목 여부:** 아니요 

# Root OU
<a name="cfct-root-ou"></a>

 CfCT는 **매니페스트 V2 버전(2021-03-15)**에서 `organizational_units` 아래의 조직 단위(OU) 값으로 **Root**를 지원합니다.
+ `scp` 또는 `rcp`의 배포 방법을 선택하면 `organizational_units`에 Root를 추가할 때 AWS Control Tower는 Root 아래의 모든 OU에 정책을 적용합니다. `stack_set`의 배포 방법을 선택하면 `organizational_units`에 Root를 추가할 때 CfCT는 관리 계정을 제외하고 AWS Control Tower에 등록된 Root 아래의 모든 계정에 스택 세트를 배포합니다.
+ AWS Control Tower 모범 사례에 따라 관리 계정은 회원 계정 관리 및 결제 목적으로만 사용됩니다. AWS Control Tower 관리 계정에서 프로덕션 워크로드를 실행하지 마세요.

  모범 사례 지침에 따라 AWS Control Tower 배포는 관리 계정을 Root OU에 배치하여 전체 액세스 권한을 가지고 추가 리소스를 실행하지 않도록 합니다. 따라서 **AWSControlTowerExecution** 역할은 관리 계정에 배포되지 않습니다.
+ 관리 계정에 대해 다음 모범 사례를 따르는 것이 좋습니다. 관리 계정에 StackSets를 배포해야 하는 특정 사용 사례가 있는 경우 **accounts**를 배포 대상으로 포함하고 관리 계정을 지정합니다. 그렇지 않으면 **accounts**를 배포 대상으로 포함하지 마세요. 필요한 IAM 역할을 포함하여 누락된 리소스를 관리 계정에서 생성해야 합니다.

관리 계정에 StackSets를 배포하려면 `accounts`를 배포 대상으로 포함하고 관리 계정을 지정합니다. 그렇지 않으면 accounts를 배포 대상으로 포함하지 마세요.

```
---
region: your-home-region
version: 2021-03-15

resources:

  …truncated…

    deployment_targets:
      organizational_units:
        - Root
```

**참고**  
Root OU 기능은 매니페스트 파일(2021-03-15)의 V2 버전에서만 지원됩니다. `organizational_units` 아래에 **Root**를 OU로 추가하는 경우 다른 OU를 추가하지 마세요.

# 중첩된 OU
<a name="cfct-nested-ou"></a>

CfCT는 매니페스트 V2 버전(2021-03-15)의 `organizational_units` 키워드 아래에 중첩된 OU를 하나 이상 나열하는 것을 지원합니다.

중첩된 OU에 대한 전체 경로(Root 제외)가 필요합니다(OU 간 구분자로 콜론 사용). 배포 방법 `scp` 또는 `rcp`의 경우 AWS Control Tower는 중첩된 OU 경로의 마지막 OU에 SCP 또는 RCP를 배포합니다. 배포 방법 `stack_set`의 경우 AWS Control Tower는 중첩된 OU 경로의 마지막 OU에 있는 모든 계정에 스택 세트를 배포합니다.

예를 들어 `OUName1:OUName2:OUName3`이라는 경로가 있다고 가정하면, 경로의 마지막 OU는 `OUName3`입니다. CfCT는 SCP 또는 RCP를 `OUName3`에 배포하고 스택 세트를 `OUName3` 바로 아래의 모든 계정에 배포합니다.

```
---
region: your-home-region
version: 2021-03-15

resources:

  …truncated…

    deployment_targets:
      organizational_units:
        - OuName1:OUName2:OUName3
```

**참고**  
중첩된 OU 기능은 매니페스트 파일(2021-03-15)의 V2 버전에서만 지원됩니다.

# 자체 사용자 지정 구축
<a name="cfcn-byo-customizations"></a>

자체 사용자 지정을 구축하려면 서비스 제어 정책(SCPs), 리소스 제어 정책(RCPs) 및 CloudFormation 리소스를 추가하거나 업데이트하여 CfCT `manifest.yaml` 파일을 수정할 수 있습니다. 배포해야 하는 리소스의 경우 계정 및 OU를 추가하거나 제거할 수 있습니다. 패키지 폴더의 템플릿을 추가하거나 수정하고, 자체 폴더를 생성하고, `manifest.yaml` 파일의 템플릿 또는 폴더를 참조할 수 있습니다.

이 섹션에서는 자체 사용자 지정을 구축하는 두 가지 주요 부분을 설명합니다.
+ 서비스 제어 정책에 대한 자체 구성 패키지를 설정하는 방법
+  AWS CloudFormation 스택 세트에 대한 자체 구성 패키지를 설정하는 방법

# SCP 또는 RCP에 대한 구성 패키지 설정
<a name="cfcn-set-up-custom-scps"></a>

이 섹션에서는 서비스 제어 정책(SCP) 또는 리소스 제어 정책(RCP)에 대한 구성 패키지를 생성하는 방법을 설명합니다. 이 프로세스의 두 가지 주요 부분은 (1) CfCT 매니페스트 파일 준비와 (2) 폴더 구조 준비입니다.

## 1단계: manifest.yaml 파일 편집
<a name="cfct-byo-scp-step-1"></a>

샘플 `manifest.yaml` 파일을 시작점으로 사용합니다. 필요한 모든 구성을 입력합니다. `resource_file` 및 `deployment_targets` 세부 정보를 추가합니다.

다음 조각은 기본 매니페스트 파일을 보여줍니다.

```
---
region: us-east-1
version: 2021-03-15

resources: []
```

`region` 값은 배포 중에 자동으로 추가됩니다. CfCT를 배포한 리전과 일치해야 합니다. 이 리전은 AWS Control Tower 리전과 동일해야 합니다.

Amazon S3 버킷에 저장된 zip 패키지의 `example-configuration` 폴더에 사용자 지정 SCP 또는 RCP를 추가하려면 `example-manifest.yaml` 파일을 열고 편집을 시작합니다.

```
---
region: your-home-region
version: 2021-03-15

resources:
  - name: test-preventive-controls
    description: To prevent from deleting or disabling resources in member accounts
    resource_file: policies/preventive-controls.json
    deploy_method: scp | rcp
    #Apply to the following OU(s)
    deployment_targets:
      organizational_units: #array of strings
        - OUName1
        - OUName2 

…truncated…
```

다음 코드 조각은 사용자 지정 매니페스트 파일의 예제를 보여줍니다. 한 번의 변경으로 정책을 두 개 이상 추가할 수 있습니다.

```
---
region: us-east-1
version: 2021-03-15

resources:
  - name: block-s3-public-access
    description: To S3 buckets to have public access
    resource_file: policies/block-s3-public.json
    deploy_method: scp | rcp
    #Apply to the following OU(s)
    deployment_targets:
      organizational_units: #array of strings
        - OUName1
        - OUName2
```

## 2단계: 폴더 구조 생성
<a name="cfct-byo-scp-step-2"></a>

리소스 파일에 Amazon S3 URL을 사용하고 키/값 페어가 있는 **파라미터**를 사용하는 경우 이 단계를 건너뛸 수 있습니다.

매니페스트 파일은 JSON 파일을 참조하기 때문에 매니페스트를 지원하려면 JSON 형식의 SCP 또는 RCP 정책을 포함해야 합니다. 파일 경로가 매니페스트 파일에 제공된 경로 정보와 일치하는지 확인합니다.
+ *정책* JSON 파일에는 OU에 배포할 SCP 또는 RCP가 포함되어 있습니다.

다음 코드 조각은 샘플 매니페스트 파일의 폴더 구조를 보여줍니다.

```
- manifest.yaml
- policies/
   - block-s3-public.json
```

다음 코드 조각은 `block-s3-public.json` 정책 파일의 예제입니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"GuardPutAccountPublicAccessBlock",
         "Effect":"Deny",
         "Action":"s3:PutAccountPublicAccessBlock",
         "Resource":"arn:aws:s3:::*"
      }
   ]
}
```

------

# CloudFormation StackSets에 대한 구성 패키지 설정
<a name="cfcn-byo-cfn-stacksets"></a>

이 섹션에서는 CloudFormation StackSets에 대한 구성 패키지를 설정하는 방법을 설명합니다. 이 프로세스의 두 가지 주요 부분은 (1) 매니페스트 파일 준비와 (2) 폴더 구조 업데이트입니다.

## 1단계: 기존 매니페스트 파일 편집
<a name="cfcn-byo-cfn-stacksets-step-1"></a>

이전에 편집한 매니페스트 파일에 new CloudFormation StackSets 정보를 추가합니다.

검토를 위해 다음 코드 조각에는 이전에 SCP 또는 RCP에 대한 구성 패키지를 설정하기 위해 표시된 것과 동일한 사용자 지정 매니페스트 파일이 포함되어 있습니다. 이제 리소스에 대한 세부 정보를 포함하도록 이 파일을 추가로 편집할 수 있습니다.

```
---
region: us-east-1
version: 2021-03-15

resources:
  
  - name: block-s3-public-access
    description: To S3 buckets to have public access
    resource_file: policies/block-s3-public.json
    deploy_method: scp | rcp
    #Apply to the following OU(s)
    deployment_targets:
    organizational_units: #array of strings
    - OUName1
    - OUName2
```

다음 코드 조각은 `resources` 세부 정보가 포함된 편집된 샘플 매니페스트 파일을 보여줍니다. `resources`의 순서는 `resources` 종속성을 생성하기 위한 실행 순서를 결정합니다. 비즈니스 요구 사항에 따라 다음 예제 매니페스트 파일을 편집할 수 있습니다.

```
---
region: your-home-region
version: 2021-03-15

…truncated…

resources:
  - name: stackset-1
    resource_file: templates/create-ssm-parameter-keys-1.template
    parameters:
      - parameter_key: parameter-1
        parameter_value: value-1
    deploy_method: stack_set
    deployment_targets:
      accounts: # array of strings, [0-9]{12}
        - account number or account name
        - 123456789123
      organizational_units: #array of strings, ou ids, ou-xxxx
        - OuName1
        - OUName2 
    export_outputs:
      - name: /org/member/test-ssm/app-id
        value: $[output_ApplicationId]
    regions:
      - region-name

  - name: stackset-2
    resource_file: s3://bucket-name/key-name
    parameters:
      - parameter_key: parameter-1
        parameter_value: value-1
    deploy_method: stack_set
    deployment_targets:
      accounts: # array of strings, [0-9]{12}
        - account number or account name
        - 123456789123
      organizational_units: #array of strings
        - OuName1
        - OUName2 
regions:
  - region-name
```

다음 예제는 매니페스트 파일에 둘 이상의 CloudFormation 리소스를 추가할 수 있음을 보여줍니다.

```
---
region: us-east-1
version: 2021-03-15

resources:
  - name: block-s3-public-access
    description: To S3 buckets to have public access
    resource_file: policies/block-s3-public.json
    deploy_method: scp | rcp
    #Apply to the following OU(s)
    deployment_targets:
      organizational_units: #array of strings
        - Custom
        - Sandbox

  - name: transit-network
    resource_file: templates/transit-gateway.template
    parameter_file: parameters/transit-gateway.json
    deploy_method: stack_set
    deployment_targets:
      accounts: # array of strings, [0-9]{12}
        - Prod
        - 123456789123 #Network
      organizational_units: #array of strings
        - Custom
    export_outputs:
      - name: /org/network/transit-gateway-id
        value: $[output_TransitGatewayID]
    regions:
      - us-east-1
```

## 2단계: 폴더 구조 업데이트
<a name="cfct-byo-cfn-stacksets-step-2"></a>

폴더 구조를 업데이트할 때 모든 지원 CloudFormation 템플릿 파일과 매니페스트 파일에 있는 SCP 또는 RCP 정책 파일을 포함할 수 있습니다. 파일 경로가 매니페스트 파일에 제공된 것과 일치하는지 확인합니다.
+ *템플릿* 파일에는 OU 및 계정에 배포할 AWS 리소스가 포함되어 있습니다. OUs 
+ *정책* 파일에는 템플릿 파일에 사용되는 입력 파라미터가 포함됩니다.

다음 예제는 [1단계](#cfcn-byo-cfn-stacksets-step-1)에서 생성된 샘플 매니페스트 파일의 폴더 구조를 보여줍니다.

```
- manifest.yaml
- policies/
   - block-s3-public.json
- templates/
   - transit-gateway.template
```

# 'alfred' 헬퍼 및 CloudFormation 파라미터 파일
<a name="alfred-helper"></a>

 CfCT는 CloudFormation 템플릿에 정의된 [SSM 파라미터 스토어](https://docs.aws.amazon.com//systems-manager/latest/userguide/systems-manager-parameter-store.html) 키의 값을 가져오는 *alfred* 헬퍼라는 메커니즘을 제공합니다. *alfred* 헬퍼를 사용하면 CloudFormation 템플릿을 업데이트하지 않고도 SSM 파라미터 스토어 및에 저장된 값을 사용할 수 있습니다. 자세한 내용은 *CloudFormation 사용 설명서*의 [CloudFormation 템플릿이란 무엇입니까?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/gettingstarted.templatebasics.html#gettingstarted.templatebasics.what)를 참조하세요.

**중요**  
 *alfred* 헬퍼에는 두 가지 제한 사항이 있습니다. 파라미터는 AWS Control Tower 관리 계정의 홈 리전에서만 사용할 수 있습니다. 스택 인스턴스별로 변경되지 않는 값을 사용하는 것이 좋습니다. 'alfred' 헬퍼가 파라미터를 검색할 때 변수를 내보내는 스택 세트에서 무작위로 스택 인스턴스를 선택합니다.

## 예제
<a name="w2aac28c41c15c13b7"></a>

 CloudFormation 스택 세트가 두 개 있다고 가정해 보겠습니다. *스택 세트 1*에는 스택 인스턴스가 하나 있으며 한 리전의 계정 하나에 배포됩니다. 이는 가용 영역에 Amazon VPC 및 서브넷을 생성하고 `VPC ID` 및 `subnet ID`는 파라미터 값으로 *스택 세트 2*에 전달되어야 합니다. `VPC ID` 및 `subnet ID`를 *스택 세트 2*에 전달하려면 먼저 `AWS:::SSM::Parameter`를 사용하여 `VPC ID` 및 `subnet ID`를 *스택 세트 1*에 저장해야 합니다. 자세한 내용은CloudFormation 사용 설명서**의 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-parameter.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-parameter.html)를 참조하세요.

**CloudFormation 스택 세트 1:**

 다음 코드 조각에서 *alfred* 헬퍼는 Parameter Store에서 `VPC ID` 및 `subnet ID`에 대한 값을 가져와 StackSet 상태 시스템에 입력으로 전달할 수 있습니다.

```
VpcIdParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Name: '/stack_1/vpc/id'
      Description: Contains the VPC id
      Type: String
      Value: !Ref MyVpc

SubnetIdParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Name: '/stack_1/subnet/id'
      Description: Contains the subnet id
      Type: String
      Value: !Ref MySubnet
```

**CloudFormation 스택 세트 2:**

 코드 조각은 CloudFormation 스택 2 `manifest.yaml` 파일에 지정된 파라미터를 보여줍니다.

```
parameters:
      - parameter_key: VpcId
        parameter_value: $[alfred_ssm_/stack_1/vpc/id]
      - parameter_key: SubnetId
        parameter_value: $[alfred_ssm_/stack_1/subnet/id]
```

**CloudFormation 스택 세트 2.1:**

 다음 코드 조각은 *CommaDelimitedList* 유형의 파라미터를 지원하는 `alfred_ssm` 속성을 나열할 수 있음을 보여줍니다. 자세한 내용은CloudFormation 사용 설명서**의 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#parameters-section-structure-properties-type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#parameters-section-structure-properties-type)를 참조하세요.

```
parameters:
      - parameter_key: VpcId # Type: String
        parameter_value: $[alfred_ssm_/stack_1/vpc/id']
      - parameter_key: SubnetId # Type: String
        parameter_value: $[ alfred_ssm_/stack_1/subnet/id']
      - parameter_key: AvailablityZones # Type: CommaDelimitedList
        parameter_value:   - "$[alfred_ssm_/availability_zone_1]"  - "$[alfred_ssm_/availability_zone_2]"
```

**사용자 지정 패키지의 JSON 스키마**  
CfCT용 사용자 지정 패키지의 JSON 스키마는 [GitHub의 소스 코드 리포지토리](https://github.com/aws-solutions/aws-control-tower-customizations)에 있습니다. 이 스키마는 자주 사용하는 여러 개발 도구와 함께 사용할 수 있으며 자체 CfCT `manifest.yaml` 파일을 빌드할 때 오류를 줄이는 데 도움이 될 수 있습니다.

# CfCT 매니페스트의 버전 업그레이드
<a name="cfct-compatibility"></a>

*Customizations for AWS Control Tower*(CfCT)의 최신 버전에 대한 자세한 내용은 GitHub 리포지토리에서 [`CHANGELOG.md` 파일](https://github.com/aws-solutions/aws-control-tower-customizations/blob/master/CHANGELOG.md)을 참조하세요.

**주의**  
*Customizations for AWS Control Tower*(CfCT) 버전 2.2.0에는 관련 AWS 서비스 API에 맞게 CfCT 매니페스트 스키마(버전 *2021-03-15*)가 도입되었습니다. APIs 매니페스트 스키마를 사용하면 단일 manifest.yaml 파일이 분리된 DevOps 워크플로를 통해 지원되는 리소스(CloudFormation 템플릿, SCPs 및 RCPs)를 관리할 수 있습니다.  
CfCT 매니페스트 스키마를 버전 *2020-01-01*에서 버전 *2021-03-15* 이상으로 업데이트하는 것이 좋습니다.  
CfCT는 `manifest.yaml` 파일의 버전 *2021-03-15* 및 *2020-01-01*을 계속 지원합니다. 기존 구성을 변경할 필요가 없습니다. 그러나 버전 *2020-01-01*은 **지원 종료** 상태입니다. 버전 *2020-01-01*에 대해서는 업데이트나 기능 개선이 더 이상 제공되지 않습니다. Root OU 및 중첩된 OU 기능은 버전 *2020-01-01*에서 지원되지 않습니다.

**CfCT 매니페스트 버전 *2021-03-15*에서 더 이상 사용되지 않는 속성:**

```
organization_policies
policy_file
apply_to_accounts_in_ou

cloudformation_resources
template_file
deploy_to_account
deploy_to_ou
ssm_parameters
```

## 필수 CfCT 업그레이드 단계
<a name="mandatory-upgrade-steps"></a>

CfCT 매니페스트 스키마 버전 *2021-03-15* 버전으로 업그레이드할 때 파일을 업데이트하기 위해 변경해야 하는 사항은 다음과 같습니다. 다음 섹션에서는 전환에 대한 필수 및 권장 변경 사항을 간략하게 설명합니다.

**조직 정책**

1. SCP 또는 RCP를 **organization\$1policies** 아래에서 새 속성 **resources** 아래로 이동합니다.

1. **policy\$1file** 속성을 새 속성 **resource\$1file**로 변경합니다.

1. **apply\$1to\$1accounts\$1in\$1ou**를 새 속성 **deployment\$1targets**로 변경합니다. OU 목록은 하위 속성 **organization\$1units** 아래에 정의되어야 합니다. **accounts** 하위 속성은 조직 정책에 대해 지원되지 않습니다.

1. 값이 **scp** 또는 **rcp**.인 새 속성 **deploy\$1method**를 추가합니다.

**CloudFormation 리소스**

1. CloudFormation 리소스를 **cloudformation\$1resources** 아래에서 새 속성 **resources** 아래로 이동합니다.

1. **template\$1file** 속성을 새 속성 **resource\$1file**로 변경합니다.

1. **deploy\$1to\$1ou**를 새 속성 **deployment\$1targets**로 변경합니다. OU 목록은 하위 속성 **organization\$1units** 아래에 정의되어야 합니다.

1. **deploy\$1to\$1accounts**를 새 속성 **deployment\$1targets**로 변경합니다. 계정 목록은 하위 속성 **accounts** 아래에 정의되어야 합니다.

1. **ssm\$1parameters** 속성을 새 속성 **export\$1outputs**로 변경합니다.

## 권장 CfCT 업그레이드 단계
<a name="highly-recommended-upgrade-steps"></a>

**CloudFormation 파라미터**

1. **parameter\$1file** 속성을 새 속성 **파라미터**로 변경합니다.

1. **parameter\$1file** 속성의 값에서 파일 경로를 제거합니다.

1. 기존 파라미터 JSON 파일의 파라미터 키와 파라미터 값을 **parameters** 속성의 새 형식으로 복사합니다. 이렇게 하면 매니페스트 파일에서 이들을 관리하는데 도움이 됩니다.

**참고**  
**parameter\$1file** 속성은 CfCT 매니페스트 버전 *2021-03-15*에서 지원됩니다.