

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

# Cloud Custodian 및 AWS CDK를 사용하여 Systems Manager용 AWS 관리형 정책을 EC2 인스턴스 프로파일에 자동으로 연결
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk"></a>

*Ali Asfour, Aaron Lennon, Amazon Web Services*

## 요약
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-summary"></a>

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 AWS Systems Manager와 통합하여 운영 작업을 자동화하고 가시성과 제어를 강화할 수 있습니다. Systems Manager와 통합하려면 EC2 인스턴스에 [AWS Systems Manager Agent(SSM Agent)](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html)가 설치되어 있고 `AmazonSSMManagedInstanceCore` AWS Identity and Access Management(IAM) 정책이 인스턴스 프로파일에 연결되어 있어야 합니다. 

하지만 모든 EC2 인스턴스 프로파일에 `AmazonSSMManagedInstanceCore` 정책이 연결되도록 하려는 경우, 인스턴스 프로파일이 없는 새 EC2 인스턴스나 인스턴스 프로파일은 있지만 `AmazonSSMManagedInstanceCore` 정책이 없는 EC2 인스턴스를 업데이트하는 데 어려움을 겪을 수 있습니다. 또한 여러 Amazon Web Services(AWS) 계정과 AWS 리전에 이 정책을 추가하는 것도 어려울 수 있습니다.

