

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

# 클라우드 기반
<a name="cloudfoundations-pattern-list"></a>

**Topics**
+ [의 Landing Zone Accelerator를 사용하여 계정 생성 자동화 AWS](automate-account-creation-lza.md)
+ [여러 계정 및 리전에서 AWS 자동으로 리소스 인벤토리 생성](automate-aws-resource-inventory.md)
+ [MongoDB Atlas를 포함하는 AWS 랜딩 존 구축](build-aws-landing-zone-that-includes-mongodb-atlas.md)
+ [에서 중앙 집중화를 위한 VPC 흐름 로그 구성 AWS 계정](configure-vpc-flow-logs-for-centralization-across-aws-accounts.md)
+ [Terraform을 사용하여 AWS 권한 세트 동적 관리](manage-aws-permission-sets-dynamically-by-using-terraform.md)
+ [AWS Organizations를 사용하여 Transit Gateway Attachment에 자동으로 태그 지정](tag-transit-gateway-attachments-automatically-using-aws-organizations.md)
+ [패턴 더 보기](cloudfoundations-more-patterns-pattern-list.md)

# 의 Landing Zone Accelerator를 사용하여 계정 생성 자동화 AWS
<a name="automate-account-creation-lza"></a>

*Justin Kuskowski, Joe Behrens, Nathan Scott, Amazon Web Services*

## 요약
<a name="automate-account-creation-lza-summary"></a>

이 패턴은 승인된 사용자가 요청을 제출할 AWS 계정 때 [Landing Zone Accelerator on AWS](https://aws.amazon.com/solutions/implementations/landing-zone-accelerator-on-aws/) 솔루션을 사용하여 새를 자동으로 배포하는 방법을 설명합니다. AWS Step Functions 를 사용하여 여러 AWS Lambda 함수를 오케스트레이션합니다. Lambda 함수는 계정 정보를 Git 리포지토리에 추가하고, AWS CodePipeline 파이프라인을 시작하고, 필요한 AWS 리소스가 프로비저닝되었는지 확인합니다. 프로세스가 완료되면 사용자는 계정이 생성되었다는 알림을 받습니다.

선택적으로 계정 생성 프로세스 중에 Microsoft Entra ID 그룹을 통합하고 AWS IAM Identity Center 권한 세트를 할당할 수 있습니다. 조직에서 Microsoft Entra ID를 ID 소스로 사용하는 경우 이 선택적 기능을 사용하면 새 계정에 대한 액세스를 자동으로 관리하고 구성할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="automate-account-creation-lza-prereqs"></a>

**사전 조건 **
+ 에서 관리 계정에 대한 액세스 AWS Organizations
+ AWS Cloud Development Kit (AWS CDK) 버전 2.118.0 이상, [설치](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install) 및 [구성](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_configure)됨
+ Python 버전 3.9 이상 [설치](https://www.python.org/downloads/)
+ AWS Command Line Interface (AWS CLI) 버전 2.13.19 이상, [설치](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)됨
+ Docker 버전 24.0.6 이상 [설치](https://docs.docker.com/get-started/get-docker/)
+ 관리 계정에 [배포](https://docs.aws.amazon.com/solutions/latest/landing-zone-accelerator-on-aws/deploy-the-solution.html)된 AWS 솔루션의 Landing Zone Accelerator
+ (선택 사항) Microsoft Entra ID 및 IAM Identity Center [통합](https://docs.aws.amazon.com/singlesignon/latest/userguide/idp-microsoft-entra.html)

**제한 사항 **

계정 생성 워크플로는 단일 AWS 계정을 배포하기 위한 순차적 실행을 지원합니다. 이 제한은 병렬 실행 중에 리소스를 경쟁할 필요 없이 계정 생성 워크플로가 성공적으로 완료되도록 하기 위한 것입니다.

## 아키텍처
<a name="automate-account-creation-lza-architecture"></a>

**대상 아키텍처**

다음 이미지는 Landing Zone Accelerator on AWS. AWS Step Functions orchestrats 자동화를 AWS 계정 사용하여 새의 생성을 자동화하는 상위 수준 아키텍처를 보여줍니다. Step Functions 워크플로의 각 작업은 하나 이상의 AWS Lambda 함수에 의해 수행됩니다.

![\[Landing Zone Accelerator on AWS를 사용하여 새 계정 생성을 자동화하는 워크플로입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/d31abfaa-6854-4923-b896-3b817de9f4d9/images/dfd6503d-a4ed-43df-82d4-082f8153d473.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 사용자가 Python 스크립트를 실행하거나 Amazon API Gateway를 사용하여 계정을 요청합니다.

1. 계정 생성 오케스트레이터 워크플로는 AWS Step Functions에서 시작됩니다.

1. 이 워크플로는 소스 코드 리포지토리의 `account-config.yaml` 파일을 업데이트합니다. 또한 AWS 파이프라인에서 Landing Zone Accelerator를 시작하고 파이프라인의 상태를 확인합니다. 이 파이프라인은 새 계정을 생성하고 설정합니다. 작동 방식에 대한 자세한 내용은 AWS의 Landing Zone Accelerator에 대한 [아키텍처 개요](https://docs.aws.amazon.com/solutions/latest/landing-zone-accelerator-on-aws/architecture-overview.html)를 참조하세요.

1. (선택 사항) 파이프라인이 완료되면 워크플로는 그룹이 Microsoft Entra ID에 존재하는지 확인합니다. 그룹이 Microsoft Entra ID에 없는 경우 워크플로는 그룹을 Microsoft Entra ID에 추가합니다.

1. 워크플로는 AWS 솔루션의 Landing Zone Accelerator가 수행할 수 없는 추가 단계를 수행합니다. 기본 단계는 다음과 같습니다.
   +  AWS Identity and Access Management (IAM)에서 [계정 별칭](https://docs.aws.amazon.com/IAM/latest/UserGuide/console-account-alias.html) 생성
   + 에서 계정에 [태그](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tagging.html) 연결 AWS Organizations
   + 계정에 할당된 태그를 기반으로 [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)에서 파라미터 생성

1. (선택 사항) 워크플로는 이전에 지정한 Microsoft Entra ID 그룹에 하나 이상의 [권한 세트를](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html) 할당합니다. 권한 세트를 사용하면 그룹의 사용자가 새 계정에 액세스하고 구성한 작업을 수행할 수 있습니다.

1.  AWS Lambda 함수는 QA 및 검증 테스트를 실행합니다. 리소스 생성을 검증하고, 태그가 생성되었는지 확인하고, 보안 리소스가 배포되었는지 확인합니다.

1. 워크플로는 계정을 해제하고 Amazon Simple Email Service(Amazon SES)를 사용하여 프로세스가 성공적으로 완료되었음을 사용자에게 알립니다.

Step Functions 워크플로에 대한 자세한 내용은이 패턴의 [추가 정보](#automate-account-creation-lza-additional) 섹션에서 *Step Functions 워크플로 다이어그램*을 참조하세요.

**Microsoft Entra ID 애플리케이션**

Microsoft Entra ID와 통합하기로 선택한 경우이 패턴을 배포할 때 다음 두 가지 애플리케이션을 생성합니다.
+ IAM Identity Center에 연결되어 있고 Microsoft Entra ID 그룹을 IAM Identity Center에서 사용할 수 있는지 확인하는 애플리케이션입니다. 이 예에서 이 Microsoft Entra ID 애플리케이션의 이름은 `LZA2`입니다.
+ Lambda 함수가 Microsoft Entra ID와 통신하고 [Microsoft Graph API](https://learn.microsoft.com/en-us/graph/identity-network-access-overview)를 직접적으로 호출하도록 하는 애플리케이션. 이 패턴에서이 애플리케이션의 이름은 입니다`create_aws_account`.

이러한 애플리케이션은 Microsoft Entra ID 그룹을 동기화하고 권한 세트를 할당하는 데 사용되는 데이터를 수집합니다.

## 도구
<a name="automate-account-creation-lza-tools"></a>

**AWS 서비스**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html)는 규모와 관계없이 REST, HTTP 및 WebSocket API를 생성, 게시, 유지 관리, 모니터링 및 보호하는 것을 지원합니다. 이 패턴에서는 API Gateway를 사용하여 AWS 계정 이름의 가용성을 확인하고, AWS Step Functions 워크플로를 시작하고, Step Functions 실행 상태를 확인합니다.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)는 코드로 AWS 클라우드 인프라를 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다.
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)는 규범적 모범 사례에 따라 AWS 다중 계정 환경을 설정하고 관리하는 데 도움이 됩니다.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)는 애플리케이션을 다양한 소스의 실시간 데이터와 연결할 수 있는 서버리스 이벤트 버스 서비스입니다. 예를 들어 AWS Lambda 함수, API 대상을 사용하는 HTTP 호출 엔드포인트 또는 다른의 이벤트 버스 등이 있습니다 AWS 계정. 이 솔루션은 Step Functions 워크플로 상태가 `Failed`, `Timed-out`또는 로 변경되는 경우 Lambda 함수를 시작하는 [EventBridge 규칙을](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html) 사용합니다`Aborted`.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 권한이 있는 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)를 사용하면 모든 AWS 계정 및 클라우드 애플리케이션에 대한 Single Sign-On(SSO) 액세스를 중앙에서 관리할 수 있습니다.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다. 이 패턴에서 AWS KMS 키는 Amazon Simple Storage Service(Amazon S3), Lambda 환경 변수 및 Step Functions의 데이터와 같은 데이터를 암호화하는 데 사용됩니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)는 여러를 생성하여 중앙에서 관리하는 조직 AWS 계정 으로 통합하는 데 도움이 되는 계정 관리 서비스입니다.
+ [Amazon Simple Email Service(Amazon SES)](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html)를 사용하면 자신의 이메일 주소와 도메인을 사용하여 이메일을 보내고 받을 수 있습니다. 새 계정이 성공적으로 생성되면 Amazon SES를 통해 알림을 받게 됩니다.
+ [Amazon Simple Notification Service(Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)를 사용하면 웹 서버 및 이메일 주소를 포함하여 게시자와 클라이언트 간의 메시지 교환을 조정하고 관리할 수 있습니다. 계정 생성 프로세스 중에 오류가 발생하면 Amazon SNS는 사용자가 구성한 이메일 주소로 알림을 보냅니다.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)는 AWS Lambda 함수 및 기타를 결합하여 비즈니스 크리티컬 애플리케이션을 구축하는 AWS 서비스 데 도움이 되는 서버리스 오케스트레이션 서비스입니다.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)는 구성 데이터 관리 및 보안 암호 관리를 위한 안전한 계층적 스토리지를 제공합니다.

**기타 도구**
+ [awscurl](https://pypi.org/project/awscurl/0.6/)은 AWS API 요청에 서명하는 프로세스를 자동화하고 요청을 표준 curl 명령으로 수행하는 데 도움이 됩니다.
+ 이전에 *Azure Active Directory*라고 불렸던 [Microsoft Entra ID](https://learn.microsoft.com/en-us/entra/fundamentals/whatis)는 클라우드 기반 ID 및 액세스 관리 서비스입니다.
+ [Microsoft 그래프 API](https://learn.microsoft.com/en-us/graph/graph-explorer/graph-explorer-overview)를 사용하면 Microsoft Entra 및 Microsoft 365와 같은 Microsoft 클라우드 서비스의 데이터 및 인텔리전스에 액세스할 수 있습니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [lza-account-creation-workflow](https://github.com/aws-samples/lza-account-creation-workflow)리포지토리에서 사용할 수 있습니다.

[lambda\$1layer](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_layer) 디렉터리에는 둘 이상의 Lambda 함수에서 참조되는 다음 계층이 포함되어 있습니다.
+ [account\$1creation\$1helper](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_layer/account_creation_helper) -이 계층에는 역할을 수임하고 진행 상황을 확인하기 위한 모듈이 포함되어 있습니다 AWS Service Catalog.
+ [boto3](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_layer/boto3) -이 계층에는에 최신 버전이 있는지 확인하는 [AWS SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) 모듈이 포함되어 AWS Lambda 있습니다.
+ [identity\$1center\$1helper](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_layer/identity_center_helper) - 이 계층은 IAM Identity Center에 대한 직접 호출을 지원합니다.

[lambda\$1src](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src) 디렉터리에는 다음 Lambda 함수가 포함되어 있습니다.
+ [AccountTagToSsmParameter](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/event/AccountTagToSsmParameter) -이 함수는 Parameter Store에서 파라미터를 생성하기 AWS Organizations 위해에서 계정에 연결된 태그를 사용합니다. 각 파라미터는 `/account/tags/` 접두사로 시작해야 합니다.
+ [AttachPermissionSet](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/AttachPermissionSet) –이 함수는 IAM Identity Center 그룹에 권한 세트를 추가합니다.
+ [AzureADGroupSync](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/AzureADGroupSync) -이 함수는 대상 Microsoft Entra ID 그룹을 IAM Identity Center에 동기화합니다.
+ [CheckForRunningProcesses](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/CheckForRunningProcesses) -이 함수는 `AWSAccelerator-Pipeline` 파이프라인이 현재 실행 중인지 확인합니다. 파이프라인이 실행 중인 경우 함수는 AWS Step Functions 워크플로를 지연시킵니다.
+ [CreateAccount](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/CreateAccount) -이 함수는 AWS Service Catalog 및 AWS Control Tower 를 사용하여 새를 생성합니다 AWS 계정.
+ [CreateAdditionalResources](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/CreateAdditionalResources) -이 함수는 Landing Zone Accelerator에서 관리하지 않거나 계정 별칭 및 AWS Service Catalog 태그 AWS CloudFormation와 같은 AWS 리소스를 생성합니다.
+ [GetAccountStatus](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/GetAccountStatus) -이 함수는에서 프로비저닝된 제품을 스캔 AWS Service Catalog 하여 계정 생성 프로세스가 완료되었는지 확인합니다.
+ [GetExecutionStatus](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/api/GetExecutionStatus) -이 함수는 실행 중이거나 완료된 AWS Step Functions 실행의 상태를 검색합니다.
+ [NameAvailability](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/api/NameAvailability) -이 함수는 AWS 계정 이름이 이미 존재하는지 확인합니다 AWS Organizations.
+ [ReturnResponse](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/ReturnResponse) - 계정 생성에 성공하면이 함수는 새 계정의 ID를 반환합니다. 계정 생성에 실패하면 오류 메시지가 반환됩니다.
+ [RunStepFunction](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/api/RunStepFunction) -이 함수는 계정을 생성하는 AWS Step Functions 워크플로를 실행합니다.
+ [SendEmailWithSES](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/SendEmailWithSES) -이 함수는 계정 생성이 완료될 때까지 기다리는 사용자에게 이메일을 보냅니다.
+ [ValidateADGroupSyncToSSO](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/ValidateAdGroupSyncToSSO) -이 함수는 지정된 Microsoft Entra ID 그룹이 IAM Identity Center와 동기화되었는지 확인합니다.
+ [ValidateResources](https://github.com/aws-samples/lza-account-creation-workflow/tree/main/app/lambda_src/stepfunction/ValidateResources) -이 함수는 모든 AWS Control Tower 사용자 지정이 성공적으로 실행되었는지 확인합니다.

## 모범 사례
<a name="automate-account-creation-lza-best-practices"></a>

에는 AWS CDK다음과 같은 이름 지정 규칙을 사용하는 것이 좋습니다. 
+ `p` 접두사로 모든 파라미터를 시작합니다.
+ `c` 접두사로 모든 조건을 시작합니다.
+ `r` 접두사로 모든 리소스를 시작합니다.
+ `o` 접두사로 모든 출력을 시작합니다.

## 에픽
<a name="automate-account-creation-lza-epics"></a>

### 검증 및 태깅을 위한 IAM 역할 배포
<a name="deploy-the-iam-roles-for-validation-and-tagging"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 사용자 지정을 AWS 위해의 Landing Zone Accelerator를 준비합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps | 
| `lza-account-creation-validation` 규칙을 배포할 준비를 합니다. | 이제 관리 계정을 제외한 모든 계정에 `lza-account-creation-validation` IAM 역할을 배포하도록 솔루션을 사용자 지정합니다. 이 역할은 `ValidateResources` Lambda 함수에 새 계정에 대한 읽기 전용 액세스 권한을 제공합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps | 
| `account-tagging-to-ssm-parameter-role` 규칙을 배포할 준비를 합니다. | 이제 관리 계정을 제외한 모든 계정에 `account-tagging-to-ssm-parameter-role` IAM 역할을 배포하도록 솔루션을 사용자 지정합니다. 이 역할은 AWS Systems Manager Parameter Store에서 파라미터를 생성하는 데 사용됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps | 
| `config-log-validation-role` 규칙을 배포할 준비를 합니다. | 이제 로그 아카이브 계정에 `config-log-validation-role` IAM 역할을 배포하도록 솔루션을 사용자 지정합니다. 이 역할을 통해 `ValidateResources` Lambda 함수는 로깅 및 액세스 AWS Config 규칙을 위해 Amazon S3 버킷에 액세스할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps | 

### (선택 사항) Microsoft Entra ID에서 데이터 가져오기
<a name="optional-get-data-from-microsoft-entra-id"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda 함수가 Microsoft Entra ID와 통신할 수 있도록 허용하는 애플리케이션을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | Microsoft Entra ID | 
| `create_aws_account` 애플리케이션의 값을 검색합니다. | 이제 `create_aws_account` 애플리케이션에 필요한 값을 검색합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | Microsoft Entra ID | 
| Microsoft Entra ID를 IAM Identity Center와 통합하는 애플리케이션을 생성합니다. | Microsoft Entra ID 관리자 센터에서 `LZA2` 애플리케이션을 등록합니다. 지침은 Microsoft 설명서의 [애플리케이션 등록](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app)을 참조하세요. | Microsoft Entra ID | 
| `LZA2` 애플리케이션의 값을 검색합니다. | 이제 `LZA2` 애플리케이션에 필요한 값을 검색합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | Microsoft Entra ID | 
| 보안 암호를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps | 

### 솔루션 배포
<a name="deploy-the-solution"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 코드를 복제합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps 엔지니어 | 
| `deploy-config.yaml` 파일을 업데이트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps | 
|  AWS 환경에 솔루션을 배포합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html)이 솔루션은 Amazon S3 버킷을 사용하여이 솔루션의 소스 코드를 저장합니다. [upload\$1to\$1source\$1bucket.py](https://github.com/aws-samples/gen-ai-trivia/blob/main/scripts/upload_to_source_bucket.py) 스크립트를 사용하여 소스 코드의 아카이브를 생성하고 업데이트된 버전을 업로드할 수 있습니다. | DevOps | 

### 옵션 1 - Python을 사용하여 계정 생성
<a name="option-1-create-an-account-using-python"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 사용할 인수를 식별합니다. | Step Functions 워크플로를 시작하는 Python 스크립트를 실행할 때 사용할 인수를 선택합니다. 인수의 전체 목록은이 패턴의 [추가 정보](#automate-account-creation-lza-additional) 섹션을 참조하세요. | AWS DevOps, Python | 
| Python 스크립트를 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps 엔지니어, Python | 

### 옵션 2 - API Gateway 및 awscurl을 사용하여 계정 생성
<a name="option-2-create-an-account-using-api-gateway-and-awscurl"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| awscurl에 대한 변수를 설정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps | 
| 이름 가용성을 확인합니다. | 다음 명령을 입력하여에 이름을 사용할 수 있는지 확인합니다 AWS 계정. `<AWS_ACCOUNT_NAME>`를 대상 계정의 이름으로 바꿉니다.<pre>awscurl --service execute-api \<br />    --region ${AWS_REGION} \<br />    --access_key ${AWS_ACCESS_KEY_ID} \<br />    --secret_key ${AWS_SECRET_ACCESS_KEY} \<br />    --security_token ${AWS_SESSION_TOKEN} \<br />    -X POST ${API_GATEWAY_ENDPOINT}check_name?account_name=<AWS_ACCOUNT_NAME></pre> | DevOps | 
| 계정 생성 워크플로를 실행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps | 

### (선택 사항) 솔루션 정리
<a name="optional-clean-up-the-solution"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon S3 버킷에서 객체를 제거합니다. | 다음 Amazon S3 버킷에서 객체를 제거합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-account-creation-lza.html) | DevOps | 
| CloudFormation 스택을 삭제합니다. | CloudFormation 스택을 삭제하려면 다음 명령을 실행합니다.<pre>aws cloudformation delete-stack \<br />  --stack-name lza-account-creation-workflow-application<br />aws cloudformation wait stack-delete-complete \<br />  --stack-name lza-account-creation-workflow-application</pre> | DevOps | 
| 파이프라인을 삭제합니다. | 다음 명령을 입력하여 `lza-account-creation-workflow-pipeline` 파이프라인을 삭제합니다.<pre>cdk destroy lza-account-creation-workflow-pipeline --force</pre> | DevOps | 

## 관련 리소스
<a name="automate-account-creation-lza-resources"></a>
+ [랜딩 존 액셀러레이터 켜기 AWS](https://aws.amazon.com/solutions/implementations/landing-zone-accelerator-on-aws/)(AWS 솔루션 라이브러리)
+ [일반적인 AWS CDK 문제 해결](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)(AWS CDK 문서)

## 추가 정보
<a name="automate-account-creation-lza-additional"></a>

**Step Functions 워크플로 다이어그램**

다음 이미지는 Step Functions 워크플로 내의 상태를 보여줍니다.

![\[Step Functions 워크플로 내의 상태.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/d31abfaa-6854-4923-b896-3b817de9f4d9/images/d93aa7bf-1144-4f25-9488-aacc534a7813.png)


**인수**

다음은 Step Functions 워크플로를 시작하는 Python 스크립트를 실행할 때 사용할 수 있는 인수입니다.

필요한 인수는 다음과 같습니다.
+ `account-name (-a)` (문자열) - 새의 이름입니다 AWS 계정.
+ `support-dl (-s)` (문자열) - 계정 생성 프로세스가 완료되면 알림을 수신하는 이메일 주소입니다.
+ `managed-org-unit (-m)` (문자열) - 새 계정을 포함할 관리형 [조직 단위(OU)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organizationalunit)입니다.

다음 인수는 선택 사항입니다.
+ `ad-integration (-ad)` (문자열 사전) - Microsoft Entra ID 그룹 및 할당된 권한 세트입니다. 다음은 이 인수를 사용하는 방법을 보여주는 예입니다.

  ```
  --ad-integration "{\"<PermissionSetName>\": \"<EntraIdGroupName>\"}"
  ```
+ `account-email (-e)`** **(문자열) - 새의 루트 사용자의 이메일 주소입니다 AWS 계정.
**참고**  
이 인수를 사용하지 않으면 `configs/deploy-config.yaml` 파일`rootEmailDomain`에서 `rootEmailPrefix` 및 값을 사용하여 이메일 주소가 생성됩니다. 이메일 주소가 제공되지 않으면 형식을 사용하여 이메일 주소가 생성됩니다`rootEmailPrefix+accountName@rootEmailDomain`.
+ `region (-r)` (문자열) - Step Functions 워크플로가 배포된 AWS 리전 입니다. 기본값은 `us-east-1`입니다.
+ `force-update (-f)` (문자열 부울) - `true`를 입력하여 프로비저닝된 제품을 강제 AWS Service Catalog 로 업데이트합니다.
+ `bypass-creation (-b)` (문자열 부울) - `true`를 입력하여 `accounts-config.yaml` 파일에 계정을 추가하지 않고 `AWSAccelerator-Pipeline` 파이프라인 실행을 우회합니다. 이 인수는 일반적으로 계정 생성 워크플로 프로세스를 테스트하거나 `Landing Zone Accelerator` 파이프라인에서 오류가 발생하는 경우 나머지 Step Functions 단계를 실행하는 데 사용됩니다.
+ `tags (-t)` (문자열) -에 추가할 추가 태그입니다 AWS 계정. 기본적으로 , `account-name` `support-dl`및 태그가 추가됩니다`purpose`. 다음은 이 인수를 사용하는 방법을 보여주는 예입니다.

  ```
  --tags TEST1=VALUE1 TEST2=VALUE2
  ```

# 여러 계정 및 리전에서 AWS 자동으로 리소스 인벤토리 생성
<a name="automate-aws-resource-inventory"></a>

*Matej Macek, Amazon Web Services*

## 요약
<a name="automate-aws-resource-inventory-summary"></a>

이 패턴은 여러 계정 및에 걸쳐 포괄적인 AWS 리소스 인벤토리를 유지하기 위한 자동화된 접근 방식을 간략하게 설명합니다 AWS 리전. 인프라 및 보안 엔지니어가 리소스 관리 관행을 개선하는 데 도움이 되도록 설계되었습니다. 를 사용하여 리소스 변경 사항, 쿼리 AWS Config 를 위한 Amazon Athena, 대화형 대시보드를 위한 Amazon Quick Sight를 추적합니다. AWS CloudFormation 스택을 배포하여이 솔루션을 구현합니다.

이 솔루션은 [ Amazon Athena 및 Amazon Quick Sight를 사용하여 AWS Config 데이터 시각화(블로그 게시물)에 제시된 솔루션과](https://aws.amazon.com/blogs/mt/visualizing-aws-config-data-using-amazon-athena-and-amazon-quicksight/) 유사합니다.AWS 이 패턴은 해당 솔루션을 확장하여 다음과 같은 공통 요구 사항을 해결하고 다음과 같은 주요 이점을 제공합니다.
+ **규정 준수 중심** -이 접근 방식은 정확한 자산 인벤토리를 요구하는 [PCI DSS](https://www.pcisecuritystandards.org/), [NIST SP 800-53](https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final), [ISO/IEC 27001](https://www.iso.org/standard/27001), [HIPAA](https://www.hhs.gov/programs/hipaa/index.html), [GDPR](https://gdpr.eu/) 등과 같은 규제 요구 사항을 충족하는 데 도움이 될 수 있습니다.
+ **사용자 지정 프레임워크** - 다양한 AWS 리소스에 대한 Quick Sight 대시보드를 생성할 수 있는 기반을 제공하므로 특정 요구 사항에 맞게 솔루션을 사용자 지정할 수 있습니다.
+ **사용자 기반 개선 사항** -이 접근 방식은 실제 사용 사례의 피드백을 통합하고 보다 포괄적인 솔루션에 대한 요청을 처리합니다.

인프라, 보안 및 재무 팀은 동적, 다중 계정 또는 다중 리전 환경에서 가시성 및 협업 문제에 직면하는 경우가 많습니다. 이 솔루션은 이러한 문제를 해결하고 리소스 인벤토리를 생성하고 유지 관리하는 데 필요한 시간과 노력을 크게 줄이도록 설계되었습니다. 결과적으로 리소스 할당 결정을 개선하고, 리스크를 식별 및 완화하고, 비용을 최적화하고, 전반적인 가시성과 협업을 개선하는 데 도움이 되는 리소스를 중앙 집중식으로 볼 수 있습니다. 이 접근 방식은 보안, 규정 준수 및 운영 목적에 대한 개념적 솔루션과 실제 구현 니즈 간의 격차를 해소합니다.

## 사전 조건 및 제한 사항
<a name="automate-aws-resource-inventory-prereqs"></a>

**사전 조건 **
+ 다음 활성 : AWS 계정
  + *관리 계정* - 결제, 계정 생성 및 조직 전체의 액세스 제어를 위한 중앙 집중식 계정
  + *감사 계정* - 보안 모니터링, 규정 준수 검사 및 드리프트 알림을 위한 중앙 집중식 허브
  + *로그 아카이브 계정* - 수집된 데이터를 저장하고 분석하기 위한 중앙 집중식 계정
+ 감사 계정에서 대상 계정 및 리전에서 구성 데이터를 수집하고 집계하는 AWS Config [애그리게이터](https://docs.aws.amazon.com/config/latest/developerguide/aggregate-data.html) 
+ 로그 아카이브 계정에서 다음을 설정합니다.
  +  AWS Config 애그리게이터의 데이터를 저장하는 Amazon Simple Storage Service(Amazon S3) [버킷](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) 
  + Amazon Quick [구독](https://docs.aws.amazon.com/quicksight/latest/user/signing-up.html)
  + Quick Sight와 Amazon Athena 간의 [승인된 연결](https://docs.aws.amazon.com/quicksight/latest/user/athena.html) 
  + Athena 쿼리를 통해 Amazon S3 버킷에 액세스할 수 있는 [권한](https://docs.aws.amazon.com/athena/latest/ug/s3-permissions.html) 
+ AWS Command Line Interface (AWS CLI), [설치](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 및 [구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)됨
+ 다음 리소스를 프로비저닝하는 CloudFormation 스택을 배포할 수 있는 권한:
  +  AWS Lambda 함수
  + Amazon S3 알림 구성
  + Athena 데이터베이스, 테이블 및 뷰
  + Quick Sight 데이터 세트 및 데이터 소스
+ 에서 자동화를 실행할 수 있는 권한 AWS Systems Manager
+ 빠른 액세스 권한

**제한 사항 **
+ 솔루션은에 의존합니다 AWS Config.는 AWS Config 일반적으로 변경 사항이 감지된 직후 또는 지정한 빈도로 리소스에 대한 구성 변경 사항을 기록합니다. 그러나 이는 가장 이상적인 시나리오이며 경우에 따라 더 오래 걸릴 수 있습니다.
+ 이 솔루션은가 [AWS Config 지원하는 리소스 유형만 추적합니다](https://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html).
+ 이 솔루션은 다른 클라우드 공급자 또는 온프레미스 환경의 리소스 인벤토리를 추적하지 않습니다.
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 AWS 설명서의 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 페이지를 참조하고 서비스 링크를 선택합니다.

## 아키텍처
<a name="automate-aws-resource-inventory-architecture"></a>

다음 다이어그램은 AWS 조직의 여러 계정에서 구성 및 규정 준수 데이터를 수집, 구성, 분석 및 시각화하는 간소화된 프로세스를 보여줍니다.

![\[조직 전체에서 구성 및 규정 준수 데이터를 수집하고 시각화합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/67a9667a-da19-4dcb-a2fe-62bc94a0541b/images/c9245de1-ac85-4a9e-a0c0-dbcc27a8bb5d.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 정기적으로 AWS Config 집계자는 대상 계정 및 리전의 리소스에 대한 구성 및 규정 준수 데이터를 수집한 다음 로그 아카이브 계정의 Amazon S3 버킷으로 데이터를 전송합니다.

1. Amazon S3 버킷에 새 AWS Config 데이터를 추가하면 AWS Lambda 함수가 호출됩니다.

1. Lambda 함수는 각 스냅샷 파일의 리전 및 날짜에 해당하는 값으로 키를 구성하여 데이터를 분할합니다. 이렇게 하면 구성 및 규정 준수 데이터를 AWS Glue 효율적으로 쿼리하고 처리할 수 있습니다.

1. Amazon Athena는 AWS Glue [스키마](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html)를 사용하여 Amazon S3 버킷에 저장된 데이터에 대해 SQL 쿼리를 실행합니다. 의 스키마 메타데이터 AWS Glue 를 활용하여 데이터의 구조를 이해합니다.

1. Athena의 [뷰는](https://docs.aws.amazon.com/athena/latest/ug/views.html) 대상 데이터 세트를 정의하고 추출합니다.

1. Quick Sight의 [대시보드는](https://docs.aws.amazon.com/quicksight/latest/user/using-dashboards.html) 데이터 세트를 시각화하고 분석하는 데 도움이 됩니다.

## 도구
<a name="automate-aws-resource-inventory-tools"></a>

**AWS 서비스**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)는 표준 SQL을 사용하여 Amazon S3에 있는 데이터를 직접 분석할 수 있는 대화형 쿼리 서비스입니다.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)를 사용하면 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및의 수명 주기 동안 리소스를 관리할 수 있습니다 AWS 리전.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)는의 리소스 AWS 계정 와 리소스 구성 방식에 대한 자세한 보기를 제공합니다. 리소스가 서로 관련되는 방식과 리소스의 구성이 시간이 지남에 따라 변경된 방식을 식별하는 데 도움이 됩니다. 애 AWS Config [그리게이터](https://docs.aws.amazon.com/config/latest/developerguide/aggregate-data.html)는 여러 및 리전에서 AWS Config 구성 AWS 계정 및 규정 준수 데이터를 수집합니다.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)는 완전관리형 E추출, 전환, 적재(ETL) 서비스입니다. 이를 통해 데이터 스토어와 데이터 스트림 간에 데이터를 안정적으로 분류, 정리, 보강하고 이동할 수 있습니다. 이 패턴은 AWS Glue [데이터 카탈로그](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html#data-catalog-intro) 및 [스키마 레지스트리](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html)를 사용합니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)는 여러을 생성하여 중앙에서 관리하는 조직 AWS 계정 으로 통합하는 데 도움이 되는 계정 관리 서비스입니다.
+ [Amazon Quick Sight](https://docs.aws.amazon.com/quicksuite/latest/userguide/quick-bi.html)는 대화형 시각화, 대시보드 및 보고서를 통해 원시 데이터를 의미 있는 인사이트로 변환하는 데 도움이 되는 비즈니스 인텔리전스(BI) 서비스입니다. Quick Sight는 Amazon Quick의 핵심 구성 요소입니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)은 AWS 클라우드에서 실행되는 애플리케이션 및 인프라를 관리하는 데 도움을 줍니다. 애플리케이션 및 리소스 관리를 간소화하고, 운영 문제를 감지하고 해결하는 시간을 단축하며, AWS 리소스를 대규모로 안전하게 관리하는 데 도움이 됩니다. [AWS Systems Manager 자동화](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html)는 많은 사용자의 일반적인 유지 관리, 배포 및 문제 해결 작업을 간소화합니다 AWS 서비스.

**코드 리포지토리**

이 패턴의 AWS CloudFormation 템플릿은 [AWS Config 시각화](https://github.com/aws-samples/aws-management-and-governance-samples/blob/master/AWSConfig/AWS-Config-Visualization/README.md) GitHub 리포지토리에서 사용할 수 있습니다. 이 CloudFormation 템플릿은 Amazon Athena와 함께 AWS Config 사용하도록를 설정하는 AWS Systems Manager 자동화 실행서를 배포합니다. 이 자동화는 지정된 Amazon S3 버킷과 연결할 준비를 하고, Amazon Athena에서 뷰를 생성하고, 대시보드 시각화 AWS Glue 를 위한 Quick Sight를 구성합니다.

## 모범 사례
<a name="automate-aws-resource-inventory-best-practices"></a>
+  AWS 권장 가이드의를 [사용하여 안전한 다중 계정 AWS 환경 설정 및 관리 AWS Control Tower](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-aws-environment/welcome.html)의 모범 사례를 따르는 것이 좋습니다.
+ 전체 AWS 조직에 대한 구성 및 규정 준수 데이터를 수집하는 AWS Config 집계자를 생성하는 것이 좋습니다. 자세한 내용은 AWS Config 설명서의 [다중 계정 다중 리전 데이터 집계](https://docs.aws.amazon.com/config/latest/developerguide/aggregate-data.html)를 참조하세요.
+ 이 솔루션을 배포하기 전에 [Amazon S3](https://aws.amazon.com/s3/pricing/), , [AWS Config](https://aws.amazon.com/config/pricing/) [Athena](https://aws.amazon.com/athena/pricing/) 및 [Quick](https://aws.amazon.com/quicksight/pricing/)에 대한 현재 요금 정보를 검토하는 것이 좋습니다.

## 에픽
<a name="automate-aws-resource-inventory-epics"></a>

### CloudFormation 스택 배포
<a name="deploy-the-cfnshort-stack"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CloudFormation 템플릿을 다운로드하십시오. | [Config-QuickSight-Visualization-SSM-Automation.yaml](https://github.com/aws-samples/aws-management-and-governance-samples/blob/master/AWSConfig/AWS-Config-Visualization/cft/Config-QuickSight-Visualization-SSM-Automation.yaml) CloudFormation 템플릿을 다운로드합니다. | AWS 관리자, 클라우드 관리자, DevOps 엔지니어 | 
| CloudFormation 템플릿을 수정합니다. | 를 사용하고 [AWS Control Tower](https://aws.amazon.com/controltower/) AWS Config 에서 관리하는 경우에만이 단계를 완료합니다 AWS Control Tower. CloudFormation 템플릿을 수정해야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | DevOps 엔지니어, AWS 관리자 | 
| CloudFormation 스택을 생성합니다. | [CloudFormation 콘솔에서 스택 생성](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)의 지침을 따릅니다. 다음 사항에 유의하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | AWS 관리자, 클라우드 관리자, DevOps 엔지니어 | 

### Systems Manager에서 자동화 실행
<a name="run-the-automation-in-sys"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 빠른 사용자 이름을 찾습니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | AWS 관리자, 클라우드 관리자, DevOps 엔지니어 | 
| 전송 채널 이름과 Amazon S3 버킷 이름을 찾습니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | AWS 관리자, 클라우드 관리자, DevOps 엔지니어 | 
| Systems Manager에서 자동화를 실행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | AWS 관리자, 클라우드 관리자, DevOps 엔지니어 | 

### Quick Sight에서 데이터 시각화
<a name="visualize-data-in-qsight"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터를 새로 고칩니다. | 특정 요구 사항에 따라 데이터 세트 새로 고침을 예약하려면 [SPICE 데이터 새로 고침](https://docs.aws.amazon.com/quicksight/latest/user/refreshing-imported-data.html)의 지침을 따릅니다. | AWS 관리자, DevOps 엔지니어, 클라우드 관리자 | 
|  분석을 생성합니다. | Quick Sight에서 리소스를 시각화하는 데 도움이 되는 대시보드를 생성하려면 [Quick Sight에서 분석 시작](https://docs.aws.amazon.com/quicksuite/latest/userguide/creating-an-analysis.html)의 지침을 따르세요. | Quick Suite 관리자 | 
| 대시보드를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | Quick Suite 관리자 | 

### (선택 사항)정리
<a name="optional-clean-up"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Systems Manager 자동화에서 생성한 리소스를 삭제합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-aws-resource-inventory.html) | AWS 관리자, 클라우드 관리자, DevOps 엔지니어 | 
| CloudFormation 스택을 삭제합니다. | `Config-QuickSight-Visualization-SSM-Automation` 스택의 리소스를 삭제하려면 [ CloudFormation 콘솔에서 스택 삭제의](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) 지침을 따릅니다. | AWS 관리자, 클라우드 관리자, DevOps 엔지니어 | 

## 문제 해결
<a name="automate-aws-resource-inventory-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| Amazon Quick이에 연결을 시도하고 `us-east-1` AWS 리전있지만 해당 리전에서 리소스를 생성할 수 없습니다. | 서비스 제어 정책이이 리전에서 Amazon Quick에 대한 구독을 제한하고 있습니다. 서비스 제어 정책에서 대상을 수동으로 지정합니다 AWS 리전. 를 적절한 리전 식별자`<REGION_ID>`로 바꿉니다.<pre>https://<REGION_ID>.quicksight.aws.amazon.com/sn/start/dashboards</pre>다음은 예제입니다.<pre>https://eu-central-1.quicksight.aws.amazon.com/sn/start/dashboards</pre> | 
| Amazon Athena에서 다음 메시지가 표시됩니다.`Before you run your first query, you need to set up a query result location in Amazon S3.` | Amazon Athena의 쿼리 결과를 저장할 Amazon S3 버킷을 준비했는지 확인합니다. Amazon Athena [Amazon Athena 콘솔을 사용하여 쿼리 결과 위치 지정](https://docs.aws.amazon.com/athena/latest/ug/query-results-specify-location-console.html)의 지침을 따릅니다. | 

## 관련 리소스
<a name="automate-aws-resource-inventory-resources"></a>

**AWS 설명서**
+ [AWS Config 설명서](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)
+ [Amazon Quick 설명서](https://docs.aws.amazon.com/quicksuite/latest/userguide/what-is.html)

**AWS 블로그 게시물**
+ [를 사용하여 AWS Config 데이터 시각화 자동화 AWS Systems Manager](https://aws.amazon.com/blogs/mt/automate-aws-config-data-visualization-with-aws-systems-manager/)
+ [를 사용하여 리소스 구성 변경을 주기적으로 기록하는 방법 AWS Config](https://aws.amazon.com/blogs/mt/how-to-record-resource-configuration-changes-periodically-with-aws-config/)

**기타 리소스**
+ [Amazon Quick Community Learning Center](https://community.amazonquicksight.com/c/learning-center/10/none)
+ [Amazon Quick Community Gallery](https://community.amazonquicksight.com/c/gallery/44)

# MongoDB Atlas를 포함하는 AWS 랜딩 존 구축
<a name="build-aws-landing-zone-that-includes-mongodb-atlas"></a>

*Igor Alekseev, Amazon Web Services*

*Anuj Panchal, MongoDB*

## 요약
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-summary"></a>

이 패턴은 MongoDB Atlas 클러스터와 통합된 AWS 랜딩 존을 구축하는 방법을 설명합니다. 이 인프라는 Terraform 스크립트를 사용하여 자동으로 배포됩니다.

[랜딩 존](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-migration/aws-landing-zone.html)이라고 하는 잘 구성된 다중 계정 AWS 환경은 특히 기업에 확장성과 보안을 제공합니다. 워크로드 및 애플리케이션의 신속한 배포를 위한 토대 역할을 하며, 보안 및 인프라에 대한 신뢰도를 보장하는 데 도움이 됩니다. 랜딩 존을 구축하려면 계정 구조, 네트워킹, 보안 및 액세스 관리를 비롯한 기술적 및 비즈니스 요소를 신중하게 고려해야 합니다. 이러한 고려 사항은 조직의 미래 성장과 비즈니스 목표에 부합해야 합니다.

이 패턴의 사용 사례는 다음과 같습니다.
+ **엔터프라이즈 SaaS 및 PaaS 플랫폼:**에서 실행되는 서비스형 멀티테넌트 소프트웨어(SaaS) 애플리케이션 및 서비스형 플랫폼(PaaS) 플랫폼은이 설정을 사용하여 퍼블릭 인터넷을 통해 데이터를 노출하지 않고도 MongoDB Atlas에 대한 안전한 프라이빗 액세스를 제공할 AWS 수 있습니다.
+ **규제가 엄격한 산업**: Health Insurance Portability and Accountability Act(HIPAA), Payment Card Industry Data Security Standard(PCI DSS), System and Organization Controls 2(SOC2), General Data Protection Regulation(GDPR) 등의 표준을 엄격하게 준수해야 하는 은행, 금융 서비스, 의료 및 정부 워크로드에 다음과 같은 이점을 제공합니다.
  + 를 통한 암호화된 프라이빗 연결 AWS PrivateLink
  + MongoDB 복제본 세트의 다중 AZ 고가용성
+ **보안 AI/ML 워크로드**: Amazon Bedrock, Amazon SageMaker AI 또는 사용자 지정 AI 모델의 훈련 또는 추론 파이프라인은 PrivateLink를 통해 MongoDB Atlas에서 데이터를 안전하게 가져오고 저장할 수 있습니다.
+ **재해 복구 및 비즈니스 연속성**: 다중 AZ 설계는 단일 가용 영역 장애가 워크로드를 방해하지 않도록 합니다. 가용 영역에 설정된 Atlas 복제본은 자동 장애 조치를 보장합니다. 이는 금융 기술(핀테크) 앱, 디지털 뱅킹, 의료 모니터링 등의 상시 운영 서비스에 매우 중요합니다.

## 사전 조건 및 제한 사항
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-prereqs"></a>

**사전 조건 **
+ 조직 소유자가 MongoDB Atlas에 액세스하여 Atlas API 키를 생성할 수 있습니다. 이 요구 사항에 대한 자세한 내용은 MongoDB 설명서의 [조직 액세스 관리](https://www.mongodb.com/docs/atlas/tutorial/manage-organizations/)를 참조하세요.
+ 활성 [AWS 계정](https://aws.amazon.com/resources/create-account/)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) 설치 및 구성
+ MongoDB 버전 6.0 이상으로 생성된 MongoDB Atlas 클러스터
+ MongoDB and MongoDB Atlas에 대한 지식 자세한 내용은 [MongoDB Atlas 설명서](https://www.mongodb.com/docs/atlas/)를 참조하세요.

**제한 사항 **
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하고 서비스 링크를 선택합니다.

## 아키텍처
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-architecture"></a>

다음 참조 아키텍처 다이어그램은 MongoDB Atlas 프라이빗 엔드포인트와 통합된 AWS 랜딩 존의 배포 설정을 보여줍니다. 이 참조 아키텍처는 MongoDB Atlas와 통합된 안전하고 확장 가능하며 가용성이 높은 AWS 랜딩 존을 설정하는 방법을 보여줍니다. 다중 AZ 배포, 최소 권한 보안 제어 및 프라이빗 연결과 같은 AWS 모범 사례를 결합하여 조직은이 설계를 통해 최신 애플리케이션을 위한 강력한 환경을 프로비저닝할 수 있습니다.

![\[MongoDB Atlas와 통합된 AWS 랜딩 존용 다중 AZ 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/72d335b9-b5b1-4fe2-9972-65edbec60ab1/images/82a8cc98-6f22-4e28-a236-57a809930055.png)


이 아키텍처는 다음과 같이 구성됩니다.

**VPC**
+ 3개의 가용 영역에 걸쳐 있는 단일 가상 프라이빗 클라우드(VPC).
+ VPC는 각 가용 영역별로 구성된 서브넷으로 세분화됩니다. 이러한 서브넷은 고가용성을 위해 워크로드를 분산합니다.

인터넷 액세스****
+ 인터넷 게이트웨이는 애플리케이션 또는 접속 호스트와 같이 필요한 리소스에 대한 아웃바운드 인터넷 연결을 제공합니다.
+ 퍼블릭 서브넷에는 NAT 게이트웨이가 있을 수 있으므로, 프라이빗 서브넷 워크로드가 퍼블릭 인터넷에 직접 노출되지 않고 업데이트, 패치 및 기타 필수 패키지를 다운로드할 수 있습니다.

**프라이빗 서브넷 및 라우팅 테이블**
+ 애플리케이션 구성 요소, 마이크로서비스 또는 기타 민감한 리소스는 일반적으로 프라이빗 서브넷에 상주합니다.
+ 전용 라우팅 테이블이 트래픽 흐름을 제어합니다. 안전한 송신 전용 인터넷 액세스를 위해 프라이빗 서브넷에서 NAT 게이트웨이로 직접 아웃바운드 트래픽을 라우팅합니다.
+ 인터넷의 인바운드 요청은 퍼블릭 서브넷의 탄력적 로드 밸런서 또는 접속 호스트(사용된 경우)를 통과한 다음 프라이빗 서브넷 리소스로 적절하게 라우팅됩니다.

**PrivateLink를 통한 MongoDB Atlas 연결**
+ 이 아키텍처는 PrivateLink(VPC 엔드포인트를 통해)를 사용하여 데이터를 퍼블릭 인터넷에 노출하지 않고 MongoDB Atlas에 안전하게 연결합니다.
+ 요청은 AWS 백본 네트워크에 남아 있습니다. 전송 중 데이터에는 PrivateLink 암호화의 이점이 적용되고 퍼블릭 인터넷을 통해 라우팅되지 않습니다.
+ MongoDB Atlas 전용 VPC는 기본 및 보조 노드를 호스팅하고 관리형 데이터베이스 클러스터를 위한 안전하고 격리된 환경을 제공합니다.

**다중 AZ 배포**
+ 중요한 인프라 구성 요소(예: NAT 게이트웨이 및 애플리케이션 서브넷)는 3개 이상의 가용 영역에 분산됩니다. 가용 영역에 중단이 발생하는 경우 이 아키텍처는 나머지 가용 영역의 워크로드가 계속 작동하도록 합니다.
+ MongoDB Atlas는 기본적으로 복제본 세트를 통해 고가용성을 제공하고 데이터베이스 계층이 내결함성을 유지하도록 합니다. 중요한 인프라는 복원력을 위해 최소 3개의 가용 영역에 분산되어 있습니다.

## 도구
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-tools"></a>

**AWS 서비스**
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 이용하면 코드의 시크릿을 포함해 하드 코딩된 보안 인증을 프로그래밍 방식으로 시크릿을 검색하도록 하는 API 직접 호출로 바꿀 수 있습니다.

**기타 제품 및 도구**
+ [MongoDB Atlas](https://www.mongodb.com/atlas)는 클라우드에서 MongoDB 데이터베이스를 배포하고 관리하기 위한 완전관리형 서비스형 데이터베이스(DbaaS)입니다.
+ [Terraform](https://www.terraform.io/)은 HashiCorp의 코드형 인프라(IaC) 도구로, 클라우드 및 온프레미스 리소스를 생성하고 관리하는 데 도움이 됩니다. 이 패턴에서는 Terraform을 사용하여 스크립트를 실행하여 AWS 및 MongoDB Atlas에 필요한 리소스를 쉽게 배포할 수 있습니다.

**코드 리포지토리**

이 패턴의 코드는 [AWS 및 MongoDB Atlas 랜딩 존](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone) GitHub 리포지토리에서 사용할 수 있습니다.

## 에픽
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-epics"></a>

### 검색 및 평가 완료
<a name="complete-discovery-and-assessment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 주요 이해관계자를 파악합니다. | 랜딩 존 프로젝트에 관련된 모든 주요 이해관계자와 팀원을 식별합니다. 여기에는 다음과 같은 역할이 포함될 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-aws-landing-zone-that-includes-mongodb-atlas.html) | 마이그레이션 책임자 | 
| 구조 블루프린트를 생성합니다. |  AWS 및 MongoDB Atlas 지원 랜딩 존의 원하는 구조를 설명하는 블루프린트를 생성합니다. | 마이그레이션 책임자 | 
| 아키텍처 계획을 생성합니다. | 애플리케이션 아키텍트와 협력하여 요구 사항을 분석하고 내결함성 및 복원력이 뛰어난 아키텍처를 설계합니다. 이 패턴은 참조를 위한 스타터 아키텍처 템플릿을 제공합니다. 조직의 보안 및 인프라 요구 사항에 맞게 이 템플릿을 사용자 지정할 수 있습니다. | 클라우드 아키텍트 | 
| 설정 및 배포를 계획합니다. | 모든 이해 관계자와 함께 아키텍처를 배포하는 방법, 보안 조치를 구현하는 방법, 기타 측면을 결정하여 조직 및 요청 팀의 관심사와 일치하는지 확인합니다. | 마이그레이션 책임자, DevOps 엔지니어, DBA | 

### MongoDB Atlas 환경 설정
<a name="set-up-the-mongodb-atlas-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리포지토리를 복제합니다. | 다음 명령을 실행하여 [GitHub 리포지토리](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone)에서 코드를 복제합니다.<pre>git clone https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone</pre> | 앱 개발자, DevOps 엔지니어 | 
| Atlas 조직 ID를 가져옵니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-aws-landing-zone-that-includes-mongodb-atlas.html) | DBA | 
| Atlas 조직 수준 API 키를 생성합니다. | Atlas에서 조직 수준 API 키를 생성하려면 [MongoDB 설명서](https://www.mongodb.com/docs/atlas/configure-api-access/#grant-programmatic-access-to-an-organization)의 지침을 따릅니다. | DBA | 
| 에서 보안 암호를 생성합니다 AWS Secrets Manager. | 이전 단계에서 생성된 MongoDB Atlas API 키를 Secrets Manager에 키-값 보안 암호로 저장합니다. 자세한 지침은 [Secrets Manager 설명서](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)를 참조하세요. | DevOps 엔지니어 | 
| Atlas 클러스터 티어를 선택합니다. | 올바른 Atlas 클러스터 티어를 선택하려면 [MongoDB 설명서](https://www.mongodb.com/docs/atlas/sizing-tier-selection/)의 지침에 따릅니다. | DBA | 

### AWS 환경 설정
<a name="set-up-the-aws-environments"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Terraform 스크립트를 수정합니다. | GitHub 리포지토리의 로컬 사본에서 [모듈/mongodb-atlas/main.tf](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/3748350730ec2ac7ab64662d536b67b4840c667c/modules/mongodb-atlas/main.tf#L12) 파일(12행)의 시크릿 이름을 업데이트하여 배포 중에 Terraform이 Secrets Manager에서 보안 인증을 검색할 수 있도록 합니다. | DevOps 엔지니어 | 
|  AWS 액세스 키 ID와 보안 키를 생성합니다. |  AWS 액세스 키 ID 및 보안 키를 생성하려면 AWS re:Post 문서의 [AWS 액세스 키를 생성하려면 어떻게 해야 합니까?](https://repost.aws/knowledge-center/create-access-key) 지침을 따르세요.필요한 최소 권한을 가진 정책을 할당하는 것이 가장 좋지만, 이 예에서는 `AdministratorAccess` 정책을 선택합니다.액세스 키를 생성한 후 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 검토하여 액세스 키 관리 모범 사례에 대해 알아봅니다. | DevOps 엔지니어 | 
| 탄력적 IP 주소 할당 | 2개 이상의 탄력적 IP 주소 ID를 할당합니다. 지침은 [Amazon Virtual Private Cloud(Amazon VPC) 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithEIPs.html)를 참조하세요. | DevOps 엔지니어 | 
| S3 버킷을 생성합니다. | [Amazon Simple Storage Service(Amazon S3) 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)의 지침에 따라 Terraform 배포 상태를 저장할 S3 버킷을 생성합니다. | DevOps 엔지니어 | 
| 스토리지용 S3 버킷을 업데이트합니다. | 이전 단계에서 생성한 버킷의 이름 및 리전과 일치하도록 [environments/development/main.tf](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/83e0b52cc4a8c12b24b54edeecbae496880d3615/environments/development/main.tf#L16)의 로컬 버전에서 S3 버킷 정보를 업데이트하고 키 접두사를 지정합니다. 예제:<pre>terraform {<br />       ...<br />  backend "s3" {<br />    bucket = "startup-name-product-terraform"<br />    key    = "network/dev"<br />    region = "ap-southeast-1"<br />  }<br />}</pre>이 예에서는 키 접두사 `network/dev`를 사용하여 Terraform 상태 파일을 구성하도록 Terraform을 구성할 수 있습니다. 생성하려는 환경과 일치하도록 값을 `prod` 또는 `staging`으로 변경할 수 있습니다. 여러 환경 사용에 대한 자세한 내용은 이 섹션의 마지막 단계를 참조하세요.Amazon S3 키 접두사에 대한 자세한 내용은 Amazon S3 사용 설명서의 [접두사를 사용하여 객체 구성하기](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html)를 참조하세요. | DevOps 엔지니어 | 
| Terraform 변수를 설정합니다. | 샘플 랜딩 존은 [Terraform 변수 정의 파일](https://www.terraform.io/docs/language/values/variables.html#variable-definitions-tfvars-files)을 사용하여 입력 변수 값을 정의합니다.이 변수 파일은 [environments/development/variables.tf](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/environments/development/variables.tf)에 있습니다. [environments/development/terraform.tfvars](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/environments/development/terraform.tfvars) 파일에서 변수 값을 설정할 수 있습니다. GitHub 리포지토리의 [Readme 파일](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/README.md#terraform-variables)에 설명된 대로 이러한 변수를 구성합니다. | DevOps 엔지니어 | 
| 환경 변수를 설정합니다. | 로컬 시스템에서 Terraform 스크립트를 실행하려는 경우 다음 환경 변수를 설정합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-aws-landing-zone-that-includes-mongodb-atlas.html)환경 변수 설정에 대한 자세한 내용은 [AWS Command Line Interface (AWS CLI) 설명서](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html#envvars-set)를 참조하세요. | DevOps 엔지니어 | 
| VPC 구성을 확인합니다. | 에서 권장하는 모범 사례를 따르려면 조직의 요구 사항에 맞게 Terraform 스크립트에서 VPC 및 서브넷 CIDRs, NAT 게이트웨이, 라우팅 및 라우팅 테이블에 대한 설정을 AWS구성합니다. 자세한 내용은 GitHub 리포지토리의 [Readme 파일](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/README.md#vpc-configurations)을 참조하세요. | DevOps 엔지니어 | 
|  리소스에 태그 지정. | Terraform 스크립트에서 리소스를 배포할 때 AWS 리소스에 태그를 지정하여 모니터링할 수 있습니다. 예는 GitHub 리포지토리의 [Readme 파일](https://github.com/mongodb-partners/AWS-MongoDB-Atlas-Landing-Zone/blob/main/README.md#resource-taggings)을 참조하세요. 비용, 사용량 등에 대한 태그를 통한 리소스 모니터링에 대한 자세한 내용은 AWS Billing 설명서의 [사용자 정의 비용 할당 태그 활성화](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/activating-tags.html)를 참조하세요. | DevOps 엔지니어 | 
| 여러 환경을 사용합니다. | GitHub 리포지토리는 `development` 환경 폴더를 제공합니다. 이 환경 폴더에 자체 환경을 추가할 수도 있습니다.환경을 추가하려면 `development` 폴더를 `environments` 아래의 새 폴더(예: `prod` 또는 `staging`)에 복사합니다. 그런 다음 `terraform.tfvars` 파일을 새 값으로 업데이트할 수 있습니다. | DevOps 엔지니어 | 

### 랜딩 존 배포
<a name="deploy-the-landing-zone"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Terraform 작업 디렉터리를 초기화합니다. | 작업 디렉터리를 초기화하고 필요한 패키지를 다운로드하려면 다음 명령을 실행합니다.<pre>terraform init</pre> | DevOps 엔지니어 | 
| 실행 계획을 생성합니다. | 실행 계획을 생성하고 Terraform이 인프라에 적용할 변경 사항을 시각화하려면 다음 명령을 실행합니다.<pre>terraform plan</pre> | DevOps 엔지니어 | 
| 변경 사항을 배포합니다. | 코드에 설명된 대로 인프라에 대한 변경 사항을 구현하려면 다음 명령을 실행합니다.<pre>terraform apply</pre> | DevOps 엔지니어 | 
| 배포를 검증합니다. | Terraform이 인프라에서 생성하거나 수정한 구성 요소를 검증합니다.설정을 테스트하려면에서 또는 VPC에 연결된 컴퓨팅 리소스(예: Amazon EC2 인스턴스 또는 AWS Lambda 함수)를 프로비저닝합니다. | DevOps 엔지니어, 앱 개발자 | 

### 리소스 제거
<a name="remove-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 정리 | 테스트를 마치면 다음 명령을 실행하여 Terraform이 인프라에 배포한 리소스를 삭제합니다.<pre>terraform destroy</pre> | DevOps 엔지니어 | 

## 관련 리소스
<a name="build-aws-landing-zone-that-includes-mongodb-atlas-resources"></a>

**검색 및 평가**
+ [랜딩 존 설정을 위한 관리 팁](https://docs.aws.amazon.com/controltower/latest/userguide/tips-for-admin-setup.html)(AWS Control Tower 문서)
+ [랜딩 존 구성에 대한 기대치](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-configure.html)(AWS Control Tower 문서)
+ [랜딩 존 업데이트 모범 사례](https://docs.aws.amazon.com/controltower/latest/userguide/lz-update-best-practices.html)(AWS Control Tower 문서)

**MongoDB Atlas 및 AWS 환경 설정**
+ [MongoDB Atlas 가져오기](https://aws.amazon.com/marketplace/pp/prodview-pp445qepfdy34)(AWS Marketplace)
+ [메모리](https://docs.atlas.mongodb.com/sizing-tier-selection/#memory)(MongoDB Atlas 설명서)
+ [Atlas 샘플 데이터 세트를 사용한 크기 조정 예](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#example--the-service-sample-data-sets)(MongoDB Atlas 설명서)
+ [모바일 애플리케이션의 크기 조정 예](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#example--mobile-app)(MongoDB Atlas 설명서)
+ [네트워크 트래픽](https://docs.atlas.mongodb.com/sizing-tier-selection/#network-traffic)(MongoDB Atlas 설명서)
+ [클러스터 오토 스케일링](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#cluster-auto-scaling)(MongoDB Atlas 설명서)
+ [Atlas 크기 조정 템플릿](https://www.mongodb.com/docs/atlas/sizing-tier-selection/)(MongoDB Atlas 설명서)
+ [네트워크 피어링 연결 설정](https://docs.atlas.mongodb.com/security-vpc-peering/)(MongoDB Atlas 설명서)
+ [Atlas의 프라이빗 엔드포인트](https://docs.atlas.mongodb.com/security-private-endpoint/)(MongoDB Atlas 설명서)
+ [클라이언트 측 필드 수준 암호화](https://docs.mongodb.com/manual/core/security-client-side-encryption)(MongoDB 데이터베이스 설명서)
+ [자동 암호화](https://docs.mongodb.com/manual/core/security-automatic-client-side-encryption)(MongoDB 데이터베이스 설명서)
+ [클러스터 티어 선택](https://www.mongodb.com/docs/atlas/manage-clusters/#select-cluster-tier)(MongoDB Atlas 설명서)

**랜딩 존 배포**
+ [AWS의 Terraform](https://docs.aws.amazon.com/whitepapers/latest/cicd_for_5g_networks_on_aws/terraform.html)(* AWS의 5G 네트워크용 CI/CD* 백서)
+ [Terraform을 사용한 MongoDB Atlas](https://www.mongodb.com/developer/products/atlas/mongodb-atlas-with-terraform/)(MongoDB 설명서)

# 에서 중앙 집중화를 위한 VPC 흐름 로그 구성 AWS 계정
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts"></a>

*Benjamin Morris와 Aman Kaur Gandhi, Amazon Web Services*

## 요약
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-summary"></a>

 AWS Virtual Private Cloud(VPC)에서 VPC 흐름 로그 기능은 운영 및 보안 문제 해결에 유용한 데이터를 제공할 수 있습니다. 하지만 다중 계정 환경에서 VPC 흐름 로그를 사용하는 데에는 제한이 있습니다. 특히 Amazon CloudWatch Logs의 계정 간 흐름 로그는 지원되지 않습니다. 대신 적절한 버킷 정책으로 Amazon Simple Storage Service(S3) 버킷을 구성하여 로그를 중앙 집중화할 수 있습니다.

**참고**  
참고: 이 패턴은 흐름 로그를 중앙 위치로 전송하기 위한 요구 사항을 설명합니다. 하지만 멤버 계정에서도 로그를 로컬로 사용할 수 있도록 하려면 각 VPC에 대해 여러 흐름 로그를 만들 수 있습니다. Log Archive 계정에 액세스할 수 없는 사용자는 문제 해결을 위해 트래픽 로그를 볼 수 있습니다. 또는 로그를 CloudWatch Logs로 전송하는 각 VPC에 대해 단일 흐름 로그를 구성할 수 있습니다. 그런 다음 Amazon Kinesis Data Firehose 구독 필터를 사용하여 로그를 S3 버킷으로 전달할 수 있습니다. 자세한 내용은 [관련 리소스](#configure-vpc-flow-logs-for-centralization-across-aws-accounts-resources) 섹션을 참조하세요.

## 사전 조건 및 제한 사항
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-prereqs"></a>

**사전 조건**
+ 활성 AWS 계정
+ 로그를 중앙 집중화하는 데 사용되는 계정이 있는 AWS Organizations 조직(예: 로그 아카이브)

**제한 사항**

 AWS Key Management Service (AWS KMS) 관리형 키를 사용하여 중앙 버킷`aws/s3`을 암호화하는 경우 다른 계정에서 로그를 수신하지 않습니다. 대신 지정된에 `"LogDestination: <bucketName> is undeliverable"` 대한와 같은 메시지와 함께 `Unsuccessful` 오류 코드 400이 표시됩니다`ResourceId`. 이는 계정의 AWS 관리형 키를 계정 간에 공유할 수 없기 때문입니다. 솔루션은 Amazon S3 관리형 암호화(SSE-S3) 또는 멤버 계정과 공유할 수 있는 AWS KMS 고객 관리형 키를 사용하는 것입니다.

## 아키텍처
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-architecture"></a>

**대상 아키텍처**

다음 다이어그램에서는 각 VPC에 대해 두 개의 흐름 로그가 배포되어 있습니다. 하나는 로컬 CloudWatch Logs 그룹에 로그를 전송합니다. 다른 하나는 중앙 로깅 계정의 S3 버킷으로 로그를 전송합니다. 버킷 정책은 로그 전송 서비스가 버킷에 로그를 기록할 수 있도록 허용합니다.

**참고**  
2023년 11월부터는 AWS 이제 [aws:SourceOrgID 조건 키를](https://aws.amazon.com/about-aws/whats-new/2023/11/organization-wide-iam-condition-keys-restrict-aws-service-to-service-requests/) 지원합니다. 이 조건을 사용하면 AWS Organizations 조직 외부 계정의 중앙 집중식 버킷에 대한 쓰기를 거부할 수 있습니다.

![\[각 VPC에서 하나의 흐름 로그는 로그를 CloudWatch로 보내고 다른 하나의 흐름 로그는 S3 버킷에 로그를 기록합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/718c29f4-a035-47ab-9c58-bd7d5c1ca77e/images/0b502d82-a6ce-4832-b854-99181d2ed834.png)


**자동화 및 규모 조정**

각 VPC는 중앙 로깅 계정의 S3 버킷으로 로그를 전송하도록 구성됩니다. 다음 자동화 솔루션 중 하나를 사용하면 흐름 로그가 적절하게 구성되도록 할 수 있습니다.
+ [CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)
+ [AWS Control Tower Account Factory for Terraform(AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/taf-account-provisioning.html)
+ [문제 해결 AWS Config 규칙](https://aws.amazon.com/blogs/mt/how-to-enable-vpc-flow-logs-automatically-using-aws-config-rules/)

## 도구
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-tools"></a>

**도구**
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)를 사용하면 모든 시스템, 애플리케이션 및의 로그를 중앙 집중화 AWS 서비스 하여 모니터링하고 안전하게 보관할 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [Amazon Virtual Private Cloud(Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 사용하면 정의한 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사합니다. 이 패턴은 [VPC 플로우 로그](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) 기능으로 VPC의 네트워크 인터페이스에서 송수신되는 IP 트래픽에 대한 정보를 수집합니다.

## 모범 사례
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-best-practices"></a>

코드형 인프라(IaC)를 사용하면 VPC 흐름 로그 배포 프로세스를 크게 단순화할 수 있습니다. 흐름 로그 리소스 구성을 포함하도록 VPC 배포 정의를 추상화하면 흐름 로그와 함께 VPC가 자동으로 배포됩니다. 이 내용은 다음 섹션에서 설명합니다.

**중앙 집중식 흐름 로그**

HashiCorp Terraform의 VPC 모듈에 중앙 집중식 흐름 로그를 추가하는 예시 구문: 이 코드는 VPC에서 중앙 집중식 S3 버킷으로 로그를 전송하는 흐름 로그를 생성합니다. 참고로 이 패턴에는 S3 버킷 생성이 포함되지 않습니다. 권장 버킷 정책 설명은 [추가 정보](#configure-vpc-flow-logs-for-centralization-across-aws-accounts-additional) 섹션을 참조하세요.

```
variable "vpc_id" { type = string }
locals { custom_log_format_v5 = "$${version} $${account-id} $${interface-id} $${srcaddr} $${dstaddr} $${srcport} $${dstport} $${protocol} $${packets} $${bytes} $${start} $${end} $${action} $${log-status} $${vpc-id} $${subnet-id} $${instance-id} $${tcp-flags} $${type} $${pkt-srcaddr} $${pkt-dstaddr} $${region} $${az-id} $${sublocation-type} $${sublocation-id} $${pkt-src-aws-service} $${pkt-dst-aws-service} $${flow-direction} $${traffic-path}" }
resource "aws_flow_log" "centralized_flow_log" {
  log_destination      = "arn:aws:s3:::centralized-vpc-flow-logs-<log_archive_account_id>" # Optionally, a prefix can be added after the ARN.
  log_destination_type = "s3"
  traffic_type         = "ALL"
  vpc_id               = var.vpc_id
  log_format           = local.custom_log_format_v5 # If you want fields from VPC Flow Logs v3+, you will need to create a custom log format.
}
```

이러한 단계에 대한 자세한 내용은 [Amazon RDS Custom 설명서를 참조하십시오](https://docs.aws.amazon.com/vpc/latest/userguide/flow-log-records.html#flow-logs-custom).

**로컬 플로우 로그**

필요한 권한이 있는 Terraform의 VPC 모듈에 로컬 흐름 로그를 추가하는 예시 구문: 이 코드는 VPC에서 로컬 CloudWatch Logs 그룹으로 로그를 보내는 흐름 로그를 생성합니다.

```
data "aws_region" "current" {}
variable "vpc_id" { type = string }
resource "aws_iam_role" "local_flow_log_role" {
  name = "flow-logs-policy-${var.vpc_id}"
  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [{
      "Effect": "Allow",
      "Principal": {"Service": "vpc-flow-logs.amazonaws.com"},
      "Action": "sts:AssumeRole"
  }]
}
EOF
}
resource "aws_iam_role_policy" "logs_permissions" {
  name = "flow-logs-policy-${var.vpc_id}"
  role = aws_iam_role.local_flow_log_role.id
  policy = <<EOF
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [{
      "Action": ["logs:CreateLog*", "logs:PutLogEvents", "logs:DescribeLog*", "logs:DeleteLogDelivery"],
      "Effect": "Allow",
      "Resource": "arn:aws:logs:${data.aws_region.current.name}:*:log-group:vpc-flow-logs*"
  }]
}
EOF
}
resource "aws_cloudwatch_log_group" "local_flow_logs" {
  name              = "vpc-flow-logs/${var.vpc_id}"
  retention_in_days = 30
}
resource "aws_flow_log" "local_flow_log" {
  iam_role_arn    = aws_iam_role.local_flow_log_role.arn
  log_destination = aws_cloudwatch_log_group.local_flow_logs.arn
  traffic_type    = "ALL"
  vpc_id          = var.vpc_id
}
```

## 에픽
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-epics"></a>

### VPC 흐름 로그 인프라 배포
<a name="deploy-vpc-flow-logs-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 암호화 전략을 결정하고 중앙 S3 버킷에 대한 정책을 생성합니다. | 중앙 버킷은 키를 지원하지 AWS KMS `aws/s3` 않으므로 SSE-S3 또는 AWS KMS 고객 관리형 키를 사용해야 합니다. AWS KMS 키를 사용하는 경우 키 정책은 멤버 계정이 키를 사용하도록 허용해야 합니다. | 규정 준수 | 
| 중앙 흐름 로그 버킷을 생성합니다. | 흐름 로그를 전송할 중앙 버킷을 만들고 이전 단계에서 선택한 암호화 전략을 적용합니다. 이는 Log Archive 또는 이와 유사한 용도의 계정에 있어야 합니다.[추가 정보](#configure-vpc-flow-logs-for-centralization-across-aws-accounts-additional) 섹션에서 버킷 정책을 가져와 환경별 값으로 플레이스홀더를 업데이트한 후 중앙 버킷에 적용합니다. | 일반 AWS | 
| 로그를 중앙 흐름 로그 버킷으로 보내도록 VPC 흐름 로그를 구성합니다. | 데이터를 수집하려는 각 VPC에 흐름 로그를 추가합니다. 이를 수행하는 가장 확장 가능한 방법은 AFT 또는와 같은 IaC 도구를 사용하는 것입니다 AWS Cloud Development Kit (AWS CDK). 예를 들어 흐름 로그와 함께 VPC를 배포하는 Terraform 모듈을 만들 수 있습니다. 필요한 경우 흐름 로그를 수동으로 추가합니다. | 네트워크 관리자 | 
| 로컬 CloudWatch Logs로 전송하도록 VPC 흐름 로그를 구성합니다. | (선택 사항) 로그가 생성되는 계정에서 흐름 로그를 표시하려면 다른 흐름 로그를 생성하여 로컬 계정의 CloudWatch Logs로 데이터를 전송합니다. 또는 로컬 계정의 계정별 S3 버킷으로 데이터를 보낼 수도 있습니다. | 일반 AWS | 

## 관련 리소스
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-resources"></a>
+ [중앙 집중식 흐름 로그 데이터를 사용하여 데이터 분석을 촉진하고 보안 요구 사항을 충족하는 방법](https://aws.amazon.com/blogs/security/how-to-facilitate-data-analysis-and-fulfill-security-requirements-by-using-centralized-flow-log-data/)(AWS 블로그 게시물)
+ [AWS Config 규칙을 사용하여 VPC 흐름 로그를 자동으로 활성화하는 방법](https://aws.amazon.com/blogs/mt/how-to-enable-vpc-flow-logs-automatically-using-aws-config-rules/)(AWS 블로그 게시물)

## 추가 정보
<a name="configure-vpc-flow-logs-for-centralization-across-aws-accounts-additional"></a>

**버킷 정책**

이 버킷 정책 예제는 자리 표시자 이름에 값을 추가한 후 흐름 로그용 중앙 S3 버킷에 적용할 수 있습니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::<BUCKET_NAME>/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control",
                    "aws:SourceOrgID": "<ORG_ID>"
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::<BUCKET_NAME>",
            "Condition": {
                "StringEquals": {
                    "aws:SourceOrgID": "<ORG_ID>"
                }
            }
        },
        {
            "Sid": "DenyUnencryptedTraffic",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::<BUCKET_NAME>/*",
                "arn:aws:s3:::<BUCKET_NAME>"
            ],
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "false"
                }
            }
        }
    ]
}
```

# Terraform을 사용하여 AWS 권한 세트 동적 관리
<a name="manage-aws-permission-sets-dynamically-by-using-terraform"></a>

*Vinicius Elias 및 Marcos Vinicius Pinto Jordao, Amazon Web Services*

## 요약
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-summary"></a>

AWS IAM Identity Center 는 AWS 계정 및 클라우드 애플리케이션에 대한 Single Sign-On 액세스를 관리하기 위한 중앙 집중식 허브를 제공하여 AWS Identity and Access Management (IAM)를 개선합니다. 그러나 IAM Identity Center [권한 세트](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)의 수동 관리는 조직이 성장함에 따라 점점 더 복잡해지고 오류가 발생하기 쉽습니다. 이러한 복잡성으로 인해 잠재적인 보안 격차와 관리 오버헤드가 발생할 수 있습니다.

이 솔루션을 사용하면 기본 로 구축된 지속적 통합 및 지속적 전달(CI/CD) 파이프라인을 사용하여 코드형 인프라(IaC)를 통해 권한 세트를 관리할 수 있습니다 AWS 서비스. 권한 세트 할당 메커니즘을 AWS Control Tower 수명 주기 이벤트 또는 [Account Factory for Terraform(AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) 환경과 원활하게 통합할 수 있습니다. 이 접근 방식은 신규 및 기존 모두에 동적 자격 증명 구성을 제공합니다 AWS 계정.

Amazon EventBridge 규칙은 AWS 계정 생성 및 업데이트를 모니터링하여 ID 구성을 조직 구조와 동기화된 상태로 유지하는 데 도움이 됩니다. AWS Control Tower 또는 AFT에서 계정을 생성하거나 업데이트하면 파이프라인이 트리거됩니다. 권한 세트 정의 및 할당 규칙을 사용하여 JSON 파일 세트를 평가합니다. 그런 다음 파이프라인은 모든 계정에 걸쳐 설정을 적용하고 동기화합니다.

이러한 라우팅 접근 방식에는 다음과 같은 이점이 있습니다.
+ **일관성** - AWS 조직 전체의 수동 구성 드리프트 제거
+ **감사 가능성** - 모든 자격 증명 관리 변경 사항에 대한 전체 기록을 유지합니다.
+ **확장성** - AWS 환경이 증가함에 따라 구성을 자동으로 적용합니다.
+ **보안** - 권한 할당에서 인적 오류를 줄입니다.
+ **규정 준수** - 문서화된 변경 사항 및 할당 규칙을 통해 규제 요구 사항 충족을 촉진합니다.

## 사전 조건 및 제한 사항
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-prereqs"></a>
+  AWS Control Tower 및가 AWS Organizations 설정된 다중 계정 환경입니다. 선택적으로 AFT를와 함께 사용할 수 있습니다 AWS Control Tower.
+ IAM Identity Center가 솔루션을 수신 AWS 계정 하도록 관리자를 위임했습니다. 자세한 내용은 IAM Identity Center 설명서의 [시작하기](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html)를 참조하세요.
+ 기본 코드를 처리하기 위한 버전 관리 시스템(VCS) 리포지토리입니다. 샘플은 솔루션의 GitHub [리포지토리](https://github.com/aws-samples/sample-terraform-aws-permission-sets-pipeline/tree/main/samples/basic)를 참조하세요.
+ Amazon Simple Storage Service(Amazon S3) 버킷 및 Amazon DynamoDB 테이블과 같은 Terraform 백엔드 관리에 필요한 AWS 리소스입니다.

**제한 사항 **
+ 파이프라인은 AWS 네이티브 리소스와 오픈 소스 Terraform을 사용합니다. 파이프라인은 서드 파티 에코시스템을 호출할 준비가 되어 있지 않습니다.
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전별 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)를 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하고 서비스 링크를 선택합니다.

## 아키텍처
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-architecture"></a>

다음 다이어그램은 이 패턴의 구성 요소 및 워크플로를 보여 줍니다.

![\[Terraform을 사용하여 AWS 권한 세트를 관리하는 구성 요소 및 워크플로입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/69dc79c7-b4cd-4ad0-b0d2-d58cf0c7adaa/images/649e299c-1142-405a-8982-4a6b2e595d53.png)


**AWS Control Tower 이벤트 흐름**

솔루션은 AWS Control Tower 또는 AFT에서 발생하는 이벤트의 통합으로 시작됩니다. 변수 정의를 통해 구현 시 하나 또는 다른 서비스 중에서 선택합니다. 사용된 방법에 관계없이 계정이 생성되거나 업데이트될 때마다 파이프라인이 트리거됩니다. 파이프라인은 권한 세트 관리 리포지토리에 저장된 정책을 조정합니다.

수명 AWS Control Tower 주기 이벤트는 다음과 같습니다.
+ `CreateManagedAccount` - 새 계정이 생성될 때
+ `UpdateManagedAccount` - 기존 계정이 업데이트되는 경우

**이벤트 라우팅**

EventBridge는 AWS Control Tower 계정에서 생성된 이벤트를 캡처하는 중앙 이벤트 처리 서비스 역할을 합니다. 이벤트가 발생하면 EventBridge는 이를 솔루션 계정의 중앙 집중식 이벤트 버스로 지능적으로 라우팅합니다. AWS Control Tower 수명 주기 이벤트는 고유한 라우팅 패턴을 따릅니다. AFT가 이벤트 소스로 정의된 경우 AFT 관리 계정은 AWS Control Tower 계정 대신 이벤트를 처리합니다. 이 이벤트 기반 아키텍처를 사용하면 수동 개입 없이 조직 변화에 자동으로 대응할 수 있습니다.

**AFT 통합 프로세스**

 AWS Control Tower 수명 주기 이벤트가 AFT 관리 계정에 도달하면 AFT에 고유한 여러 다운스트림 프로세스를 자동으로 트리거합니다. AFT 계정 사용자 지정 워크플로가 완료되면 전용 `aft-notifications` Amazon Simple Notification Service(Amazon SNS) 주제에 메시지가 게시됩니다. 이 주제는이 솔루션에서 구현한 `aft-new-account-forward-event` AWS Lambda 함수를 트리거합니다. Lambda 함수는 파이프라인을 시작하는 데 사용되는 솔루션 계정 이벤트 버스로 이벤트를 보냅니다.

**코드형 인프라 파이프라인**

솔루션 파이프라인은 완전 자동화된 배포 메커니즘으로 작동합니다. AWS CodePipeline 서비스는 리포지토리의 변경 사항을 지속적으로 모니터링합니다. 새 커밋을 감지하면 배포 워크플로가 자동으로 시작되고 검증 및 실행 단계가 포함된 순차적 프로세스가 시작됩니다. 시스템은 제안된 변경 사항을 식별하기 위해 Terraform `plan` 작업을 실행한 다음 환경에서 이러한 변경 사항을 구현하기 위해 Terraform `apply` 명령을 실행합니다 AWS . 특히 파이프라인은 수동 승인 게이트 없이 실행됩니다. 이 접근 방식을 사용하면 파이프라인 로그 및 Terraform 상태 파일을 통해 감사 가능성을 유지하면서 인프라 변경 사항을 신속하게 배포할 수 있습니다.

파이프라인은 AWS CodeBuild 를 활용하여 적절한 권한이 있는 제어된 환경에서 Terraform 작업을 실행합니다. 이 IaC 접근 방식을 통해 파이프라인은 다음을 포함한 포괄적인 권한 관리 작업을 수행할 수 있습니다.
+  권한 세트를 생성합니다.
+ 기존 권한 세트를 업데이트합니다.
+ 불필요한 권한 세트를 제거합니다.
+  AWS 조직 내 계정 및 그룹 간에 이러한 권한 할당을 관리합니다.

인프라 일관성을 유지하고 충돌하는 변경을 방지하기 위해 솔루션은 Amazon S3 버킷과 전용 Amazon DynamoDB 테이블을 사용하여 Terraform 백엔드 상태 관리 시스템을 구현합니다. 이 접근 방식은 Terraform 상태 파일 및 상태 잠금 메커니즘에 대한 영구 스토리지 위치를 제공하여 동일한 리소스에 대한 동시 수정을 방지합니다.

기본 Terraform 코드는 공식 AWS `permission-sets` Terraform 모듈을 사용합니다. 이 모듈은 권한 세트 템플릿을 기반으로 IAM Identity Center에서 권한 세트를 동적으로 관리할 수 있습니다.

**소스 제어 관리**

권한 세트 템플릿(JSON 파일)은 자격 증명 관리 구성을 위한 중앙 집중식 리포지토리를 제공하는 GitHub와 같은 외부 버전 관리 시스템에 있습니다. 이 접근 방식은 권한 세트 정의에 대한 단일 정보 소스를 설정하는 동시에 표준 코드 검토 사례를 통해 공동 개발을 가능하게 합니다. 권한 있는 사용자는 조직 변경 관리 프로세스에 따라 이러한 템플릿에 대한 변경 사항을 커밋할 수 있습니다. 이러한 커밋은 자동 배포 파이프라인의 기본 트리거 역할을 하여 인프라 업데이트 프로세스를 시작합니다.

리포지토리의 JSON 파일을 사용하여 권한 세트를 구성하는 방법의 예는 [추가 정보를](#manage-aws-permission-sets-dynamically-by-using-terraform-additional) 참조하세요.

## 도구
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-tools"></a>

**AWS 서비스**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)는 소스 코드를 컴파일하고 유닛 테스트를 실행하며 배포할 준비가 완료된 아티팩트를 생성하는 완전 관리형 빌드 서비스입니다.
+ [AWS CodeConnections](https://docs.aws.amazon.com/dtconsole/latest/userguide/welcome-connections.html)를 사용하면 CodePipeline과 같은 AWS 리소스와 서비스가 GitHub와 같은 외부 코드 리포지토리에 연결할 수 있습니다.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)은 소프트웨어 릴리스의 여러 단계를 신속하게 모델링하고 구성하고 소프트웨어 변경 내용을 지속적으로 릴리스하는 데 필요한 단계를 자동화합니다.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 셸의 명령을 AWS 서비스 통해와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)는 권장 모범 사례를 따라 AWS 다중 계정 환경을 설정하고 관리하는 데 도움이 됩니다.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)는 애플리케이션을 다양한 소스의 실시간 데이터와 연결할 수 있는 서버리스 이벤트 버스 서비스입니다. 예를 들어 AWS Lambda 함수, API 대상을 사용하는 HTTP 호출 엔드포인트 또는 다른의 이벤트 버스 등이 있습니다 AWS 계정.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)를 사용하면 모든 AWS 계정 및 클라우드 애플리케이션에 대한 Single Sign-On(SSO) 액세스를 중앙에서 관리할 수 있습니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)는 여러을 생성하여 중앙에서 관리하는 조직 AWS 계정 으로 통합하는 데 도움이 되는 계정 관리 서비스입니다.
+ [Amazon Simple Notification Service(Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)를 사용하면 웹 서버 및 이메일 주소를 포함하여 게시자와 클라이언트 간의 메시지 교환을 조정하고 관리할 수 있습니다. 이를 통해 계정 관리 이벤트에 대한 푸시 알림을 활성화하여 관련 당사자가 시스템 내의 중요한 변경 사항 또는 작업에 대해 알림을 받을 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

**기타 도구**
+ [Terraform](https://www.terraform.io/)은 HashiCorp의 코드형 인프라(IaC) 도구로, 클라우드 및 온프레미스 리소스를 생성하고 관리하는 데 도움이 됩니다.

**코드 리포지토리**

이 패턴의 코드는 AWS sample-terraform-aws-permission-sets-pipeline 리포지토리의 GitHub에 있는 샘플 조직에서 사용할 수 있습니다. [sample-terraform-aws-permission-sets-pipeline ](https://github.com/aws-samples/sample-terraform-aws-permission-sets-pipeline)

## 모범 사례
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-best-practices"></a>
+ 프로덕션 환경에서 코드를 실행하는 데 사용되는 Terraform 모듈 및 공급자의 버전을 항상 고정합니다.
+ [Checkov](https://www.checkov.io/)와 같은 정적 코드 분석 도구를 사용하여 코드를 스캔한 다음 보안 문제를 해결합니다.
+ 최소 권한 원칙을 따르고 작업을 수행하는 데 필요한 최소 권한을 부여하세요. 자세한 내용은 IAM 설명서의 [최소 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) 및 [보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

## 에픽
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-epics"></a>

### 사전 조건 생성(선택 사항)
<a name="create-the-prerequisites-optional"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Terraform 백엔드 리소스를 생성합니다. | 아직 Terraform 백엔드 AWS 리소스를 생성하지 않은 경우 다음 단계를 사용하여 Amazon S3 버킷(`s3-tf-backend-{ACCOUNT_ID}`) 및 DynamoDB 테이블()을 생성합니다`ddb-tf-backend`.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html)<pre>aws s3api create-bucket --bucket s3-tf-backend-{ACCOUNT_ID}<br />aws s3api put-bucket-versioning --bucket s3-tf-backend-{ACCOUNT_ID} --versioning-configuration Status=Enabled<br />aws dynamodb create-table --table-name ddb-tf-backend --attribute-definitions AttributeName=LockID,AttributeType=S --key-schema AttributeName=LockID,KeyType=HASH --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1</pre> | 관리자 | 
| 교차 계정 역할을 생성합니다. | `event-source-account` Terraform AWS 공급자 구성에서 교차 계정 IAM 역할을 제공해야 합니다. 이 역할을 아직 생성하지 않은 경우 다음 단계에 따라 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html)<pre>aws iam create-role \<br />    --role-name CrossAccountRole \<br />    --assume-role-policy-document '{<br />        "Version": "2012-10-17",		 	 	 <br />        "Statement": [<br />            {<br />                "Effect": "Allow",<br />                "Principal": {<br />                    "AWS": "arn:aws:iam::{ACCOUNT_ID}:root"<br />                },<br />                "Action": "sts:AssumeRole"<br />            }<br />        ]<br />    }'</pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html)<pre>aws iam attach-role-policy \<br />    --role-name CrossAccountRole \<br />    --policy-arn arn:aws:iam::aws:policy/AdministratorAccess</pre>이 예제에서는 AWS 관리형 IAM 정책 [AdministratorAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AdministratorAccess.html)를 사용합니다. 원하는 경우 보다 구체적인 정책을 사용할 수 있습니다. | 관리자 | 

### 권한 세트 리포지토리 준비
<a name="prepare-the-permission-set-repository"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 전용 리포지토리를 생성합니다. | 이 작업은 사용자가 GitHub를 사용하고 있다고 가정합니다. 기본 Terraform 코드와 권한 세트 템플릿 JSON 파일을 저장할 전용 리포지토리를 생성합니다. | DevOps 엔지니어 | 
| 권한 세트 코드를 준비합니다. | 다음 파일을 구성하는 방법에 대한 자세한 내용은 솔루션 리포지토리의 [샘플 코드를](https://github.com/aws-samples/sample-terraform-aws-permission-sets-pipeline/tree/main/samples/basic) 참조하세요.""── main.tf""── outputs.tf""── providers.jinja"── 템플릿콘텐츠를 복사하고, `providers.jinja` 값을 유지하고, 다른 파일에 필요한 조정을 수행합니다. 예를 들어 권한 세트 템플릿 파일을 `templates`에 추가하거나 `main.tf` 파일에서 `aws-ia/permission-sets/aws` 모듈 버전을 고정합니다. | DevOps 엔지니어 | 
| 변경 사항을 커밋합니다. | 변경 사항을 커밋하고 이전에 생성한 리포지토리로 푸시합니다. 리포지토리 이름과 GitHub 조직, 예를 들어를 저장합니다`myorg/aws-ps-pipeline`. | DevOps 엔지니어 | 

### 배포 코드 준비
<a name="prepare-the-deployment-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 콘텐츠를 다운로드합니다. | 솔루션 [리포지토리](https://github.com/aws-samples/sample-terraform-aws-permission-sets-pipeline)에서 콘텐츠를 다운로드(복제)합니다. | DevOps 엔지니어 | 
| 변수를 채웁니다. | `terraform.tfvars` 파일을 생성하고 다음과 같은 필수 변수를 추가합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html)<pre>repository_name                 = "myorg/aws-ps-pipeline"<br />branch_name                     = "main"<br />vcs_provider                    = "github"<br />account_lifecycle_events_source = "CT"</pre>추가 변수 옵션에 대한 자세한 내용은이 패턴의 GitHub 리포지토리에 있는 [variables.tf](https://github.com/aws-samples/sample-terraform-aws-permission-sets-pipeline/blob/main/variables.tf) 파일을 참조하세요. | DevOps 엔지니어 | 
| Terraform 백엔드 구성 파일을 조정합니다. | `backend.tf` 파일에서 자리 표시자를 사용자의 값으로 바꿉니다. AWS Control Tower 홈을 사용하고 이전에 생성한 Amazon S3 버킷 및 DynamoDB 테이블의 이름을 AWS 리전입력합니다.<pre>terraform {<br />  required_version = ">=1.6"<br />  backend "s3" {<br />    region         = "{region}"<br />    bucket         = "{bucket_name}"<br />    key            = "terraform.tfstate"<br />    dynamodb_table = "{table_name}"<br />    encrypt        = "true"<br />  }<br />}</pre>원하는 경우 자체 Terraform 백엔드 구성을 사용할 수 있습니다. | DevOps 엔지니어 | 
| Terraform 공급자 구성 파일을 조정합니다. | `providers.tf` 파일에서 자리 표시자를 자신의 정보로 바꿉니다. AWS Control Tower 홈 리전을 사용하고 `event-source-account` 공급자에 대해 이전에 생성한 교차 계정 IAM 역할의 ARN을 제공합니다.<pre>provider "aws" {<br />  region = "{region}"<br />}<br /><br />provider "aws" {<br />  alias  = "event-source-account"<br />  region = "{region}"<br />  assume_role {<br />    role_arn = "{role_arn}"<br />  }<br />}<br /></pre> | DevOps 엔지니어 | 

### 솔루션을 수동으로 배포합니다.
<a name="deploy-the-solution-manually"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 를 선택합니다 AWS 계정. | IAM Identity Center 위임된 관리자 계정에 솔루션을 배포하는 것이 좋습니다. 그러나 AWS Organizations 관리 계정에 배포할 수도 있습니다.IAM Identity Center 인스턴스와 동일한 리전에서 선택한 계정에 로그인하려면를 사용합니다 AWS CLI. 사용 중인 IAM 역할에 이전 단계에서 `event-source-account` 공급자에 지정된 역할을 수임할 수 있는 권한이 있는지 확인합니다. 또한이 역할은 Terraform 백엔드 구성에 사용되는 AWS 리소스에 액세스할 수 있어야 합니다. | 관리자 | 
| Terraform을 수동으로 실행합니다. | 구성을 초기화, 계획 및 적용하려면 다음 Terraform 명령을 표시된 순서대로 실행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html) | DevOps 엔지니어 | 
| 배포 결과를 확인합니다. | IAM Identity Center 위임된 관리자 계정에서 `aws-ps-pipeline` 파이프라인이 생성되었는지 확인합니다. 또한 **보류** 중 상태의 AWS CodeConnections 연결이 있는지 확인합니다. | DevOps | 
| CodeConnections 구성을 완료합니다. | CodeConnections 구성을 완료하려면 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html)이제 파이프라인은 권한 세트 리포지토리에 액세스할 수 있습니다.자세한 지침은 개발자 도구 콘솔 설명서의 [보류 중인 연결 업데이트를](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-update.html) 참조하세요. | DevOps | 

### 파이프라인 실행 흐름을 선택하여 솔루션 테스트
<a name="choose-a-pipeline-execution-flow-to-test-the-solution"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS Control Tower 또는 AFT 업데이트를 기준으로 파이프라인을 실행합니다. |  AWS Control Tower 또는 AFT(선택한 수명 주기 이벤트 유형에 따라 다름)를 사용하여 계정을 생성하거나 변경하면 파이프라인이 시작됩니다. | 관리자 | 
| 코드를 변경하여 파이프라인을 실행합니다. | 코드를 변경하고 `main`브랜치에 커밋하면 파이프라인이 시작됩니다. | DevOps | 
| 파이프라인을 수동으로 실행합니다. | 파이프라인을 수동으로 시작하려면의 [변경 사항 릴리스](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-rerun-manually.html) 기능을 사용합니다 AWS CodePipeline. | DevOps | 

## 문제 해결
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 액세스 거부됨 | 솔루션을 배포하는 데 필요한 권한이 있는지 확인합니다. | 
| CodeConnections 문제 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html) | 
| 파이프라인 실행 문제 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html) | 
| 권한 세트 배포 문제 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/manage-aws-permission-sets-dynamically-by-using-terraform.html) | 

## 관련 리소스
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-resources"></a>

**AWS 서비스 설명서**
+ [AWS IAM Identity Center 사용 설명서](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)
+ [권한 세트 AWS 계정 로 관리](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)(IAM Identity Center 설명서)

**기타 리소스**
+ [AWS 권한 세트 모듈](https://registry.terraform.io/modules/aws-ia/permission-sets/aws/latest)(Terraform)

## 추가 정보
<a name="manage-aws-permission-sets-dynamically-by-using-terraform-additional"></a>

**샘플 권한 세트가 있는 JSON 파일**

다음 예에서는 리포지토리의 JSON 파일을 사용하여 권한 세트를 구성하는 방법을 보여줍니다.

```
{
  "Name": "ps-billing", // Permission set identifier
  "Comment": "Sample permission set for billing access", // Comment to document the purpose of the permission set
  "Description": "Billing access in AWS", // Detailed description
  "SessionDuration": "PT4H", // Session duration = 4 hours (ISO 8601 format)
  "ManagedPolicies": [ // List of AWS IAM managed policies
    "arn:aws:iam::aws:policy/job-function/Billing",
    "arn:aws:iam::aws:policy/job-function/SupportUser",
    "arn:aws:iam::aws:policy/AWSSupportAccess",
    "arn:aws:iam::aws:policy/job-function/ViewOnlyAccess"
  ],
  "CustomerPolicies": [], // References to IAM policies previously created
  "CustomPolicy": {}, // Inline IAM policy defined directly in the permission set
  "PermissionBoundary": {  // AWS or customer managed IAM policy to be used as boundary
    "ManagedPolicy": "",
    "CustomerPolicy": ""
  },
  "Assignments": [ // Define the assignment rules
    {
      "all_accounts": true, // Apply to ALL active AWS accounts in organization
      "principal": "G_BILLING_USERS", // Group/user name in Identity Center
      "type": "GROUP", // Can be "GROUP" or "USER"
      "account_id": [], // List of AWS account ID (empty since all_accounts=true)
      "account_ou": [], // List of AWS Organizational Unit IDs with target AWS accounts
      "account_tag": [] // List of tags (key:value) to match AWS Organization accounts tags
    }
  ]
}
```

자세한 내용은 Terraform 웹 사이트의 [AWS 권한 세트 모듈 설명서에서 JSON 스키마를 참조하세요](https://registry.terraform.io/modules/aws-ia/permission-sets/aws/latest#json-file-templates).

**팁**
+ Terraform [가져오기 블록](https://developer.hashicorp.com/terraform/language/import)을 사용하여 기존 권한 세트를 솔루션으로 가져올 수 있습니다.
+ AFT를 사용하여 위임된 계정에서 AWS 권한 세트 파이프라인을 구현할 수 있습니다. [ 블루프린트에 대한 자세한 내용은 ](https://awslabs.github.io/aft-blueprints/index.html) 섹션을 참조하세요.

# AWS Organizations를 사용하여 Transit Gateway Attachment에 자동으로 태그 지정
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations"></a>

*Richard Milner-Watts, Haris Bin Ayub, John Capps, Amazon Web Services*

## 요약
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-summary"></a>

Amazon Web Services(AWS)에서는 [AWS Resource Access Manager](https://aws.amazon.com/ram/)를 사용하여 AWS 계정 경계[AWS Transit Gateway](https://aws.amazon.com/transit-gateway/)를 넘어 공유할 수 있습니다. 그러나 계정 경계를 넘어 Transit Gateway attachment를 생성할 경우 첨부 파일은 이름 태그 없이 생성됩니다. 따라서 첨부 파일을 식별하는 데 시간이 많이 걸릴 수 있습니다. 

이 솔루션은 AWS Organizations에서 관리하는 조직 내 계정의 각 Transit Gateway Attachment에 대한 정보를 수집하는 자동화된 메커니즘을 제공합니다. 이 프로세스에는 Transit Gateway 라우팅 테이블에서 [Classless Inter-Domain Routing](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)(CIDR) 범위를 조회하는 작업이 포함됩니다. 그러면 솔루션은 트랜짓 게이트웨이를 보유한 계정 내의 첨부 파일에 이름 태그를 `<CIDR-range>-<AccountName>`의 형태로 적용합니다.

이 솔루션은 Solutions Library의 [Serverless Transit Network Orchestrator](https://aws.amazon.com/solutions/implementations/serverless-transit-network-orchestrator/)와 같은 AWS 솔루션과 함께 사용할 수 있습니다. 서버리스 트랜짓 네트워크 오케스트레이터를 사용하면 대규모로 Transit Gateway Attachment를 자동으로 생성할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ 모든 관련 계정이 포함된 AWS Organizations 조직
+ 조직의 루트에서 조직 관리 계정에 액세스하여 필요한 AWS Identity and Access Management (IAM) 역할을 생성합니다.
+ 조직과 공유되고 첨부 파일이 있는 하나 이상의 트랜짓 게이트웨이를 포함하는 공유 네트워킹 멤버 계정

## 아키텍처
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-architecture"></a>

의 다음 스크린샷은 연결된 이름 태그가 없는 Transit Gateway 연결과이 솔루션에서 생성된 이름 태그가 있는 Transit Gateway 연결 2개의 예를 AWS Management Console 보여줍니다. 생성된 이름 태그의 구조는 `<CIDR-range>-<AccountName>`입니다.

![\[이름 태그가 없는 첨부 파일과 이름 태그가 있는 두 개의 첨부 파일을 보여주는 콘솔.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/4b10dfec-43be-4337-9945-c64df921934a/images/7e7d4a47-f07a-4708-8022-a1d22855bb5d.png)


 

이 솔루션은 [AWS CloudFormation](https://aws.amazon.com/cloudformation/)를 사용하여 구성된 모든에서 Transit Gateway 이름 태그 생성을 관리하는 [AWS Step Functions](https://aws.amazon.com/step-functions/) 워크플로를 배포합니다 AWS 리전. 워크플로는 기본 작업을 수행하는 AWS Lambda 함수를 간접적으로 호출합니다.

솔루션이 계정 이름을 가져온 후 AWS Organizations Step Functions 상태 시스템은 모든 Transit Gateway 연결 IDs 가져옵니다. 이는 AWS 리전에서 병렬로 처리됩니다. 이 처리에는 각 첨부 파일의 CIDR 범위 검색이 포함됩니다. CIDR 범위는 리전 내의 Transit Gateway 라우팅 테이블에서 일치하는 Transit Gateway Attachment ID를 검색하여 얻을 수 있습니다. 필요한 정보를 모두 사용할 수 있는 경우 솔루션은 이름 태그를 첨부 파일에 적용합니다. 솔루션은 기존 이름 태그를 덮어쓰지 않습니다.

솔루션은 [Amazon EventBridge](https://aws.amazon.com/eventbridge/) 이벤트에 의해 제어되는 일정에 따라 실행됩니다. 이벤트는 매일 오전 6시(UTC)에 솔루션을 시작합니다.

**대상 기술 스택  **
+ Amazon EventBridge
+ AWS Lambda
+ AWS Organizations
+ AWS Transit Gateway
+ Amazon Virtual Private Cloud(Amazon VPC)
+ AWS X-Ray

**대상 아키텍처 **

솔루션 아키텍처 및 워크플로는 다음 다이어그램에 나와 있습니다.

![\[공유 네트워킹 및 조직 관리 계정 전반의 9단계 프로세스입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/4b10dfec-43be-4337-9945-c64df921934a/images/873cc89f-c6e3-43cd-94ed-59b6ea2b8d49.png)


1. 예약된 이벤트가 규칙을 시작합니다.

1. EventBridge 규칙은 Step Functions 상태 머신을 시작합니다.

1. 상태 머신은 `tgw-tagger-organizations-account-query` Lambda 함수를 호출합니다.

1. `tgw-tagger-organizations-account-query` Lambda 함수는 조직 관리 계정에서 역할을 맡습니다.

1. `tgw-tagger-organizations-account-query` Lambda 함수는 Organizations API를 호출하여 AWS 계정 메타데이터를 반환합니다.

1. 상태 머신은 `tgw-tagger-attachment-query` Lambda 함수를 호출합니다.

1. 병렬로 각 리전에 대해 상태 머신은 `tgw-tagger-rtb-query` Lambda 함수를 간접적으로 호출하여 각 첨부 파일의 CIDR 범위를 읽습니다.

1. 병렬로 각 리전에 대해 상태 머신은 Lambda 함수를`tgw-tagger-attachment-tagger`** **간접적으로 호출합니다.

1. 공유 네트워킹 계정의 Transit Gateway Attachment에 대한 이름 태그가 생성됩니다.

**자동화 및 규모 조정**

솔루션은 각 리전을 병렬로 처리하여 총 실행 시간을 단축합니다.

## 도구
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-tools"></a>

**서비스**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)는 인프라를 코드로 취급하여 관련 AWS 및 타사 리소스 모음을 모델링하고, 빠르고 일관되게 프로비저닝하고, 수명 주기 동안 관리할 수 있는 방법을 제공합니다.
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)를 사용하면 AWS 리소스 및에서 실행되는 애플리케이션의 지표를 실시간으로 모니터링할 AWS 수 있습니다.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)는 애플리케이션을 다양한 소스의 데이터와 연결하는 데 사용할 수 있는 서버리스 이벤트 버스 서비스입니다. EventBridge가 환경 변화를 나타내는 이벤트를 수신하고 규칙을 적용하여 이벤트를 대상으로 라우팅합니다. 규칙은 이벤트 패턴이라고 하는 이벤트 구조 또는 일정에 따라 이벤트를 대상과 일치시킵니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 확장이 가능합니다. 사용한 컴퓨팅 시간에 대해서만 비용을 지불하면 됩니다. 코드가 실행되지 않을 때는 비용이 부과되지 않습니다.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)는 AWS 리소스를 확장하고 확장함에 따라 환경을 중앙에서 관리하고 관리하는 데 도움이 됩니다. Organizations를 사용하면 프로그래밍 방식으로 새 리소스를 생성하고 리소스를 할당 AWS 계정 하며, 계정을 그룹화하여 워크플로를 구성하고, 거버넌스를 위해 계정 또는 그룹에 정책을 적용하고, 모든 계정에 대해 단일 결제 방법을 사용하여 결제를 간소화할 수 있습니다.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)는 비즈니스 프로세스를 오케스트레이션 AWS 서비스, 자동화 및 서버리스 애플리케이션 구축에 사용되는 로우코드 시각적 워크플로 서비스입니다. 워크플로는 장애, 재시도, 병렬화, 서비스 통합 및 관찰성을 관리하므로 개발자는 더 중요한 비즈니스 로직에 집중할 수 있습니다.
+ [AWS Transit Gateway](https://aws.amazon.com/transit-gateway/)는 중앙 허브VPCs와 온프레미스 네트워크를 연결합니다. 이렇게 하면 네트워크가 단순화되고 복잡한 피어링 관계가 없어집니다. 클라우드 라우터 역할을 하므로 새로 연결할 때마다 한 번만 이루어집니다.
+ [Amazon Virtual Private Cloud(VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)는 사용자가 정의한 논리적으로 격리된 가상 네트워크에서 AWS 리소스를 시작하는 서비스입니다.
+ [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) X-Ray는 애플리케이션이 처리하는 요청에 대한 데이터를 수집하며, 해당 데이터를 보고, 필터링하고, 통찰을 얻어 문제와 최적화 기회를 식별할 수 있는 도구를 제공합니다.

**코드**

이 솔루션의 소스 코드는 [Transit Gateway Attachment Tagger](https://github.com/aws-samples/tgw-attachment-tagger) GitHub 리포지토리에서 확인할 수 있습니다. 리포지토리에는 다음 파일이 포함됩니다.
+ `tgw-attachment-tagger-main-stack.yaml`은 공유 네트워킹 계정 내에 이 솔루션을 지원하는 모든 리소스를 생성합니다.
+ `tgw-attachment-tagger-organizations-stack.yaml`은 ** **조직의 관리 계정에 역할을 생성합니다.

## 에픽
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-epics"></a>

### 기본 솔루션 스택 배포
<a name="deploy-the-main-solution-stack"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 필수 사전 조건 정보를 수집하십시오. | Lambda 함수에서 AWS Organizations API로의 교차 계정 액세스를 구성하려면 조직의 관리 계정에 대한 계정 ID가 필요합니다.****두 CloudFormation 스택이 생성되는 순서가 중요합니다. 먼저 공유 네트워킹 계정에 리소스를 배포해야 합니다. 조직의 관리 계정에 리소스를 배포하기 전에 공유 네트워킹 계정의 역할이 이미 존재해야 합니다. 자세한 내용은 [AWS 설명서](https://docs.amazonaws.cn/en_us/IAM/latest/UserGuide/id_roles_create_for-user.html)를 참조하세요. | DevOps 엔지니어 | 
| 기본 솔루션 스택의 CloudFormation 템플릿을 시작합니다. | 기본 솔루션 스택용 템플릿은 IAM 역할, Step Functions 워크플로, Lambda 함수 및 CloudWatch 이벤트를 배포합니다.공유 네트워킹 계정의 AWS Management Console 를 연 다음 :&CFN 콘솔을 엽니다.  `tgw-attachment-tagger-main-stack.yaml` 템플릿과 다음 값을 사용하여 스택을 생성합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/tag-transit-gateway-attachments-automatically-using-aws-organizations.html) CloudFormation 스택 시작에 대한 자세한 내용은 [AWS 설명서를](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) 참조하세요. | DevOps 엔지니어 | 
| 솔루션이 성공적으로 시작되었는지 확인하십시오. | CloudFormation 스택이 **CREATE\$1COMPLETE** 상태에 도달할 때까지 기다리십시오. 1분 내에 완료됩니다.Step Functions 콘솔을 열고 **tgw-attachment-tagger-state-machine** 이름을 가진 새 상태 머신이 생성되었는지 확인합니다. | DevOps 엔지니어 | 

### AWS Organizations 스택 배포
<a name="deploy-the-aws-organizations-stack"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 필수 사전 조건 정보를 수집하십시오. | Lambda 함수에서 AWS Organizations API로의 크로스 계정 액세스를 구성하려면 공유 네트워킹 계정의 계정 ID가 필요합니다. | DevOps 엔지니어 | 
| Organizations 스택용 CloudFormation 템플릿을 실행합니다. | AWS Organizations 스택용 템플릿이 조직의 관리 계정에 IAM 역할을 배포 합니다. 조직의 관리 계정에 대한 AWS Console에 액세스한 다음 CloudFormation 콘솔을 엽니다.  `tgw-attachment-tagger-organizations-stack.yaml` 템플릿과 다음 값을 사용하여 스택을 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/tag-transit-gateway-attachments-automatically-using-aws-organizations.html)다른 스택 생성 옵션의 경우 기본값을 사용합니다. | DevOps 엔지니어 | 
| 솔루션이 성공적으로 시작되었는지 확인하십시오. |  CloudFormation 스택이 **CREATE\$1COMPLETE** 상태에 도달할 때까지 기다립니다. 1분 내에 완료됩니다. AWS Identity and Access Management (IAM) 콘솔을 열고 **tgw-attachment-tagger-organization-query-role**이라는 이름으로 새 역할이 생성되었는지 확인합니다. | DevOps 엔지니어 | 

### 솔루션 확인
<a name="verify-the-solution"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 상태 머신을 실행합니다. | 공유 네트워킹 계정의 Step Functions 콘솔을 열고 탐색 창에서 **상태 머신**을 선택합니다.**상태 머신 **tgw-attachment-tagger-state-machine**을 선택하고 실행 시작** 을 선택합니다. 이 상태 머신에 대한 입력은 솔루션에서 사용되지 않으므로 기본값을 사용할 수 있습니다.<pre>{<br />    "Comment": "Insert your JSON here"<br />}</pre>**실행 시작**을 선택합니다. | DevOps 엔지니어 | 
| 완료될 때까지 상태 머신을 주시하십시오. | 새 페이지가 열리면 상태 머신이 실행되는 것을 볼 수 있습니다. 기간은 처리할 Transit Gateway Attachment 수에 따라 달라집니다.이 페이지에서 상태 머신의 각 단계를 검토할 수 있습니다. 상태 머신 내의 다양한 작업을 보고 Lambda 함수에 대한 CloudWatch 로그 링크를 따라갈 수 있습니다. 맵 내에서 병렬로 실행되는 작업의 경우 **인덱스 **드롭다운 목록을 사용하여 각 리전의 구체적인 구현을 확인할 수 있습니다. | DevOps 엔지니어 | 
| Transit Gateway Attachment 태그를 확인합니다. | 공유 네트워킹 계정의 VPC 콘솔을 열고 **Transit Gateway Attachment** 첨부 파일을 선택합니다.  콘솔에서는 조건을 충족하는 첨부 파일에 대해 이름 태그가 제공됩니다(첨부 파일은 Transit Gateway 라우팅 테이블에 전파되고 리소스 소유자는 조직의 구성원임). | DevOps 엔지니어 | 
| CloudWatch 이벤트 시작을 확인합니다. | CloudWatch 이벤트가 시작될 때까지 기다리십시오. 이 일정은 06:00(UTC)으로 예정되어 있습니다. 그런 다음 공유 네트워킹 계정의 Step Functions 콘솔을 열고 탐색 창에서 **상태 머신**을 선택합니다.상태 머신 **tgw-attachment-tagger-state-machine**을 선택합니다. 솔루션이 06:00(UTC)에 실행되었는지 확인합니다. | DevOps 엔지니어 | 

## 관련 리소스
<a name="tag-transit-gateway-attachments-automatically-using-aws-organizations-resources"></a>
+ [AWS Organizations](https://aws.amazon.com/organizations/)
+ [AWS Resource Access Manager](https://aws.amazon.com/ram/)
+ [서버리스 트랜짓 네트워크 오케스트레이터](https://aws.amazon.com/solutions/implementations/serverless-transit-network-orchestrator/)
+ [IAM 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [AWS CloudFormation 콘솔에서 스택 생성](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)

# 패턴 더 보기
<a name="cloudfoundations-more-patterns-pattern-list"></a>

**Topics**
+ [AFT를 AWS 계정 사용하여 새에 대한 Amazon VPC IPAM IPv4 CIDR 할당 자동화](automate-amazon-vpc-ipam-ipv4-cidr-allocations-for-new-aws-accounts-by-using-aft.md)
+ [Account Factory for Terraform을 사용하여 여러 계정에 대한 권한 세트 관리](govern-permission-sets-aft.md)
+ [GitHub Actions를 사용하여 AWS CloudFormation 템플릿을 기반으로 AWS Service Catalog 제품 프로비저닝](provision-aws-service-catalog-products-using-github-actions.md)
+ [역할 벤딩 머신 솔루션을 배포하여 최소 권한 IAM 역할 프로비저닝](provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.md)