다음과 함께 사용할 수 있도록 환경을 부트스트랩하십시오. AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

AWS CDK v2 개발자 안내서입니다. 구형 CDK v1은 2022년 6월 1일에 유지 보수에 들어갔고 2023년 6월 1일에 지원이 종료되었습니다.

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

다음과 함께 사용할 수 있도록 환경을 부트스트랩하십시오. AWS CDK

AWS 환경을 부트스트랩하여 스택 배포를 준비하세요. AWS Cloud Development Kit (AWS CDK)

  • 환경에 대한 소개는 를 참조하십시오. 환경

  • 부트스트래핑에 대한 소개는 를 참조하십시오. 부트스트래핑

환경을 부트스트랩하는 방법

AWS CDK 명령줄 인터페이스 (AWS CDK CLI) 또는 선호하는 AWS CloudFormation 배포 도구를 사용하여 환경을 부트스트랩할 수 있습니다.

CDK 사용 CLI

CDK CLI cdk bootstrap 명령을 사용하여 환경을 부트스트랩할 수 있습니다. 부트스트래핑을 크게 수정할 필요가 없는 경우 이 방법을 사용하는 것이 좋습니다.

모든 작업 디렉토리에서 부트스트랩

작업 디렉토리에서 부트스트랩하려면 부트스트랩할 환경을 명령줄 인수로 제공하십시오. 다음은 그 예제입니다.

$ cdk bootstrap aws://123456789012/us-east-1

인수를 제공할 때 aws:// 접두사는 선택사항입니다. 다음은 유효합니다.

$ cdk bootstrap 123456789012/us-east-1

여러 환경을 동시에 부트스트랩하려면 여러 인수를 제공하십시오.

$ cdk bootstrap aws://123456789012/us-east-1 aws://123456789012/us-east-2
CDK 프로젝트의 상위 디렉터리에서 부트스트랩

파일이 들어 있는 CDK 프로젝트의 상위 cdk bootstrap 디렉터리에서 실행할 수 있습니다. cdk.json 환경을 인수로 제공하지 않으면 CDK는 사용자 configcredentials 파일 또는 CDK CLI 스택에 지정된 환경 정보와 같은 기본 소스에서 환경 정보를 가져옵니다.

CDK 프로젝트의 상위 디렉터리에서 부트스트랩하는 경우 명령줄 인수에서 제공된 환경이 다른 소스보다 우선합니다.

configcredentials 파일에 지정된 환경을 부트스트랩하려면 다음 옵션을 사용하십시오. --profile

$ cdk bootstrap --profile prod

cdk bootstrap명령 및 지원되는 옵션에 대한 자세한 내용은 을 참조하십시오cdk bootstrap.

아무 AWS CloudFormation 도구나 사용할 수 있습니다.

aws-cdk GitHub 리포지토리에서 부트스트랩 템플릿을 복사하거나 명령을 사용하여 템플릿을 가져올 수 있습니다. cdk bootstrap --show-template 그런 다음 원하는 AWS CloudFormation 도구를 사용하여 템플릿을 사용자 환경에 배포하십시오.

이 방법을 사용하면 AWS CloudFormation StackSets 또는 을 사용할 수 있습니다 AWS Control Tower. AWS CloudFormation 콘솔이나 AWS Command Line Interface (AWS CLI) 를 사용할 수도 있습니다. 템플릿을 배포하기 전에 템플릿을 수정할 수 있습니다. 이 방법은 대규모 배포에 더 유연하고 적합할 수 있습니다.

다음은 이 --show-template 옵션을 사용하여 부트스트랩 템플릿을 검색하고 로컬 시스템에 저장하는 예제입니다.

macOS/Linux
$ cdk bootstrap --show-template > bootstrap-template.yaml
Windows

Windows에서는 템플릿의 인코딩을 보존하는 데 PowerShell 사용해야 합니다.

powershell "cdk bootstrap --show-template | Out-File -encoding utf8 bootstrap-template.yaml"

CDK를 사용하여 이 템플릿을 CLI 배포하려면 다음을 실행할 수 있습니다.

$ cdk bootstrap --template bootstrap-template.yaml

