Docker Scout 快速入门

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

本指南采用易受攻击的容器映像,并向您展示如何使用 Docker Scout 来识别和修复漏洞、比较一段时间内的映像版本以及与您的团队共享结果。

第 1 步:设置

此示例项目包含一个易受攻击的 Node.js 应用程序,您可以使用它来进行后续操作。

  1. 克隆其存储库:

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

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

  4. 构建镜像并将其推送到 a <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 Desktop 中的“登录”按钮登录您的 Docker 帐户。

  2. 使用 Docker CLI docker scout repo enable 命令对现有存储库启用分析:

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

第三步:分析镜像漏洞

构建完成后,使用docker scoutCLI 命令查看 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 Dashboard 或 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
─────────┼───────────────────────────────────────────┼──────────────────────────────
  ✓      │ Copyleft licenses                         │    0 packages
  !      │ Default non-root user                     │
  !      │ Fixable critical and high vulnerabilities │    2C    16H     0M     0L
  ✓      │ High-profile vulnerabilities              │    0C     0H     0M     0L
  ?      │ 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 和出处证明。 Docker Scout 使用来源证明来确定镜像的构建方式,以便提供更好的评​​估结果。

在构建带有证明的镜像之前,必须启用 containerd 镜像存储 (或使用驱动程序创建自定义构建器docker-container)。默认图像存储不支持清单列表,这是将出处证明附加到图像的方式。

打开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 Dashboard。

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

图像页面列出了您启用 Scout 的存储库。选择列表中的图像以打开图像详细信息侧边栏。侧边栏显示存储库最后推送的标签的合规性概述。

笔记

如果政策结果尚未显示,请尝试刷新页面。如果这是您第一次使用 Docker Scout Dashboard,可能需要几分钟时间才会显示结果。

检查过时的基础映像策略。此策略检查您使用的基础映像是否是最新的。它目前处于不合规状态,因为示例映像使用旧版本alpine作为基础映像。

选择策略名称旁边的“查看修复”按钮,了解有关违规的详细信息以及如何解决该问题的建议。在这种情况下,建议的操作是启用 Docker Scout 的 GitHub 集成,这有助于自动保持基础映像最新。

提示

您无法为本指南中使用的演示应用程序启用此集成。请随意将代码推送到您拥有的 GitHub 存储库,并在那里尝试集成!

概括

本快速入门指南简单介绍了 Docker Scout 支持软件供应链管理的一些方式:

  • 如何为您的存储库启用 Docker Scout
  • 分析图像中的漏洞
  • 政策与合规性
  • 修复漏洞并提高合规性

下一步是什么?

从第三方集成到策略定制,再到实时运行时环境监控,还有很多东西有待发现。

查看以下部分: