开始使用 Docker Scout 中的策略评估
抢先体验
策略评估是 Docker Scout 的 抢先体验 功能。
在软件供应链管理中,维护工件的安全性和可靠性是重中之重。Docker Scout 中的策略评估在现有分析功能的基础上引入了控制层。它允许你为你的工件定义供应链规则,并帮助你跟踪你的工件相对于你的规则和阈值随时间的性能。
了解如何使用策略评估来确保你的工件符合既定的最佳实践。
策略评估的工作原理
当你为存储库激活 Docker Scout 时,你推送的镜像将 自动分析。该分析将为你提供有关镜像构成的见解,包括它们包含的软件包以及它们暴露的漏洞。策略评估建立在镜像分析功能之上,根据策略定义的规则解释分析结果。
策略定义了你的工件应该满足的镜像质量标准。例如,版权许可证策略会标记以版权许可证分发的软件包。如果镜像包含版权许可证的软件包,则该镜像将不符合此策略。某些策略(例如 版权许可证策略)是可配置的。可配置策略允许你调整标准以更好地满足组织的需求。
在 Docker Scout 中,策略旨在帮助你提升你的安全性和供应链地位。与其他工具侧重于提供通过或失败状态不同,Docker Scout 策略可视化了即使你的工件(尚未)满足策略要求,小的增量更改如何影响策略状态。通过跟踪随着时间的推移失败差距的变化,你可以更轻松地了解你的工件相对于策略而言是正在改善还是恶化。
策略不一定要与应用程序安全和漏洞相关。你也可以使用策略来衡量和跟踪供应链管理的其他方面,例如开源许可证使用情况和基础镜像的最新程度。
开箱即用的策略
Docker Scout 附带以下开箱即用的策略
为了让你有一个良好的开端,Scout 默认情况下为你的 Scout 启用的存储库启用了多个策略。你可以自定义默认配置以反映内部要求和标准。如果你认为某个策略与你无关,也可以完全禁用它。有关更多信息,请参阅 配置策略。
还有一组 其他策略 可选地为存储库启用。
可修复的严重漏洞和高危漏洞
可修复的严重漏洞和高危漏洞策略要求你的工件没有暴露于已知漏洞(其中有修复版本可用)。从本质上讲,这意味着对于不符合此策略的镜像,有一个简单的修复方法:将有漏洞的软件包升级到包含修复漏洞的版本。
默认情况下,此策略仅标记 30 天前披露的严重漏洞和高危漏洞。仅标记特定年龄的漏洞的理由是,新发现的漏洞不应导致你的评估失败,直到你有机会解决它们。
如果工件受一个或多个严重漏洞或高危漏洞的影响(其中有修复版本可用),则此策略未满足。
你可以通过创建策略的自定义版本来配置此策略的参数。以下策略参数在自定义版本中是可配置的
- 策略的名称和描述
- 要考虑的严重性级别
- 年龄阈值(设置为
0
以标记所有漏洞,无论年龄如何) - 是否仅报告有修复版本可用的漏洞
有关配置策略的更多信息,请参阅 配置策略。
版权许可证
版权许可证策略要求你的工件不包含以 AGPLv3 或 GPLv3 许可证分发的软件包。这些许可证是保护性的 版权许可证,由于它们实施的限制,可能不适合在你的软件中使用。
如果你的工件包含一个或多个具有违规许可证的软件包,则此策略未满足。
你可以配置此策略应注意的许可证列表,并通过指定允许列表(以 PURL 的形式)添加例外情况。请参阅 配置策略。
过时的基础镜像
过时的基础镜像策略要求你使用最新基础镜像。
当你用来构建镜像的标签指向与你正在使用的标签不同的摘要时,它将未满足。如果摘要不匹配,则表示你正在使用过时的基础镜像。
你的镜像需要溯源证明才能使此策略成功评估。有关更多信息,请参阅 没有基础镜像数据。
高知名度漏洞
高知名度漏洞策略要求你的工件不包含来自 Docker Scout 策划列表的漏洞。此列表会随着新披露的漏洞的出现而更新,这些漏洞被广泛认为具有风险。
该列表包含以下漏洞
- CVE-2014-0160(OpenSSL Heartbleed)
- CVE-2021-44228(Log4Shell)
- CVE-2023-38545(cURL SOCKS5 堆缓冲区溢出) :cc
- CVE-2024-3094(XZ 后门)
你可以通过创建自定义策略来配置此列表中包含的 CVE。有关更多信息,请参阅 配置策略。
供应链证明
如果工件缺少 SBOM 证明或最大模式的溯源证明,则此策略未满足。要确保合规性,请更新你的构建命令以在构建时附加这些证明
$ docker buildx build --provenance=true --sbom=true -t <IMAGE> --push .
有关使用证明进行构建的更多信息,请参阅 证明。
通过质量关
质量关通过策略建立在 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 中查看结果。
默认非 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"
注意
此策略仅检查镜像的默认用户,如镜像配置 blob 中所设置。即使您指定了非 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 Scout 还支持以下可选策略。在启用这些策略之前,您需要配置策略,或配置策略所需的集成。
未经批准的基础镜像
**未批准的基础镜像** 策略允许您限制构建中允许使用的基础镜像。
此策略检查构建中使用的基础镜像是否与策略配置中指定的任何模式匹配。下表显示了此策略的一些示例模式。
用例 | 模式 |
---|---|
允许来自 Docker Hub 的所有镜像 | docker.io/* |
允许所有 Docker 官方镜像 | docker.io/library/* |
允许来自特定组织的镜像 | docker.io/orgname/* |
允许特定存储库的标签 | docker.io/orgname/repository:* |
允许主机名为 registry.example.com 的注册表上的镜像 | registry.example.com/* |
允许 NodeJS 镜像的精简标签 | docker.io/library/node:*-slim |
星号 (*
) 匹配到下一个字符或镜像引用的末尾。请注意,为了匹配 Docker Hub 镜像,需要 docker.io
前缀。这是 Docker Hub 的注册表主机名。
您还可以配置策略以
仅允许 Docker 官方镜像的支持标签。
启用此选项后,使用官方镜像不支持的标签的镜像会触发策略违规。官方镜像的支持标签列在 Docker Hub 上存储库概述中的**支持标签**部分。
仅允许支持的发布版版本的 Docker 官方镜像
启用此选项后,使用已到达生命周期末期的不受支持的 Linux 发行版(如
ubuntu:18.04
)的镜像会触发策略违规。启用此选项可能会导致策略报告无数据,如果无法确定操作系统版本。
此策略默认情况下未启用。要启用策略
在**批准的基础镜像源**下,指定要允许的镜像引用模式。
选择是否要仅允许官方镜像的支持标签以及支持的 Linux 发行版版本。
选择**保存并启用**。
该策略现在已为您的当前组织启用。
你的镜像需要溯源证明才能使此策略成功评估。有关更多信息,请参阅 没有基础镜像数据。
通过质量关
质量关通过策略建立在 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 使用来源证明来找出基础镜像版本。