초보자를 위한 DevSecOps 파이프라인 사용자 정의
DevSecOps를 채택하고 첫 번째 애플리케이션 또는 마이크로서비스를 온보딩하기 위한 기본사항을 알아보십시오.
DevSecops 도구 체인 정보
DevSecOps 우수 사례 및 보안 도구를 구현하는 IBM Cloud DevSecOps Continuous Integration (CI), Continuous Deployment (CD) 및 Continuous Compliance (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 도구 체인은 GRIT라고도 하는 IBM에서 관리하는 Gitlab 저장소를 사용합니다. 다른 Git 제공자를 대신 사용할 수 있습니다. 예를 들어, 앱 저장소는 GitHub 또는 Gitlab에서 호스팅될 수 있습니다.
옵션 1: 애플리케이션 저장소를 추가하고 샘플 애플리케이션 저장소를 구성 저장소로 사용
애플리케이션 저장소를 도구 체인에 추가하고 샘플 애플리케이션 저장소를 구성 저장소로 사용하려면 다음 단계를 완료하십시오.
- IBM Cloud 콘솔에서 메뉴 아이콘
> DevOps > 도구 체인을 클릭하고 편집할 도구 체인을 선택하십시오.
- 추가 를 클릭하십시오.
- 앱 저장소가 호스팅되는 위치 (
Gitlab
또는GitHub
) 를 선택하십시오. - 기본 서버를 사용하거나 새 서버를 추가하십시오.
- 사용자 정의 서버 및 개인 액세스 토큰의 URL을 입력하십시오.
- 통합 작성을 클릭하십시오.
- 애플리케이션 소스 코드 저장소 URL을 입력하십시오.
- 통합 작성을 클릭하십시오.
다음 단계를 완료하여 샘플 애플리케이션 저장소를 구성 저장소로 지정하십시오.
- IBM Cloud 콘솔에서 메뉴 아이콘
> DevOps > 도구 체인을 클릭하고 편집할 도구 체인을 선택하십시오.
- pr-pipeline 을 클릭하십시오.
- 설정 을 클릭하고 환경 특성 탭으로 이동하십시오.
- 샘플 애플리케이션 저장소 URL을 가리키도록
pipeline-config-repo
특성의 값을 편집하십시오. - CI 도구 체인으로 돌아가십시오.
- ci-pipeline 을 클릭하십시오.
- 설정 을 클릭하고 환경 특성 탭으로 이동하십시오.
- 샘플 애플리케이션 저장소 URL을 가리키도록
pipeline-config-repo
특성의 값을 편집하십시오.
CI 파이프라인은 이제 샘플 앱 저장소 pipeline-config
를 구성 저장소로 사용합니다.
옵션 2: 샘플 애플리케이션 저장소를 사용자 고유의 애플리케이션 저장소로 바꾸기
샘플 앱 저장소를 자체 앱 저장소로 대체하려면 다음 단계를 완료하십시오.
- IBM Cloud 콘솔에서 메뉴 아이콘
> DevOps > 도구 체인을 클릭하고 편집할 CI 도구 체인을 선택하십시오.
- 샘플 애플리케이션 소스 코드 저장소를 찾아 구성을 선택하십시오.
- 저장소 URL을 애플리케이션 소스 코드 저장소 URL로 바꾸십시오.
- 통합 저장을 클릭하십시오.
샘플 앱 저장소를 대체한 후 새 앱 저장소에 .pipeline-config.yaml
파일 및 해당 스크립트가 포함되어 있는지 확인하십시오. 샘플 앱 저장소에서 애플리케이션 저장소로 .pipeline-config.yaml
파일 및 스크립트를 복사하거나 이 샘플 구성 파일 을 사용하십시오.
CI 파이프라인 구성
애플리케이션 저장소를 추가한 후 새 저장소에 대해 작업하도록 CI 파이프라인을 구성해야 합니다.
파이프라인 트리거 구성
기본 트리거는 샘플 애플리케이션 저장소를 사용하므로 앱 저장소를 사용하도록 업데이트해야 합니다. 트리거 설정을 확인하고 필요한 경우 수정하여 모든 트리거가 앱 저장소를 가리키는지 확인하십시오. 다음 단계를 완료하십시오.
- IBM Cloud 콘솔에서 메뉴 아이콘
> DevOps > 도구 체인을 클릭하고 편집할 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_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
(...)
지원 받기
DevSecOps 파이프라인을 사용자 정의할 때 Slack에 참여 하여 IBM Cloud 개발 팀에서 직접 도움을 받으십시오.