Docker Scout 快速入门

Docker Scout 分析镜像内容并生成详细的报告,说明其检测到的软件包和漏洞。它还可以为您提供如何修复镜像分析所发现的问题的建议。

本指南将通过一个存在漏洞的容器镜像,向您展示如何使用 Docker Scout 识别并修复漏洞、比较镜像版本随时间的变化情况,以及与团队共享相关结果。

步骤 1:设置

此示例项目包含一个易受攻击的 Node.js 应用程序,您可以跟随本教程进行实践。

  1. 克隆其代码仓库:<br>

    $ git clone https://github.com/docker/scout-demo-service.git
    
  2. 进入目录:

    $ cd scout-demo-service
    
  3. 请确保您已登录到 Docker 账户, 可通过运行 docker login 命令,或使用 Docker Desktop 登录。

  4. 构建镜像并将其推送到 <ORG_NAME>/scout-demo:v1, 其中 <ORG_NAME> 是您推送到的 Docker Hub 命名空间。

    $ docker build --push -t <ORG_NAME>/scout-demo:v1 .
    

步骤 2:启用 Docker Scout

Docker Scout 默认会分析所有本地镜像。若要分析远程仓库中的镜像,您需先启用该功能。 您可以通过 Docker Hub、Docker Scout 仪表板或命令行界面(CLI)进行设置。 了解详情,请参阅概览指南

  1. 使用 docker login 命令登录您的 Docker 账户,或在 Docker Desktop 中点击 登录 按钮。

  2. 接下来,使用 docker scout enroll 命令将您的组织注册到 Docker Scout。

    $ docker scout enroll <ORG_NAME>
        ✓ Successfully enrolled organization <ORG_NAME> with Docker Scout Free
    
  3. 使用 docker scout repo enable 命令为您的镜像仓库启用 Docker Scout。

    $ docker scout repo enable --org <ORG_NAME> <ORG_NAME>/scout-demo
    

步骤 3:分析镜像漏洞

构建完成后,使用 docker scout CLI 命令查看 Docker Scout 检测到的安全漏洞。

本指南中的示例应用程序使用了存在漏洞的 Express 版本。 以下命令将显示您刚刚构建的镜像中影响 Express 的所有 CVE(通用漏洞与暴露):

$ docker scout cves --only-package express

Docker Scout 默认会分析您最近构建的镜像, 因此在此情况下无需指定镜像的名称。

了解有关 docker scout cves 命令的更多信息,请参阅 CLI reference documentation

步骤 4:修复应用程序漏洞

Docker Scout 建议的修复方法是将存在漏洞的底层 express 版本更新为 4.17.3 或更高版本。

  1. 使用新软件包版本更新 package.json 文件。

       "dependencies": {
    -    "express": "4.17.1"
    +    "express": "4.17.3"
       }
    
  2. 使用新标签重新构建镜像并将其推送到您的 Docker Hub 仓库:

    $ docker build --push -t <ORG_NAME>/scout-demo:v2 .
    

现在,在 Docker Desktop、Docker Scout 仪表板或 CLI 中查看该镜像的最新标签,您会看到已修复该漏洞。

$ docker scout cves --only-package express
    ✓ Provenance obtained from attestation
    ✓ Image stored for indexing
    ✓ Indexed 79 packages
    ✓ No vulnerable package detected


  ## Overview

                      │                  Analyzed Image                   
  ────────────────────┼───────────────────────────────────────────────────
    Target            │  mobywhale/scout-demo:v2                   
      digest          │  ef68417b2866                                     
      platform        │ linux/arm64                                       
      provenance      │ https://github.com/docker/scout-demo-service.git  
                      │  7c3a06793fc8f97961b4a40c73e0f7ed85501857         
      vulnerabilities │    0C     0H     0M     0L                        
      size            │ 19 MB                                             
      packages        │ 1                                                 


  ## Packages and Vulnerabilities

  No vulnerable packages detected

步骤 5:评估策略合规性

虽然基于特定软件包检查漏洞可能有一定帮助, 但这并不是提升供应链安全性的最有效方式。

Docker Scout 还支持策略评估, 这是一种用于检测和修复镜像中问题的高级概念。 策略是一组可自定义的规则,使组织能够跟踪其镜像是否符合供应链要求。

由于策略规则因每个组织而异, 您必须指定要评估其策略的组织。 使用 docker scout config 命令配置您的 Docker 组织。

$ docker scout config organization <ORG_NAME>
    ✓ Successfully set organization to <ORG_NAME>

现在您可以运行 quickview 命令,以概览您刚刚构建的镜像的合规性状态。 该镜像将根据默认策略配置进行评估。

$ docker scout quickview

...
Policy status  FAILED  (2/6 policies met, 2 missing data)

  Status │                  Policy                      │           Results
─────────┼──────────────────────────────────────────────┼──────────────────────────────
  ✓      │ No copyleft licenses                         │    0 packages
  !      │ Default non-root user                        │
  !      │ No fixable critical or high vulnerabilities  │    2C    16H     0M     0L
  ✓      │ No high-profile vulnerabilities              │    0C     0H     0M     0L
  ?      │ No outdated base images                      │    No data
  ?      │ Supply chain attestations                    │    No data

状态列中的感叹号表示违反了策略。 问号表示元数据不足,无法完成评估。 对勾表示符合要求。

步骤 6:提升合规性

quickview 命令的输出表明仍有改进空间。 部分策略未能成功评估(No data), 原因在于镜像缺少来源证明和 SBOM 证明。 此外,该镜像在几项评估检查中也未通过。

策略评估不仅限于检查漏洞。 以Default non-root user策略为例, 该策略通过确保镜像默认不以root超级用户身份运行,从而提升运行时安全性。

为解决此策略违规问题,请编辑 Dockerfile,添加 USER 指令,指定一个非 root 用户:

  CMD ["node","/app/app.js"]
  EXPOSE 3000
+ USER appuser

此外,为了获得更完整的策略评估结果, 您的镜像应附带SBOM(软件物料清单)和来源(provenance)声明。 Docker Scout 使用来源声明来确定镜像的构建方式, 从而提供更准确的评估结果。

在构建包含 attestations(声明)的镜像之前, 您必须启用 containerd 镜像存储 (或使用 docker-container 驱动程序创建自定义构建器)。 经典镜像存储不支持清单列表(manifest lists), 而声明性证明(provenance attestations)正是通过清单列表附加到镜像上的。

在 Docker Desktop 中打开 设置。在 常规 部分下,确保已勾选 使用 containerd 拉取和存储镜像 选项。 请注意,切换镜像存储会暂时隐藏未激活镜像存储中的镜像和容器,直到您切换回原存储为止。

启用 containerd 镜像存储后,使用新的 v3 标签重新构建镜像。 这一次,请添加 --provenance=true--sbom=true 标志。

$ docker build --provenance=true --sbom=true --push -t <ORG_NAME>/scout-demo:v3 .

步骤 7:在仪表盘中查看

在推送包含声明的更新镜像后,是时候通过另一种视角查看结果了:Docker Scout 仪表板。

  1. 打开 Docker Scout 仪表板
  2. 使用您的 Docker 账户登录。
  3. 在左侧导航栏中选择 镜像

镜像页面列出了您已启用 Scout 的仓库。 从列表中选择一个镜像,以打开镜像详情侧边栏。 该侧边栏显示该仓库最近推送的标签的合规性概览。

注意

如果策略结果尚未显示,请尝试刷新页面。 如果是您首次使用 Docker Scout 仪表板,结果可能需要几分钟才会出现。

检查最新基础镜像策略。 该策略用于检查您使用的基础镜像是否为最新版本。 目前该策略状态为“不符合”, 因为示例镜像使用了旧版本 alpine 作为基础镜像。

在策略名称旁选择 查看修复 按钮,以了解违规详情及如何解决的建议。 在本例中,建议的操作是启用 Docker Scout 的 GitHub 集成, 该功能可帮助您自动保持基础镜像为最新状态。

提示

您无法在此指南中使用的演示应用中启用此集成。 请随意将代码推送到您自己的 GitHub 仓库, 并尝试在那里进行集成!

摘要

本快速入门指南仅简要介绍了 Docker Scout 支持软件供应链管理的若干方式:

  • 如何为您的代码库启用 Docker Scout
  • 分析镜像中的漏洞
  • 政策与合规
  • 修复漏洞并提升合规性

接下来是什么?

还有更多内容等待您探索,包括第三方集成、策略自定义,以及实时运行时环境监控。

请查看以下部分: