이는 AWS CDK v2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.
AWS CDK와 함께 사용할 환경을 부트스트래팅
AWS 환경을 부트스트랩하여 AWS Cloud Development Kit (AWS CDK) 스택 배포를 준비합니다.
-
환경 소개는 AWS CDK의 환경 섹션을 참조하세요.
-
부트스트래핑 소개는 AWS CDK 부트스트래핑 섹션을 참조하세요.
환경을 부트스트래핑하는 방법
AWS CDK Command Line Interface(AWS CDK CLI) 또는 선호하는 AWS CloudFormation 배포 도구를 사용하여 환경을 부트스트래핑할 수 있습니다.
CDK CLI 사용
CDK CLI cdk bootstrap
명령을 사용하여 환경을 부트스트래핑할 수 있습니다. 부트스트래핑을 크게 수정할 필요가 없는 경우 권장되는 방법입니다.
- 작업 디렉터리에서 부트스트래핑
-
작업 디렉터리에서 부트스트래핑하려면 부트스트랩할 환경을 명령줄 인수로 제공합니다. 다음은 그 예제입니다.
$
cdk bootstrap
aws://123456789012/us-east-1
작은 정보
AWS 계정 번호가 없는 경우 AWS Management Console에서 얻을 수 있습니다. 다음 AWS CLI 명령을 사용하여 계정 번호를 포함한 기본 계정 정보를 표시할 수도 있습니다.
$
aws sts get-caller-identity
AWS
config
및credentials
파일에 명명된 프로파일이 있는 경우--profile
옵션을 사용하여 특정 프로파일에 대한 계정 정보를 검색합니다. 다음은 그 예제입니다.$
aws sts get-caller-identity --profile
prod
기본 리전을 표시하려면
aws configure get
명령을 사용합니다.$
aws configure get region
$
aws configure get region --profile
prod
인수를 제공할 때
aws://
접두사는 선택 사항입니다. 다음은 유효합니다.$
cdk bootstrap
123456789012/us-east-1
여러 환경을 동시에 부트스트래핑하려면 여러 인수를 제공합니다.
$
cdk bootstrap
aws://123456789012/us-east-1 aws://123456789012/us-east-2
- CDK 프로젝트의 부모 디렉터리에서 부트스트래핑
-
cdk.json
파일이 포함된 CDK 프로젝트의 부모 디렉터리에서cdk bootstrap
을 실행할 수 있습니다. 환경을 인수로 제공하지 않으면 CDK CLI는config
및credentials
파일 또는 CDK 스택에 대해 지정된 환경 정보와 같은 기본 소스에서 환경 정보를 가져옵니다.CDK 프로젝트의 부모 디렉터리에서 부트스트래핑하면 명령줄 인수에서 제공된 환경이 다른 소스보다 우선합니다.
config
및credentials
파일에 지정된 환경을 부트스트래핑하려면--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
옵션을 사용하여 부트스트랩 템플릿을 검색하고 로컬 시스템에 저장하는 예입니다.
CDK CLI를 사용하여 이 템플릿을 배포하려면 다음을 실행합니다.
$
cdk bootstrap --template
bootstrap-template.yaml
다음은 AWS CLI를 사용하여 템플릿을 배포하는 예입니다.
CloudFormation StackSets를 사용하여 여러 환경을 부트스트래핑하는 방법에 대한 자세한 내용은 AWS Cloud Operations & Migrations Blog의 Bootstrapping multiple AWS 계정 for AWS CDK using CloudFormation StackSets
환경을 부트스트래핑해야 하는 경우
AWS 환경에 배포하기 전에 각 환경을 부트스트래핑해야 합니다. 사용하려는 각 환경을 사전에 부트스트래핑하는 것이 좋습니다. CDK 앱을 환경에 실제로 배포하기 전에 이 작업을 수행할 수 있습니다. 환경을 사전에 부트스트래핑하면 Amazon S3 버킷 이름 충돌 또는 부트스트래핑되지 않은 환경에 CDK 앱 배포와 같은 잠재적인 향후 문제를 방지할 수 있습니다.
환경을 두 번 이상 부트스트래핑해도 괜찮습니다. 환경이 이미 부트스트래핑된 경우 필요에 따라 부트스트랩 스택이 업그레이드됩니다. 그렇지 않으면 아무 일도 일어나지 않습니다.
부트스트래핑되지 않은 환경에 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 팀은 부트스트랩 템플릿을 새 버전으로 업데이트합니다. 이 경우 부트스트랩 스택을 업데이트하는 것이 좋습니다. 부트스트랩 프로세스를 사용자 지정하지 않은 경우 원래 환경을 부트스트랩할 때와 동일한 단계를 수행하여 부트스트랩 스택을 업데이트할 수 있습니다. 자세한 내용은 부트스트랩 템플릿 버전 기록 단원을 참조하십시오.
부트스트래핑 중 생성된 기본 리소스
부트스트래핑 중 생성된 IAM 역할
기본적으로 부트스트래핑은 환경에서 다음 AWS Identity and Access Management(IAM) 역할을 프로비저닝합니다.
-
CloudFormationExecutionRole
-
DeploymentActionRole
-
FilePublishingRole
-
ImagePublishingRole
-
LookupRole
CloudFormationExecutionRole
-
이 IAM 역할은 CloudFormation에 사용자를 대신하여 스택 배포를 수행할 수 있는 권한을 부여하는 CloudFormation 서비스 역할입니다. 이 역할은 CloudFormation에 스택 배포를 포함하여 계정에서 AWS API 직접 호출을 수행할 수 있는 권한을 부여합니다.
서비스 역할을 사용하여 서비스 역할에 대해 프로비저닝된 권한에 따라 CloudFormation 리소스에서 수행할 수 있는 작업이 결정됩니다. 이 서비스 역할이 없으면 CDK CLI와 함께 제공하는 보안 자격 증명에 따라 CloudFormation에서 수행할 수 있는 작업이 결정됩니다.
DeploymentActionRole
-
이 IAM 역할은 환경에 배포를 수행할 수 있는 권한을 부여합니다. 배포하는 동안 CDK CLI가 이 역할을 수임합니다.
배포에 역할을 사용하면 다른 계정의 AWS ID에서 해당 역할을 수임할 수 있으므로 교차 계정 배포를 수행할 수 있습니다.
FilePublishingRole
-
이 IAM 역할은 부트스트래핑된 Amazon Simple Storage Service(Amazon S3) 버킷에 대해 자산 업로드 및 삭제를 포함한 작업을 수행할 수 있는 권한을 부여합니다. 배포하는 동안 CDK CLI가 이 역할을 수임합니다.
ImagePublishingRole
-
이 IAM 역할은 부트스트래핑된 Amazon Elastic Container Registry(Amazon ECR) 리포지토리에 대해 작업을 수행할 수 있는 권한을 부여합니다. 배포하는 동안 CDK CLI가 이 역할을 수임합니다.
LookupRole
-
이 IAM 역할은 AWS 환경의 컨텍스트 값을 조회할 수 있는
readOnly
권한을 부여합니다. 템플릿 합성 및 배포와 같은 태스크를 수행할 때 CDK CLI가 이 역할을 수임합니다.
부트스트래핑 중 생성된 리소스 ID
기본 부트스트랩 템플릿을 배포하면 부트스트랩 리소스의 물리적 ID가 cdk-
구문을 사용하여 생성됩니다.qualifier
-description
-account-ID
-Region
-
한정자 -
hnb659fds
의 9자리 고유 문자열 값입니다. 실제 값은 의미가 없습니다. -
설명 - 리소스에 대한 간단한 설명입니다. 예:
container-assets
. -
계정 ID - 환경의 AWS 계정 ID입니다.
-
리전 - 환경의 AWS 리전입니다.
cdk-hnb659fds-assets-012345678910-us-west-1
은 부트스트래핑 중 생성된 Amazon S3 스테이징 버킷의 물리적 ID 예입니다.
환경을 부팅할 때 사용할 권한
AWS 환경을 부트스트래핑할 때 부트스트래핑을 수행하는 IAM ID에는 최소한 다음 권한이 있어야 합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:*", "ecr:*", "ssm:*", "s3:*", "iam:*" ], "Resource": "*" } ] }
시간이 지남에 따라 생성된 리소스와 필요한 권한을 포함한 부트스트랩 스택이 변경될 수 있습니다. 향후 변경 시 환경을 부트스트래핑하는 데 필요한 권한을 수정해야 할 수 있습니다.
부트스트래핑 사용자 지정
기본 부트스트랩 템플릿이 요구 사항에 맞지 않는 경우 다음과 같은 방법으로 환경에 리소스의 부트스트래핑을 사용자 지정할 수 있습니다.
-
cdk bootstrap
명령과 함께 명령줄 옵션 사용 - 이 방법은 명령줄 옵션을 통해 지원되는 작고 구체적인 변경을 수행하는 데 가장 적합합니다. -
기본 부트스트랩 템플릿 수정 및 배포 - 이 방법은 복잡한 변경을 수행하거나 부트스트래핑 중 프로비저닝된 리소스의 구성을 완전히 제어하려는 경우 가장 적합합니다.
부트스트래핑 사용자 지정에 대한 자세한 내용은 AWS CDK 부트스트래핑 사용자 지정 섹션을 참조하세요.
CDK Pipelines로 부트스트래핑
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 | 일반적으로 참조되는 암호화 SCP에 의해 Amazon S3 자산 업로드가 거부되지 않도록 수정했습니다. |
10 | 2.4.0 | 이제 Amazon ECR ScanOnPush가 기본적으로 활성화됩니다. |
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 | Security Hub 조사 결과 KMS.2를 확인합니다. |
17 | 2.72.0 | Security Hub 조사 결과 ECR.3을 확인합니다. |
18 | 2.80.0 | 버전 16의 변경 사항은 모든 파티션에서 작동하지 않으며 권장되지 않으므로 되돌렸습니다. |
19 | 2.106.1 | 템플릿에서 AccessControl 속성이 제거된 버전 18의 변경 사항을 되돌렸습니다. (#27964 |
20 | 2.119.0 | AWS CloudFormation 배포 IAM 역할에 ssm:GetParameters 작업을 추가합니다. 자세한 내용은 #28336 |
21 | 2.149.0 | 파일 게시 역할에 조건을 추가합니다. |
22 | 2.160.0 | 부트스트랩 IAM 역할의 신뢰 정책에 sts:TagSession 권한을 추가합니다. |
23 | 2.161.0 | 배포 IAM 역할의 신뢰 정책에 cloudformation:RollbackStack 및 cloudformation:ContinueUpdateRollback 권한을 추가합니다. 이는 cdk rollback 명령에 대한 권한을 제공합니다. |
레거시에서 최신 부트스트랩 템플릿으로 업그레이드
AWS CDK v1은 레거시와 최신의 두 부트스트래핑 템플릿을 지원했습니다. CDK v2는 최신 템플릿만 지원합니다. 참고로 이 두 템플릿 간의 주요 차이점은 다음과 같습니다.
기능 | 레거시(v1만 해당) | 최신(v1 및 v2) |
---|---|---|
교차 계정 배포 | 허용되지 않음 | 허용됨 |
AWS CloudFormation 권한 | 현재 사용자의 권한(AWS 프로파일, 환경 변수 등으로 결정)을 사용하여 배포합니다. | 부트스트랩 스택이 프로비저닝될 때 지정된 권한을 사용하여 배포합니다(예: --trust 사용). |
버전 관리 | 부트스트랩 스택 버전은 하나만 사용할 수 있습니다. | 부트스트랩 스택은 버전이 관리됩니다. 향후 버전에서 새로운 리소스가 추가될 수 있으며, AWS CDK 앱에는 최소 버전이 필요할 수 있습니다. |
리소스* | Amazon S3 버킷 | Amazon S3 버킷 |
AWS KMS key | ||
IAM 역할 | ||
Amazon ECR 리포지토리 | ||
버전 관리를 위한 SSM 파라미터 | ||
리소스 이름 지정 | 자동으로 생성됨 | DETERMINISTIC |
버킷 암호화 | 기본 키 | 기본적으로 AWS 관리형 키입니다. 고객 관리형 키를 사용하도록 사용자 지정할 수 있습니다. |
* 필요에 따라 부트스트랩 템플릿에 리소스를 추가할 예정입니다.
레거시 템플릿을 사용하여 부트스트래핑된 환경은 재부트스트래핑을 통해 CDK v2에 대한 최신 템플릿을 사용하도록 업그레이드해야 합니다. 레거시 버킷을 삭제하기 전에 환경의 모든 AWS CDK 애플리케이션을 한 번 이상 다시 배포합니다.
Security Hub 조사 결과 확인
AWS Security Hub를 사용하는 경우 AWS CDK 부트스트래핑 프로세스에서 생성된 일부 리소스에 대해 보고된 조사 결과가 표시될 수 있습니다. Security Hub 조사 결과는 정확성과 안전성을 다시 확인해야 하는 리소스 구성을 찾는 데 도움이 됩니다. AWS Security와 함께 이러한 특정 리소스 구성을 검토했으며 보안 문제를 일으키지 않는다고 확신합니다.
[KMS.2] IAM 보안 주체에는 모든 KMS 키에 대한 암호 해독 작업을 허용하는 IAM 인라인 정책이 없어야 합니다.
배포 역할(DeploymentActionRole
)은 암호화된 데이터를 읽을 수 있는 권한을 부여합니다. 이는 CDK Pipelines를 사용한 교차 계정 배포에 필요합니다. 이 역할의 정책은 모든 데이터에 대한 권한을 부여하지 않습니다. 해당 리소스가 버킷 또는 키 정책을 통해 허용하는 경우에만 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
절을 고려하지 않습니다. 이 Condition
은 Resource: *
를 AWS KMS 키의 동일한 AWS 계정에서 이루어진 요청으로 제한합니다. 이러한 요청은 AWS KMS와 동일한 AWS 리전에 있는 Amazon S3에서 와야 합니다.
이 조사 결과를 수정해야 하나요?
부트스트랩 템플릿의 AWS KMS 키를 지나치게 허용적으로 수정하지 않은 한 배포 역할은 필요 이상의 액세스를 허용하지 않습니다. 따라서 이 조사 결과를 수정할 필요는 없습니다.
이 조사 결과를 수정하려면 어떻게 해야 하나요?
이 조사 결과를 수정하는 방법은 교차 계정 배포에 CDK Pipelines를 사용할지 여부에 따라 달라집니다.
Security Hub 조사 결과를 수정하고 교차 계정 배포에 CDK Pipelines를 사용하려면 다음을 수행하세요.
-
이렇게 하지 않은 경우
cdk bootstrap
명령을 사용하여 CDK 부트스트랩 스택을 배포합니다. -
이렇게 하지 않은 경우 CDK Pipeline를 생성하고 배포합니다. 지침은 CDK Pipelines를 사용한 지속적 통합 및 전송(CI/CD) 단원을 참조하십시오.
-
CodePipeline 아티팩트 버킷의 AWS KMS 키 ARN을 가져옵니다. 이 리소스는 파이프라인 생성 중 생성됩니다.
-
CDK 부트스트랩 템플릿의 사본을 가져와 수정합니다. 다음은 AWS CDK CLI를 사용한 예입니다.
$
cdk bootstrap --show-template > bootstrap-template.yaml
-
PipelineCrossAccountArtifactsKey
문의Resource: *
를 ARN 값으로 바꿔서 템플릿을 수정합니다. -
템플릿을 배포하여 부트스트랩 스택을 업데이트합니다. 다음은 CDK CLI를 사용한 예입니다.
$
cdk bootstrap aws://
account-id
/region
--template bootstrap-template.yaml
교차 계정 배포에 CDK Pipelines를 사용하지 않는 경우 Security Hub 조사 결과를 수정하려면 다음을 수행하세요.
-
CDK 부트스트랩 템플릿의 사본을 가져와 수정합니다. 다음은 CDK CLI를 사용한 예입니다.
$
cdk bootstrap --show-template > bootstrap-template.yaml
-
템플릿에서
PipelineCrossAccountArtifactsBucket
및PipelineCrossAccountArtifactsKey
문을 삭제합니다. -
템플릿을 배포하여 부트스트랩 스택을 업데이트합니다. 다음은 CDK CLI를 사용한 예입니다.
$
cdk bootstrap aws://
account-id
/region
--template bootstrap-template.yaml
고려 사항
부트스트래핑은 환경에서 리소스를 프로비저닝하므로 해당 리소스를 AWS CDK와 함께 사용할 때 AWS 요금이 발생할 수 있습니다.