지속적 통합 파이프라인

지속적 통합 파이프라인은 애플리케이션 저장소에서 배포 가능한 아티팩트를 빌드합니다.

파이프라인은 아티팩트를 빌드하기 전에, 풀 리퀘스트가 처리되는 방식과 마찬가지로 코드가 스캔 및 테스트를 거쳤는지 확인합니다. 또한 빌드된 아티팩트는 인벤토리에서 릴리스 및 배치 준비로 표시하기 전에 취약성이 있는지 스캔하고 파이프라인에서 서명합니다. 가져오기 요청 파이프라인과 달리, 지속적 통합 파이프라인은 빌드의 각 스테이지(예: 테스트, 스캔, 서명)에서 증거 및 결과 아티팩트를 수집합니다. 이 데이터는 빌드된 아티팩트와 관련되며 배치 프로세스 및 변경 관리를 통해 추적 가능합니다.

스테이지 및 태스크

다음 표에는 CI 파이프라인에서 실행되는 작업이 나열되어 있습니다. 또한 표에서는 이러한 각 단계에 대한 개요를 제공합니다.

  • 태스크 또는 스테이지: 이는 .pipeline-config.yaml 구성 파일에 정의된 스테이지의 이름을 참조합니다.

  • 간단한 설명: 스테이지 실행 중에 수행되는 조치에 대한 간결한 설명을 제공합니다.

  • 사용자 정의 허용 가능: 사용자가 .pipeline-config.yaml 파일에 사용자 정의 스크립트를 삽입하여 스테이지의 기본 동작을 수정하거나 바꿀 수 있는 유연성이 있는지 여부를 표시합니다.

  • 기본 참조 구현: 이는DevSecOps 파이프라인은 단계에 대해 사전 정의되거나 기본 구현과 함께 제공됩니다. 특히, 다음과 같은 특정 단계의 경우 unit-tests 또는 setup,DevSecOps 파이프라인은 즉시 사용 가능한 구현을 제공하지 않습니다. 대신 사용자는 애플리케이션의 요구사항에 맞게 조정된 사용자 정의 스크립트 또는 코드를 제공해야 합니다.

  • 증거 콜렉션: 스테이지가 표준 증거의 콜렉션을 수행하는지 여부를 표시합니다. 언제DevSecOps관로 단계에 대한 참조 구현을 제공하면 증거 수집이 즉시 수행됩니다. 그러나 사용자 가 이러한 사전 정의된 스테이지를 수정하거나 대체하도록 선택하는 경우 해당 사용자 정의 구현에 적절한 증거 콜렉션이 포함되어 있는지 확인해야 합니다. 동일한 책임은 다음 단계에서 사용자에게 있습니다.DevSecOps 파이프라인은 즉시 사용 가능한 구현을 제공하지 않으므로 증거 수집을 수행해야 합니다. 이 열은 증거 콜렉션 수행을 담당하는 엔티티 (사용자/파이프라인) 를 표시합니다.

  • 건너뛰기 허용 가능 (버전 > = v10에 적용 가능): .pipeline-config.yaml 에서 건너뛰기 특성을 true로 설정하여 사용자가 이 단계의 실행을 옵트 아웃할 수 있는지 여부를 표시합니다. 그러나 이 기능을 사용할 때 특히 증거를 수집하도록 설계된 단계에 대해 주의해야 합니다. 이러한 단계를 건너뛰면 빌드에 대한 필수 증거가 누락될 수 있습니다.

지속적인 통합 단계 및 작업
태스크 또는 스테이지 간단한 설명 .pipeline-config.yaml 에서 허용되는 사용자 정의 기본 참조 구현 증거 콜렉션 건너뛰기 허용 가능
start 파이프라인 환경을 설정합니다. 아니오 파이프라인 아니오
setup 빌드 및 테스트 환경을 설정합니다. 아니오 해당사항 없음 아니오
detect-secrets 애플리케이션 코드에서 시크릿 발견 스캔을 실행하십시오. 파이프라인 아니오
test 애플리케이션 코드에서 단위 테스트 및 애플리케이션 테스트를 실행합니다. 아니오 사용자
static-scan 애플리케이션 코드에서 정적 스캔 코드를 실행합니다. 파이프라인
compliance-checks 앱 저장소에서 Code Risk Analyzer 스캔 및 기타 규제 준수 검사를 실행합니다. 파이프라인
peer-review 병합된 풀 리퀘스트에 대한 동료 검토 관련 준수 데이터를 수집합니다. 파이프라인
containerize 아티팩트를 빌드합니다. 아니오 해당사항 없음 아니오
sign-artifact 빌드된 아티팩트에 서명합니다. 파이프라인 아니오
deploy 빌드된 아티팩트를 개발 환경에 배치합니다. 아니오 해당사항 없음 아니오
dynamic-scan 애플리케이션에서 동적 스캔을 실행하십시오. 파이프라인
acceptance-test 배치된 빌드 아티팩트에 대한 승인 및 통합 테스트를 개발 환경에서 실행합니다. 아니오 사용자
scan-artifact 빌드된 아티팩트를 스캔합니다. 파이프라인
release 빌드된 아티팩트를 인벤토리에 추가합니다. 아니오 해당사항 없음
finish 로그 파일, 아티팩트, 증거를 수집하고 작성하고 증거 라커에 업로드합니다. 해당사항 없음

.pipeline-config.yaml 파일을 사용하여 스테이지를 사용자 정의하는 방법에 대한 자세한 내용은 ‘사용자 정의 스크립트’‘파이프라인 매개변수 목록’을 참조하십시오.

스테이지 및 증거

다음 표는 다양한 유형의 증거와 그 증거가 수집되는 파이프라인 내의 특정 단계 간의 관계를 보여줍니다.

지속적인 통합 단계 및 관련 증거
태스크 또는 스테이지 증거 유형
start 해당사항 없음
setup 해당사항 없음
detect-secrets com.ibm.detect_secrets
test com.ibm.unit_tests
static-scan com.ibm.static_scan
compliance-checks com.ibm.code_bom_check, com.ibm.code_cis_check, com.ibm.code_vulnerability_scan, com.ibm.branch_protection
peer-review com.ibm.peer_review
containerize 해당사항 없음
sign-artifact com.ibm.cloud.image_signing
deploy 해당사항 없음
dynamic-scan com.ibm.dynamic_scan
acceptance-test com.ibm.acceptance_tests
scan-artifact com.ibm.cloud.image_vulnerability_scan
release 해당사항 없음
finish com.ibm.pipeline_logs, com.ibm.pipeline_run_data

collect-evidence 스크립트를 사용하여 사용자 정의할 수 있는 사용자 스테이지에서 증거를 수집하는 방법에 대한 자세한 정보는 collect-증거 스크립트 를 참조하십시오.

시크릿 스캔 발견

IBM Detect Secrets 도구는 앱 코드에서 시크릿이 표시되는 위치를 식별합니다. 스캔을 위한 저장소 설정에 대한 자세한 정보는 여기 에 있습니다.

정적 코드 스캔

정적 코드 스캔 단계는 지정된 앱 저장소에서 다수의 정적 코드 분석기 도구를 실행합니다. pipelinectl save_repo 명령으로 제공되는 저장소 및 기본 앱 저장소가 스캔됩니다.

다음 방법 중 하나를 사용하여 파이프라인에 정적 코드를 추가할 수 있습니다.

  • SonarQube 도구를 도구 체인에 추가하여 이미 실행 중인 SonarQube 인스턴스 이름, URL, 인증 정보를 제공하십시오. 정적-스캔 태스크는 지정된 저장소에서 스캔을 실행합니다.

  • 사용자 소유의 SonarQube 인스턴스가 없는 경우 파이프라인은 파이프라인 실행 중에 SonarQube 인스턴스를 작성합니다. static-scan 스테이지가 실행된 후에 이 인스턴스에 액세스할 수 있습니다.

  • opt-in-gosec 매개변수를 사용하여 golang 보안 검사에 대한 gosec 스캔을 실행합니다.

  • 사용자 정의 구현을 위해 .pipeline-config.yaml 파일에서 static-scan 사용자 정의 스테이지에 고유 정적 스캔 코드를 추가하십시오.

파이프라인에 SonarQube 스캔 추가

SonarQube 를 연속 통합 파이프라인과 통합하는 방법에 대한 자세한 정보는 SonarQube구성 을 참조하십시오.

파이프라인에 gosec 스캔 통합 추가

gosec 를 사용하여 스캔된 저장소에서 golang 소스 코드를 검사하십시오.

gosec 스캔을 사용하려면 다음 매개변수를 제공하고 값을 1 로 설정하십시오.

gOSEC 스캔 매개변수
이름 유형 설명 필수 또는 선택적
opt-in-gosec text gosec 스캔을 사용으로 설정하는 옵션 선택적

연속 통합 파이프라인에서 gosec 스캔 설정에 대한 자세한 정보는 GoSec구성 을 참조하십시오.

기타 정적 스캐너 사용

그 대신에 자신만의 정적 스캔 구현을 사용하려면, .pipeline-config.yaml 파일을 수정하고 static-scan 단계에 자신만의 커스텀 스크립트를 추가하면 됩니다.

규제 준수 검사에서 스캔 및 검사

규정 준수 검사 및 확인
스캔 또는 검사 설명
Code Risk Analyzer 취약성 스캔 모든 앱 패키지 종속성, 컨테이너 기본 이미지, 운영 체제 패키지의 취약성을 찾습니다. Code Risk Analyzer 도구를 사용합니다.
Code Risk Analyzer CIS 검사 Kubernetes 배치 Manifest에서 구성 검사 를 실행합니다. Code Risk Analyzer 도구를 사용합니다.
Code Risk Analyzer 명세서(BOM) 검사 모든 종속성의 가계도를 캡처하는 지정된 저장소의 BOM입니다. 이 BOM은 여러 단위로 수집됩니다. 예를 들어, BOM은 빌드에서 사용되는 기본 이미지의 목록, 기본 이미지의 패키지 목록, 기본 이미지 위에 설치된 앱 패키지의 목록을 캡처합니다. BOM은 분석 결과의 실지 검증 정보로 사용되며 잠재적으로 정책 게이트를 적용하는 데 사용될 수 있습니다. Code Risk Analyzer 도구를 사용합니다.
저장소 규제 준수 검사 분기 보호 설정이 올바른지 확인합니다. 예를 들어, 마스터/기본 분기는 항상 강제 실행을 제한해야 합니다. 자세한 정보는 Git Repos and Issue Tracking 저장소 구성 을 참조하십시오.

이러한 스크립트는 파이프라인이 인식하는 모든 앱에서 실행됩니다. 이러한 스캔에 저장소를 추가하려면 setup 스테이지에서 제공되는 pipelinectl 인터페이스를 사용하십시오.

사용자 스크립트 스테이지의 예상 출력에 관한 자세한 정보는 사용자 정의 스크립트를 참조하십시오.

참고: CI 파이프라인은 branch protection checks 또는 peer review check 과 같은 기능을 지원하지 않으므로 태그에서 트리거되지 않습니다. 태그에서 CI 파이프라인을 실행하기로 선택한 경우 peer-review-compliancebranch-protection-check 속성을 0 로 설정하여 비활성화해야 합니다. 단, 이 경우에는 증거 수집이 이루어지지 않는다는 점에 유의하세요.

빌드

빌드 스테이지에서는 고유의 아티팩트를 빌드할 수 있습니다. 파이프라인이 Docker 이미지 유형 아티팩트의 일부 기본 기능을 제공하지만 이 스테이지에서 모든 유형의 아티팩트를 빌드할 수 있습니다.

