Docker Scout 快速入门
Docker Scout 分析镜像内容并生成详细的报告,说明其检测到的软件包和漏洞。它还可以为您提供如何修复镜像分析所发现的问题的建议。
本指南将通过一个存在漏洞的容器镜像,向您展示如何使用 Docker Scout 识别并修复漏洞、比较镜像版本随时间的变化情况,以及与团队共享相关结果。
步骤 1:设置
此示例项目包含一个易受攻击的 Node.js 应用程序,您可以跟随本教程进行实践。
克隆其代码仓库:<br>
$ git clone https://github.com/docker/scout-demo-service.git进入目录:
$ cd scout-demo-service请确保您已登录到 Docker 账户, 可通过运行
docker login命令,或使用 Docker Desktop 登录。构建镜像并将其推送到
<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)进行设置。 了解详情,请参阅概览指南。
使用
docker login命令登录您的 Docker 账户,或在 Docker Desktop 中点击 登录 按钮。接下来,使用
docker scout enroll命令将您的组织注册到 Docker Scout。$ docker scout enroll <ORG_NAME> ✓ Successfully enrolled organization <ORG_NAME> with Docker Scout Free使用
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 或更高版本。
使用新软件包版本更新
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 命令的输出表明仍有改进空间。
部分策略未能成功评估(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 仪表板。
- 打开 Docker Scout 仪表板。
- 使用您的 Docker 账户登录。
- 在左侧导航栏中选择 镜像。
镜像页面列出了您已启用 Scout 的仓库。 从列表中选择一个镜像,以打开镜像详情侧边栏。 该侧边栏显示该仓库最近推送的标签的合规性概览。
注意
如果策略结果尚未显示,请尝试刷新页面。 如果是您首次使用 Docker Scout 仪表板,结果可能需要几分钟才会出现。
检查最新基础镜像策略。
该策略用于检查您使用的基础镜像是否为最新版本。
目前该策略状态为“不符合”,
因为示例镜像使用了旧版本 alpine 作为基础镜像。
在策略名称旁选择 查看修复 按钮,以了解违规详情及如何解决的建议。 在本例中,建议的操作是启用 Docker Scout 的 GitHub 集成, 该功能可帮助您自动保持基础镜像为最新状态。
提示
您无法在此指南中使用的演示应用中启用此集成。 请随意将代码推送到您自己的 GitHub 仓库, 并尝试在那里进行集成!
摘要
本快速入门指南仅简要介绍了 Docker Scout 支持软件供应链管理的若干方式:
- 如何为您的代码库启用 Docker Scout
- 分析镜像中的漏洞
- 政策与合规
- 修复漏洞并提升合规性
接下来是什么?
还有更多内容等待您探索,包括第三方集成、策略自定义,以及实时运行时环境监控。
请查看以下部分: