Docker Scout 快速入门

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

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

第 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. 构建镜像并将其推送到<ORG_NAME>/scout-demo:v1, 哪里<ORG_NAME>是您推送到的 Docker Hub 命名空间。

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

第 2 步:启用 Docker Scout

默认情况下,Docker Scout 会分析所有本地镜像。要分析镜像,请在 remote repositories 中,您需要先启用它。 您可以从 Docker Hub、Docker Scout Dashboard 和 CLI 执行此作。在概述指南中了解如何作

  1. 使用docker login命令或使用 Docker Desktop 中的 Sign in (登录) 按钮。

  2. 接下来,使用docker scout enroll命令。

    $ docker scout enroll <ORG_NAME>
        ✓ Successfully enrolled organization <ORG_NAME> with Docker Scout Free
    
  3. 使用docker scout repo enable命令。

    $ 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 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
─────────┼──────────────────────────────────────────────┼──────────────────────────────
  ✓      │ 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策略。 此策略通过确保 镜像未设置为作为rootsuperuser 的 intent 值。

要解决此策略冲突,请通过添加USER指令,指定非 root 用户:

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

此外,为了获得更完整的策略评估结果, 您的镜像应附有 SBOM 和出处证明。 Docker Scout 使用来源证明来确定镜像的状况 构建,以便它可以提供更好的评估结果。

在构建具有证明的镜像之前, 您必须启用 containerd 镜像存储(或使用docker-container驱动程序)。 经典镜像存储不支持清单列表、 这就是将出处证明附加到镜像的方式。

在 Docker Desktop 中打开 Settings。在 General (常规) 部分下,确保 选中 Use containerd for pull and storage images 选项。 请注意,更改镜像存储会暂时隐藏 inactive image store (非活动镜像存储),直到您切换回来。

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

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

第 7 步:在 Dashboard 中查看

使用证明推送更新的镜像后,可以查看 通过不同的视角获得结果:Docker Scout 仪表板。

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

images (镜像) 页面列出了启用了 Scout 的存储库。 在列表中选择镜像以打开 Image details (镜像详细信息) 侧边栏。 边栏显示存储库的最后一个推送标签的合规性概述。

注意

如果策略结果尚未显示,请尝试刷新页面。 如果这是您的 首次使用 Docker Scout Dashboard。

检查 Up-to-date Base Images 策略。 此策略检查您使用的基础镜像是否是最新的。 它当前处于 non-compliant 状态, 因为示例镜像使用了旧版本alpine作为基础镜像。

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

提示

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

总结

本快速入门指南仅涉及某些方面的一些 Docker Scout 可以支持软件供应链管理:

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

下一步是什么?

还有更多内容等你去发现,从第三方集成、 到策略自定义和实时运行时环境监控。

请查看以下部分: