초보자를 위한 DevSecOps 파이프라인 사용자 정의
DevSecOps 에서 도입을 위한 기본 사항을 알아보고 첫 번째 애플리케이션 또는 마이크로서비스를 온보딩하세요.
DevSecops 도구 체인 정보
DevSecOps 모범 사례와 보안 도구를 구현하는 IBM Cloud DevSecOps 지속적 통합( CI ), 지속적 배포( CD ) 및 지속적 준수( CC ) 툴체인을 발견하고 테스트했습니다.
이제 귀하의 애플리케이션이나 마이크로서비스를 탑재하고 DevSecOps 도입할 준비가 되었습니다.
시작하기 전에
DevSecOps 툴체인에 애플리케이션을 온보딩하려면 다음 리소스가 필요합니다.
- 종종 "앱 저장소" 라고 하는 애플리케이션의 코드를 포함하는 애플리케이션 소스 코드 Git 저장소입니다.
.pipeline-config.yaml파일. 이 파일은 파이프라인 실행 프로세스의 단계를 사용자 정의하기 위해 CI, CD및 CC 파이프라인에서 사용하는 코어 구성 파일입니다. 필요에 맞게 다운로드하고 사용자 정의할 수 있는 샘플.pipeline-config.yaml파일 을 시작하십시오. 시작 스테이지를 제외한 모든 스테이지는.pipeline-config.yaml파일을 사용하여 사용자 정의할 수 있습니다. 이 파일은 사용자 정의 스크립트를 트리거하고 실행하여 애플리케이션을 빌드, 테스트 및 배치합니다..pipeline-config.yaml파일의 이름을 변경하거나 다른 파이프라인 또는 트리거에 다른 파일을 사용할 수 있습니다. 파이프라인 또는 트리거의 매개변수 값이 구성 파일과 일치하는지 확인하십시오. 자세한 정보는 파이프라인 매개변수 를 참조하십시오.
IBM Cloud 에는 시작하는 데 도움이 되는 다음과 같은 DevSecOps 템플릿이 있습니다.
- Node 샘플 응용프로그램
- CodeEngine 준수 샘플 애플리케이션
- Go 준수 샘플 애플리케이션
- Python 준수 샘플 애플리케이션
- Node / Cloudant 준수 샘플 애플리케이션
DevSecOps 파이프라인이 저장소를 사용하는 방법
DevSecOps 파이프라인은 애플리케이션을 빌드, 테스트 및 배포하기 위해 두 개의 저장소를 사용합니다.
app-repo: 애플리케이션의 소스 코드를 포함하는 애플리케이션 저장소입니다.config-repo: 파이프라인 구성 YAML 파일 및 스크립트를 포함하는 구성 저장소입니다.
DevSecOps 샘플 앱 에서 이 두 저장소는 동일합니다. 대부분의 DevSecOps 도입자들은 이 패턴으로 시작합니다. 그러나 더 많은 마이크로서비스를 온보딩할 때 전용 및 별도의 파이프라인 구성 저장소가 필요할 수 있습니다. 애플리케이션 저장소와 구성 저장소가 샘플 앱에서 동일하기 때문에 파이프라인이 실행될 때 저장소가 두 번 복제되며, 이로 인해 오류가 발생할 수 있습니다. 따라서 다양한 DevSecOps 툴체인과 파이프라인에서 공유하고 재사용할 수 있는 구성 파일과 스크립트를 호스팅하는 별도의 구성 저장소를 갖는 것이 가장 좋습니다. 구성 저장소 사용자 정의에 대한 자세한 정보는 고급 사용자 정의 단계 를 참조하십시오.
DevSecOps 스크립트는 app-repo 와 config-repo 를 두 개의 별도 리포지토리로 간주합니다. 스크립트는 파이프라인의 시작 단계 중에 저장소를 두 번 복제합니다. 이러한 복제본을 app-repo 및 one-pipeline-config-repo 라고 합니다. 각 스테이지는 config repo 의 컨텍스트에서 실행됩니다.
애플리케이션 배치
계속하기 전에 샘플 Node 애플리케이션을 사용하여 DevSecOps CI 툴체인을 만들고 테스트해 보세요.
기존 DevSecOps CI 툴체인에 첫 번째 애플리케이션을 온보딩하는 데는 세 가지 주요 방법이 있습니다.
- 옵션 1: 애플리케이션 저장소를 도구 체인에 추가하고 샘플 애플리케이션 저장소를 구성 저장소로 사용하십시오.
- 옵션 2: 샘플 애플리케이션 저장소를 애플리케이션 저장소로 대체하십시오.
- 옵션 3: 애플리케이션 저장소를 도구 체인에 추가하고 전용 구성 저장소를 사용하십시오. 이 옵션에 대한 자세한 정보는 고급 사용자 정의 단계 를 참조하십시오.
DevSecOps 툴체인은 IBM 으로 관리되는 Gitlab 저장소(GRIT이라고도 함)를 사용합니다. 다른 Git 제공자를 대신 사용할 수 있습니다. 예를 들어, 앱 저장소는 GitHub 또는 Gitlab에서 호스팅될 수 있습니다.
옵션 1: 애플리케이션 저장소를 추가하고 샘플 애플리케이션 저장소를 구성 저장소로 사용
애플리케이션 저장소를 도구 체인에 추가하고 샘플 애플리케이션 저장소를 구성 저장소로 사용하려면 다음 단계를 완료하십시오.
- IBM Cloud 콘솔에서 메뉴 아이콘
> 플랫폼 자동화 > 툴체인을 클릭하고 편집하려는 툴체인을 선택합니다.
- 추가 를 클릭하십시오.
- 앱 저장소가 호스팅되는 위치 (
Gitlab또는GitHub) 를 선택하십시오. - 기본 서버를 사용하거나 새 서버를 추가하십시오.
- 사용자 지정 서버의 사용자 이름( URL )과 개인 액세스 토큰을 입력합니다.
- 통합 작성을 클릭하십시오.
- 응용 프로그램 소스 코드 저장소 URL 에 접속하세요.
- 통합 작성을 클릭하십시오.
다음 단계를 완료하여 샘플 애플리케이션 저장소를 구성 저장소로 지정하십시오.
- IBM Cloud 콘솔에서 메뉴 아이콘
> 플랫폼 자동화 > 툴체인을 클릭하고 편집하려는 툴체인을 선택합니다.
- pr-pipeline 을 클릭하십시오.
- 설정 을 클릭하고 환경 특성 탭으로 이동하십시오.
pipeline-config-repo속성의 값을 샘플 애플리케이션 저장소 URL 를 가리키도록 편집합니다.- CI 도구 체인으로 돌아가십시오.
- ci-pipeline 을 클릭하십시오.
- 설정 을 클릭하고 환경 특성 탭으로 이동하십시오.
pipeline-config-repo속성의 값을 샘플 애플리케이션 저장소 URL 를 가리키도록 편집합니다.
CI 파이프라인은 이제 샘플 앱 저장소 pipeline-config 를 구성 저장소로 사용합니다.
옵션 2: 샘플 애플리케이션 저장소를 사용자 고유의 애플리케이션 저장소로 바꾸기
샘플 앱 저장소를 자체 앱 저장소로 대체하려면 다음 단계를 완료하십시오.
- IBM Cloud 콘솔에서 메뉴 아이콘
> 플랫폼 자동화 > 툴체인을 클릭하고 편집하려는 CI 툴체인을 선택합니다.
- 샘플 애플리케이션 소스 코드 저장소를 찾아 구성을 선택하십시오.
- 저장소 URL 를 여러분의 애플리케이션 소스 코드 저장소 URL 로 바꾸십시오.
- 통합 저장을 클릭하십시오.
샘플 앱 저장소를 대체한 후 새 앱 저장소에 .pipeline-config.yaml 파일 및 해당 스크립트가 포함되어 있는지 확인하십시오. 샘플 앱 저장소에서 애플리케이션 저장소로 .pipeline-config.yaml 파일 및 스크립트를 복사하거나 이 샘플 구성 파일 을 사용하십시오.
CI 파이프라인 구성
애플리케이션 저장소를 추가한 후 새 저장소에 대해 작업하도록 CI 파이프라인을 구성해야 합니다.
파이프라인 트리거 구성
기본 트리거는 샘플 애플리케이션 저장소를 사용하므로 앱 저장소를 사용하도록 업데이트해야 합니다. 트리거 설정을 확인하고 필요한 경우 수정하여 모든 트리거가 앱 저장소를 가리키는지 확인하십시오. 다음 단계를 완료하십시오.
- IBM Cloud 콘솔에서 메뉴 아이콘
> 플랫폼 자동화 > 툴체인을 클릭하고 편집하려는 CI 툴체인을 선택합니다.
- pr-pipeline 을 클릭하십시오.
- Git 의 PR 트리거를 편집하고 애플리케이션 저장소 URL 와 브랜치를 입력하세요.
- 저장 을 클릭하십시오.
- CI 도구 체인으로 돌아가서 ci-pipeline 을 클릭하십시오.
- Git CI 트리거를 편집하고 애플리케이션 저장소 URL 와 브랜치를 입력하세요. 특성 섹션에서 앱 이름이 올바른지 확인하십시오.
- 저장 을 클릭하십시오.
- 수동 트리거를 편집하십시오. 특성 섹션에서 앱 이름이 올바른지 확인하십시오.
- 저장소 및 분기 특성이 올바르고 앱 저장소를 가리키는지 확인하십시오.
.pipeline-config.yaml 파일 구성
샘플 앱 저장소에서 애플리케이션 저장소로 .pipeline-config.yaml 파일을 복사하거나 이 샘플 구성 파일 을 사용하십시오.
pr-pipeline 및 ci-pipeline 모두에 대해 pipeline-config, pipeline-config-branch 및 pipeline-config-repo 매개변수가 올바르게 설정되고 구성과 일치하는지 확인하십시오. 이러한 매개변수가 올바르게 설정되지 않으면 잘못된 분기에 대한 변경사항을 커미트할
수 있으며, 이로 인해 파이프라인에 오류가 발생합니다.
pipeline-config-repo 변수가 설정되지 않은 경우 DevSecOps 파이프라인은 애플리케이션 소스 코드 리포지토리와 동일한 리포지토리로 가정합니다.
DevSecOps 에서 사용자 정의 스크립트 사용
pipeline-config.yaml 파일은 DevSecOps 파이프라인 동작을 조정하고 사용자 지정하는 핵심 구성 요소입니다. 이 파일은 스크립트를 사용하여 애플리케이션을 빌드, 테스트 및 배치합니다. 이 파일은 스테이지가 구성되는 방법 및 실행되는 스크립트를 정의합니다. 자세한 정보는 사용자 정의 스크립트 를 참조하십시오.
DevSecOps 파이프라인에서 사용되는 스크립트에는 두 가지 주요 범주가 있습니다.
- 애플리케이션을 빌드, 테스트 및 배치하는 데 사용되는 애플리케이션 관련 스크립트입니다. 이러한 스크립트는 사용자의 책임이며 DevSecOps 지원 범위를 벗어납니다. 이러한 스크립트에는 기본 구현이 없으므로 애플리케이션 또는 구성 저장소에 추가해야 합니다. Jenkins 또는 다른 소스에서 스크립트를 가져와야 할 수 있습니다.
- 보안 및 준수 스캔을 실행하는 보안 및 준수 스크립트입니다. 대부분 사용자 정의 구현을 사용하기 위해 대체할 수 있는 기본 스크립트 와 함께 제공됩니다.
시작 단계를 제외하고 CI, CD 또는 CC 파이프라인의 각 단계를 사용자 고유의 스크립트로 사용자 정의하여 단계의 기본 구현을 대체할 수 있습니다. 사용자 고유의 스크립트를 사용하여 시작 단계를 사용자 정의할 수 없습니다.
Bash 스크립트가 샘플로 제공되더라도 Python 또는 Go와 같은 다른 언어를 사용하여 애플리케이션을 빌드, 테스트 및 배치할 수 있습니다. 각 스테이지에 대해 올바른 image 를 사용 중인지 확인하십시오. DevSecOps 파이프라인 섹션의 Docker 이미지 를 참조하세요.
CI 파이프라인의 다양한 단계를 요약하는 단계 및 태스크 표를 참조하십시오. 이 테이블은 또한 스테이지에 기본 참조 구현이 있는지 여부, 스테이지를 사용자 정의하거나 건너뛸 수 있는지 여부 또는 스테이지 실행에 필요한 명시적 증거 콜렉션이 있는지 여부에 대한 통합 정보를 제공합니다.
Jenkins 또는 Travis에서 DevSecOps 로 마이그레이션
대부분의 DevSecOps 도입자들은 아무것도 없는 상태에서 시작하지 않습니다. 대부분의 채택자는 이미 해당 스크립트 라이브러리와 함께 지속적인 통합 및 지속적인 전달 프로세스를 보유하고 있습니다. 이러한 프로세스는 일반적으로 Jenkins, Travis 또는 일부 기타 플랫폼을 사용하여 구현됩니다.
DevSecOps:
pipeline-config.yaml구성 파일은 CI및 CD 파이프라인이 현재 오케스트레이션되는 방법을 반영해야 합니다. 각 단계와 단계는 DevSecOps 파이프라인 단계 에 매핑되어야 합니다.- 이미 배치된 동일한 스크립트, 기본 이미지 및 변수를 사용해야 합니다.
- 시크릿 특성을 시크릿 저장소 로 마이그레이션해야 합니다.
- 비시크릿 특성을 파이프라인 또는 트리거 특성으로 추가해야 합니다.
개발 모드에서 작업
CI및 CD 파이프라인에 대한 개발 모드를 사용하여 .pipeline-config.yaml 파일 및 스크립트의 구현을 테스트할 수 있습니다. 개발 모드 파이프라인은 보안 또는 준수 관련 태스크를 실행하지 않으므로 파이프라인에 대한 런타임이 줄어듭니다. 자세한 정보는 개발 모드에서 파이프라인 실행 을 참조하십시오.
개발 목적으로만 개발 모드를 사용하십시오. 개발 모드는 참조 구현으로 남아 있는 공식 DevSecOps CI 및 CD 파이프라인을 대체하는 것이 아닙니다.
CD 파이프라인 구성
DevSecOps 지속적 통합 및 지속적 배포 워크플로 에서 CI 파이프라인은 CI 파이프라인의 deploy-release 단계에서 인벤토리 저장소에 업데이트를 푸시합니다. 자세한 정보는 샘플 release.sh 스크립트 를 참조하십시오.
이 워크플로에서는 여러 CI 트리거와 다양한 DevSecOps CI 툴체인이 동일한 인벤토리 저장소에 기여할 수 있습니다.
CI 파이프라인과 달리 CD 파이프라인에서 사용되는 배치 스크립트는 Jenkins, Travis 또는 일부 기타 플랫폼의 현재 스크립트에서 inventory repo 의 항목을 사용하도록 조정되어야 합니다.
이 샘플 코드 는 인벤토리에서 정보를 검색하고 이를 사용하여 Kubernetes 배치를 실행하는 방법을 보여줍니다.
DevSecOps 스크립트 위치
DevSecOps 파이프라인에는 기본 보안 및 스캐닝 도구와 관련 스크립트가 함께 제공됩니다.
예를 들어, 스테이지 로그의 시작은 기본 스크립트를 참조합니다.
scan-artifact:
image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
dind: true
dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
abort_on_failure: false
image_pull_policy: IfNotPresent
script: |
#!/bin/sh
"/opt/commons/scan-artifact/scan.sh"
/opt/commons/scan-artifact/scan.sh 는 기본 스크립트입니다.
DevSecOps 파이프라인은 모든 작업 및 단계에서 사용할 수 있는 COMMONS_PATH 이라는 환경 변수에 commons 라이브러리 의 루트 폴더 경로를 제공합니다. 준수 기본 이미지에 빌드된 스크립트에 액세스하려면 필요한 스크립트 폴더와 함께 COMMONS_PATH 변수를 사용하십시오.
source "${COMMONS_PATH}/<script folder in commons>/<script file name>
CD 파이프라인의 다양한 단계를 요약하는 단계 및 태스크 표를 참조하십시오. 이 테이블은 또한 스테이지에 기본 참조 구현이 있는지 여부, 스테이지를 사용자 정의하거나 건너뛸 수 있는지 여부 또는 스테이지 실행에 필요한 명시적 증거 콜렉션이 있는지 여부에 대한 통합 정보를 제공합니다.
환경 특성
DevSecOps 파이프라인에는 미리 정의된 환경 속성이 제공되지만, 필요에 따라 사용자 정의 속성을 추가할 수 있습니다. get_env 명령 을 사용하여 스크립트에서 이러한 특성 값에 액세스할 수 있습니다.
특성 및 해당 선택적 기본값을 파이프라인 또는 트리거에 추가한 후에는 스크립트에서 get_env 명령을 사용하여 특성의 값을 검색하십시오. 다음 예제는 my-variable 특성의 값을 검색합니다.
MY_VARIABLE=$(get_env my-variable "")
set_env 명령 을 사용하여 스크립트에서 특성 값을 동적으로 대체할 수도 있습니다. 다음 예제는 my-variable 특성의 값을 대체합니다.
set_env my-variable new-value
스테이지 건너뛰기
일부 스테이지는 관련이 없을 수 있습니다. 예를 들어, Docker 이미지를 빌드하지 않거나 아직 적합성 테스트를 구현하지 않았을 수 있습니다. 스테이지를 건너뛰려는 경우 exit 0 를 포함하도록 .pipeline-config.yaml 파일을 편집하거나 skip 변수를 true 로 설정할 수 있습니다.
다음 예제는 exit 0 를 추가하여 스테이지를 건너뜁니다.
scan-artifact:
image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
dind: true
dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
abort_on_failure: false
image_pull_policy: IfNotPresent
skip: false
runAfter: null
script: |
#!/bin/sh
exit 0
"/opt/commons/scan-artifact/scan.sh"
DevSecOps 파이프라인의 Docker 이미지
기본적으로 DevSecOps 파이프라인은 IBM Continuous Delivery 이미지를 사용합니다. 이러한 이미지에는 스크립트를 실행하기 위한 Node 및 Java 와 같은 가장 일반적인 도구 중 일부가 포함되어 있습니다. 다른 벤더의 이미지 또는 선호하는 도구를 포함하는 사용자 정의 이미지를 사용할 수도 있습니다.
DevSecOps 파이프라인에서 사용되는 Docker 이미지는 .pipeline-config.yaml 파일에 지정됩니다. 각 스테이지는 다른 이미지를 사용할 수 있습니다.
이미지 버전 변경
요구사항에 따라 다른 버전의 이미지를 사용해야 할 수도 있습니다. 이미지 버전을 변경하려면 .pipeline-config.yaml 파일을 편집하십시오. 예를 들어, YAML 파일 icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24에서 다음 이미지를 참조한 경우 이를 icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.27 로 변경하면 이미지의 버전 3.27 이 사용됩니다.
동일한 방법으로 스테이지의 dind_image 를 변경하십시오.
scan-artifact:
image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
dind: true
dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
(...)
지원 받기
IBM Cloud IBM 의 AI 어시스턴트( )는 에서 일하는 것과 이용 가능한 카탈로그를 이용해 솔루션을 구축하는 것에 대해 배울 수 있도록 설계되었습니다. watsonx IBM Cloud AI 어시스턴트로부터 도움 받기를 참조하세요.
그래도 문제점을 해결할 수 없는 경우 지원 케이스를 열 수 있습니다. 자세한 정보는 지원 케이스 작성을 참조하십시오. 피드백을 제공하고자 하는 경우, 피드백 제출하기를 참조하십시오.