IBM Cloud Docs
고급의DevSecOps 파이프라인 사용자 정의

고급의DevSecOps 파이프라인 사용자 정의

고급 기능에 대해 알아보세요.DevSecOps 첫 번째 애플리케이션이나 마이크로서비스를 온보딩한 후 채택됩니다.

반드시 검토해 보세요.기본DevSecOps 파이프라인 사용자 정의. 여기에서 사용 가능한 다양한 템플릿, 지원 옵션 및 시작하는 데 필요한 기타 중요한 정보에 대해 알아볼 수 있습니다.DevSecOps.

디자인 선택사항

더 많은 애플리케이션과 마이크로서비스를 온보딩하는 동안DevSecOps, 다음과 같은 디자인 질문이 있을 수 있습니다.

  • 마이크로서비스당 하나의 도구 체인이 필요합니까?
  • 마이크로서비스당 하나의 파이프라인이 필요합니까?
  • 공유를 사용해야 합니까?DevSecOps 인벤토리 및 문제를 위한 저장소, 아니면 별도의 저장소가 필요합니까?

다음 정보 및 우수 사례는 이러한 디자인 선택사항을 작성하는 데 도움을 주기 위한 것입니다.

도구 체인 및 파이프라인 고려사항

대부분의 애플리케이션은 서로 다른 소스 저장소가 있는 여러 마이크로서비스로 구성됩니다. 일반적으로 단일 도구 체인은 논리적으로 그룹화된 마이크로서비스를 호스트하는 데 사용됩니다. 일반적으로 하나의 도구 체인과 하나의 파이프라인을 사용하거나 가능한 한 적은 파이프라인을 사용하지만 여러 트리거를 사용하십시오. 각 파이프라인 내에서 필요한 수의 트리거 (파이프라인당 최대 1024개의 트리거) 를 복제하고 구성할 수 있습니다. 이 전략은 공통 프로세스, 스크립트 및 구성 파일을 적용하는 데 도움이 됩니다. 자세한 정보는 하나의 CI 도구 체인에서 여러 앱 구성 을 참조하십시오.

이 접근 방식에는 다음과 같은 장점이 있습니다.

  • 더 적은 파이프라인을 사용하면 중복을 방지하고 오류를 줄입니다. 예를 들어, 환경 특성 또는 시크릿이 추가, 편집 또는 삭제되는 경우에도 업데이트를 더 쉽게 유지보수할 수 있습니다.
  • 이 접근 방식을 사용하면 서비스 온보딩이 더 빠릅니다. 마이크로서비스에 대한 Git 통합을 추가하고 Git 및 수동 트리거를 복제한 후 필요에 따라 수정하십시오. 그런 다음 .pipeline-config.yaml 파일 및 스크립트가 마이크로서비스에 대해 구현되었는지 확인하십시오.

이 접근 방식에는 다음과 같은 단점이 있습니다.

  • 하나의 편집은 동일한 파이프라인을 사용 중인 모든 팀에 영향을 줄 수 있습니다.
  • 사용자 액세스는 Identity and Access Management(IAM) 를 사용하여 관리되며 파이프라인 레벨이 아닌 도구 체인 레벨에서 설정됩니다. 따라서 여러 서비스에 대해 단일 도구 체인을 사용하는 경우 팀의 모든 구성원이 다른 팀의 파이프라인을 볼 수 있습니다. IAM에서 사용자의 액세스 권한에 따라 파이프라인을 편집, 삭제 또는 트리거할 수 있습니다.

청구 고려사항

Continuous Delivery 서비스는 CD 인스턴스당 권한 부여된 사용자 수 및 도구 체인에 사용하는 리소스 그룹 수에 따라 비용 청구를 결정합니다. 저장소에 대한 액세스 권한이 있는 사용자도 권한 부여된 사용자로 간주됩니다. 자세한 정보는 권한 부여된 사용자를 참조하십시오. 비용을 줄이려면 모든 도구 체인이 동일한 리소스 그룹에 있는지 확인하십시오. 이를 수행해도 애플리케이션 환경을 포함하는 다른 리소스 그룹에 배치하는 도구 체인의 기능에는 영향을 주지 않습니다.

DevSecOps 저장소 고려사항

여러 마이크로서비스로 구성된 애플리케이션을 만드는 경우 대부분DevSecOps 증거 저장소를 제외한 저장소는 마이크로서비스 전체에서 공유될 수 있습니다.

자세한 내용은 다음을 참조하세요.어떻게DevSecOps 파이프라인은 저장소를 사용합니다..

공유 구성 저장소 고려사항

그만큼DevSecOps 샘플 애플리케이션은 같은 위치에 있는 .pipeline-config.yaml 구성 파일 및 해당 스크립트. 여러 마이크로서비스를 온보딩할 때 가장 좋은 방법은 소스 코드 저장소를 분리하는 것입니다.DevSecOps 구성 파일 및 스크립트. CI, CD 또는 CC 파이프라인에서 사용할 수 있는 별도의 전용 공통 구성 저장소에 이를 저장하십시오.

이는 다음으로 구성됩니다.

  • 공통 스크립트 라이브러리 및.pipeline-config.yaml 파일을 호스트하는 전용 Git 저장소입니다.
  • 모든 서비스에 공통되는 단일.pipeline-config.yaml 파일. 너무 복잡하거나 가능하지 않은 경우에는 다른.pipeline-config.yaml 파일을 사용하십시오.
  • 폴더별로 사용자 정의합니다. 구성 저장소의 다른 스크립트 폴더를 가리키도록.pipeline-config.yaml 파일을 구현하십시오. 스크립트를 별도의 CI, CD및 CC 폴더에 구성하거나 서비스 언어 (Go, Python, NodeJS), 서비스, 애플리케이션 이름 또는 사용자의 요구에 가장 적합한 항목을 기반으로 구성하십시오.

pipeline-config-repo 파이프라인 특성 (선택적으로 pipeline-config-branch) 의 값을 공유 구성 저장소 URL로 설정하여 이 공유 구성 저장소를 사용하도록 파이프라인을 변경하십시오.

자원 명세 저장소 고려사항

단일 재고 저장소를 여러 파이프라인 및 도구 체인 간에 공유할 수 있습니다. 여러 CI 도구 체인, 파이프라인 및 트리거가 동일한 재고 저장소에 기여할 수 있습니다. CI 파이프라인은 일반적으로 릴리스 단계 중에 자원 명세 저장소에 업데이트를 푸시합니다. 그러면 자원 명세 저장소가 CD 파이프라인의 소스 입력으로 사용됩니다. 일반적으로 재고 저장소를 동일한 도구 체인으로 그룹화하여 최종적으로 작성되는 변경 요청 수를 줄이는 것이 좋습니다.

공유 인벤토리 저장소 사용은 마이크로서비스 온보딩을 시작하기 전에 작성해야 하는 아키텍처 의사결정입니다. 이 의사결정은 파이프라인이 실행될 때 작성되는 변경 요청 수에 영향을 주기 때문입니다. 예를 들어 10개의 마이크로서비스를 온보딩한다고 가정해 보겠습니다.DevSecOps. 10개의 서로 다른 인벤토리 저장소가 있는 10개의 서로 다른 CD 도구 체인을 사용할 수 있습니다. 이로 인해 CD 파이프라인이 실행될 때마다 10개의 서로 다른 변경 요청이 발생합니다. 공통 인벤토리 저장소 및 공통 CD 도구 체인을 공유하는 경우 이러한 10개의 서로 다른 마이크로서비스를 관리하는 것이 더 쉽습니다. 이로 인해 여러 마이크로서비스를 업데이트하는 경우에도 모두 인벤토리 저장소 및 도구 체인을 공유하므로 하나의 변경 요청만 발생합니다.

저장소 고려사항을 발행합니다.

문제 저장소는 마이크로서비스에 대한 모든 취약성 문제가 추적되는 위치입니다. 공유 인벤토리 저장소를 사용하기로 결정한 경우 공유 문제 저장소도 사용할 수 있습니다.

파이프라인 또는 트리거 레벨에서 incident-assignessincident-labels 를 설정하면 올바른 팀에 문제를 자동으로 지정하는 데 도움이 됩니다. 자세한 정보는 연속 배치 매개변수 를 참조하십시오.

증거 저장소 고려사항

증거 저장소에는 준수 정보가 포함되어 있으며 준수 감사 중에 사용할 서류 추적을 제공합니다.

인벤토리 저장소 및 문제 저장소가 공유되는 경우에도 여러 도구 체인에 대해 동일한 증거 저장소를 사용하지 마십시오. 증거 저장소는 생성되는 증거의 양 때문에 크기가 더 커지는 경향이 있습니다.DevSecOps 파이프라인. 여러 도구 체인에 동일한 증거 저장소를 사용하면 더 큰 증거 저장소가 생성되어 파이프라인의 성능 문제가 발생할 수 있습니다. 정기적으로 증거 저장소를 제거 하여 오래된 증거를 제거하고 저장소를 가능한 한 작게 유지하십시오.

IBM Cloud Object Storage 고려사항

공유 인벤토리 저장소 및 공유 문제 저장소를 사용 중인 경우 IBM Cloud® Object Storage 의 공유 인스턴스도 사용할 수 있습니다. 다음 단계를 완료하십시오.

  1. 도구 체인 및 파이프라인에서 사용할 IBM Cloud Object Storage 의 인스턴스 를 작성하십시오.
  2. 해당 공유 IBM Cloud Object Storage 인스턴스 내에서 마이크로서비스당 하나의 Object Storage 버킷을 작성하십시오.
  3. 적용 가능한 경우 cos-bucket-name 환경 특성을 설정하여 IBM Cloud Object Storage 버킷을 사용하도록 파이프라인 및 트리거를 설정하십시오.

동일한 CI, CD및 CC 파이프라인 내의 모든 마이크로서비스는 배치 환경에 관계없이 하나의 Object Storage 버킷을 공유합니다. Object Storage 버킷은 증거 저장소와 유사하게 작동하지만 대형 증거 저장소에서 발생할 수 있는 성능 문제가 없습니다. 대형 Object Storage 버킷에서는 성능 문제가 발생하지 않으므로 Object Storage 버킷에서 증거를 제거할 필요가 없습니다.

다중 환경에 배치

여러 가지 방법으로 CD 파이프라인을 사용하여 여러 대상 환경에 배치할 수 있습니다.

targeted environment 에는 인벤토리 저장소에 해당 분기가 있어야 합니다. 여기서 변경사항은 source 에서 target 분기로 승격됩니다.

다음과 같은 선택적 디자인이 사용자의 아키텍처에 적합할 수 있습니다.

  • 대상 환경마다 하나의 수동 트리거를 사용하십시오. 트리거를 복제한 후 새 환경에 맞게 환경 특성을 편집하십시오.
  • 특정 구성 설정이 파일에 저장되는 대상 환경당 하나의 폴더가 있는 Git 구성 저장소를 사용하십시오.

기본 및 사용자 정의 스크립트에 대한 작업

대부분의 보안 및 준수 스크립트는 스테이지에 제공된 사용자 정의 스크립트가 없는 경우 실행되는 기본 스크립트 와 함께 제공됩니다. 실행되는 스크립트, 해당 소스 스크립트를 찾을 위치 및 기본 스크립트를 대체하는 방법을 판별하는 것이 어려울 수 있습니다.

실행되는 스크립트 식별

단계에 대해 실행되는 스크립트를 식별하려면 파이프라인 실행 (CI 파이프라인이 권장됨) 을 여십시오. 태스크를 펼친 후 run-stage 를 클릭하여 로그를 여십시오. run-stage 로그의 시작 부분은 스크립트가 있는 저장소를 포함하여 스테이지에서 사용된 스크립트에 대한 정보를 제공합니다. 로그에서 스크롤하여 실행된 스크립트에 대한 세부사항을 찾을 수 있습니다. 예를 들어, code-compliance-checks 태스크의 run-stage 로그에는 스테이지에 대한 환경 특성을 포함하는 다음 정보가 있을 수 있습니다.

compliance-checks:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.18
  dind: true
  abort_on_failure: false
  image_pull_policy: IfNotPresent
  script:
    #!/bin/sh

    "/opt/commons/compliance-checks/run.sh"

이 예제에서 실행되는 스크립트는 commons library 에 있는 /opt/commons/compliance-checks/run.sh 입니다. 이 공통 라이브러리를 소스로 사용하여 특정 에지 케이스에 맞게 사용자 정의할 수 있는 코드를 복사하십시오. 예제에서 compliance-checks/run.shcompliance-commons library 에 있습니다.

기본 스크립트 대체

기본 스크립트를 대체하려면 다음 단계를 완료하십시오.

  1. 스테이지 로그에서 기본 스크립트를 식별하는 스니펫을 복사하십시오.
compliance-checks:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.18
  dind: true
  abort_on_failure: false
  image_pull_policy: IfNotPresent
  script:
    #!/bin/sh

    "/opt/commons/compliance-checks/run.sh"
  1. 스니펫을 .pipeline-config.yaml 파일에 붙여넣으십시오.
  2. 스크립트가 호출되기 전이나 후에 사용자 정의 코드를 추가하십시오.
  3. 필요에 따라 특성을 편집, 삭제 또는 추가하십시오.

다음 예제는 .pipeline-config.yaml 파일에서 업데이트된 스크립트를 표시합니다.

compliance-checks:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.18
  dind: true
  abort_on_failure: false
  image_pull_policy: IfNotPresent
  script: |
    #!/bin/sh
    # run some custom script here
    ./scripts/my-custom-script1.sh

    "/opt/commons/compliance-checks/run.sh"

    # then some additional work
    ./scripts/my-custom-script2.sh

자세한 정보는 사용자 정의 스크립트 를 참조하십시오.

사용할 Terraform 템플릿DevSecOps 코드형 툴체인

다음 툴체인은 생성할 코드를 제공합니다.DevSecOps Terraform을 사용하는 CI, CD 및 CC 도구 체인:

이러한 Terraform 도구 체인에 대한 초기 액세스는 있는 그대로 제공됩니다. 이러한 도구 체인은 활성 개발 중이므로 변수 및 변수 이름이 변경될 수 있습니다.