AWS CDK 측면 및 이스케이프 해치를 사용하여 기본 역할 이름 사용자 지정 - AWS 권장 가이드

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

AWS CDK 측면 및 이스케이프 해치를 사용하여 기본 역할 이름 사용자 지정

작성자SANDEEPSINGH(AWS) 및 James Jacob(AWS)

코드 리포지토리: cdk-aspects-override-example

환경: 프로덕션

기술: 인프라 DevOps, 관리 및 거버넌스

AWS 서비스: AWS CDK, AWS CloudFormation, AWS Lambda

요약

이 패턴은 AWS Cloud Development Kit (AWS CDK) 구성에서 생성한 역할의 기본 이름을 사용자 지정하는 방법을 보여줍니다. 조직에 이름 지정 규칙에 따른 특정 제약 조건이 있는 경우 역할 이름을 사용자 지정해야 하는 경우가 많습니다. 예를 들어 조직에서 역할 이름에 특정 접두사가 필요한 AWS Identity and Access Management (IAM) 권한 경계 또는 서비스 제어 정책(SCPs)을 설정할 수 있습니다. 이러한 경우 AWS CDK 구성에서 생성된 기본 역할 이름은 이러한 규칙을 충족하지 못할 수 있으며 변경해야 할 수 있습니다. 이 패턴은 의 이스케이프 해치측면을 사용하여 이러한 요구 사항을 해결합니다 AWS CDK. 이스케이프 해치를 사용하여 사용자 지정 역할 이름 및 측면을 정의하고 사용자 지정 이름을 모든 역할에 적용하여 조직의 정책 및 제약 조건을 준수할 수 있습니다.

사전 조건 및 제한 사항

사전 조건 

제한 사항

  • 측면은 리소스 유형을 기반으로 리소스를 필터링하므로 모든 역할이 동일한 접두사를 공유합니다. 역할마다 역할 접두사가 다른 경우 다른 속성을 기반으로 추가 필터링이 필요합니다. 예를 들어 AWS Lambda 함수와 연결된 역할에 다른 접두사를 할당하려면 특정 역할 속성 또는 태그를 기준으로 필터링하고 Lambda 관련 역할에는 하나의 접두사를 적용하고 다른 역할에는 다른 접두사를 적용할 수 있습니다.

  • IAM 역할 이름의 최대 길이는 64자이므로 이 제한을 충족하려면 수정된 역할 이름을 잘라내야 합니다.

  • 일부 AWS 서비스 는 일부 에서 사용할 수 없습니다 AWS 리전. 리전 가용성은 AWS 서비스 리전별 섹션을 참조하세요. 특정 엔드포인트는 서비스 엔드포인트 및 할당량 페이지를 참조하고 서비스의 링크를 선택합니다.

아키텍처

대상 기술 스택

  • AWS CDK

  • AWS CloudFormation

대상 아키텍처·

이스케이프 AWS 해치 및 측면을 사용하여 CDK할당된 역할 이름을 사용자 지정하는 아키텍처입니다.
  • AWS CDK 앱은 AWS 리소스를 관리하기 위해 합성 및 배포되는 하나 이상의 AWS CloudFormation 스택으로 구성됩니다.

  • 계층 2(L2) 구성에서 노출되지 않는 AWS CDK관리형 리소스의 속성을 수정하려면 이스케이프 해치를 사용하여 기본 CloudFormation 속성(이 경우 역할 이름)을 재정의하고, AWS CDK 스택 합성 프로세스 중에 AWS CDK 앱의 모든 리소스에 역할을 적용하는 측면을 사용합니다.

도구

AWS 서비스

  • AWS Cloud Development Kit (AWS CDK) 는 코드로 AWS 클라우드 인프라를 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다.

  • AWS CDK 명령줄 인터페이스(AWS CDK CLI)(키 AWS CDK 트라고도 함)는 AWS CDK 앱과 상호 작용하는 데 도움이 되는 명령줄 클라우드 개발 키트입니다. CLI cdk 명령은 AWS CDK 앱과 상호 작용하기 위한 기본 도구입니다. 앱을 실행하고, 정의한 애플리케이션 모델을 조사하고, 에서 생성한 CloudFormation 템플릿을 생성 및 배포합니다 AWS CDK.

  • AWS CloudFormation 는 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및 리전의 수명 주기 동안 관리할 수 있도록 지원합니다.

코드 리포지토리

이 패턴의 소스 코드와 템플릿은 GitHub CDK Aspects Override 리포지토리에서 사용할 수 있습니다.

모범 사례

AWS 규정 지침 웹 사이트에서 AWS CDK 의 를 사용하여 IaC 프로젝트를 TypeScript 생성하는 모범 사례를 참조하세요.

