使用**开发人员**或**管理员**视角创建或修改管道,并在项目中查看关键的软件供应链安全元素。
设置 OpenShift Pipelines 以查看
**项目漏洞:**项目中已识别漏洞的可视化表示。
**软件物料清单 (SBOM):**下载或查看 PipelineRun 组件的详细列表。
此外,满足 Tekton Chains 要求的 PipelineRuns 会在其名称旁边显示签名徽章。此徽章表示管道运行执行结果已进行加密签名并安全存储,例如在 OCI 镜像中。
只有在配置 Tekton Chains 后,PipelineRun 才会在其名称旁边显示签名徽章。有关配置 Tekton Chains 的信息,请参阅 使用 Tekton Chains 实现 OpenShift Pipelines 供应链安全。
PipelineRun 详情页面提供已识别漏洞的可视化表示,按严重程度(严重、高、中、低)分类。此简化的视图有助于确定优先级和补救工作。
PipelineRun
详情页面上查看漏洞您还可以在管道运行列表视图页面中的**漏洞**列中查看漏洞。
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 | 从 Kubernetes 高级集群安全 (ACS) 获取的rox_central_endpoint 密钥。 |
7 | 从 ACS 获取的rox_api_token 。 |
8 | shell 脚本执行漏洞扫描并在任务运行结果中设置扫描输出。 |
这是一个示例配置。根据您的特定扫描工具修改值,以按预期格式设置结果。 |
更新相应的Pipeline,以添加以下格式的漏洞规范
...
spec:
results:
- description: The common vulnerabilities and exposures (CVE) result
name: SCAN_OUTPUT
value: $(tasks.vulnerability-scan.results.SCAN_OUTPUT)
导航到PipelineRun
详情页面,查看**漏洞**行以直观地了解已识别的漏洞。
或者,您可以导航到PipelineRun
列表视图页面,查看**漏洞**列。
PipelineRun
详情页面提供下载或查看软件物料清单 (SBOM) 的选项,增强供应链的透明度和控制。SBOM列出了组件使用的所有软件库。这些库可以启用特定功能或促进开发。
您可以使用SBOM更好地了解软件的构成,识别漏洞并评估可能出现的任何安全问题的潜在影响。
您已登录到 Web 控制台。
您在项目中拥有适当的角色和权限,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
在**开发者**或**管理员**视角下,切换到您想要直观显示SBOM的相关项目。
添加以下格式的任务以查看或下载SBOM信息
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: sbom-task (1)
annotations:
task.output.location: results (2)
task.results.format: application/text
task.results.key: LINK_TO_SBOM (3)
task.results.type: external-link (4)
spec:
results:
- description: Contains the SBOM link (5)
name: LINK_TO_SBOM
steps:
- name: print-sbom-results
image: quay.io/image (6)
script: | (7)
#!/bin/sh
syft version
syft quay.io/<username>/quarkus-demo:v2 --output cyclonedx-json=sbom-image.json
echo 'BEGIN SBOM'
cat sbom-image.json
echo 'END SBOM'
echo 'quay.io/user/workloads/<namespace>/node-express/node-express:build-8e536-1692702836' | tee $(results.LINK_TO_SBOM.path) (8)
1 | 您的任务名称。 |
2 | 用于存储任务输出的位置。 |
3 | SBOM任务结果名称。请勿更改SBOM结果任务的名称。 |
4 | (可选) 设置在新标签页中打开SBOM。 |
5 | 结果说明。 |
6 | 生成SBOM的镜像。 |
7 | 生成SBOM镜像的脚本。 |
8 | SBOM镜像及其路径名称。 |
更新Pipeline以引用新创建的SBOM任务。
...
spec:
tasks:
- name: sbom-task
taskRef:
name: sbom-task (1)
results:
- name: IMAGE_URL (2)
description: url
value: <oci_image_registry_url> (3)
1 | 与步骤2中创建的名称相同。 |
2 | 结果的名称。 |
3 | 包含.sbom 镜像的OCI镜像仓库URL。 |
重新运行受影响的OpenShift Pipeline。
您已设置OpenShift Pipelines以下载或查看SBOM。
导航到活动→PipelineRuns选项卡。
对于要查看其SBOM的项目,选择其最近的pipeline运行。
在PipelineRun
详情页面上,选择**查看SBOM**。
您可以使用您的Web浏览器立即搜索SBOM中指示软件供应链中漏洞的术语。例如,尝试搜索log4j
。
您可以选择**下载**以下载SBOM,或选择**展开**以全屏查看。
您已安装Cosign CLI工具。
您已设置OpenShift Pipelines以下载或查看SBOM。
打开终端,登录到**开发者**或**管理员**视角,然后切换到相关项目。
从OpenShift Web控制台复制download sbom
命令并在您的终端上运行它。
$ cosign download sbom quay.io/<workspace>/user-workload@sha256
(可选) 要以可搜索的格式查看完整的SBOM,请运行以下命令以重定向输出
$ cosign download sbom quay.io/<workspace>/user-workload@sha256 > sbom.txt
在SBOM中,如下面的示例摘录所示,您可以看到项目使用的每个库的四个特性
其作者或发布者
其名称
其版本
其许可证
此信息可帮助您验证各个库是否安全来源、已更新且符合规定。
{
"bomFormat": "CycloneDX",
"specVersion": "1.4",
"serialNumber": "urn:uuid:89146fc4-342f-496b-9cc9-07a6a1554220",
"version": 1,
"metadata": {
...
},
"components": [
{
"bom-ref": "pkg:pypi/[email protected]?package-id=d6ad7ed5aac04a8",
"type": "library",
"author": "Armin Ronacher <[email protected]>",
"name": "Flask",
"version": "2.1.0",
"licenses": [
{
"license": {
"id": "BSD-3-Clause"
}
}
],
"cpe": "cpe:2.3:a:armin-ronacher:python-Flask:2.1.0:*:*:*:*:*:*:*",
"purl": "pkg:pypi/[email protected]",
"properties": [
{
"name": "syft:package:foundBy",
"value": "python-package-cataloger"
...