파이프라인 UI의 환경 변수를 사용하여 빌드의 인증 정보, 시크릿, 매개변수를 제공하십시오. 이 스테이지 및 모든 사용자 정의 스테이지에서 이러한 환경 변수에 액세스할 수 있습니다. 사용자 정의 스크립트 스테이지의 매개변수 및 시크릿에 액세스하는 방법에 관한 자세한 정보는 사용자 정의 스크립트를 참조하십시오.

아티팩트 스캔 및 서명

아티팩트 스캔 및 서명 스테이지는 사용자 정의 가능한 단계를 포함한 Docker 이미지의 기본 동작을 제공합니다.

  • GPG 키를 사용한 이미지 서명.
  • Container Registry Vulnerability Advisor 스캔.

이러한 스테이지를 시작하려면 pipelinectl 인터페이스를 사용하도록 파이프라인에 아티팩트를 제공하십시오. 빌드 스크립트 및 .pipeline-config.yaml 구성을 업데이트하지 않아도 됩니다.

다른 스캔 또는 서명 프로세스를 사용하거나 icr.io에서 Docker 이미지가 아닌 다른 아티팩트를 처리하기 위해 프로젝트에서 .pipeline-config.yaml 구성을 사용하여 이러한 스테이지를 사용자 정의할 수 있습니다.

개발 환경에 배치

deploy 스테이지는 빌드된 아티팩트를 개발 환경에 배치합니다.

동적 스캔

동적 코드 스캔은 소프트웨어 팀이 실행 중인 애플리케이션을 스캔하고 취약성을 식별할 수 있도록 하는 블랙 박스 취약성 스캔 양식입니다.

동적 스캔 단계는 개발 환경에 성공적으로 배치된 후 Deploy to dev 단계 직후에 실행됩니다.

기본적으로 파이프라인은 ZAP (Zed Attack Proxy) 스캔을 실행하기 위한 지원을 제공합니다. 이는 OWASP의 보호 하에서 유지보수되는 무료 오픈 소스 침투 테스트 도구입니다. 이는 API및 UI동적 스캔을 모두 수행하며, 둘 다 샘플 hello-compliance-app에서 실행될 수 있습니다.

동적 스캔을 실행하려면 파이프라인 매개변수 opt-in-dynamic-scan 를 비어 있지 않은 값으로 설정하십시오. 단계에서 동적 스캔을 실행하지 않도록 설정하려면 파이프라인 매개변수 opt-in-dynamic-scan 를 비어 있음으로 설정하십시오. 파이프라인 매개변수 설정에 대한 자세한 정보는 파이프라인 매개변수 를 참조하십시오.

CI 파이프라인은 심각도에 따라 문제 저장소에서 문제를 작성합니다. 문제에 첨부된 레이블은 취약성의 심각도를 표시합니다.

ZAP API 스캔

ZAP API는 애플리케이션 엔드포인트에서 가능한 데이터 유출, 컨텐츠 유형 오류, 외부 경로 재지정, 코드 인젝션, SQL 인젝션, 원격 OS 명령 인젝션 및 애플리케이션에서 노출되는 기타 취약성을 스캔합니다. ZAP API 스캔을 사용하면 개발자가 단계 또는 테스트 환경에서 이러한 취약성을 발견하고 애플리케이션이 프로덕션 환경에 배치되기 전에 이를 수정하여 애플리케이션의 보안을 유지할 수 있습니다.

애플리케이션을 스캔하려면 ZAP API 스캔에 다음 입력이 필요합니다.

  • Swagger 정의 파일 - 앱이 노출하는 HTTP 의 API와 관련된 매개 변수를 설명합니다.
  • API키-API 엔드포인트로 인증하는 데 필요한 인증 토큰입니다.
  • API 엔드포인트-ZAP가 스캔할 Swagger 정의의 엔드포인트입니다.
  • 제외된 URL-ZAP 스캐너에서 무시할 URL입니다.

ZAP API 스캐너는 스캔을 실행하고 보고서를 생성하기 위해 언급된 입력을 사용합니다.

ZAP API 스캔을 실행하려면 opt-in-dynamic-api-scan 를 비어 있지 않은 값으로 설정하십시오. 옵트 아웃하려면 이 매개변수를 비어 있음으로 설정하십시오.

