Docker Scout 快速入门
Docker Scout 分析镜像内容并生成详细的包和漏洞报告。它可以为您提供有关如何修复镜像分析发现的问题的建议。
本指南以一个易受攻击的容器镜像为例,向您展示如何使用 Docker Scout 来识别和修复漏洞,比较不同时间点的镜像版本,并与您的团队分享结果。
步骤 1: 设置
这个示例项目 包含一个你可以用来跟随的易受攻击的Node.js应用程序。
克隆其仓库:
$ git clone https://github.com/docker/scout-demo-service.git进入目录:
$ cd scout-demo-service确保您已登录到您的Docker账户, 可以通过运行
docker login命令或通过Docker Desktop登录。构建镜像并将其推送到
,其中/scout-demo:v1 是您推送到的 Docker Hub 命名空间。$ docker build --push -t <ORG_NAME>/scout-demo:v1 .
步骤 2: 启用 Docker Scout
Docker Scout 默认分析所有本地镜像。要分析远程仓库中的镜像,您需要先启用它。 您可以从 Docker Hub、Docker Scout 仪表板和 CLI 进行此操作。 在概览指南中了解如何操作。
使用
docker login命令登录到您的Docker账户,或者使用Docker Desktop中的登录按钮。接下来,使用
docker scout enroll命令将您的组织注册到Docker Scout。$ docker scout enroll <ORG_NAME>使用
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 或更高版本。
使用新的包版本更新
package.json文件。"dependencies": { - "express": "4.17.1" + "express": "4.17.3" }使用新标签重新构建镜像并将其推送到您的 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仪表板。
- 打开 Docker Scout 仪表板.
- 使用您的 Docker 账户登录。
- 在左侧导航中选择Images。
图片页面列出了您启用了Scout的仓库。 从列表中选择图片以打开图片详情侧边栏。 侧边栏显示了仓库最后一次推送标签的合规性概览。
注意
如果策略结果尚未出现,请尝试刷新页面。 如果这是您第一次使用Docker Scout仪表板,结果可能需要几分钟才会出现。
检查最新基础镜像策略。
该策略检查您使用的基础镜像是否为最新版本。
它目前处于不合规状态,
因为示例镜像使用了旧版本的alpine作为基础镜像。
选择策略名称旁边的查看修复按钮以获取有关违规的详细信息,以及如何解决的建议。 在这种情况下,建议的操作是启用 Docker Scout的GitHub集成, 这有助于自动保持您的基础镜像最新。
提示
您无法为本指南中使用的演示应用程序启用此集成。 请随意将代码推送到您拥有的GitHub仓库, 并在那里尝试集成!
摘要
本快速入门指南简要介绍了Docker Scout在支持软件供应链管理方面的一些方法:
- 如何为您的仓库启用 Docker Scout
- 分析图像中的漏洞
- 政策与合规
- 修复漏洞并提高合规性
接下来是什么?
还有更多内容等待发现,从第三方集成, 到策略定制,以及实时运行时环境监控。
查看以下部分: