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账户, 可以通过运行docker login命令或通过Docker Desktop登录。

  4. 构建镜像并将其推送到 /scout-demo:v1,其中 是您推送到的 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>
    
  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参考文档

步骤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 命令的输出显示还有改进的空间。 由于镜像缺乏来源和SBOM证明,一些策略无法成功评估(No data)。 镜像在一些评估中也未能通过检查。

策略评估不仅仅是检查漏洞。 以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仪表板。

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

图片页面列出了您启用了Scout的仓库。 从列表中选择图片以打开图片详情侧边栏。 侧边栏显示了仓库最后一次推送标签的合规性概览。

注意

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

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

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

提示

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

摘要

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

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

接下来是什么?

还有更多内容等待发现,从第三方集成, 到策略定制,以及实时运行时环境监控。

查看以下部分: