초보자를 위한 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 템플릿이 있습니다.

DevSecOps 파이프라인이 저장소를 사용하는 방법

DevSecOps 파이프라인은 애플리케이션을 빌드, 테스트 및 배포하기 위해 두 개의 저장소를 사용합니다.

  • app-repo: 애플리케이션의 소스 코드를 포함하는 애플리케이션 저장소입니다.
  • config-repo: 파이프라인 구성 YAML 파일 및 스크립트를 포함하는 구성 저장소입니다.

DevSecOps 샘플 앱 에서 이 두 저장소는 동일합니다. 대부분의 DevSecOps 도입자들은 이 패턴으로 시작합니다. 그러나 더 많은 마이크로서비스를 온보딩할 때 전용 및 별도의 파이프라인 구성 저장소가 필요할 수 있습니다. 애플리케이션 저장소와 구성 저장소가 샘플 앱에서 동일하기 때문에 파이프라인이 실행될 때 저장소가 두 번 복제되며, 이로 인해 오류가 발생할 수 있습니다. 따라서 다양한 DevSecOps 툴체인과 파이프라인에서 공유하고 재사용할 수 있는 구성 파일과 스크립트를 호스팅하는 별도의 구성 저장소를 갖는 것이 가장 좋습니다. 구성 저장소 사용자 정의에 대한 자세한 정보는 고급 사용자 정의 단계 를 참조하십시오.

DevSecOps 스크립트는 app-repoconfig-repo 를 두 개의 별도 리포지토리로 간주합니다. 스크립트는 파이프라인의 시작 단계 중에 저장소를 두 번 복제합니다. 이러한 복제본을 app-repoone-pipeline-config-repo 라고 합니다. 각 스테이지는 config repo 의 컨텍스트에서 실행됩니다.

애플리케이션 배치

계속하기 전에 샘플 Node 애플리케이션을 사용하여 DevSecOps CI 툴체인을 만들고 테스트해 보세요.

기존 DevSecOps CI 툴체인에 첫 번째 애플리케이션을 온보딩하는 데는 세 가지 주요 방법이 있습니다.

  • 옵션 1: 애플리케이션 저장소를 도구 체인에 추가하고 샘플 애플리케이션 저장소를 구성 저장소로 사용하십시오.
  • 옵션 2: 샘플 애플리케이션 저장소를 애플리케이션 저장소로 대체하십시오.
  • 옵션 3: 애플리케이션 저장소를 도구 체인에 추가하고 전용 구성 저장소를 사용하십시오. 이 옵션에 대한 자세한 정보는 고급 사용자 정의 단계 를 참조하십시오.

DevSecOps 툴체인은 IBM 으로 관리되는 Gitlab 저장소(GRIT이라고도 함)를 사용합니다. 다른 Git 제공자를 대신 사용할 수 있습니다. 예를 들어, 앱 저장소는 GitHub 또는 Gitlab에서 호스팅될 수 있습니다.

옵션 1: 애플리케이션 저장소를 추가하고 샘플 애플리케이션 저장소를 구성 저장소로 사용

애플리케이션 저장소를 도구 체인에 추가하고 샘플 애플리케이션 저장소를 구성 저장소로 사용하려면 다음 단계를 완료하십시오.

  1. IBM Cloud 콘솔에서 메뉴 아이콘 메뉴 아이콘 > 플랫폼 자동화 > 툴체인을 클릭하고 편집하려는 툴체인을 선택합니다.
  2. 추가 를 클릭하십시오.
  3. 앱 저장소가 호스팅되는 위치 ( Gitlab 또는 GitHub) 를 선택하십시오.
  4. 기본 서버를 사용하거나 새 서버를 추가하십시오.
  5. 사용자 지정 서버의 사용자 이름( URL )과 개인 액세스 토큰을 입력합니다.
  6. 통합 작성을 클릭하십시오.
  7. 응용 프로그램 소스 코드 저장소 URL 에 접속하세요.
  8. 통합 작성을 클릭하십시오.

다음 단계를 완료하여 샘플 애플리케이션 저장소를 구성 저장소로 지정하십시오.

  1. IBM Cloud 콘솔에서 메뉴 아이콘 메뉴 아이콘 > 플랫폼 자동화 > 툴체인을 클릭하고 편집하려는 툴체인을 선택합니다.
  2. pr-pipeline 을 클릭하십시오.
  3. 설정 을 클릭하고 환경 특성 탭으로 이동하십시오.
  4. pipeline-config-repo 속성의 값을 샘플 애플리케이션 저장소 URL 를 가리키도록 편집합니다.
  5. CI 도구 체인으로 돌아가십시오.
  6. ci-pipeline 을 클릭하십시오.
  7. 설정 을 클릭하고 환경 특성 탭으로 이동하십시오.
  8. pipeline-config-repo 속성의 값을 샘플 애플리케이션 저장소 URL 를 가리키도록 편집합니다.

CI 파이프라인은 이제 샘플 앱 저장소 pipeline-config 를 구성 저장소로 사용합니다.

옵션 2: 샘플 애플리케이션 저장소를 사용자 고유의 애플리케이션 저장소로 바꾸기

샘플 앱 저장소를 자체 앱 저장소로 대체하려면 다음 단계를 완료하십시오.

  1. IBM Cloud 콘솔에서 메뉴 아이콘 메뉴 아이콘 > 플랫폼 자동화 > 툴체인을 클릭하고 편집하려는 CI 툴체인을 선택합니다.
  2. 샘플 애플리케이션 소스 코드 저장소를 찾아 구성을 선택하십시오.
  3. 저장소 URL 를 여러분의 애플리케이션 소스 코드 저장소 URL 로 바꾸십시오.
  4. 통합 저장을 클릭하십시오.

샘플 앱 저장소를 대체한 후 새 앱 저장소에 .pipeline-config.yaml 파일 및 해당 스크립트가 포함되어 있는지 확인하십시오. 샘플 앱 저장소에서 애플리케이션 저장소로 .pipeline-config.yaml 파일 및 스크립트를 복사하거나 이 샘플 구성 파일 을 사용하십시오.

CI 파이프라인 구성

애플리케이션 저장소를 추가한 후 새 저장소에 대해 작업하도록 CI 파이프라인을 구성해야 합니다.

파이프라인 트리거 구성

기본 트리거는 샘플 애플리케이션 저장소를 사용하므로 앱 저장소를 사용하도록 업데이트해야 합니다. 트리거 설정을 확인하고 필요한 경우 수정하여 모든 트리거가 앱 저장소를 가리키는지 확인하십시오. 다음 단계를 완료하십시오.

  1. IBM Cloud 콘솔에서 메뉴 아이콘 메뉴 아이콘 > 플랫폼 자동화 > 툴체인을 클릭하고 편집하려는 CI 툴체인을 선택합니다.
  2. pr-pipeline 을 클릭하십시오.
  3. Git 의 PR 트리거를 편집하고 애플리케이션 저장소 URL 와 브랜치를 입력하세요.
  4. 저장 을 클릭하십시오.
  5. CI 도구 체인으로 돌아가서 ci-pipeline 을 클릭하십시오.
  6. Git CI 트리거를 편집하고 애플리케이션 저장소 URL 와 브랜치를 입력하세요. 특성 섹션에서 앱 이름이 올바른지 확인하십시오.
  7. 저장 을 클릭하십시오.
  8. 수동 트리거를 편집하십시오. 특성 섹션에서 앱 이름이 올바른지 확인하십시오.
  9. 저장소 및 분기 특성이 올바르고 앱 저장소를 가리키는지 확인하십시오.

.pipeline-config.yaml 파일 구성

샘플 앱 저장소에서 애플리케이션 저장소로 .pipeline-config.yaml 파일을 복사하거나 이 샘플 구성 파일 을 사용하십시오.

pr-pipelineci-pipeline 모두에 대해 pipeline-config, pipeline-config-branchpipeline-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 어시스턴트로부터 도움 받기를 참조하세요.

그래도 문제점을 해결할 수 없는 경우 지원 케이스를 열 수 있습니다. 자세한 정보는 지원 케이스 작성을 참조하십시오. 피드백을 제공하고자 하는 경우, 피드백 제출하기를 참조하십시오.