DevSecOps에서 에셋 생성 및 증거 수집
DevSecOps 프로세스의 영역에서 자산 생성 및 증거 수집은 보안이 소프트웨어 개발 라이프사이클의 모든 단계와 원활하게 통합되도록 보장합니다. 이 접근 방식은 보안이 나중에 생각하는 것이 아니라 개발 프로세스의 고유한 부분인 "shift-left" 의 개념을 구현합니다. DevSecOps, with its DevSecOps Continuous Integration and Continuous Delivery (CI/CD), empowers teams to identify vulnerabilities at the earliest stages, facilitating the release of compliant software.
자산 작성 및 증거 수집은 Onepipeline 에코시스템에서 중요한 역할을 합니다. 보안 표준을 준수하려면 이 포괄적인 안내서에 설명된 가이드라인을 준수해야 합니다. 이를 통해 소프트웨어 개발 프로세스가 효율적일 뿐만 아니라 처음부터 안전한지 확인할 수 있습니다.
DevSecOps에서 에셋 정의하기
DevSecOps,의 맥락에서 자산은 엄격한 테스트와 스캔을 거치는 기본 개체를 의미합니다. 이러한 자산은 Docker 이미지에 대한 저장소의 기존 Git 커미트와 같은 다양한 양식을 포함합니다. 자산은 스캔 또는 테스트가 수행된 오브젝트를 나타내는 증거 콜렉션 프로세스의 초점입니다. 놀랍게도 DevSecOps's 유연성은 파이프라인 실행이나 COS(Cloud Object Storage) 버킷과 같은 추상적인 개체를 포함하여 기존 코드와 이미지를 넘어 이에 대한 증거를 수집할 수 있는 한 그 범위를 넓혀줍니다.
다양한 유형의 자산 유형이 있습니다.
최적의 명확성을 위해 자산을 명확하게 식별해야 합니다. 다음은 몇 가지 예입니다.
- 자산 커미트: 저장소 및 커미트 해시 포함: https://repo.url/org/repo#
- 이미지 자산: Docker 이미지 및 해당 요약 포함: docker://registry.URL/name@sha256:
- 파이프라인 실행 자산: 파이프라인 및 실행 ID 거부:
파이프라인 :// < PIPELINE_ID>/< RUN_ID>
- 기타 자산: 완전한 URL이 필요합니다. 예를 들어, 파일 이름이 있는 커미트 자산은 다음과 같습니다.
https://repo.url/org/repo#
태그, 분기 또는 기타 참조와 같은 변경 가능한 레이블을 사용하지 않는 것이 좋습니다. 이러한 레이블은 다시 읽거나 이동할 수 있으므로 잠재적인 문제가 발생할 수 있습니다.
일반 자산의 재고 표준화
일관되고 효과적인 재고 관리를 유지하려면 save_artifact 및 cocoa inventory 추가 명령을 사용할 때 특정 필드의 유효성을 검증하는 것이 중요합니다. 다음 가이드라인을 준수하면 제공된 정보를 기반으로 적절한 조치를 수행할 수 있습니다.
-
유형: 아티팩트의 유형을 표시하는 예약된 키워드: o 커미트 자산에 대한 커미트 o 이미지 자산에 대한 이미지 o 파이프라인 실행 자산에 대한 일반적인 이미지. 기타 유형의 아티팩트에 대해서는 예를 들어 고유 유형을 적절히 표시하는 문자열인 유형을 선택할 수 있습니다. 배치 파일의 경우 배치, tar 파일의 경우 tar
-
이름: 파이프라인 실행 전체에서 정적 아티팩트 이름을 유지보수합니다. 자동 닫기 문제의 정확성을 보장하기 위해 이름에 커미트 해시와 같은 동적 요소를 통합하지 마십시오. 예: o us.icr.io/my-registry/ my-app:20230828074614-master-commit-1@sha256:sha256-1 o my-app-202304211845444721_IKS_deployment
-
출처: 아티팩트의 원본을 설정하기 위한 완전한 도메인 URL을 제공하십시오. 예: o us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha256-1 o https://raw.github.ibm.com/org/my-app/commit-1/deployment_iks.yml
-
요약: 정의된 regex 패턴을 따르십시오. 'sha256' 으로 시작하고 콜론 (:) 이 뒤에 오며 실제 SHA256 해시 (sha256:
). 예: o sha256:sha256-1 -
서명: 아티팩트가 서명된 경우 관련 서명 정보를 포함하십시오. 이러한 표준화된 가이드라인을 따르면 재고 관리 프로세스가 향상되어 자산을 정확하게 추적하고 검색할 수 있습니다.
자산 정보를 저장하는 단계
-
다음 형식을 사용하여 리포지토리에 커밋에 대한 에셋 정보를 저장하세요. 빌드 에셋을 커밋과 연결하는 데 필요합니다.
예:
save_repo app-repo \ url=https://github.ibm.com/org/my-app \ path=my-app \ commit=commit1 \ branch=master \ buildnumber=1 -
저장_아티팩트 명령 사용 to store information for various asset types, such as image and deployment, by using the
save_artifactcommand
예:
이미지 에셋에 save_artifact 명령어를 사용합니다:
save_artifact app-image \
name=us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha2561 \
type=image \
digest=sha256:sha2561 \
tags=mytag1 \
source=https://github.ibm.com/org/my-app/commit-1 \
signature=sign-1 \
provenance=us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha2561
이미지가 아닌 에셋에 save_artifact 명령 사용:
save_artifact artifact-1 \
name=my-app_IKS_deployment \
type=deployment \
signature=sign2 \
deployment_type=IKS \
provenance=https://raw.github.ibm.com/org/my-app/commit-1/deployment_iks.yml
자산 정보에서 재고 항목을 작성하는 단계
코코아 재고 추가 를 사용하십시오.
| 인수 | 설명 | 필수/선택사항 | 코드/비고 사용 |
|---|---|---|---|
| 아티팩트(artifact) | 아티팩트 이름입니다. | [문자열] [필수] | 이 필드는 문제 관리의 주제에 사용됩니다. |
| 버전 | 지정된 애플리케이션의 버전 | [문자열] [필수] | 아티팩트의 버전 |
| 저장소-URL | 애플리케이션의 리포지토리 | [문자열] [필수] | 이 자산이 빌드되는 저장소의 URL |
| PIPELINE-RUN-ID | 파이프라인 실행의 ID | [문자열] [필수] | CD및 CC에서 증거의 범위를 지정하는 데 사용됩니다. |
| Commit-sha | 애플리케이션 버전의 정확한 커미트 | [문자열] [필수] | 이 자산이 빌드되는 저장소 URL의 커미트 |
| 이름 | 애플리케이션의 이름 | [문자열] [필수] | 파일 이름 또는 기본적으로 자산의 인벤토리 항목 |
| 빌드 번호 | 빌드의 빌드 번호 | [문자열] [필수] | 작성된 자산의 빌드 번호이며 인사이트 업데이트에 사용됩니다. |
| 유형 | 아티팩트 유형: 다음 중 하나 | ||
| 컨테이너 이미지, 가상, 이미지, 파일, 패키지 | [문자열] [필수] | 자산의 유형은 증거 수집 호출 전에 save_artifact 명령을 사용하여 저장한 것과 동일한 유형이어야 합니다. |
|
| app-artifacts | 자산의 추가 정보를 보유하려면 다음을 수행하십시오. | [문자열] [선택 사항] | |
| sha256 | 아티팩트의 sha256 해시 | [문자열] [필수] | 로커에 있는 자산의 경로를 정의하는 데 사용됩니다. |
| 출처 | 아티팩트가 저장되는 완전한 URL | [문자열] [필수] | |
| signature | 아티팩트 서명 | [문자열] [필수] | 자산의 서명을 확인하는 데 사용됩니다. 추가 설명이 필요합니다. |
| 환경 | 항목을 추가해야 하는 환경의 이름 | [문자열] [선택 사항] | 기본적으로 마스터로 설정되는 항목이 추가되는 재고 분기 |
예:
-
이미지 자산에 대한 코코아 재고 추가:
cocoa inventory add \ --artifact=us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha2561 \ --name=my-app \ --app-artifacts='{ "app": "my-app", "tags": "20230828074614-master-commit1" }' \ --signature=sign1 \ --provenance=us.icr.io/my-registry/my-app:20230828074614-master-commit-1@sha256:sha2561\ --sha256=sha256:sha2561 \ --type=image \ --repository-url=https://github.ibm.com/org/my-app \ --commit-sha=commit1 \ --version=commit1 \ --build-number=1 \ --pipeline-run-id=pipeline-run-1\ --org=Org\ --repo=my-inventory-20230421184544472 \ --git-provider=github \ --git-token-path=./inventory-token \ --git-api-url=https://github.ibm.com/api/v3 -
비이미지 자산에 대한 코코아 재고 추가:
cocoa inventory add \ --artifact=my-app_IKS_deployment \ --name=my-app_IKS_deployment \ --app-artifacts='{ "app": "my-app", "tags": "20230828074614-master-commit1" }' \ --signature=sign2 \ --provenance=https://raw.github.ibm.com/org/my-app/commit-1/deployment_iks.yml \ --sha256=sha256:sha2562 \ --type=deployment \ --repository-url=https://github.ibm.com/org/my-app \ --commit-sha=commit1 \ --version=commit1 \ --build-number=1 \ --pipeline-run-id=pipeline-run-1\ --org=Org\ --repo=my-inventory-20230421184544472 \ --git-provider=github \ --git-token-path=./inventory-token \ --git-api-url=https://github.ibm.com/api/v3
DevSecOps에서 증거 정의하기
증거는 특정 유형 및 도구가 수행되었거나 수행될 예정인 스캔 검사 또는 테스트를 증명하는 항목입니다. 증거에는 문제, 자산, 범위 및 첨부 파일에 대한 포인터가 포함되어 있지만 데이터는 최소입니다.
자산의 정보를 사용하여 증거를 수집하는 단계
이전 자산 정보에 대한 증거 콜렉션에 collect-evidence 사용
예:
- 아티팩트 자산에 대한 증거 콜렉션:
collect-evidence \ --tool-type "jest" \ --status "success" \ --evidence-type "com.ibm.unit_tests" \ --asset-type "artifact" \ --asset-key "artifact-1" - 저장소 자산에 대한 증거 콜렉션:
collect-evidence \ --tool-type "jest" \ --status "success" \ --evidence-type "com.ibm.unit_tests" \ --asset-type "repo" \ --asset-key "repo-1"
CD 파이프라인에서 배치는 아티팩트를 다운로드하기 위해 아티팩트 대신 출처 필드를 참조해야 합니다.