×

使用**开发人员**或**管理员**视角创建或修改管道,并在项目中查看关键的软件供应链安全元素。

设置 OpenShift Pipelines 以查看

  • **项目漏洞:**项目中已识别漏洞的可视化表示。

  • **软件物料清单 (SBOM):**下载或查看 PipelineRun 组件的详细列表。

此外,满足 Tekton Chains 要求的 PipelineRuns 会在其名称旁边显示签名徽章。此徽章表示管道运行执行结果已进行加密签名并安全存储,例如在 OCI 镜像中。

badge
图 1. 签名徽章

只有在配置 Tekton Chains 后,PipelineRun 才会在其名称旁边显示签名徽章。有关配置 Tekton Chains 的信息,请参阅 使用 Tekton Chains 实现 OpenShift Pipelines 供应链安全

设置 OpenShift Pipelines 以查看项目漏洞

PipelineRun 详情页面提供已识别漏洞的可视化表示,按严重程度(严重、高、中、低)分类。此简化的视图有助于确定优先级和补救工作。

vulnerabilities details
图 2. 在PipelineRun 详情页面上查看漏洞

您还可以在管道运行列表视图页面中的**漏洞**列中查看漏洞。

vulnerabilities list
图 3. 在PipelineRun 列表视图中查看漏洞

从 OpenShift Container Platform 版本 4.15 开始提供已识别漏洞的可视化表示。

先决条件
  • 您已登录到 Web 控制台

  • 您在项目中拥有适当的角色和权限,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。

  • 您有一个现有的漏洞扫描任务。

步骤
  1. 在**开发人员**或**管理员**视角中,切换到您希望可视化表示漏洞的相关项目。

  2. 更新您现有的漏洞扫描任务,以确保它将输出存储在 .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 命令。

    1. (可选) 如果您没有漏洞扫描任务,请以以下格式创建一个。

      使用 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 脚本执行漏洞扫描并在任务运行结果中设置扫描输出。

    这是一个示例配置。根据您的特定扫描工具修改值,以按预期格式设置结果。

  3. 更新相应的Pipeline,以添加以下格式的漏洞规范

    ...
    spec:
      results:
        - description: The common vulnerabilities and exposures (CVE) result
          name: SCAN_OUTPUT
          value: $(tasks.vulnerability-scan.results.SCAN_OUTPUT)
验证
  • 导航到PipelineRun详情页面,查看**漏洞**行以直观地了解已识别的漏洞。

  • 或者,您可以导航到PipelineRun列表视图页面,查看**漏洞**列。

设置OpenShift Pipelines以下载或查看SBOM

PipelineRun详情页面提供下载或查看软件物料清单 (SBOM) 的选项,增强供应链的透明度和控制。SBOM列出了组件使用的所有软件库。这些库可以启用特定功能或促进开发。

您可以使用SBOM更好地了解软件的构成,识别漏洞并评估可能出现的任何安全问题的潜在影响。

sbom
图4. 下载或查看SBOM的选项
先决条件
步骤
  1. 在**开发者**或**管理员**视角下,切换到您想要直观显示SBOM的相关项目。

  2. 添加以下格式的任务以查看或下载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镜像及其路径名称。
  3. 更新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。
  4. 重新运行受影响的OpenShift Pipeline。

在Web UI中查看SBOM

先决条件
  • 您已设置OpenShift Pipelines以下载或查看SBOM。

步骤
  1. 导航到活动→PipelineRuns选项卡。

  2. 对于要查看其SBOM的项目,选择其最近的pipeline运行。

  3. PipelineRun详情页面上,选择**查看SBOM**。

    1. 您可以使用您的Web浏览器立即搜索SBOM中指示软件供应链中漏洞的术语。例如,尝试搜索log4j

    2. 您可以选择**下载**以下载SBOM,或选择**展开**以全屏查看。

在CLI中下载SBOM

先决条件
  • 您已安装Cosign CLI工具。

  • 您已设置OpenShift Pipelines以下载或查看SBOM。

步骤
  1. 打开终端,登录到**开发者**或**管理员**视角,然后切换到相关项目。

  2. 从OpenShift Web控制台复制download sbom命令并在您的终端上运行它。

    Cosign命令示例
    $ cosign download sbom quay.io/<workspace>/user-workload@sha256
    1. (可选) 要以可搜索的格式查看完整的SBOM,请运行以下命令以重定向输出

      Cosign命令示例
      $ cosign download sbom quay.io/<workspace>/user-workload@sha256 > sbom.txt

读取SBOM

在SBOM中,如下面的示例摘录所示,您可以看到项目使用的每个库的四个特性

  • 其作者或发布者

  • 其名称

  • 其版本

  • 其许可证

此信息可帮助您验证各个库是否安全来源、已更新且符合规定。

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"
                    ...