에픽

작업설명필요한 기술

를 설치합니다 AWS CDK CLI.

전역적으로 AWS CDK CLI 를 설치하려면 명령을 실행합니다.

npm install -g aws-cdk
AWS DevOps

버전을 확인합니다.

명령 실행:

cdk --version

의 버전 2를 사용하고 있는지 확인합니다 AWS CDK CLI.

AWS DevOps

AWS CDK 환경을 부트스트랩합니다.

AWS CloudFormation 템플릿을 배포하기 전에 사용하려는 계정과 AWS 리전 를 준비합니다. 명령 실행:

cdk bootstrap <account>/<Region>

자세한 내용은 AWS 설명서의 AWS CDK 부트스트래핑을 참조하세요.

AWS DevOps
작업설명필요한 기술

프로젝트를 설정합니다.

  1. 이 패턴의 GitHub 리포지토리를 로컬 컴퓨터에 복제합니다.

    git clone https://github.com/aws-samples/cdk-aspects-override
  2. 로컬 컴퓨터의 프로젝트 디렉터리로 이동합니다.

  3. 프로젝트 종속성을 설치합니다.

    npm ci
AWS DevOps

에서 할당한 기본 역할 이름을 사용하여 스택을 배포합니다 AWS CDK.

Lambda 함수와 관련 역할이 포함된 두 개의 CloudFormation 스택(ExampleStack1ExampleStack2)을 배포합니다.

npm run deploy:ExampleAppWithoutAspects

코드는 역할 속성을 명시적으로 전달하지 않으므로 역할 이름은 에서 구성됩니다 AWS CDK.

출력 예제는 추가 정보 섹션을 참조하세요.

AWS DevOps

측면이 있는 스택을 배포합니다.

이 단계에서는 AWS CDK 프로젝트에 배포된 모든 역할에 접두사를 추가하여 IAM 역할 이름 규칙을 적용하는 측면을 적용합니다. 이 측면은 lib/aspects.ts파일에 정의됩니다. 측면은 이스케이프 해치를 사용하여 접두사를 추가하여 역할 이름을 재정의합니다. 측면은 bin/app-with-aspects.ts파일의 스택에 적용됩니다. 이 예제에서 사용되는 역할 이름 접두사는 입니다dev-unicorn.

  1. bin/app-with-aspects.ts 파일을 편집합니다.

  2. 파일에서 접두사 ROLE_NAME_PREFIX로 변수를 업데이트합니다dev-unicorn.

    const app = new cdk.App(); // Define a prefix for the role names const ROLE_NAME_PREFIX = 'dev-unicorn'; // Instantiate the RoleNamingConventionAspect with the desired prefix const roleNamingConventionAspect = new RoleNamingConventionAspect(ROLE_NAME_PREFIX);
  3. 다음과 같은 측면으로 AWS CDK 앱을 배포합니다.

    npm run deploy:ExampleAppWithAspects

출력 예제는 추가 정보 섹션을 참조하세요.

AWS DevOps
작업설명필요한 기술

AWS CloudFormation 스택을 삭제합니다.

이 패턴 사용을 완료한 후 다음 명령을 실행하여 추가 비용이 발생하지 않도록 리소스를 정리합니다.

cdk destroy --all -f && cdk --app npx ts-node bin/app-with-aspects.ts' destroy --all -f
AWS DevOps

문제 해결

문제Solution

를 사용하는 데 문제가 발생합니다 AWS CDK.

AWS CDK 설명서의 일반적인 AWS CDK 문제 해결을 참조하세요.

관련 리소스

추가 정보

측면 AWS CloudFormation 없이 에서 생성한 역할 이름

Outputs: ExampleStack1WithoutAspects.Function1RoleName = example-stack1-without-as-Function1LambdaFunctionSe-y7FYTY6FXJXA ExampleStack1WithoutAspects.Function2RoleName = example-stack1-without-as-Function2LambdaFunctionSe-dDZV4rkWqWnI ... Outputs: ExampleStack2WithoutAspects.Function3RoleName = example-stack2-without-as-Function3LambdaFunctionSe-ygMv49iTyMq0

측면 AWS CloudFormation 이 있는 에서 생성한 역할 이름

Outputs: ExampleStack1WithAspects.Function1RoleName = dev-unicorn-Function1LambdaFunctionServiceRole783660DC ExampleStack1WithAspects.Function2RoleName = dev-unicorn-Function2LambdaFunctionServiceRole2C391181 ... Outputs: ExampleStack2WithAspects.Function3RoleName = dev-unicorn-Function3LambdaFunctionServiceRole4CAA721C