第2章 Web コンソールで OpenShift Pipelines を設定してソフトウェアサプライチェーンのセキュリティー要素を表示する方法
開発者 または 管理者 のパースペクティブを使用して、パイプラインを作成または変更し、プロジェクト内の主要なソフトウェアサプライチェーンセキュリティー要素を表示します。
以下を表示するには OpenShift Pipelines を設定します。
- プロジェクトの脆弱性: プロジェクト内で特定された脆弱性の視覚的な表現。
- ソフトウェア部品表 (SBOM): PipelineRun コンポーネントの詳細なリストをダウンロードまたは表示します。
さらに、Tekton Chains の要件を満たす PipelineRun には、名前の横に署名付きバッジが表示されます。このバッジは、パイプライン実行の実行結果が暗号的に署名され、OCI イメージ内などに安全に保存されていることを示します。
図2.1 署名済みのバッジ
PipelineRun では、Tekton Chains が設定されている場合にのみ、名前の横に署名されたバッジが表示されます。Tekton Chains の設定については、OpenShift Pipelines サプライチェーンセキュリティーでの Tekton Chains の使用 を参照してください。
2.1. プロジェクトの脆弱性を表示するための OpenShift Pipelines の設定
PipelineRun の詳細ページには、特定された脆弱性が重大度 (重大、高、中、低) 別に分類されて視覚的に表示されます。この合理化されたビューにより、優先順位付けと修復作業が容易になります。
図2.2 PipelineRun
の詳細ページでの脆弱性表示
パイプライン実行リストビューページの Vulnerabilities 列で脆弱性を確認することもできます。
図2.3 PipelineRun
リストビューでの脆弱性表示
特定された脆弱性の視覚的な表現は、OpenShift Container Platform バージョン 4.15 リリース以降で利用できます。
前提条件
- Web コンソールにログイン している。
- 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
コマンドを調整します)。
注記これは設定例です。結果を必要とされる形式で設定するには、特定のスキャンツールに合わせて値を変更します。
適切なパイプラインを更新して、次の形式で脆弱性の仕様を追加します。
... spec: results: - description: The common vulnerabilities and exposures (CVE) result name: SCAN_OUTPUT value: $(tasks.vulnerability-scan.results.SCAN_OUTPUT)
検証
-
PipelineRun
の詳細ページに移動し、特定された脆弱性の視覚的な表現について Vulnerabilities 行を確認します。 -
または、
PipelineRun
リストビューページに移動して、Vulnerabilities 列を確認することもできます。