

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

# Terraform을 사용하여 AWS Organizations에서 소프트웨어 패키지 배포 중앙 집중화
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform"></a>

*Pradip kumar Pandey, Chintamani Aphale, T.V.R.L.Phani Kumar Dadi, Pratap Kumar Nanda, Aarti Rajput, Mayuri Shinde, Amazon Web Services*

## 요약
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-summary"></a>

워크로드 간에 강력한 격리 장벽을 생성하기 위해 기업은 여러 AWS 리전 에 분산 AWS 계정 된 여러를 유지하는 경우가 많습니다. 보안 및 규정 준수를 유지하기 위해 관리 팀은 보안 스캔을 위한 [CrowdStrike](https://www.crowdstrike.com/falcon-platform/), [SentinelOne](https://www.sentinelone.com/platform/) 또는 [TrendMicro](https://www.trendmicro.com/en_sg/business.html) 도구와 같은 에이전트 기반 도구와 모니터링을 위한 [Amazon CloudWatch 에이전트](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html), [Datadog 에이전트](https://www.datadoghq.com/) 또는 [AppDynamics 에이전트](https://www.appdynamics.com/product/how-it-works/agents-and-controller)를 설치합니다. 이들 팀은 이러한 대규모 환경에서 소프트웨어 패키지 관리 및 배포를 중앙에서 자동화하려는 문제에 직면하는 경우가 많습니다.

[AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)의 기능인 [Distributor](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor.html)는 간소화된 단일 인터페이스를 통해 클라우드 및 온프레미스 서버의 관리형 Microsoft Windows 및 Linux 인스턴스에 소프트웨어를 패키징하고 게시하는 프로세스를 자동화합니다. 이 패턴은 Terraform을 사용하여 소프트웨어 설치를 관리하는 프로세스를 더욱 간소화하고 최소한의 노력 AWS Organizations 으로 내의 많은 인스턴스 및 멤버 계정에서 스크립트를 실행하는 방법을 보여줍니다.

이 솔루션은 Systems Manager에서 관리하는 Amazon, Linux 및 Windows 인스턴스에서 작동합니다.

## 사전 조건 및 제한 사항
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-prereqs"></a>
+ 설치할 소프트웨어가 있는 [Distributor 패키지](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor-working-with-packages-create.html) 
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) 버전 0.15.0 이상
+ [Systems Manager에서 관리하고](https://docs.aws.amazon.com/systems-manager/latest/userguide/managed_instances.html) 대상 계정에서 [Amazon Simple Storage Service(Amazon S3)에 액세스할 기본 권한](https://repost.aws/knowledge-center/ec2-instance-access-s3-bucket)이 있는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)를 사용하여 설정된 조직의 랜딩 존
+ (선택 사항) [Account Factory for Terraform(AFT)](https://catalog.workshops.aws/control-tower/en-US/customization/aft)

## 아키텍처
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-architecture"></a>

**리소스 세부 정보**

이 패턴은 [Account Factory for Terraform(AFT)](https://catalog.workshops.aws/control-tower/en-US/customization/aft)을 사용하여 필요한 모든 AWS 리소스와 코드 파이프라인을 생성하여 배포 계정에 리소스를 배포합니다. 이 코드 파이프라인은 두 개의 리포지토리에서 실행됩니다.
+ **글로벌 사용자 지정**에는 AFT에 등록된 모든 계정에서 실행되는 Terraform 코드가 포함됩니다.
+ **계정 사용자 지정**에는 배포 계정에서 실행되는 Terraform 코드가 포함됩니다.

계정 사용자 지정 폴더에서 [Terraform](https://developer.hashicorp.com/terraform/intro) 명령을 실행하여 AFT를 사용하지 않고 이 솔루션을 배포할 수도 있습니다.

이 Terraform 코드는 다음 리소스를 배포합니다.
+ AWS Identity and Access Management (IAM) 역할 및 정책
  + [SystemsManager-AutomationExecutionRole](https://docs.aws.amazon.com/systems-manager/latest/userguide/running-automations-multiple-accounts-regions.html)은 사용자에게 대상 계정에서 자동화를 실행할 수 있는 권한을 부여합니다.
  + [SystemsManager-AutomationAdministrationRole](https://docs.aws.amazon.com/systems-manager/latest/userguide/running-automations-multiple-accounts-regions.html)은 사용자에게 여러 계정 및 조직 단위(OU)에서 자동화를 실행할 수 있는 권한을 부여합니다.
+ 패키지의 압축 파일 및 manifest.json
  + Systems Manager에서 [패키지](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor-working-with-packages-create.html)에는 소프트웨어 또는 설치 가능한 자산의 .zip 파일이 하나 이상 포함되어 있습니다.
  + JSON 매니페스트에는 패키지 코드 파일에 대한 포인터가 포함되어 있습니다.
+ S3 버킷
  + 조직 전체에서 공유되는 분산 패키지는 Amazon S3 버킷에 안전하게 저장됩니다.
+ AWS Systems Manager 문서(SSM 문서)
  + `DistributeSoftwarePackage`에는 멤버 계정의 모든 대상 인스턴스에 소프트웨어 패키지를 배포하는 로직이 포함되어 있습니다.
  + `AddSoftwarePackageToDistributor` 에는 설치 가능한 소프트웨어 자산을 패키징하고의 기능인 Automation에 추가하는 로직이 포함되어 있습니다 AWS Systems Manager.
+ Systems Manager 연결
  + Systems Manager 연결은 솔루션을 배포하는 데 사용됩니다.

**아키텍처 및 워크플로**

![AWS Organizations에서 소프트웨어 패키지 배포를 중앙 집중화하기 위한 아키텍처 다이어그램](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/da584449-e12b-4878-a61d-00d8cea3d3d7/images/2718f2c4-f816-4e34-89b8-8182c128e6db.png)


다이어그램은 다음 단계들을 보여줍니다.

1. 중앙 집중식 계정에서 솔루션을 실행하려면 배포 단계와 함께 패키지 또는 소프트웨어를 S3 버킷에 업로드합니다.

1. 사용자 지정 패키지는 Systems Manager 콘솔 [문서](https://ap-southeast-2.console.aws.amazon.com/systems-manager/documents?region=ap-southeast-2) 섹션의 **내 소유** 탭에서 사용할 수 있습니다.

1. Systems Manager의 기능인 State Manager는 조직 전체에서 패키지에 대한 연결을 생성, 예약, 실행합니다. 이 연결은 관리형 노드에 소프트웨어 패키지를 설치하고 실행해야 대상 노드에 설치할 수 있도록 지정합니다.

1. 이 연결은 Systems Manager에 대상 노드에 패키지를 설치하도록 지시합니다.

1. 후속 설치 또는 변경의 경우 사용자는 단일 위치에서 동일한 연결을 주기적으로 또는 수동으로 실행하여 계정 간에 배포를 수행할 수 있습니다.

1. 멤버 계정에서 Automation은 배포 명령을 Distributor에 보냅니다.

1. Distributor는 인스턴스 간에 소프트웨어 패키지를 배포합니다.

이 솔루션은 내의 관리 계정을 사용하지 AWS Organizations만, 조직을 대신하여 이를 관리할 계정(위임된 관리자)을 지정할 수도 있습니다.

## 도구
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-tools"></a>

**AWS 서비스**
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다. 이 패턴은 Amazon S3를 사용하여 분산 패키지를 중앙 집중화하고 안전하게 저장합니다.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)은 AWS 클라우드에서 실행되는 애플리케이션 및 인프라를 관리하는 데 도움을 줍니다. 애플리케이션 및 리소스 관리를 간소화하고, 운영 문제를 감지 및 해결하는 시간을 단축하며, AWS 리소스를 대규모로 안전하게 관리하는 데 도움이 됩니다. 이 패턴은 다음 Systems Manager 기능을 사용합니다.
  + [Distributor](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor.html)를 사용하면 Systems Manager 관리형 인스턴스에 소프트웨어를 패키징하고 게시할 수 있습니다.
  + [자동화](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html)는 많은 AWS 서비스에 대한 일반적인 유지 관리, 배포 및 문제 해결 작업을 간소화합니다.
  + [Documents](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html)는 조직 및 계정 전체에서 Systems Manager 관리형 인스턴스에 대한 작업을 수행합니다.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)는 여러 계정을 생성하여 중앙에서 관리하는 조직으로 통합하는 데 도움이 되는 AWS 계정 관리 서비스입니다.

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

**코드 리포지토리**

이 패턴의 지침과 코드는 GitHub [중앙 집중식 패키지 배포](https://github.com/aws-samples/aws-organization-centralised-package-distribution) 리포지토리에서 확인할 수 있습니다.

## 모범 사례
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-best-practices"></a>
+ 연결에 태그를 할당하려면 [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 또는 [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html)을 사용합니다. Systems Manager 콘솔을 사용하여 연결에 태그를 추가하는 것은 지원되지 않습니다. 자세한 내용은 Systems Manager 설명서의 [Systems Manager 리소스 태깅](https://docs.aws.amazon.com/systems-manager/latest/userguide/tagging-resources.html)을 참조하세요.
+ 다른 계정에서 공유한 문서의 새 버전을 사용하여 연결을 실행하려면 문서 버전을 `default`로 설정합니다.
+ 대상 노드에만 태깅하려면 태그 키를 하나 사용합니다. 둘 이상의 태그 키를 사용하여 노드를 대상으로 지정하려면 리소스 그룹 옵션을 사용합니다.

## 에픽
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-epics"></a>

### 소스 파일 및 계정 구성
<a name="configure-source-files-and-accounts"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리포지토리를 복제합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps 엔지니어 | 
| 전역 변수를 업데이트합니다. | `global-customization/variables.tf` 파일에서 다음 입력 파라미터를 업데이트합니다. 이 변수는 AFT에서 생성하고 관리하는 모든 계정에 적용됩니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps 엔지니어 | 
| 계정 변수를 업데이트합니다. | `account-customization/variables.tf` 파일에서 다음 입력 파라미터를 업데이트합니다. 이 변수는 AFT에서 생성하고 관리하는 특정 계정에만 적용됩니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps 엔지니어 | 

### 파라미터 및 배포 파일 사용자 지정
<a name="customize-parameters-and-deployment-files"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| State Manager 연결의 입력 파라미터를 업데이트합니다. | `account-customization/association.tf` 파일에서 다음 입력 파라미터를 업데이트하여 인스턴스에서 유지하려는 상태를 정의합니다. 해당 사용 사례를 지원하는 경우 기본 파라미터 값을 사용할 수 있습니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps 엔지니어 | 
| 압축된 파일과 패키지용 `manifest.json` 파일을 준비합니다. | 이 패턴은 `account-customization/package` 폴더에 스크립트를 설치 및 제거하는 샘플 PowerShell 설치 파일(Windows의 경우 .msi, Linux의 경우 .rpm)을 제공합니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps 엔지니어 | 

### Terraform 명령을 실행하여 리소스 프로비저닝
<a name="run-terraform-commands-to-provision-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Terraform 구성을 초기화합니다. | AFT를 사용하여 솔루션을 자동으로 배포하려면 코드를 AWS CodeCommit으로 푸시합니다.<pre>$ git add *<br />$ git commit -m "message"<br />$ git push</pre><br />`account-customization` 폴더에서 Terraform 명령을 실행하여 AFT를 사용하지 않고 이 솔루션을 배포할 수도 있습니다. Terraform 파일이 포함된 작업 디렉터리를 초기화하려면 다음을 실행합니다.<pre>$ terraform init</pre> | DevOps 엔지니어 | 
| 변경 사항을 미리 봅니다. | Terraform이 인프라에 적용할 변경 사항을 미리 보려면 다음 명령을 실행합니다.<pre>$ terraform plan</pre><br />이 명령은 Terraform 구성을 평가하여 선언된 리소스의 원하는 상태를 결정합니다. 또한 원하는 상태를 워크스페이스 내에서 프로비저닝할 실제 인프라와 비교합니다. | DevOps 엔지니어 | 
| 변경 사항을 적용합니다. | 다음 명령을 실행하여 `variables.tf` 파일에 대한 변경 사항을 구현합니다.<pre>$ terraform apply</pre> | DevOps 엔지니어 | 

### 리소스 검증
<a name="validate-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SSM 문서 생성을 검증합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html)`DistributeSoftwarePackage` 및 `AddSoftwarePackageToDistributor` 패키지가 표시되어야 합니다. | DevOps 엔지니어 | 
| 자동화의 성공적인 배포를 검증합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps 엔지니어 | 
| 패키지가 대상 멤버 계정 인스턴스에 배포되었는지 확인합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps 엔지니어 | 

## 문제 해결
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| State Manager 연결이 실패했거나 보류 중 상태입니다. |  AWS 지식 센터에서 [문제 해결 정보를](https://repost.aws/knowledge-center/ssm-state-manager-association-fail) 참조하세요. | 
| 예약된 연결을 실행하지 못했습니다. | 일정 사양이 유효하지 않을 수 있습니다. State Manager는 현재 연결에 대한 cron 표현식에서 월 지정을 지원하지 않습니다. [cron 또는 rate 표현식](https://docs.aws.amazon.com/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html)을 사용하여 일정을 확인합니다. | 

## 관련 리소스
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-resources"></a>
+ [중앙 집중식 패키지 배포](https://github.com/aws-samples/aws-organization-centralised-package-distribution)(GitHub 리포지토리)
+ [Account Factory for Terraform(AFT)](https://catalog.workshops.aws/control-tower/en-US/customization/aft)
+ [사용 사례 및 모범 사례](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-best-practices.html)(AWS Systems Manager 문서)