ZAP UI 스캔

ZAP UI는 애플리케이션 엔드포인트를 스캔하여, 설정된 보안이 취약한 쿠키, 부적절한 캐싱 헤더 설정, 도메인 간 파일 포함, 부적절한 CORS 설정 등 웹 페이지 자체에 존재하는 취약점 및 애플리케이션에 의해 노출되는 기타 취약점을 탐지합니다.

UI 스캔은 API 스캔과 유사하게 작동하지만 Swagger 파일 대신 UI 테스트 스크립트를 사용합니다. UI 테스트 스크립트는 ZAP 스캐너의 프록시를 통해 프록시하도록 구성된 명령행 모드 브라우저를 시작하고 UI 엔드포인트에 대해 UI 테스트를 실행합니다. ZAP UI 테스트를 실행하는 프로세스는 다음과 같습니다.

  • 테스트 스크립트를 ZAP 스캐너 컨테이너에 복사하십시오.
  • ZAP 프록시를 실행하십시오.
  • zap 테스트 스크립트를 실행하십시오.

ZAP 프록시는 트래픽을 기록하고 스캔할 엔드포인트를 발견합니다. 스캔이 완료되면 프록시가 보고서를 생성하고 ZAP API 스캔에서와 동일한 방식으로 문제를 생성합니다.

ZAP API 스캔을 실행하려면 opt-in-dynamic-ui-scan 를 비어 있지 않은 값으로 설정하십시오. 옵트 아웃하려면 이 매개변수를 비어 있음으로 설정하십시오.

  • 사용자 정의 구현을 위해 .pipeline-config.yaml 파일 내의 dynamic-scan 사용자 정의 스테이지에 자신만의 동적 스캔 코드를 추가하십시오.

ZAP API 스캔 및 ZAP UI 스캔에 대한 자세한 정보는 ZAP 스캔 구성 을 참조하십시오.

인벤토리로 릴리스

인벤토리 사용자 스크립트 스테이지에 대한 릴리스를 사용하여 cocoa inventory add CLI 명령으로 인벤토리에 아티팩트를 추가하십시오. 명령에 대한 자세한 정보는 코코아 재고 추가 에 대한 주제를 참조하십시오.

파이프라인에 문제가 있는 경우 재고 업데이트를 건너뛰려면 다음 환경 변수를 사용하여 파이프라인의 상태를 확인하십시오. 재고를 업데이트하기 전에 해당 상태를 확인하십시오.

  • skip-inventory-update-on-failure 인벤토리 업데이트를 수행해야 하는지 여부를 지정하기 위한 파이프라인의 옵트 인 환경 변수입니다.
  • one-pipeline-status 파이프라인 실행에 단계 실패가 있는 경우 1 로 설정됩니다.

pipelinectl 인터페이스를 사용하여 list_repos, load_repo, list_artifactsload_artifact 명령어를 통해 리포지토리와 아티팩트에 액세스할 수 있습니다. 명령에 대한 자세한 정보는 pipelinectl 문서를 참조하십시오.

빌드 시 규제 준수 데이터 수집

파이프라인이 실행되면 빌드에 관한 정보를 수집할 수 있습니다.

증거 라커에 서명하는 모든 검사, 스캔, 테스트, 아티팩트에 관한 증거가 수집됩니다. 파이프라인 로그 파일은 Tekton 정의가 포함된 파이프라인 데이터와 함께 라커에 저장됩니다. 피어 검토에 대한 규제 준수 데이터도 이 단계에서 수집됩니다. 파이프라인은 pipelinectl을 사용하여 마지막 빌드 이후에 병합된 가져오기 요청으로 저장소를 검색합니다. 또한 검토 상태를 확인하고 아티팩트로 저장하며 결과를 기반으로 증거를 작성합니다.

최종 스크립트는 증거 상태에 따라 파이프라인 상태를 초록색 또는 빨간색으로 표시하는 평가자입니다. 실패가 포함된 경우 지속적 통합 실행은 빨간색으로 표시됩니다.