aws-samples/devsecops-quickstart
요약
이 아티팩트는 개발팀이 보안 및 DevOps 모범 사례를 따르는 멀티 계정 CI/CD 파이프라인을 신속하게 구축하는 방법을 안내합니다. AWS CodeCommit, Cloud9 등의 환경과 함께 Bandit, Snyk, OPA 등 다양한 도구를 통합하여 보안 취약점 점검부터 인프라 정책 적용까지 자동화된 개발 워크플로우를 제공합니다.
핵심 포인트
- 멀티 계정 CI/CD 파이프라인을 신속하게 설정할 수 있습니다.
- Bandit, Snyk, OPA 등을 통합하여 보안 검증을 강화했습니다.
- AWS CodeCommit과 Cloud9 환경을 활용하는 개발 워크플로우를 제공합니다.
- 가상 환경(venv) 생성 및 종속성 설치 과정을 안내합니다.
이 아티팩트는 개발팀이 보안 및 DevOps 모범 사례를 따르는 멀티 계정 CI/CD 파이프라인과 통합된 사용 준비가 된 환경을 신속하게 설정하는 데 도움을 줍니다.
성공적으로 배포하면 다음 항목들을 갖게 됩니다:
-
AWS CodeCommit Git 리포지토리
-
코드 리포지토리에 통합된 AWS Cloud9 개발 환경
-
코드 리포지토리에 통합된 멀티 스테이지, 멀티 계정 CI/CD 파이프라인
-
Python 코드에서 일반적인 보안 문제를 찾는 Bandit을 이용한 파이프라인 통합
-
종속성(dependencies)의 취약점을 지속적으로 모니터링하는 Snyk를 이용한 파이프라인 통합
-
안전하지 않은 인프라를 나타낼 수 있는 CloudFormation 템플릿의 패턴을 찾는 CFN NAG를 이용한 파이프라인 통합
-
개발 시점에 인프라 리소스에 대한 정책을 정의하고 적용할 수 있게 하는 Open Policy Agent (OPA)를 이용한 파이프라인 통합
-
Toolchain으로 사용될 AWS 계정 -
배포 대상 계정으로 사용될 하나 이상의 AWS 계정(예:
Dev,QA,Prod등)
툴체인 계정과 배포 대상 계정을 분리하는 것은 기술적으로 필수는 아니지만, 모범 사례로 간주됩니다. 툴체인과 개발 계정부터 시작하는 것을 권장합니다. 필요할 경우 나중에 파이프라인에 새로운 대상 환경을 쉽게 추가할 수 있습니다. 참고:
이 프로젝트의 코드 리포지토리에는 Git Submodules가 포함되어 있습니다. 처음 클론하는 경우, 서브모듈을 자동으로 초기화하고 업데이트하려면 --recurse-submodules 플래그를 사용해야 합니다:
git clone --recurse-submodules https://github.com/aws-samples/devsecops-quickstart.git
만약 리포지토리가 이미 --recurse-submodules 플래그 없이 클론된 경우, 다음 명령을 실행하여 서브모듈을 초기화하고 업데이트하십시오:
git submodule update --init --recursive
서브모듈이 포함된 Git 리포지토리 작업에 대한 자세한 정보는 Git-Tools-Submodules 문서를 참조하십시오.
cdk.json을 찾으십시오.
프로젝트의 루트 폴더에 있는 파일입니다. 이것은 프로젝트의 설정 파일입니다.
cdk.json을 다음 값으로 업데이트하십시오. 이 값들은 툴체인(toolchain) 및 배포 대상 계정에 사용될 것입니다.
계정 번호와 리전 값을 업데이트하여 툴체인과 배포 대상 계정에 사용할 수 있도록 하십시오.
기본 설정에는 Dev, QA, Prod의 세 가지 배포 대상 계정이 포함되어 있습니다. 이는 단지 시연 목적입니다.
요구 사항에 따라 배포 대상을 추가하거나 제거해도 됩니다. 예를 들어, 하나의 개발 계정으로 시작하여 향후 필요할 때 더 많은 스테이지를 추가할 수 있습니다.
변경 사항을 커밋했는지 확인하십시오. 참고:
이 프로젝트는 표준 Python 프로젝트처럼 설정되어 있습니다. 초기화 프로세스는 또한 이 프로젝트 내부에 .venv 디렉토리에 저장되는 가상 환경(virtualenv)을 생성합니다.
다음 명령어를 사용하여 프로젝트의 루트 폴더에 가상 환경을 만드십시오:
[코드 블록]
python3 -m venv .venv
[/코드 블록]
가상 환경이 생성된 후, 다음 단계를 사용하여 가상 환경을 활성화하십시오.
[코드 블록]
source .venv/bin/activate
[/코드 블록]
Windows 플랫폼의 경우 다음과 같이 가상 환경을 활성화할 수 있습니다:
[코드 블록]
.venv\Scripts\activate.bat
[/코드 블록]
가상 환경이 활성화되면, 필요한 종속성(dependencies)을 설치하십시오.
[코드 블록]
pip install -r requirements.txt
[/코드 블록]
이는 부트스트래핑(Bootstrapping)이라고 알려진 일회성 설정이며, 툴체인과 각 배포 대상 계정별로 개별적으로 수행해야 합니다.
cdk.json에서 2. accounts and regions 구성 단계에 구성한 툴체인 계정+리전(toolchain account+region)에 대해 다음 단계를 수행하십시오:
이는 Quick configuration의 aws configure 섹션에 설명된 대로 빠르게 수행할 수 있습니다. 또는 여러 계정 사이를 오갈 때 더 편리한 AWS CLI Profiles를 사용할 수도 있습니다. 참고:
AWS CLI 프로필을 사용하는 경우, 아래 AWS 계정과 상호 작용하는 모든 명령어에 대해 반드시 NOTE:--profile <프로파일_이름>` 옵션을 제공해야 합니다.
toolchain_account와 toolchain_region 플레이스홀더를 교체했는지 확인하십시오.
cdk bootstrap \
--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess \
aws://<toolchain_account>/<toolchain_region>
cdk.json에서 구성한 배포 대상 계정 및 리전 각각에 대해 다음 단계를 반복하십시오.
2단계. 계정 및 리전 구성(Configure accounts and regions):
<toolchain_account>, <deployment_target_account>, 그리고 <deployment_target_region> 플레이스홀더를 교체했는지 확인하십시오.
cdk bootstrap \
--trust <toolchain_account> \
--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess \
...
Snyk에 새 계정을 등록할 때, 마법사(whizzard)는 Git 저장소를 선택하고 Snyk가 해당 저장소를 모니터링하도록 통합을 제공하는 최종 단계로 안내합니다. 이 단계는 Snyk 계정 생성에 필수적이지 않으며, 저희 설정에도 필요하지 않습니다. 단순히 Select from other repositories를 선택하여 건너뛰면 프로필로 바로 이동할 수 있습니다.
Snyk 인증 토큰을 검색한 후, create_secret_helper 유틸리티를 사용하여 해당 토큰을 toolchain 계정의 AWS Secret Manager에 안전하게 저장하십시오. 이 토큰은 파이프라인 실행 중 파이프라인이 Snyk와 상호 작용하는 데 자동으로 사용됩니다.
CLI 명령어에 프로필 전달(Pass profile to CLI commands)TODO:
./create_secret_helper.sh snyk-auth-token <snyk-auth-token-value> <toolchain_profile_name>
toolchain 계정에 새 Git 저장소를 생성하십시오. 이 저장소는 배포에 파이프라인에서 사용되는 주 저장소가 되며, 여기서 애플리케이션을 개발하게 됩니다.
aws codecommit create-repository --repository-name devsecops-quickstart
명령 출력에서 cloneUrlHttp 값을 기록해 두십시오.
AWS CodeCommit을 처음 사용하는 경우, HTTPS를 사용하여 CodeCommit 저장소에 액세스할 수 있도록 Git Credential Helper를 구성해야 합니다. Linux, macOS, 또는 Unix나 Windows에서 크리덴셜 헬퍼(credential helper)를 설정하려면 AWS CodeCommit 문서를 따르십시오.
<codecommit_repository_url>을 교체했는지 확인하십시오.
placeholder withcloneUrlHttp
단계 9. Git 리포지토리 생성에서 얻은 값입니다.
git remote add codecommit <codecommit_repository_url>
git checkout -b main
git add .
...
CDK deploy 명령을 실행하여 CI/CD 파이프라인을 빌드하고 배포합니다.
cdk deploy devsecops-quickstart-cicd
AWS 콘솔에서 툴체인 계정에 로그인합니다. 배포에 사용한 것과 동일한 리전을 선택하십시오.
AWS CodeCommit 서비스로 이동하여 왼쪽 탐색 표시줄에서 Source/Repositories를 선택하고 새 리포지토리가 생성되었는지 확인합니다.
AWS Cloud9 서비스로 이동하여 왼쪽 탐색 표시줄에서 Account Environments를 선택하고 새로운 Cloud9 환경이 생성되었는지 확인합니다.
cloud9_admin이 환경의 소유자이며 Open IDE 버튼은 비활성화되어 있다는 점에 유의하십시오. Cloud9 환경에 액세스하려면 CloudFormation 서비스로 이동하여 tooling-cloud9 스택을 열고 상단 탐색 표시줄에서 Outputs 섹션을 선택합니다.
IDEURL 링크를 복사하여 새 시크릿(incognito) 브라우저 탭에서 엽니다. Sign In 시 IAM User를 선택하십시오. 계정 번호는 스택 출력의 IDEAccount 값을 사용하고, IAM 사용자 이름은 AdminUserName을 사용합니다. 비밀번호는 AdminPasswordSecretURL에 있는 링크를 따라가 Secret Value 섹션 아래에서 Retrieve Secret Value를 선택하여 AWS Secret Manager에서 검색해야 합니다. 성공적으로 로그인하면 Cloud9 환경에 액세스할 수 있습니다.
AWS CodePipeline 서비스로 이동하여 왼쪽 탐색 표시줄에서 Pipeline/Pipelines를 선택하고 새로운 파이프라인이 생성되었는지 확인합니다.
파이프라인을 열고 validate 스테이지까지 스크롤합니다. 이 단계는 모든 검증(validation) 단계가 실행되는 곳입니다.
검증 후에는 배포(deployment) 스테이지를 볼 수 있습니다. 스테이지의 개수는 배포(Deploy) 섹션에서 설명한 대로 cdk.json 파일에 구성한 대상 계정의 수와 일치합니다.
만약 cdk.json의 스테이지 설정에서 수동 승인(manual approvals)을 활성화했다면
, 해당 파이프라인 스테이지는 해당 환경에 배포하기 전에 필수적인 수동 승인(manual approval)을 갖게 됩니다.
각 대상 계정별로 AWS 콘솔에 로그인하세요. 배포 시 사용했던 것과 동일한 리전에 있는지 확인하십시오. CloudFormation 서비스로 이동하여 파이프라인에 의해 배포된 애플리케이션 스택을 검색합니다. 이 파이프라인에는 데모 목적으로 배포되는 SampleApp이라는 샘플 애플리케이션이 포함되어 있습니다. 여러분은 동일한 접근 방식을 따라 자신의 애플리케이션 스택을 추가할 수 있으며, 파이프라인이 이를 대상 환경에 배포하는 작업을 처리해 줄 것입니다.
방금 생성한 이 파이프라인은 SampleApp이라는 더미 애플리케이션 스택을 배포하고 있습니다. 이 스택은 devsecops_quickstart/sample_app/sample_app.py에서 정의되었으며, devsecops_quickstart/pipeline.py의 파이프라인 정의에 통합되어 있습니다.
이제 여러분 차례입니다. 소매를 걷어붙이고(roll up the sleeves) 자신의 애플리케이션 스택을 개발하세요. 자신의 애플리케이션 스테이지를 정의하고 이를 파이프라인에 통합하는 방식은 SampleApp에서와 동일한 접근 방식을 따르세요.
즐거운 시간 보내시길 바랍니다!
A: tooling-Cloud9이라는 이름의 스택의 CloudFormation 출력(Outputs) 섹션을 확인하세요. 그곳에서 환경 URL, 관리자 사용자 및 관리자 비밀번호가 포함된 AWS Secret Manager 시크릿에 대한 출력 매개변수들을 찾을 수 있습니다.
A: 배포 대상은 cdk.json 파일의 context.config.stage 변수에 구성됩니다. 지금 또는 미래에 필요에 따라 여러 스테이지를 파이프라인에 추가할 수 있습니다. 새 스테이지에 이름을 부여하고, 계정(account), 리전(region) 및 수동 승인(manual approval)이 필요한지 여부에 대한 값을 제공하기만 하면 됩니다. 그런 다음 변경 사항을 커밋하고 푸시하여 파이프라인을 트리거하세요. 이 파이프라인은 구성에 동적으로 조정할 수 있는 능력을 갖추고 있습니다.
더 많은 정보는 CONTRIBUTING을 참조하십시오.
이 라이브러리는 MIT-0 라이선스 하에 라이선스가 부여됩니다. LICENSE 파일을 참조하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기