이 패턴은 AWS 계정에 세 가지 [클라우드 관리](https://cloudcustodian.io/) 정책을 배포하여 이러한 문제를 해결하는 데 도움이 됩니다.
+ 첫 번째 Cloud Custodian 정책은 인스턴스 프로파일은 있지만 `AmazonSSMManagedInstanceCore` 정책이 없는 기존 EC2 인스턴스를 확인합니다. 그러면 `AmazonSSMManagedInstanceCore` 정책이 첨부됩니다. 
+ 두 번째 Cloud Custodian 정책은 인스턴스 프로파일이 없는 기존 EC2 인스턴스를 확인하고 `AmazonSSMManagedInstanceCore` 정책이 연결된 기본 인스턴스 프로파일을 추가합니다.
+ 세 번째 클라우드 관리 정책은 계정에 [AWS Lambda 함수](https://cloudcustodian.io/docs/aws/lambda.html)를 생성하여 EC2 인스턴스 및 인스턴스 프로파일 생성을 모니터링합니다. 이렇게 하면 EC2 인스턴스가 생성될 때 `AmazonSSMManagedInstanceCore` 정책이 자동으로 연결됩니다.

이 패턴은 [AWS DevOps](https://aws.amazon.com/devops/) 도구를 사용하여 별도의 컴퓨팅 환경을 프로비저닝하지 않고도 클라우드 관리 정책을 다중 계정 환경에 지속적으로 대규모로 배포할 수 있습니다. 

## 사전 조건 및 제한 사항
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-prereqs"></a>

**사전 조건 **
+ 두 개 이상의 활성 AWS 계정. 한 계정은 *보안 계정*이고 다른 계정은 *멤버 계정*입니다.
+ 보안 계정에서 AWS 리소스를 프로비저닝할 수 있는 권한. 이 패턴은 [관리자 권한](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)을 사용하지만 조직의 요구 사항 및 정책에 따라 권한을 부여해야 합니다.
+ 보안 계정에서 구성원 계정으로 IAM 역할을 수임하고 필요한 IAM 역할을 생성하는 기능. 자세한 내용은 IAM 설명서의 [IAM 역할을 사용한 AWS 계정 간 액세스 권한 위임](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)을 참조하십시오.
+ 
**중요**  
AWS Command Line Interface(AWS CLI), 설치 및 구성됨. 테스트 목적으로 `aws configure` 명령을 사용하거나 환경 변수를 설정하여 AWS CLI를 구성할 수 있습니다. 프로덕션 환경에서는 권장되지 않으므로 이 계정에는 최소 권한 액세스 권한만 부여하는 것이 좋습니다. 자세한 내용은 IAM 설명서의 [최소 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)를 참조하십시오.
+ `devops-cdk-cloudcustodian.zip` 파일(첨부)이 로컬 컴퓨터에 다운로드됩니다.
+ Python에 대해 숙지.
+ 필수 도구(Node.js, AWS Cloud Development Kit(AWS CDK) 및 Git)가 설치 및 구성됩니다. `devops-cdk-cloudcustodian.zip` 파일의 `install-prerequisites.sh` 파일을 사용하여 이러한 도구를** **설치할 수 있습니다.** **이 파일을 루트 권한으로 실행해야 합니다. 

**제한 사항 **
+ 프로덕션 환경에서도 이 패턴을 사용할 수 있지만 모든 IAM 역할 및 정책이 조직의 요구 사항 및 정책을 충족하는지 확인하십시오. 

**패키지 버전**
+ Cloud Custodian 버전 0.9 이상
+ TypeScript 버전 3.9.7 이상
+ Node.js 버전 14.15.4 이상
+ `npm` 버전 7.6.1 이상
+ AWS CDK 버전 1.96.0 이상

## 아키텍처
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-architecture"></a>

![\[AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/169a7bde-789e-4ebd-b4ca-80eb28ac9927/images/8ec0b6b4-d4b0-42e5-833d-24d1e6098fd9.png)


 

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

1. 클라우드 관리 정책은 보안 계정의 AWS CodeCommit 리포지토리로 푸시됩니다. Amazon CloudWatch Events 규칙은 AWS CodePipeline 파이프라인을 자동으로 시작합니다.

1. 파이프라인은 CodeCommit에서 가장 최신 코드를 가져와서 AWS CodeBuild에서 처리하는 지속적 통합 및 지속적 전달(CI/CD) 파이프라인의 지속적 통합 부분으로 전송합니다.

1. CodeBuild는 Cloud Custodian 정책에 대한 정책 구문 검증을 포함한 전체 DevSecOps 작업을 수행하고 이러한 정책을 `--dryrun` 모드에서 실행하여 식별된 리소스를 확인합니다.

1. 오류가 없는 경우 다음 작업에서는 관리자에게 변경 사항을 검토하고 구성원 계정에 배포를 승인하도록 알립니다.

**기술 스택**
+ AWS CDK
+ CodeBuild
+ CodeCommit
+ CodePipeline
+ IAM
+ Cloud Custodian 

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

AWS CDK Pipelines 모듈은 CodePipeline을 사용하여 CodeBuild로 소스 코드의 구축 및 테스트를 오케스트레이션하는 CI/CD 파이프라인을 제공하고, AWS CloudFormation 스택을 통한 AWS 리소스 배포도 지원합니다. 이 패턴은 조직의 모든 멤버 계정 및 리전에 사용할 수 있습니다. `Roles creation` 스택을 확장하여 멤버 계정에 다른 IAM 역할을 배포할 수도 있습니다. 

## 도구
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-tools"></a>
+ [AWS Cloud Development Kit(AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)는 코드에서 클라우드 인프라를 정의하고 AWS CloudFormation을 통해 프로비저닝하기 위한 소프트웨어 개발 프레임워크입니다.
+ [AWS Command Line Interface(AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)는 클라우드상의 완전 관리형 빌드 서비스입니다.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)은 자산을 비공개로 저장하고 관리하는 데 사용할 수 있는 버전 제어 서비스입니다.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)은 소프트웨어 릴리스에 필요한 단계를 모델링, 시각화 및 자동화하는 데 사용할 수 있는 지속적 전달 서비스입니다.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 사용자의 액세스를 안전하게 제어할 수 있게 지원하는 웹 서비스입니다.
+ [Cloud Custodian](https://cloudcustodian.io/)은 많은 조직이 퍼블릭 클라우드 계정을 관리하는 데 사용하는 도구와 스크립트를 하나의 오픈소스 도구로 통합합니다.
+ [Node.js](https://nodejs.org/en/)는Google Chrome의 V8 JavaScript 엔진에 구축된 JavaScript 런타임입니다.

**코드**

이 패턴에 사용되는 모듈, 계정 함수, 파일, 배포 명령의 자세한 목록은 `devops-cdk-cloudcustodian.zip` 파일(첨부)의 `README` 파일을 참조하십시오.

## 에픽
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-epics"></a>

### AWS CDK로 파이프라인 설정
<a name="set-up-the-pipeline-with-aws-cdk"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CodeCommit 리포지토리를 설정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)이에 대한 자세한 내용은 AWS CodeCommit 설명서의 [CodeCommit 리포지토리 생성](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html)을 참조하십시오. | 개발자 | 
| 필수 도구를 설치합니다. | 이 `install-prerequisites.sh` 파일을 사용하여 Amazon Linux에 필요한 모든 도구를 설치할 수 있습니다. AWS CLI는 사전 설치되어 제공되므로 여기에 포함되지 않습니다.이에 대한 자세한 내용은 AWS CDK 설명서의 [AWS CDK 시작](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)의 [사전 조건](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) 섹션을 참조하십시오. | 개발자 | 
| 필수 AWS CDK 패키지를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)다음 패키지는 AWS CDK에 필요하며 `requirements.txt` 파일에 포함되어 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | 개발자 | 

### 환경 구성
<a name="configure-your-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 필수 변수를 업데이트하십시오. | CodeCommit 리포지토리의 루트 폴더에서 `vars.py` 파일을 열고 다음 변수를 업데이트합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | 개발자 | 
| account.yml 파일을 멤버 계정 정보로 업데이트하십시오. | 여러 계정에 대해 [c7n-org Cloud Custodian](https://cloudcustodian.io/docs/tools/c7n-org.html) 도구를 실행하려면 `accounts.yml` 구성 파일을 리포지토리의 루트에 배치해야 합니다. 다음은 AWS용 Cloud Custodian 구성 파일 예제입니다.<pre>accounts:<br />- account_id: '123123123123'<br />  name: account-1<br />  regions:<br />  - us-east-1<br />  - us-west-2<br />  role: arn:aws:iam::123123123123:role/CloudCustodian<br />  vars:<br />    charge_code: xyz<br />  tags:<br />  - type:prod<br />  - division:some division<br />  - partition:us<br />  - scope:pci</pre> | 개발자 | 

### AWS 계정 부트스트랩
<a name="bootstrap-the-aws-accounts"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 보안 계정을 부트스트랩합니다. | 다음 명령을 실행하여 `cloudcustodian_stack` 애플리케이션을 통해 `deploy_account`를 부트스트랩합니다.<pre>cdk bootstrap -a 'python3 <br />cloudcustodian/cloudcustodian_stack.py</pre> | 개발자 | 
| 옵션 1 - 멤버 계정을 자동으로 부트스트랩합니다. | `vars.py`파일에서 `cdk_bootstrap_member_accounts` 변수를 `True`로 설정하면 `member_accounts` 변수에 지정된 계정이 파이프라인에 의해 자동으로 부트스트랩됩니다.필요한 경우 보안 계정에서 위임할 수 있고 AWS CDK를 부트스트랩하는 데 필요한 권한이 있는 IAM 역할로 `*cdk_bootstrap_role*`을 업데이트할 수 있습니다.`member_accounts ` 변수에 추가된 새 계정은 파이프라인에 의해 자동으로 부트스트랩되므로 필요한 역할을 배포할 수 있습니다. | 개발자 | 
| 옵션 2 - 멤버 계정을 수동으로 부트스트랩합니다. | 이 방법을 사용하는 것은 권장되지 않지만 다음 명령을 실행하여 `cdk_bootstrap_member_accounts` 값을 `False`로 설정하고 이 단계를 수동으로 수행할 수 있습니다.<pre>$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \<br /><br />--trust {security_account_id} \<br /><br />--context assume-role-credentials:writeIamRoleName={role_name} \<br /><br />--context assume-role-credentials:readIamRoleName={role_name} \<br /><br />--mode=ForWriting \<br /><br />--context bootstrap=true \<br /><br />--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess</pre>보안 계정에서 위임할 수 있고 AWS CDK를 부트스트랩하는 데 필요한 권한을 가진 IAM 역할의 이름으로 `{security_account_id}` 및 `{role_name}` 값을 업데이트해야 합니다.또한 다른 접근 방식, 예를 들어 AWS CloudFormation을 사용하여 멤버 계정을 부트스트랩할 수도 있습니다. 이에 대한 자세한 내용은 AWS CDK 설명서의 [부트스트래핑](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)을 참조하십시오. | 개발자 | 

### AWS CDK 스택 배포
<a name="deploy-the-aws-cdk-stacks"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 멤버 계정에서 IAM 역할을 생성합니다. | 다음 명령을 실행하여 `member_account_roles_stack` 스택을 배포하고 멤버 계정에 IAM 역할을 생성합니다.<pre>cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never</pre> | 개발자 | 
| Cloud Custodian 파이프라인 스택을 배포하십시오. | 다음 명령을 실행하여 보안 계정에 배포되는 Cloud Custodian `cloudcustodian_stack.py` 파이프라인을 생성합니다.<pre>cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'</pre> | 개발자 | 

## 관련 리소스
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-resources"></a>
+ [AWS SDK 시작하기](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)

## 첨부
<a name="attachments-169a7bde-789e-4ebd-b4ca-80eb28ac9927"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/169a7bde-789e-4ebd-b4ca-80eb28ac9927/attachments/attachment.zip) 파일의 압축을 풉니다.