이는 AWS CDK v2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.
AWS CDK 보안 모범 사례
AWS Cloud Development Kit (AWS CDK)는 개발자가 AWS 서비스를 구성하고 AWS에서 인프라를 프로비저닝하는 데 사용할 수 있는 강력한 도구입니다. 이러한 제어와 기능을 제공하는 도구를 사용하는 조직은 해당 도구가 안전하고 보안이 유지되는 방식으로 사용되도록 정책과 관행을 수립해야 합니다. 예를 들어, 조직은 계정에 구성된 규정 준수 또는 비용 관리 조치를 조작하지 못하도록 특정 서비스에 대한 개발자 액세스를 제한할 수 있습니다.
보안과 생산성 사이에 종종 갈등이 있을 수 있으며, 각 조직은 스스로 적절한 균형을 잡아야 합니다. 이 주제에서는 자체 보안 정책을 생성하고 구현할 때 고려할 수 있는 AWS CDK에 대한 보안 모범 사례를 제공합니다. 다음 모범 사례는 일반적인 지침이며 완벽한 보안 솔루션을 나타내지는 않습니다. 이러한 모범 사례는 환경에 적절하지 않거나 충분하지 않을 수 있으므로 참고용으로만 사용해 주십시오.
IAM 보안 모범 사례 따르기
AWS Identity and Access Management(IAM)는 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다. 조직, 개인 및 AWS CDK는 IAM을 사용하여 AWS 리소스에서 수행할 수 있는 작업을 결정하는 권한을 관리합니다. IAM을 사용할 때는 IAM 보안 모범 사례를 따르세요. 자세한 내용은 IAM 사용 설명서의 AWS Identity and Access Management의 보안 모범 사례 및 사용 사례를 참조하세요.
AWS CDK에 대한 권한 관리
조직 전체에서 AWS CDK를 사용하여 인프라를 개발하고 관리하는 경우 권한 관리가 중요한 다음 시나리오를 고려할 수 있습니다.
-
AWS CDK 배포에 대한 권한 - 이러한 권한은 AWS 리소스를 변경할 수 있는 사용자와 변경할 수 있는 항목을 결정합니다.
-
리소스 간 권한 - AWS CDK를 사용하여 생성하고 관리하는 AWS 리소스 간의 상호 작용을 허용하는 권한입니다.
AWS CDK 배포에 대한 권한 관리
개발자는 AWS CDK를 사용하여 개발 시스템에서 로컬로 인프라를 정의합니다. 이 인프라는 일반적으로 AWS CDK Command Line Interface(AWS CDK CLI)를 사용하는 작업이 포함된 배포를 통해 AWS 환경에서 구현됩니다. 배포를 통해 개발자가 환경에서 변경할 수 있는 항목을 제어할 수 있습니다. 예를 들어, 개발자가 수정하지 못하게 하려는 Amazon Virtual Private Cloud(Amazon VPC) 리소스가 있을 수 있습니다.
기본적으로 CDK CLI는 부트스트래핑 중 생성된 액터의 보안 자격 증명과 IAM 역할의 조합을 사용하여 배포에 대한 권한을 받습니다. 먼저 액터의 보안 자격 증명을 인증에 사용한 다음, IAM 역할을 수임하여 AWS CloudFormation 서비스로 리소스를 생성하는 등 배포 중 다양한 작업을 수행합니다. 사용되는 IAM 역할을 포함하여 CDK 배포의 작동 방식에 대한 자세한 내용은 AWS CDK 애플리케이션 배포 섹션을 참조하세요.
배포를 수행할 수 있는 사용자와 배포 중 수행할 수 있는 작업을 제한하려면 다음을 고려하세요.
-
액터의 보안 자격 증명은 AWS의 인증을 얻는 데 사용되는 첫 번째 자격 증명 세트입니다. 여기서 배포 워크플로 중 수임되는 IAM 역할에 배포 중 작업을 수행하는 데 사용되는 권한이 부여됩니다. 이러한 역할을 수임할 수 있는 사용자를 제한하여 배포를 수행할 수 있는 사용자를 제한할 수 있습니다. 또한 이러한 IAM 역할을 자체 역할로 교체하여 배포 중 수행할 수 있는 작업을 제한할 수도 있습니다.
-
배포를 수행하기 위한 권한은
DeploymentActionRole
에 부여됩니다. 이 역할을 수임할 수 있는 사용자를 제한하여 배포를 수행할 수 있는 사용자에 대한 권한을 제어할 수 있습니다. 배포에 역할을 사용하면 다른 계정의 AWS ID로 역할을 수임할 수 있으므로 교차 계정 배포가 가능합니다. 기본적으로 적절한AssumeRole
정책 문이 있는 동일한 AWS 계정의 모든 ID가 이 역할을 수임할 수 있습니다. -
AWS CloudFormation을 통해 리소스를 생성하고 수정하기 위한 권한은
CloudFormationExecutionRole
에 부여됩니다. 이 역할에는 부트스트랩 리소스에서 읽을 수 있는 권한도 필요합니다.CloudFormationExecutionRole
에 대한 관리형 정책을 사용하고 필요에 따라 권한 경계를 구성하여 CDK 배포의 권한을 제어합니다. 기본적으로 이 역할에는 권한 경계가 없는AdministratorAccess
권한이 있습니다. -
부트스트랩 리소스와 상호 작용하기 위한 권한은
FilePublishingRole
과ImagePublishingRole
에 부여됩니다. 배포를 수행하는 액터는 이러한 역할을 수임할 수 있는 권한이 있어야 합니다. 기본적으로 적절한AssumeRole
정책 문이 있는 동일한 AWS 계정의 모든 ID가 이 역할을 수임할 수 있습니다. -
조회 수행을 위해 부트스트랩 리소스에 액세스하기 위한 권한은
LookupRole
에 부여됩니다. 배포를 수행하는 액터는 이 역할을 수임할 수 있는 권한이 있어야 합니다. 기본적으로 이 역할에는 부트스트랩 리소스에 대한readOnly
액세스 권한이 있습니다. 기본적으로 적절한AssumeRole
정책 문이 있는 동일한 AWS 계정의 모든 ID가 이 역할을 수임할 수 있습니다.
이러한 역할을 수행할 수 있는 권한으로 AWS 계정의 IAM ID를 구성하려면 다음 정책 문이 포함된 정책을 ID에 추가하세요.
{ "Version": "2012-10-17", "Statement": [{ "Sid": "AssumeCDKRoles", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "*", "Condition": { "StringEquals": { "iam:ResourceTag/aws-cdk:bootstrap-role": [ "image-publishing", "file-publishing", "deploy", "lookup" ] } } }] }
배포 중 수임하는 역할에 대한 권한 수정
배포 중 수임하는 역할에 대한 권한을 수정하여 배포 중 수행할 수 있는 작업을 관리할 수 있습니다. 권한을 수정하려면 자체 IAM 역할을 생성하고 환경을 부트스트래핑할 때 이를 지정합니다. 부트스트래핑을 사용자 지정할 때 합성을 사용자 지정해야 합니다. 일반 지침은 AWS CDK 부트스트래핑 사용자 지정 섹션을 참조하세요.
배포 중 사용되는 보안 자격 증명 및 역할 수정
배포 중 사용되는 역할 및 부트스트랩 리소스는 사용하는 CDK 스택 신디사이저에 의해 결정됩니다. 이 동작을 수정하기 위해 합성을 사용자 지정할 수 있습니다. 자세한 내용은 CDK 스택 합성 구성 및 수행 단원을 참조하십시오.
최소 권한 액세스 부여 시 고려 사항
최소 권한 액세스 부여는 보안 전략을 개발할 때 고려하면 좋은 보안 모범 사례입니다. 자세한 내용은 AWS Well-Architected Framework 가이드의 SEC03-BP02 최소 권한 액세스 부여를 참조하세요.
최소 권한 액세스 부여에는 지정된 태스크를 수행하는 데 필요한 최소한의 액세스 권한으로 IAM 정책을 제한하는 것이 포함되는 경우가 많습니다. 이 접근 방식을 사용하여 CDK에서 세분화된 권한을 통해 최소 권한 액세스를 부여하려고 하면 CDK 배포에 영향이 있을 수 있으며 원하는 것보다 더 넓은 범위의 권한을 생성해야 할 수 있습니다. 다음은 이 접근 방식을 사용할 때 고려해야 할 몇 가지 사항입니다.
-
개발자가 AWS CDK를 사용하여 CloudFormation을 통해 인프라를 프로비저닝할 수 있도록 하는 전체 권한 목록을 결정하는 것은 어렵고 복잡합니다.
-
세분화를 원하는 경우 권한이 너무 길어져 IAM 정책 문서의 최대 길이에 맞지 않을 수 있습니다.
-
불완전한 권한 세트를 제공하면 개발자 생산성과 배포에 심각한 영향을 미칠 수 있습니다.
CDK를 사용하면 CloudFormation 사용하여 배포가 수행됩니다. CloudFormation은 제공된 권한을 사용하여 순서대로 일련의 AWS API 직접 호출을 시작합니다. 특정 시점에 필요한 권한은 다음과 같은 여러 요인에 따라 달라집니다.
-
수정 중인 AWS 서비스. 특히 사용 중이거나 변경 중인 리소스와 속성입니다.
-
CloudFormation 스택의 현재 상태
-
Create
권한 외에Delete
권한을 필요로 하는 롤백이 필요한 경우와 배포 중 발생할 수 있는 문제
제공된 권한이 불완전하면 수동 개입이 필요합니다. 다음은 몇 가지 예입니다.
-
롤포워드 중 불완전한 권한이 발견되면 배포를 일시 중지하고 계속하기 전에 시간을 내어 새 권한을 논의하고 프로비저닝해야 합니다.
-
배포가 롤백되고 롤백을 적용할 수 있는 권한이 없는 경우 CloudFormation 스택이 복구하는 데 많은 수동 작업이 필요한 상태가 될 수 있습니다.
이 접근 방식은 상황을 복잡하게 만들고 개발자 생산성을 심각하게 제한할 수 있으므로 권장되지 않습니다. 대신 가드레일을 이행하고 우회를 방지하는 것이 좋습니다.
가드레일 이행 및 우회 방지
AWS Control Tower, AWS Config, AWS CloudTrail, AWS Security Hub 등의 서비스를 사용하여 가드레일, 규정 준수 규칙, 감사 및 모니터링을 이행할 수 있습니다. 이 접근 방식을 통해 개발자에게 기존 검증 메커니즘을 변조하는 것을 제외한 모든 작업을 수행할 수 있는 권한을 부여합니다. 개발자는 정책을 준수하는 한 자유롭게 변경을 신속히 이행할 수 있습니다. 이는 AWS CDK를 사용할 때 권장되는 접근 방식입니다. 가드레일에 대한 자세한 내용은 관리 및 거버넌스 클라우드 환경 가이드의 Controls를 참조하세요.
가드레일을 이행하는 방법으로 권한 경계 또는 서비스 제어 정책(SCP)을 사용하는 것도 좋습니다. AWS CDK로 권한 경계를 실행하는 방법에 대한 자세한 내용은 AWS CDK에 대한 권한 경계 생성 및 적용 섹션을 참조하세요.
규정 준수 제어 메커니즘을 사용하는 경우 부트스트래핑 단계에서 설정합니다. CloudFormationExecutionRole
또는 개발자가 액세스할 수 있는 ID에 설정한 메커니즘의 우회를 방지하는 정책 또는 권한 경계가 연결되어 있는지 확인하세요. 적절한 정책은 사용하는 특정 메커니즘에 따라 달라집니다.
AWS CDK에서 프로비저닝한 리소스 간의 권한 관리
AWS CDK에서 프로비저닝한 리소스 간의 권한을 관리하는 방법은 CDK가 역할과 정책을 생성하도록 허용할지 여부에 따라 달라집니다.
AWS Construct 라이브러리의 L2 구문을 사용하여 인프라를 정의할 때 제공된 grant
메서드를 사용하여 리소스 간에 권한을 프로비저닝할 수 있습니다. grant
메서드를 사용하면 리소스 간에 원하는 액세스 유형을 지정하고 AWS CDK가 의도를 달성하기 위해 최소 권한 IAM 역할을 프로비저닝합니다. 이 접근 방식은 대부분의 조직의 보안 요구 사항을 충족하는 동시에 개발자에게 효율적입니다. 자세한 내용은 AWS CDK를 사용하여 L2 구문에 대한 권한 정의 단원을 참조하십시오.
자동으로 생성된 역할을 수동으로 생성된 역할로 교체하여 이 기능을 해결하려면 다음 사항을 고려하세요.
-
IAM 역할을 수동으로 생성하여 애플리케이션 개발 속도를 늦춰야 합니다.
-
IAM 역할을 수동으로 생성하고 관리해야 하는 경우 여러 개의 논리적 역할을 관리하기 쉽도록 하나의 역할로 결합하는 경우가 많습니다. 이는 최소 권한 원칙에 반합니다.
-
이러한 역할은 배포 전에 생성되어야 하므로 참조해야 할 리소스가 아직 존재하지 않습니다. 따라서 와일드카드를 사용해야 하는데 이는 최소 권한 원칙에 반합니다.
-
와일드카드 사용에 대한 일반적인 해결 방법은 모든 리소스에 예측 가능한 이름을 지정하도록 하는 것입니다. 그러나 이렇게 하면 필요할 때 리소스를 교체하는 CloudFormation의 기능을 방해하고 개발 속도가 느려지거나 차단될 수 있습니다. 따라서 CloudFormation에서 고유한 리소스 이름을 생성하도록 허용하는 것이 좋습니다.
-
모든 배포 전에 수동 작업을 수행해야 하므로 지속적 전송을 수행하는 것은 불가능합니다.
조직에서 CDK가 역할을 생성하지 못하게 하려는 경우 이는 대개 개발자가 IAM 역할을 생성할 수 없게 하기 위함입니다. 문제는 개발자에게 AWS CDK를 사용하여 IAM 역할을 생성할 수 있는 권한을 부여하면 개발자가 자신의 권한을 승격시킬 가능성이 있다는 것입니다. 이를 방지하려면 권한 경계 또는 서비스 제어 정책(SCP)을 사용하는 것이 좋습니다. 권한 경계를 사용하면 개발자와 CDK가 수행할 수 있는 작업에 대한 제한을 설정할 수 있습니다. CDK에서 권한 경계를 사용하는 방법에 대한 자세한 내용은 AWS CDK에 대한 권한 경계 생성 및 적용 섹션을 참조하세요.