BLOG

AWS CDK 자격 증명 플러그인으로 교차 계정 작업 자동화
작성일: 2020-08-21

AWS 클라우드 개발 키트(AWS CDK)는 오픈 소스 소프트웨어 개발 모델링 프레임 워크 및 제공하는 친숙한 프로그래밍 언어를 사용하여 클라우드 애플리케이션 자원입니다. AWS CodePipeline과 같은 도구를 사용하여 AWS CDK에서 정의한 인프라에 대한 릴리스 파이프 라인을 자동화할 수 있습니다. 애플리케이션의 아키텍처가 더 복잡해짐에 따라 릴리스 파이프 라인도 복잡해집니다.

 

AWS CDK 애플리케이션을 처음 생성할 때 최상위 AWS CDK 을 정의합니다. 앱 내에서 일반적으로 AWS CloudFormation 스택과 유사한 배포 단위인 하나 이상의 스택을 정의합니다. AWS CDK 앱의 각 스택 인스턴스는 명시적 또는 암시 적으로 환경(env)과 연결됩니다. 환경은 스택을 배포하려는 대상 AWS 계정 및 리전입니다. 여러 환경이 포함된 AWS CDK 앱을 배포하려고 할 때 각 환경에 대한 자격 증명을 관리하는 것이 어려울 수 있으며 일반적으로 사용자 지정 스크립트를 사용해야 합니다.

 

오늘 블로그 포스팅으로는 AWS CDK 자격 증명 플러그인을 사용하여 여러 스택이 포함된 AWS CDK 앱을 여러 환경에 배포하는 것을 단순화하고 간소화하는 방법을 보여드리겠습니다. 여기에선 스택을 환경과 명시적으로 연결하고 있으며 환경에 구애받지 않는 스택에서 작동하지 않을 수 있다고 가정합니다.

 

 

AWS CDK 자격 증명 플러그인 개요

AWS CDK에서는 자격 증명 프로세스 중에 플러그인을 사용할 수 있습니다. 기본적으로 몇 가지 다른 위치에서 기본 자격 증명을 찾습니다. 자세한 내용은 필수 구성 요소를 참조하세요. synth 또는 deploy와 같은 AWS CDK 명령을 실행할 때 AWS CDK CLI는 스택에 대해 정의된 AWS 계정에 대해 작업을 수행해야 합니다. 기본 자격 증명을 사용하려고 하지만 여러 계정에 대한 자격 증명이 필요한 경우에는 어떻게 될까요? 이 때 자격 증명 플러그인이 작동합니다. 자격 증명을 얻을 때 AWS CDK CLI가 취하는 기본 흐름은 다음과 같습니다.

  1. 스택의 환경을 결정합니다.
  2. 해당 환경에서 사용할 자격 증명을 찾습니다.
  3. 기본 자격 증명이 일치하면 환경에서 이를 사용합니다.
  4. 기본 자격 증명이 환경과 일치하지 않으면 자격 증명 플러그인을 로드하고 해당 자격 증명 플러그인을 사용하여 환경에 대한 자격 증명 가져 오기를 시도합니다.

 

 

연습 개요

이 연습에서는 cdk-assume-role-credential 플러그인을 사용하여 합성 프로세스의 일부로 여러 AWS 계정에서 정보를 읽습니다. 이 게시물은 다음 세 개의 계정이 있다고 가정합니다.

  • 공유 서비스 – AWS CDK 명령을 실행하는 위치입니다. 다른 두 계정의 역할을 맡을 수 있는 액세스 권한이 있습니다. 여기에서 AWS CDK 앱 배포를 자동화하는 파이프 라인을 배포할 수도 있습니다.
  • 개발 응용 프로그램 – 응용 프로그램의 개발 환경 (dev)입니다.
  • 프로덕션 애플리케이션 – 애플리케이션의 프로덕션 환경 (prod)입니다.

그러나 공유 서비스와 개발 또는 프로덕션 계정에 대한 액세스 권한만 있는 경우에는 계속 연습을 수행할 수 있습니다.

 

연습은 다음과 같은 고급 프로세스를 따릅니다.

  1. 플러그인 다운로드 및 설치
  2. 필요한 리소스 만들기
  3. 플러그인을 사용하여 dev 및 prod 계정 용 CloudFormation 템플릿을 합성

 

이 연습에 사용된 샘플 프로젝트는 GitHub에 있습니다.

 

 

전제 조건

이 연습에서는 다음과 같은 필수 구성 요소가 있어야 합니다.

  • 최소한 공유 서비스와 개발 또는 프로덕션 계정에 대한 액세스
  • 사전 조건과 함께 설치된 AWS CDK
  • AWS CLI에서 AWS 명령 실행에 대한 지식

 

 

플러그인 다운로드 설치

이 게시물에 사용된 cdk-assume-role-credential 플러그인 및 샘플 코드는 GitHub 저장소에 있습니다. 먼저 이 저장소를 로컬로 복제하고 플러그인을 글로벌 패키지로 설치해야 합니다.

  1. 다음 코드를 사용하여 GitHub 프로젝트를 다운로드합니다.

$ git clone https://github.com/aws-samples/cdk-assume-role-credential-plugin.git

        2. 다음 코드를 사용하여 전역적으로 플러그인을 설치합니다.

$ npm install -g git+https://github.com/aws-samples/cdk-assume-role-credential-plugin.git

 

 