다음은 를 사용하여 템플릿을 AWS CLI 배포하는 예제입니다.

macOS/Linux
aws cloudformation create-stack \ --stack-name CDKToolkit \ --template-body file://path/to/bootstrap-template.yaml \ --capabilities CAPABILITY_NAMED_IAM \ --region us-west-1
Windows
aws cloudformation create-stack ^ --stack-name CDKToolkit ^ --template-body file://path/to/bootstrap-template.yaml ^ --capabilities CAPABILITY_NAMED_IAM ^ --region us-west-1

여러 환경을 CloudFormation StackSets 부트스트랩하는 데 사용하는 방법에 대한 자세한 내용은 AWS 클라우드 운영 및 마이그레이션 CloudFormation StackSets 블로그에서 AWS CDK 사용할 다중 AWS 계정 부트스트래핑을 참조하십시오.

환경을 부트스트랩해야 하는 시기

환경에 배포하기 전에 각 환경을 부트스트랩해야 합니다. 부트스트랩되지 않은 환경에 CDK 스택을 배포하려고 하면 다음과 같은 오류가 표시됩니다.

$ cdk deploy ✨ Synthesis time: 2.02s ❌ Deployment failed: Error: BootstrapExampleStack: SSM parameter /cdk-bootstrap/hnb659fds/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)

환경을 두 번 이상 부트스트랩해도 괜찮습니다. 환경이 이미 부트스트랩된 경우 필요한 경우 부트스트랩 스택이 업그레이드됩니다. 그렇지 않으면 아무 일도 일어나지 않을 것입니다.

부트스트랩 스택 업데이트

CDK 팀은 주기적으로 부트스트랩 템플릿을 새 버전으로 업데이트합니다. 이런 경우에는 부트스트랩 스택을 업데이트하는 것이 좋습니다. 부트스트랩 프로세스를 사용자 지정하지 않은 경우 원래 환경을 부트스트랩할 때 수행한 것과 동일한 단계에 따라 부트스트랩 스택을 업데이트할 수 있습니다. 자세한 정보는 부트스트랩 템플릿 버전 기록을 참조하세요.

부트스트래핑을 사용자 지정합니다.

기본 부트스트랩 템플릿이 요구 사항에 맞지 않는 경우 다음과 같은 방법으로 환경에 맞게 리소스 부트스트래핑을 사용자 지정할 수 있습니다.

  • 명령과 함께 명령줄 옵션 사용 - 이 방법은 cdk bootstrap 명령줄 옵션을 통해 지원되는 작고 구체적인 변경을 수행하는 데 가장 적합합니다.

  • 기본 부트스트랩 템플릿 수정 및 배포 - 이 방법은 복잡한 변경을 수행하거나 부트스트랩 중에 프로비저닝된 리소스 구성을 완벽하게 제어하려는 경우에 가장 적합합니다.

부트스트래핑 사용자 지정에 대한 자세한 내용은 을 참조하십시오. AWS CDK 부트스트래핑 사용자 지정

CDK Pipeline을 사용한 부트스트래핑

CDK Pipelines를 사용하여 다른 계정의 환경에 배포하는 경우 다음과 같은 메시지가 표시됩니다.

Policy contains a statement with one or more invalid principals

이 오류 메시지는 적절한 IAM 역할이 다른 환경에 존재하지 않음을 의미합니다. 가장 가능성이 높은 원인은 환경이 부트스트랩되지 않았기 때문입니다. 환경을 부트스트랩하고 다시 시도하십시오.

부트스트랩 스택이 삭제되지 않도록 보호

부트스트랩 스택이 삭제되면 CDK 배포를 지원하기 위해 해당 환경에 원래 프로비저닝된 AWS 리소스도 삭제됩니다. 그러면 파이프라인 작동이 중지됩니다. 이 경우 복구를 위한 일반적인 해결 방법은 없습니다.

환경을 부트스트랩한 후에는 해당 환경의 부트스트랩 스택을 삭제하고 다시 만들지 마십시오. 대신 명령을 다시 실행하여 부트스트랩 스택을 새 버전으로 업데이트해 보십시오. cdk bootstrap

부트스트랩 스택이 실수로 삭제되는 것을 방지하려면 종료 보호를 활성화하는 cdk bootstrap 명령과 함께 --termination-protection 옵션을 제공하는 것이 좋습니다. 새 부트스트랩 스택이나 기존 부트스트랩 스택에서 종료 보호를 활성화할 수 있습니다. 종료 보호를 활성화하는 방법에 대한 지침은 부트스트랩 스택에 대한 종료 보호 활성화를 참조하십시오.

부트스트랩 템플릿 버전 기록

부트스트랩 템플릿은 버전이 지정되며 시간이 지남에 따라 자체적으로 발전합니다. AWS CDK 자체 부트스트랩 템플릿을 제공하는 경우 표준 기본 템플릿을 사용하여 최신 상태로 유지하십시오. 템플릿이 모든 CDK 기능과 계속 호환되는지 확인하고 싶을 것입니다.

참고

이전 버전의 부트스트랩 템플릿은 기본적으로 각 부트스트랩 환경에 를 AWS KMS key 생성했습니다. KMS 키에 대한 요금이 부과되지 않도록 하려면 를 사용하여 이러한 환경을 다시 부트스트랩하십시오. --no-bootstrap-customer-key 현재 기본값은 KMS 키를 사용하지 않는 것이므로 이러한 요금이 부과되지 않도록 할 수 있습니다.

이 섹션에는 각 버전에서 변경된 사항 목록이 포함되어 있습니다.

