DevSecOps 툴체인을 위한 모범 사례
다음 섹션에서는 각 DevSecOps 툴체인(지속적 통합(CI), 인프라-어-코드(IAC)용 CI( IaC ), 지속적 배포(CD), 지속적 규정 준수(CC))에 대한 모범 사례를 설명합니다.
지속적 통합(CI) 툴체인을 위한 모범 사례
DevSecOps 의 CI 툴체인은 다음과 같은 관행을 따릅니다:
- 애플리케이션 소스 코드 내의 비밀 정보 유출을 방지하기 위해 애플리케이션 저장소에서
detect-secrets을 실행합니다. - 애플리케이션 코드에 대해 단위 테스트와 애플리케이션 테스트를 실행합니다.
- 애플리케이션 저장소에서 정적 코드 스캐너를 실행하여 소스 코드의 보안 취약점을 식별합니다.
- Code Risk Analyzer와 같은 규정 준수 스캐너를 사용하여 모든 애플리케이션 저장소에 대해 규정 준수 검사를 수행하며, 여기에는 취약점 스캔과 모든 패키지 종속성에 대한 BOM(Bill of Materials) 검사가 포함됩니다.
- 지난 빌드 이후 병합된 모든 풀 리퀘스트에 대한 동료 검토의 준수 데이터를 수집합니다.
- Git 의 모든 커밋 시 컨테이너 이미지를 빌드하며, 추적성을 위해 빌드 번호, 타임스탬프 및 커밋 ID를 기반으로 태그를 설정합니다.
- 빌드된 컨테이너 이미지에 서명을 합니다.
- 컨테이너 이미지를 스캔하여 보안 취약점을 탐지합니다.
- 빌드된 아티팩트를 개발 환경에 배포하고, 실행 중인 애플리케이션에 대해 동적 스캔(ZAP API 및 UI 스캔)을 수행하여 런타임 취약점을 탐지합니다.
- 개발 환경에서 배포된 아티팩트에 대해 수용 테스트 및 통합 테스트를 실행합니다.
- 모든 파이프라인 실행이 끝날 때마다 모든 증거 자료(스캔 결과, 테스트 결과, 로그, 동료 검토 데이터 및 파이프라인 실행 데이터)를 증거 보관소에 수집합니다.
인프라 애즈 코드( IaC ) 툴체인을 위한 지속적 통합(CI) 모범 사례
IaC 용 ‘ DevSecOps ’ CI 툴체인은 다음과 같은 모범 사례를 따릅니다:
- IaC 저장소에서
detect-secrets을 실행하여 Terraform 구성에서 시크릿 유출을 방지합니다. - Git 에 커밋이 있을 때마다 IaC 구성에 따라 단위 테스트를 실행합니다.
- IaC 저장소에 대해 정적 코드 스캔을 실행하며, 여기에는 린팅 및 모범 사례 준수를 위한
tflint와 같은 Terraform 전용 도구와, 서식 일관성 및 구성 유효성 검사를 위한terraform fmt및terraform validate가 포함됩니다. - IaC-specific 도구(Code Risk Analyzer 또는
checkov등)를 사용하여 IaC 저장소에 대한 규정 준수 검사를 실행하고, 규정 준수 문제를 스캔합니다. - Git 에 커밋이 발생할 때마다 Terraform 구성이 포함된 Tar 파일을 생성합니다.
- 생성된 Tar 아티팩트에 서명합니다.
- IBM Cloud Schematics 나 Terraform CLI를 사용하여 IaC 구성을 개발 환경에 배포합니다.
- 개발 환경에 배포된 구성에 대해 수용 테스트 및 통합 테스트를 실행합니다.
- 추적 가능성을 확보하고 다운스트림 환경으로 배포하기 위해 빌드된 아티팩트를 인벤토리 저장소에 추가합니다.
- 모든 파이프라인 실행이 끝날 때마다 모든 증거(스캔 결과, 테스트 결과, 서명 데이터, 로그 및 파이프라인 실행 데이터)를 증거 보관소에 수집합니다.
보안성이 확보된 애플리케이션을 배포하기 위한 지속적 배포(CD) 툴체인의 모범 사례
보안성이 확보된 애플리케이션을 배포하기 위해, ‘ DevSecOps ’ CD 툴체인은 다음과 같은 모범 사례를 따릅니다:
- 인벤토리 저장소에 대한 프로모션 풀 리퀘스트를 사용하여 배포 범위를 정의하고, 마지막 완료된 배포 이후 변경된 아티팩트 집합인 배포 델타를 계산합니다.
- 현재 배포 범위 내의 모든 풀 리퀘스트가 진행 전에 동료 검토를 거쳐 승인되었는지 확인합니다. 승인되지 않은 풀 리퀘스트가 하나라도 있으면 배포를 중지합니다.
- 배포 예정인 모든 아티팩트가 올바르게 서명되었는지 확인합니다. 유효한 서명이 없는 경우 배포를 차단합니다.
- 배포 델타를 기반으로 배포 BOM(Bill of Materials)을 계산하고, 관련 CI 파이프라인 실행 및 현재 CD 파이프라인 실행 모두에서 증거 요약 정보를 수집합니다.
- 구성된 변경 관리 시스템에 변경 요청을 생성하고, 배포 BOM, 증거 요약 및 동료 검토 준수 데이터를 첨부합니다.
- 모든 준수 기준이 충족되면 변경 요청을 자동으로 승인합니다. 기준을 완전히 충족하지 못하는 경우, 수동 승인 또는 긴급 태그 지정을 지원합니다.
- 변경 요청이 승인되거나 긴급 요청으로 표시되면, 인벤토리에 있는 아티팩트를 대상 환경(스테이징 또는 프로덕션 등)에 배포합니다.
- 배포 후 수락 테스트 및 통합 테스트를 실행하여 배포가 성공적으로 완료되었는지, 그리고 애플리케이션이 예상대로 작동하는지 확인합니다.
- 배포 또는 수락 테스트 단계에서 오류가 발생하면 동일한 파이프라인 실행 내에서 배포를 자동으로 롤백하여, 인벤토리의 마지막으로 정상적으로 확인된 상태를 유지합니다.
- 변경 요청을
Successful또는Successful with issues의 ‘close_category’ 상태로 종료하고,<target-environment>_latest인벤토리 태그를 배포된 커밋으로 이동합니다. - 모든 파이프라인 실행이 끝날 때마다 모든 로그 파일, 아티팩트 및 증거 자료를 수집하여 증거 보관소에 업로드합니다.
- 선택적으로, 배포가 성공적으로 완료된 후 병합된 풀 리퀘스트에 ‘
deploy:{region}:{env}’ 라벨을 지정하여, 파이프라인 세부 정보에 접근할 필요 없이 엔드투엔드 배포 추적성을 제공합니다.
지속적 규정 준수(CC) 툴체인을 위한 모범 사례
DevSecOps 의 CC 툴체인은 다음과 같은 관행을 따릅니다:
- 모든 인벤토리 소스 저장소에서
detect-secrets을 실행하여 애플리케이션 소스 코드 내의 시크릿 유출을 식별합니다. - 인벤토리에서 발견된 모든 소스 리포지토리에 대해 정적 코드 스캔( SonarQube 또는 사용자 정의 구현)을 실행합니다.
- 배포된 애플리케이션에 대해 동적 애플리케이션 보안 테스트 스캔(OWASP ZAP)을 실행하여 런타임 취약점을 탐지합니다.
- Code Risk Analyzer와 같은 도구를 사용하여 모든 인벤토리 소스 저장소에 대해 규정 준수 검사를 수행하며, 여기에는 취약점 스캔, Kubernetes 배포 매니페스트에 대한 ‘ CIS ’ 검사, 모든 패키지 종속성에 대한 BOM 검사, 브랜치 보호 확인 등이 포함됩니다.
- 배포된 모든 컨테이너 이미지를 대상으로 보안 취약점을 검사합니다.
- 파이프라인 실행 중에 발견된 모든 개별 CVE, 취약점 또는 경보에 대해 인시던트 이슈를 생성하거나 업데이트하고, 각 이슈에 마감일을 설정합니다.
- 각 단계별 증거를 증거 보관함에 수집하고, 스캔 결과 및 검사 결과를 해당 문제에 첨부하며, 스캔된 모든 증거물의 준수 상태를 업데이트합니다.