필요한 리소스 생성

이 플러그인은 대상 계정에서 사전 프로비저닝 된 역할을 사용하므로 먼저 해당 역할을 만들어야 합니다. 이 게시물에서는 플러그인이 찾는 기본 이름을 사용하여 두 개의 AWS Identity and Access Management (IAM) 역할을 생성합니다.

  • cdk-readOnlyRole – ReadOnlyAccess AWS 관리형 정책이 연결되어 있습니다.
  • cdk-writeRole – AdministratorAccess AWS 관리형 정책이 연결되어 있습니다.

 

두 역할 모두 공유 서비스 계정을 신뢰하도록 구성됩니다.

다음 단계를 완료하기 전에 세 계정에 대한 계정 ID가 있고 각 계정에 대한 AWS CLI 자격 증명을 얻을 수 있는지 확인하세요.

  1. sample-app 폴더로 이동합니다.

$ cd cdk-assume-role-credential-plugin/aws-samples

      2. 종속성 설치:

$ npm install

     3. bin / required-resources.ts 파일을 편집하고 표시된 곳에 계정 번호를 입력합니다.

new RequiredResourcesStack(app, ‘dev’, {

  env: {

     account: ‘REPLACE_WITH_DEV_ACCOUNT_ID’,

    region: ‘REPLACE_WITH_REGION’

  },

  trustedAccount: ‘REPLACE_WITH_SHARED_SERVICES_ACCOUNT_ID’

});

new RequiredResourcesStack (app, ‘prod’, {

  env: {

     account: ‘REPLACE_WITH_PROD_ACCOUNT_ID’,

    region: ‘REPLACE_WITH_REGION’

  },

  trustedAccount: ‘REPLACE_WITH_SHARED_SERVICES_ACCOUNT_ID’

});

 

4. AWS CDK 앱을 빌드합니다.

$ npm run build

     5. dev 계정에 대한 AWS CLI 자격 증명을 사용하여 cdk deploy를 실행하여 리소스를 생성합니다.

$ cdk deploy dev

     6. prod 계정에 대한 AWS CLI 자격 증명을 사용하여 cdk deploy를 실행하여 리소스를 생성합니다.

$ cdk deploy prod

이제 dev 및 prod 계정 모두에 필요한 역할을 생성해야 합니다.

 

 

AWS CDK 합성

샘플 앱을 살펴보고 구성 요소를 확인하세요. bin / sample-app.ts 파일을 열면 AWS CDK 앱이 두 개의 SampleApp 스택으로 구성되어 있음을 알 수 있습니다. 하나는 us-east-2 리전의 dev 계정에 배포되고 다른 하나는 prod에 배포됩니다. us-east-1 지역의 계정입니다. 애플리케이션을 합성하려면 다음 단계를 완료하십시오.

 

  1. bin / sample-app.ts 파일을 편집하세요 (표시된 곳에 계정 번호를 입력하세요).

const dev = { account: ‘REPLACE_WITH_DEV_ACCOUNT_ID’, region: ‘us-east-2’ }

const prod = { account: ‘REPLACE_WITH_PROD_ACCOUNT_ID’, region: ‘us-east-1’ }

new SampleApp(app, ‘devSampleApp’, { env: dev });

new SampleApp(app, ‘prodSampleApp’, { env: prod });

      2. AWS CDK 앱을 빌드합니다.

$ npm run build

      3. 공유 서비스 계정에 대한 AWS CLI 자격 증명을 사용하여 앱 합성을 시도합니다.

$ cdk synth –-app “npx ts-node bin/sample-app.ts”

 

지정된 계정에 대한 자격 증명이 없음을 나타내는 다음 코드와 유사한 오류 메시지가 표시됩니다.

[Error at /devSampleApp] Need to perform AWS calls for account 11111111111, but the current credentials are for 222222222222.

[Error at /prodSampleApp] Need to perform AWS calls for account 333333333333, but the current credentials are for 222222222222.

 

4. 코드를 다시 입력하되 이번에는 cdk-assume-role-credential-plugin을 사용하도록 지시하세요.

$ cdk synth –-app “npx ts-node bin/sample-app.ts” –-plugin cdk-assume-role-credential-plugin

 

명령이 성공했는지 확인해야 합니다.

Successfully synthesized to /cdk.out

Supply a stack id (devSampleApp, prodSampleApp) to display its template.  

 

 

정리

향후 요금이 발생하지 않도록 리소스를 삭제하세요. cdk-assume-role-credential-plugin / sample-app /에 있는지 확인하세요.

  1. dev 계정에 대한 AWS CLI 자격 증명을 사용하여 cdk destroy를 실행하여 리소스를 삭제합니다.

$ cdk destroy dev

  1. prod 계정에 대한 AWS CLI 자격 증명을 사용하여 cdk destroy를 실행하여 리소스를 삭제합니다.

$ cdk destroy prod

 

 

결론

자격 증명 프로세스 플러그인 cdk-assume-role-credential-plugin을 사용하여 여러 계정에 스택 배포를 단순화할 수 있습니다.

 

이 게시물에서는 AWS CDK 앱을 수동으로 배포하는 동안 플러그인을 사용하는 간단한 예제를 제공했습니다.

 

 

원문URL:  https://aws.amazon.com/ko/blogs/gametech/reach-more-players-using-aws-global-accelerator/

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.