템플릿 버전 AWS CDK 버전 변경
1 1.40.0 버킷, 키, 리포지토리, 역할이 포함된 템플릿의 초기 버전
2 1.45.0 자산 게시 역할을 별도의 파일 및 이미지 게시 역할로 분할합니다.
3 1.46.0 자산 FileAssetKeyArn 소비자에게 암호 해독 권한을 추가할 수 있도록 내보내기를 추가하십시오.
4 1.61.0 AWS KMS 권한은 이제 Amazon S3를 통해 암시되며 더 이상 필요하지 FileAsetKeyArn 않습니다. 스택 이름을 몰라도 부트스트랩 스택 버전을 확인할 수 있도록 CdkBootstrapVersion SSM 파라미터를 추가합니다.
5 1.87.0 배포 역할은 SSM 파라미터를 읽을 수 있습니다.
6 1.108.0 배포 역할과 별도로 조회 역할을 추가합니다.
6 1.109.0 배포, 파일 게시, 이미지 게시 역할에 aws-cdk:bootstrap-role 태그를 첨부합니다.
7 1.110.0 배포 역할은 더 이상 대상 계정의 버킷을 직접 읽을 수 없습니다. (하지만 이 역할은 사실상 관리자이므로 언제든지 해당 AWS CloudFormation 권한을 사용하여 버킷을 읽을 수 있게 만들 수 있습니다.)
8 1.114.0 조회 역할에는 대상 환경에 대한 전체 읽기 전용 권한이 있으며 태그도 있습니다aws-cdk:bootstrap-role.
9 2.1.0 Amazon S3 자산 업로드가 일반적으로 참조되는 암호화 SCP에 의해 거부되지 않도록 수정합니다.
10 2.4.0 Amazon ScanOnPush ECR은 이제 기본적으로 활성화되어 있습니다.
11 2.18.0 Lambda가 Amazon ECR 리포지토리에서 데이터를 가져와서 재부트스트래핑을 계속할 수 있도록 하는 정책을 추가합니다.
12. 2.20.0 실험에 대한 지원을 추가합니다cdk import.
13 2.25.0 부트스트랩으로 생성한 Amazon ECR 리포지토리의 컨테이너 이미지를 변경할 수 없게 만듭니다.
14 2.34.0 이미지 스캔을 지원하지 않는 지역의 부트스트래핑을 허용하기 위해 리포지토리 수준에서 Amazon ECR 이미지 스캔을 기본적으로 끕니다.
15 2.60.0 KMS 키에는 태그를 지정할 수 없습니다.
16 2.69.0 KMS.2를 찾는 Security Hub 주소를 지정합니다.
17 2.72.0 ECR을 찾는 Security Hub의 주소를 지정합니다.3.
18 2.80.0 버전 16에서 변경한 내용은 모든 파티션에서 작동하지 않으므로 되돌리는 것은 권장되지 않습니다.
19 2.106.1 템플릿에서 AccessControl 속성이 제거된 버전 18의 변경 사항을 되돌렸습니다. (#27964)
20 2.119.0 IAM AWS CloudFormation 배포 역할에 ssm:GetParameters 작업을 추가합니다. 자세한 내용은 #28336 을 참조하십시오.

레거시 부트스트랩 템플릿에서 최신 부트스트랩 템플릿으로 업그레이드

AWS CDK v1은 레거시와 모던의 두 가지 부트스트래핑 템플릿을 지원했습니다. CDK v2는 최신 템플릿만 지원합니다. 참고로 이 두 템플릿 간의 주요 차이점은 다음과 같습니다.

기능 레거시 (v1만 해당) 모던 (v1 및 v2)
크로스 어카운트 배포 허용되지 않음 허용됨
AWS CloudFormation 권한 현재 사용자의 권한 ( AWS 프로필, 환경 변수 등에 따라 결정됨) 을 사용하여 배포합니다. 부트스트랩 스택이 프로비저닝될 때 지정된 권한을 사용하여 배포합니다 (예: 사용). --trust
버전 관리 부트스트랩 스택은 한 가지 버전만 사용할 수 있습니다. 부트스트랩 스택은 버전이 지정되어 있으므로 향후 버전에서 새 리소스를 추가할 수 있으며 AWS CDK 앱에는 최소 버전이 필요할 수 있습니다.
리소스 * Amazon S3 버킷 Amazon S3 버킷
AWS KMS key
IAM 역할
아마존 ECR 리포지토리
버전 관리를 위한 SSM 파라미터
리소스 이름 지정 자동 생성됨 DETERMINISTIC
버킷 암호화 기본 키 AWS 기본적으로 관리되는 키입니다. 고객 관리 키를 사용하도록 사용자 지정할 수 있습니다.

* 필요에 따라 부트스트랩 템플릿에 리소스를 추가할 예정입니다.

기존 템플릿을 사용하여 부트스트랩한 환경을 다시 부트스트랩하여 CDK v2용 최신 템플릿을 사용하도록 업그레이드해야 합니다. 기존 버킷을 삭제하기 전에 환경의 모든 AWS CDK 애플리케이션을 한 번 이상 재배포하십시오.

주소 Security Hub 조사 결과

를 사용하는 AWS Security Hub경우 AWS CDK 부트스트래핑 프로세스에서 생성된 일부 리소스에 대한 결과가 보고될 수 있습니다. Security Hub 검색 결과는 정확성과 안전성을 다시 확인해야 하는 리소스 구성을 찾는 데 도움이 됩니다. 보안 팀과 이러한 특정 리소스 구성을 검토한 결과 AWS 보안 문제를 구성하지 않는다고 확신합니다.

[KMS.2] IAM 보안 주체에는 모든 KMS 키에 대한 암호 해독 작업을 허용하는 IAM 인라인 정책이 없어야 합니다.

배포 역할 (DeploymentActionRole) 은 암호화된 데이터를 읽을 수 있는 권한을 부여하며, 이는 CDK Pipeline을 사용한 계정 간 배포에 필요합니다. 이 역할의 정책이 모든 데이터에 대한 권한을 부여하지는 않습니다. Amazon S3에서 암호화된 데이터를 읽을 수 있는 권한만 부여하며 AWS KMS, 해당 리소스가 버킷 또는 키 정책을 통해 데이터를 허용하는 경우에만 부여합니다.

다음은 부트스트랩 템플릿의 배포 역할에 있는 이 두 명령문을 요약한 것입니다.

DeploymentActionRole: Type: AWS::IAM::Role Properties: ... Policies: - PolicyDocument: Statement: ... - Sid: PipelineCrossAccountArtifactsBucket Effect: Allow Action: - s3:GetObject* - s3:GetBucket* - s3:List* - s3:Abort* - s3:DeleteObject* - s3:PutObject* Resource: "*" Condition: StringNotEquals: s3:ResourceAccount: Ref: AWS::AccountId - Sid: PipelineCrossAccountArtifactsKey Effect: Allow Action: - kms:Decrypt - kms:DescribeKey - kms:Encrypt - kms:ReEncrypt* - kms:GenerateDataKey* Resource: "*" Condition: StringEquals: kms:ViaService: Fn::Sub: s3.${AWS::Region}.amazonaws.com ...

Security Hub에서 플래그를 지정하는 이유는 무엇인가요?

정책에는 Resource: * Condition 조항과 결합되어 있습니다. Security Hub는 * 와일드카드에 플래그를 지정합니다. 이 와일드카드를 사용하는 이유는 계정이 부트스트랩될 때 아티팩트 버킷에 대해 CodePipeline CDK Pipelines에서 생성한 AWS KMS 키가 아직 존재하지 않기 때문에 ARN이 부트스트랩 템플릿에서 참조할 수 없기 때문입니다. 또한 Security Hub는 이 플래그를 표시할 때 이 Condition 조항을 고려하지 않습니다. 이는 동일한 AWS 계정 키로 이루어진 Resource: * 요청으로 Condition 제한됩니다. AWS KMS 이러한 요청은 AWS KMS 키와 AWS 리전 동일하게 Amazon S3에서 들어와야 합니다.

이 결과를 수정해야 합니까?

부트스트랩 템플릿의 AWS KMS 키를 지나치게 허용하도록 수정하지 않는 한 배포 역할은 필요 이상의 액세스를 허용하지 않습니다. 따라서 이 결과를 수정할 필요는 없습니다.

이 결과를 수정하려면 어떻게 해야 하나요?

이 발견을 수정하는 방법은 계정 간 배포에 CDK Pipelines를 사용할지 여부에 따라 달라집니다.

Security Hub 검색 문제 해결 및 계정 간 배포용 CDK Pipelines 사용
  1. 아직 배포하지 않은 경우 명령을 사용하여 CDK 부트스트랩 스택을 배포하십시오. cdk bootstrap

  2. 아직 CDK를 생성하여 배포하지 않았다면, CDK를 생성하여 배포하십시오. Pipeline 지침은 CDK Pipeline을 사용한 지속적 통합 및 전달 (CI/CD)을 참조하세요.

  3. CodePipeline 아티팩트 AWS KMS 버킷의 키 ARN을 가져옵니다. 이 리소스는 파이프라인 생성 중에 생성됩니다.

  4. CDK 부트스트랩 템플릿의 사본을 구해서 수정하세요. 다음은 를 사용한 예제입니다. AWS CDK CLI

    $ cdk bootstrap --show-template > bootstrap-template.yaml
  5. PipelineCrossAccountArtifactsKey명령문을 ARN Resource: * 값으로 대체하여 템플릿을 수정합니다.

  6. 템플릿을 배포하여 부트스트랩 스택을 업데이트하십시오. 다음은 CLI CDK를 사용한 예제입니다.

    $ cdk bootstrap aws://account-id/region --template bootstrap-template.yaml
Security Hub에서 계정 간 배포에 CDK Pipeline을 사용하고 있지 않은지 확인하는 문제를 해결하려면
  1. CDK 부트스트랩 템플릿 사본을 구해서 수정하세요. 다음은 CDK를 사용한 예제입니다. CLI

    $ cdk bootstrap --show-template > bootstrap-template.yaml
  2. 템플릿에서 PipelineCrossAccountArtifactsBucketPipelineCrossAccountArtifactsKey 문을 삭제합니다.

  3. 템플릿을 배포하여 부트스트랩 스택을 업데이트하십시오. 다음은 CLI CDK를 사용한 예제입니다.

    $ cdk bootstrap aws://account-id/region --template bootstrap-template.yaml

고려 사항

부트스트래핑은 사용자 환경의 리소스를 프로비저닝하므로 해당 리소스를 와 함께 사용할 경우 AWS 요금이 부과될 수 있습니다. AWS CDK