第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: params: - description: Image to be scanned name: image type: string results: - description: CVE result format 4 name: SCAN_OUTPUT steps: - name: roxctl image: 'quay.io/lrangine/crda-maven:11.0' 5 env: - name: ROX_CENTRAL_ENDPOINT valueFrom: secretKeyRef: key: rox_central_endpoint 6 name: roxsecrets - name: ROX_API_TOKEN valueFrom: secretKeyRef: key: rox_api_token 7 name: roxsecrets name: roxctl-scan script: | 8 #!/bin/sh curl -k -L -H "Authorization: Bearer $ROX_API_TOKEN" https://$ROX_CENTRAL_ENDPOINT/api/cli/download/roxctl-linux --output ./roxctl chmod +x ./roxctl ./roxctl image scan --insecure-skip-tls-verify -e $ROX_CENTRAL_ENDPOINT --image $(params.image) --output json > roxctl_output.json jq -rce \ "{vulnerabilities:{ critical: (.result.summary.CRITICAL), high: (.result.summary.IMPORTANT), medium: (.result.summary.MODERATE), low: (.result.summary.LOW) }}" roxctl_output.json | tee $(results.SCAN_OUTPUT.path)
- 1
- タスクの名前。
- 2
- タスク出力を保存する場所。
- 3
- スキャンタスク結果の命名規則。有効な命名規則は、
SCAN_OUTPUT
文字列で終わる必要があります。たとえば、SCAN_OUTPUT、MY_CUSTOM_SCAN_OUTPUT、ACS_SCAN_OUTPUT などです。 - 4
- 結果の説明。
- 5
- スキャンツールを実行するコンテナーイメージの場所です。
- 6
- Advanced Cluster Security for Kubernetes (ACS) から取得した
rox_central_endpoint
キー。 - 7
- ACS から取得した
rox_api_token
。 - 8
- シェルスクリプトは脆弱性スキャンを実行し、タスク実行結果にスキャン出力を設定します。
注記これは設定例です。結果を必要とされる形式で設定するには、特定のスキャンツールに合わせて値を変更します。
適切なパイプラインを更新して、次の形式で脆弱性の仕様を追加します。
... spec: results: - description: The common vulnerabilities and exposures (CVE) result name: SCAN_OUTPUT value: $(tasks.vulnerability-scan.results.SCAN_OUTPUT)
検証
-
PipelineRun
の詳細ページに移動し、特定された脆弱性の視覚的な表現について Vulnerabilities 行を確認します。 -
または、
PipelineRun
リストビューページに移動して、Vulnerabilities 列を確認することもできます。