开始使用 Docker Scout 中的策略评估功能
在软件供应链管理中,维护工件的安全性和可靠性是首要任务。Docker Scout 中的策略评估在现有分析能力之上引入了一层控制。它允许您为工件定义供应链规则,并帮助您随时间跟踪工件相对于您的规则和阈值的表现。
了解如何使用策略评估来确保您的构件符合既定的最佳实践。
策略评估的工作原理
当您为仓库激活 Docker Scout 时,您推送的镜像会被自动分析。分析结果为您提供关于镜像构成的洞察,包括镜像包含的软件包以及它们所面临的漏洞。策略评估建立在镜像分析功能之上,根据策略定义的规则解读分析结果。
策略定义了您的制品应满足的镜像质量标准。 例如,禁止 AGPL v3 许可证策略会标记任何包含 AGPL v3 许可证下分发包的镜像。 如果镜像包含此类包,则该镜像不符合此策略。 某些策略,例如禁止 AGPL v3 许可证策略,是可配置的。 可配置策略允许您调整标准以更好地满足您组织的需求。
在 Docker Scout 中,策略旨在帮助您逐步提升安全和供应链态势。其他工具侧重于提供通过或失败状态,而 Docker Scout 策略则可视化了微小的增量变化如何影响策略状态,即使您的制品(尚)未满足策略要求。通过跟踪失败差距随时间的变化,您可以更轻松地了解制品相对于策略是在改进还是在恶化。
策略不一定非要与应用程序安全和漏洞相关。您也可以使用策略来衡量和跟踪供应链管理的其他方面,例如开源许可证的使用情况和基础镜像的时效性。
策略类型
在 Docker Scout 中,策略源自于策略类型。策略类型是定义策略核心参数的模板。您可以将策略类型比作面向对象编程中的类,而每个策略则是从其相应策略类型创建的实例。
Docker Scout 支持以下策略类型:
Docker Scout 为启用该功能的仓库自动提供默认策略,但 SonarQube 质量门禁策略除外,该策略在使用前需要集成 SonarQube。
您可以从任何受支持的策略类型创建自定义策略,如果默认策略不适用于您的项目,则可以将其删除。有关更多信息,请参阅 配置策略。
基于严重性的漏洞
基于严重程度的漏洞策略类型检查您的构件是否暴露于已知漏洞中。
默认情况下,此策略仅标记那些有可用修复版本的关键和高严重性漏洞。本质上,这意味着对于未通过此策略的镜像,您可以部署一个简单的修复方案:将有漏洞的软件包升级到包含该漏洞修复的版本。
如果镜像包含一个或多个不符合指定策略标准的漏洞,则该镜像被视为不符合此策略。
您可以通过创建该策略的自定义版本来配置该策略的参数。 自定义版本中可配置以下策略参数:
时间: 漏洞首次发布以来的最小天数
仅标记达到一定期限的漏洞的理由是,在新发现的漏洞有机会被处理之前,不应导致您的评估失败。
- 严重级别: 要考虑的严重级别(默认值:
Critical, High)
仅可修复的漏洞: 是否仅报告有可用修复版本的漏洞(默认启用)。
包类型: 要考虑的包类型列表。
此选项允许您指定要包含在策略评估中的包类型,例如 PURL 包类型定义。 默认情况下,策略会考虑所有包类型。
有关配置策略的更多信息,请参阅 配置策略。
合规许可证
合规许可证策略类型检查您的镜像是否包含以不当许可证分发的软件包。如果镜像包含一个或多个此类许可证的软件包,则被视为不合规。
您可以配置此策略应关注的许可证列表,并通过指定允许列表(以 PURL 形式)添加例外。 参阅 配置策略。
最新的基础镜像
最新基础镜像策略类型检查您使用的基础镜像是否为最新版本。
如果您用于构建镜像的标签指向的摘要与您正在使用的不一致,则该镜像被视为不符合此策略。如果摘要不匹配,这意味着您正在使用的基础镜像已过时。
您的镜像需要来源证明,此策略才能成功评估。有关更多信息,请参阅 无基础镜像数据。
高调漏洞
高危漏洞策略类型检查您的镜像是否包含来自 Docker Scout 精选列表的漏洞。该列表会随着新披露的、被广泛认为具有风险的漏洞保持更新。
该列表包括以下漏洞:
- CVE-2014-0160 (OpenSSL 心脏出血漏洞)
- CVE-2021-44228 (Log4Shell)
- CVE-2023-38545 (cURL SOCKS5 堆缓冲区溢出)
- CVE-2023-44487 (HTTP/2 快速重置)
- CVE-2024-3094 (XZ 后门)
- CVE-2024-47176 (OpenPrinting -
cups-browsed) - CVE-2024-47076 (OpenPrinting -
libcupsfilters) - CVE-2024-47175 (OpenPrinting -
libppd) - CVE-2024-47177 (OpenPrinting -
cups-filters)
您可以自定义此策略,通过配置该策略来更改被视为高危的 CVE。自定义配置选项包括:
排除的 CVE: 指定您希望此策略忽略的 CVE。
默认值:
[](不忽略任何高危 CVE)CISA KEV: 启用对 CISA 已知被利用漏洞 (KEV) 目录中漏洞的跟踪
CISA KEV 目录包含了在野被积极利用的漏洞。启用后,该策略会标记包含 CISA KEV 目录中漏洞的镜像。
默认启用。
有关策略配置的更多信息,请参阅 配置策略。
供应链声明
供应链证明策略类型用于检查您的镜像是否具有 SBOM 和 来源 证明。
如果镜像缺少 SBOM 证明或具有 max mode 来源的来源证明,则被视为不合规。为了确保合规性,请更新您的构建命令,以便在构建时附加这些证明:
$ docker buildx build --provenance=true --sbom=true -t <IMAGE> --push .
有关使用证明进行构建的更多信息,请参阅 证明。
如果您正在使用 GitHub Actions 构建和推送镜像, 了解如何 配置该操作 以应用 SBOM 和来源证明。
默认非 root 用户
默认情况下,容器以 root 超级用户身份运行,在容器内拥有完整的系统管理权限,除非 Dockerfile 指定了不同的默认用户。以特权用户身份运行容器会削弱其运行时安全性,因为这意味着在容器中运行的任何代码都可以执行管理操作。
默认非 Root 用户策略类型检测设置为以默认root用户运行的镜像。要符合此策略,镜像必须在镜像配置中指定非 root 用户。如果镜像未为运行时阶段指定非 root 默认用户,则该镜像不符合此策略。
对于不合规的镜像,评估结果显示是否为镜像显式设置了 root 用户。这有助于您区分由隐式 root 用户的镜像导致的策略违规,以及故意设置 root 的镜像。
尽管未显式设置,以下 Dockerfile 默认以 root 运行:
FROM alpine
RUN echo "Hi"而在以下情况中,root 用户被显式设置:
FROM alpine
USER root
RUN echo "Hi"注意
此策略仅检查镜像配置数据块中设置的镜像默认用户。即使您指定了非 root 默认用户,仍然可以在运行时覆盖默认用户,例如通过在
docker run命令中使用--user标志。
要使您的镜像符合此策略,请使用
USER Dockerfile 指令为运行时阶段设置一个没有 root 权限的默认用户。
以下 Dockerfile 片段展示了合规与非合规镜像之间的区别。
FROM alpine AS builder
COPY Makefile ./src /
RUN make build
FROM alpine AS runtime
COPY --from=builder bin/production /app
ENTRYPOINT ["/app/production"]FROM alpine AS builder
COPY Makefile ./src /
RUN make build
FROM alpine AS runtime
COPY --from=builder bin/production /app
USER nonroot
ENTRYPOINT ["/app/production"]已批准的基础镜像
批准的基础镜像策略类型确保您在构建中使用的基础镜像得到维护且安全。
此策略检查您的构建中使用的基础镜像是否与策略配置中指定的任何模式匹配。下表显示了此策略的一些示例模式。
| 用例 | 模式 |
|---|---|
| 允许来自 Docker Hub 的所有镜像 | docker.io/* |
| 允许所有 Docker 官方镜像 | docker.io/library/* |
| 允许来自特定组织的镜像 | docker.io/orgname/* |
| 允许特定仓库的标签 | docker.io/orgname/repository:* |
允许主机名为 registry.example.com 的仓库上的镜像 | registry.example.com/* |
| 允许 NodeJS 镜像的 slim 标签 | docker.io/library/node:*-slim |
星号 (*) 匹配直到下一个字符,或直到镜像引用的结尾。请注意,需要 docker.io 前缀才能匹配 Docker Hub 镜像。这是 Docker Hub 的注册表主机名。
此策略可使用以下选项进行配置:
批准的基础镜像源
指定您想要允许的镜像引用模式。策略会根据这些模式评估基础镜像引用。
默认值:
[*](任何引用都被允许作为基础镜像)仅支持标签
使用 Docker 官方镜像时仅允许支持的标签。
当启用此选项时,若镜像使用官方镜像不支持的标签作为其基础镜像,将触发策略违规。官方镜像支持的标签列于 Docker Hub 上仓库概览的 支持的标签 部分。
默认启用。
仅支持的操作系统发行版
仅允许受支持的 Linux 发行版本的 Docker 官方镜像。
当启用此选项时,使用已停止维护(生命周期结束)的不受支持 Linux 发行版(例如
ubuntu:18.04)的镜像将触发策略违规。如果无法确定操作系统版本,启用此选项可能会导致策略报告无数据。
默认启用。
您的镜像需要来源证明,此策略才能成功评估。有关更多信息,请参阅 无基础镜像数据。
SonarQube 质量门
SonarQube 质量门禁 策略类型建立在 SonarQube 集成 之上,用于评估 您的源代码质量。该策略通过将 SonarQube 代码分析 结果导入 Docker Scout 来工作。
您可以使用 SonarQube 的 质量门。 为此策略定义标准。 SonarQube 会根据您在 SonarQube 中定义的质量门来评估您的源代码。 Docker Scout 将 SonarQube 的评估结果作为 Docker Scout 策略呈现。
Docker Scout 使用
来源
证明或 org.opencontainers.image.revision OCI 注解将
SonarQube 分析结果与容器镜像关联。除了启用
SonarQube 集成外,您还必须确保您的镜像具有证明或标签。

一旦您推送镜像并且策略评估完成,来自 SonarQube 质量门的结果将在 Docker Scout 仪表板和 CLI 中显示为策略。
注意
Docker Scout 只能访问启用集成后创建的 SonarQube 分析。Docker Scout 无法访问历史评估。启用集成后,触发 SonarQube 分析和策略评估,以便在 Docker Scout 中查看结果。
无基础镜像数据
在某些情况下,无法确定构建中使用的基础镜像的信息。在这种情况下,最新基础镜像和已批准的基础镜像策略会被标记为无数据。
在以下情况下会出现此“无数据”状态:
- Docker Scout 不知道您使用了什么基础镜像标签
- 您使用的基础镜像版本有多个标签,但并非所有标签都已过期
为了确保 Docker Scout 始终了解您的基础镜像,您可以在构建时附加 来源证明。Docker Scout 使用来源证明来查明基础镜像版本。