2장. 소프트웨어 공급망 보안 요소를 보려면 웹 콘솔에서 OpenShift Pipelines 설정
개발자 또는 관리자 화면을 사용하여 파이프라인을 생성하거나 수정하고 프로젝트 내의 주요 소프트웨어 공급망 보안 요소를 확인합니다.
다음을 볼 OpenShift Pipelines를 설정합니다.
- 프로젝트 취약점: 프로젝트 내에서 확인된 취약점을 보여줍니다.
- Software bill of materials (SBOMs): PipelineRun 구성 요소의 자세한 목록을 다운로드하거나 봅니다.
또한 Tekton Chains 요구 사항을 충족하는 PipelineRuns는 이름 옆에 서명된 배지가 표시됩니다. 이 배지는 파이프라인 실행 실행 결과가 암호화 방식으로 서명되어 OCI 이미지와 같이 안전하게 저장됨을 나타냅니다.
그림 2.1. 서명된 배지
PipelineRun은 Tekton Chain을 구성한 경우에만 해당 이름 옆에 서명된 배지를 표시합니다. Tekton 체인 구성에 대한 자세한 내용은 OpenShift Pipelines 공급망 보안에 Tekton 체인 사용을 참조하십시오.
2.1. 프로젝트 취약점을 보기 위해 OpenShift Pipelines 설정
PipelineRun 세부 정보 페이지에는 심각도(심각, 높음, 중간 및 낮음)로 분류된 확인된 취약점이 시각적으로 표시됩니다. 이렇게 간소화된 뷰를 통해 우선 순위 지정 및 수정 작업을 쉽게 수행할 수 있습니다.
그림 2.2. PipelineRun
세부 정보 페이지의 취약점 보기
파이프라인 실행 목록 보기 페이지의 취약점 열에서 취약점 을 검토할 수도 있습니다.
그림 2.3. PipelineRun
목록 보기의 취약점 보기
확인된 취약점의 시각적 표현은 OpenShift Container Platform 버전 4.15 릴리스에서 사용할 수 있습니다.
사전 요구 사항
- 웹 콘솔에 로그인했습니다.
- 프로젝트에 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 적절한 역할과 권한이 있습니다.
- 기존 취약점 검사 작업이 있습니다.
프로시저
- 개발자 또는 관리자 관점에서 취약점을 시각적으로 표시하려는 관련 프로젝트로 전환합니다.
기존 취약점 검사 작업을 업데이트하여 출력을 .json 파일에 저장한 다음 다음 형식으로 취약점 요약을 추출합니다.
# The format to extract vulnerability summary (adjust the jq command for different JSON structures). jq -rce \ '{vulnerabilities:{ critical: (.result.summary.CRITICAL), high: (.result.summary.IMPORTANT), medium: (.result.summary.MODERATE), low: (.result.summary.LOW) }}' scan_output.json | tee $(results.SCAN_OUTPUT.path)
참고다른 JSON 구조에 대해 jq 명령을 조정해야 할 수도 있습니다.
(선택 사항) 취약점 검사 작업이 없는 경우 다음 형식으로 생성합니다.
Roxctl을 사용한 취약점 검사 작업의 예
apiVersion: tekton.dev/v1 kind: Task metadata: name: vulnerability-scan 1 annotations: task.output.location: results 2 task.results.format: application/json task.results.key: SCAN_OUTPUT 3 spec: results: - description: CVE result format 4 name: SCAN_OUTPUT steps: - name: roxctl 5 image: quay.io/roxctl-tool-image 6 env: - name: ENV_VAR_NAME_1 7 valueFrom: secretKeyRef: key: secret_key_1 name: secret_name_1 env: - name: ENV_VAR_NAME_2 valueFrom: secretKeyRef: key: secret_key_2 name: secret_name_2 script: | 8 #!/bin/sh # Sample shell script echo "ENV_VAR_NAME_1: " $ENV_VAR_NAME_1 echo "ENV_VAR_NAME_2: " $ENV_VAR_NAME_2 jq --version (adjust the jq command for different JSON structures) curl -k -L -H "Authorization: Bearer $ENV_VAR_NAME_1" https://$ENV_VAR_NAME_2/api/cli/download/roxctl-linux --output ./roxctl chmod +x ./roxctl echo "roxctl version" ./roxctl version echo "image from pipeline: " # Replace the following line with your dynamic image logic DYNAMIC_IMAGE=$(get_dynamic_image_logic_here) echo "Dynamic image: $DYNAMIC_IMAGE" ./roxctl image scan --insecure-skip-tls-verify -e $ENV_VAR_NAME_2 --image $DYNAMIC_IMAGE --output json > roxctl_output.json more roxctl_output.json jq -rce \ 9 '{vulnerabilities:{ critical: (.result.summary.CRITICAL), high: (.result.summary.IMPORTANT), medium: (.result.summary.MODERATE), low: (.result.summary.LOW) }}' scan_output.json | tee $(results.SCAN_OUTPUT.path)
- 1
- 작업 이름입니다.
- 2
- 작업 출력을 저장하는 위치입니다.
- 3
- 검사 작업 결과의 이름 지정 규칙입니다. 유효한 명명 규칙은
SCAN_OUTPUT
문자열로 끝나야 합니다. 예를 들어 SCAN_OUTPUT, MY_CUSTOM_SCAN_OUTPUT 또는 ACS_SCAN_OUTPUT. - 4
- 결과에 대한 설명입니다.
- 5
- 사용한 취약점 검사 도구의 이름입니다.
- 6
- 검사 도구가 포함된 실제 이미지의 위치입니다.
- 7
- 툴별 환경 변수입니다.
- 8
- json 출력으로 실행할 쉘 스크립트입니다. 예를 들면 scan_output.json입니다.
- 9
- 취약점 요약을 추출하는 형식(다른 JSON 구조에 대해
jq
명령 조정).
참고이는 구성의 예입니다. 특정 검사 도구에 따라 값을 수정하여 예상 형식으로 결과를 설정합니다.
적절한 Pipeline을 업데이트하여 다음 형식으로 취약점 사양을 추가합니다.
... spec: results: - description: The common vulnerabilities and exposures (CVE) result name: SCAN_OUTPUT value: $(tasks.vulnerability-scan.results.SCAN_OUTPUT)
검증
-
PipelineRun
세부 정보 페이지로 이동하여 확인된 취약점 의 시각적 표현에 대한 취약점 행을 검토합니다. -
또는
PipelineRun
목록 보기 페이지로 이동하여 Vulnerabilities 열을 검토할 수 있습니다.