Docker Scout 中的策略评估入门

抢先体验

策略评估是 Docker Scout 的一项抢先体验功能。

在软件供应链管理中,维护工件的安全性和可靠性是重中之重。 Docker Scout 中的策略评估在现有分析功能之上引入了一个控制层。它允许您为工件定义供应链规则,并帮助您跟踪工件随着时间的推移相对于您的规则和阈值的执行情况。

了解如何使用策略评估来确保您的工件符合既定的最佳实践。

政策评估如何运作

当您为存储库激活 Docker Scout 时,系统会 自动分析您推送的镜像。通过分析,您可以深入了解映像的组成,包括它们包含哪些包以及它们面临哪些漏洞。策略评估建立在图像分析功能之上,根据策略定义的规则解释分析结果。

策略定义了您的工件应满足的图像质量标准。例如,Copyleft 许可证策略标记根据 Copyleft 许可证分发的软件包。如果映像包含 Copyleft 许可的软件包,则该映像不符合此策略。某些策略(例如Copyleft 许可证策略)是可配置的。可配置的策略允许您调整标准以更好地满足组织的需求。

在 Docker Scout 中,策略旨在帮助您提升安全和供应链地位。其他工具专注于提供通过或失败状态,而 Docker Scout 策略可以直观地显示微小的增量更改对策略状态的影响,即使您的工件尚未满足策略要求。通过跟踪失败间隙如何随时间变化,您可以更轻松地了解您的工件相对于策略是在改进还是在恶化。

策略不一定与应用程序安全和漏洞相关。您还可以使用策略来衡量和跟踪供应链管理的其他方面,例如开源许可证的使用情况和基础映像的最新情况。

开箱即用的政策

Docker Scout 提供以下开箱即用的策略:

为了让您抢占先机,Scout 默认为启用 Scout 的存储库启用多种策略。您可以自定义默认配置以反映内部要求和标准。如果某个策略与您无关,您也可以完全禁用它。有关详细信息,请参阅 配置策略

可修复的严重和高漏洞

可修复的严重和高漏洞策略要求您的工件不会暴露于有可用修复版本的已知漏洞中。从本质上讲,这意味着您可以为未满足此策略的映像部署一个简单的修复程序:将易受攻击的包升级到包含漏洞修复程序的版本。

默认情况下,此策略仅标记 30 天前披露的严重和高严重性漏洞。仅标记特定年龄的漏洞的理由是,新发现的漏洞不应导致您的评估失败,直到您有机会解决它们。

如果工件受到一个或多个严重或高严重性漏洞的影响(其中有可用的修复版本),则该策略无法得到满足。

您可以通过创建策略的自定义版本来配置此策略的参数。以下策略参数可在自定义版本中配置:

  • 政策的名称和描述
  • 需要考虑的严重级别
  • 年龄阈值(设置0为标记所有漏洞,无论年龄如何)
  • 是否仅报告具有可用修复版本的漏洞

有关配置策略的更多信息,请参阅 配置策略

Copyleft 许可证

Copyleft 许可证策略要求您的工件不包含根据 AGPLv3 或 GPLv3 许可证分发的包。这些许可证是保护性的 Copyleft,并且由于它们强制执行的限制,可能不适合在您的软件中使用。

如果您的工件包含一个或多个具有违规许可证的包,则此策略未得到满足。

您可以配置此策略应关注的许可证列表,并通过指定允许列表(以 PURL 的形式)来添加例外。请参阅 配置策略

过时的基础镜像

过时的基础映像策略要求您使用的基础映像是最新的。

当您用于构建图像的标签指向与您正在使用的不同的摘要时,它就没有实现。如果摘要不匹配,则意味着您使用的基本映像已过时。

您的图像需要出处证明才能成功评估此政策。有关详细信息,请参阅 无基础映像数据

备受瞩目的漏洞

高调漏洞策略要求您的工件不包含 Docker Scout 精选列表中的漏洞。此列表会及时更新新披露的被广泛认为存在风险的漏洞。

该列表包括以下漏洞:

您可以通过创建自定义策略来配置此列表中包含的 CVE。有关详细信息,请参阅 配置策略

供应链证明

供应链证明政策要求您的工件具有 SBOM来源证明。

如果工件缺少 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.revisionOCI 注释将 SonarQube 分析结果与容器映像链接起来。除了启用 SonarQube 集成之外,您还必须确保您的图像具有证明或标签。

Git commit SHA 将图像与 SonarQube 分析链接起来

推送映像并完成策略评估后,SonarQube 质量门的结果将在 Docker Scout 仪表板和 CLI 中显示为策略。

笔记

Docker Scout 只能访问启用集成后创建的 SonarQube 分析。 Docker Scout 无法访问历史评估。启用集成后触发 SonarQube 分析和策略评估,以在 Docker Scout 中查看结果。

默认非 root 用户

默认情况下,容器以root超级用户身份运行,在容器内具有完整的系统管理权限,除非 Dockerfile 指定了不同的默认用户。以特权用户身份运行容器会削弱其运行时安全性,因为这意味着在容器中运行的任何代码都可以执行管理操作。

默认非 root 用户策略会检测设置为以默认用户身份运行的映像root。为了遵守此策略,映像必须在映像配置中指定非 root 用户。如果图像未为运行时阶段指定非 root 默认用户,则图像违反此策略。

对于不合规的图像,评估结果会显示用户是否已root 明确设置该图像。这有助于您区分由用户root隐式图像和root有意设置的图像引起的策略违规。

root尽管未明确设置,但以下 Dockerfile 默认运行:

FROM alpine
RUN echo "Hi"

而在以下情况下,root用户是显式设置的:

FROM alpine
USER root
RUN echo "Hi"

笔记

此策略仅检查映像配置 blob 中设置的映像默认用户。即使您确实指定了非 root 默认用户,仍然可以在运行时覆盖默认用户,例如通过使用命令--user的标志docker run

为了使您的镜像符合此策略,请使用 USERDockerfile 指令设置一个不具有运行时阶段 roo​​t 权限的默认用户。

以下 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.comregistry.example.com/*
允许 NodeJS 图像的 slim 标签docker.io/library/node:*-slim

星号 ( *) 匹配直到后面的字符,或直到图像引用的末尾。请注意,需要该docker.io前缀才能匹配 Docker Hub 映像。这是 Docker Hub 的注册表主机名。

您还可以将策略配置为:

  • 仅允许 Docker 官方镜像支持的标签。

    启用此选项后,使用不支持的官方映像标签的映像会触发策略违规。Docker Hub 上存储库概述的支持的标签部分列出了官方映像支持的标签。

  • 仅允许支持的发行版版本的 Docker 官方映像

    启用此选项后,使用已达到生命周期的不受支持的 Linux 发行版(例如ubuntu:18.04)的映像会触发策略违规。

    如果无法确定操作系统版本,启用此选项可能会导致策略不报告任何数据。

默认情况下不启用此策略。要启用该策略:

  1. 在 Docker Scout 仪表板中创建新策略。

  2. 在“批准的基础图像源”下,指定您想要允许的图像参考模式。

  3. 选择是否仅允许官方映像和受支持的 Linux 发行版使用受支持的标签。

  4. 选择保存并启用

    该策略现已为您当前的组织启用。

您的图像需要出处证明才能成功评估此政策。有关详细信息,请参阅 无基础映像数据

无基础图像数据

在某些情况下,无法确定有关构建中使用的基础映像的信息。在这种情况下,“过时的基础映像”“未经批准的基础映像”策略会被标记为“无数据”

在以下情况下会出现这种“无数据”状态:

  • Docker Scout 不知道您使用了什么基本镜像标签
  • 您使用的基础镜像版本有多个标签,但并非所有标签都已过时

为了确保 Docker Scout 始终了解您的基础映像,您可以 在构建时附加出处证明。 Docker Scout 使用出处证明来查找基础镜像版本。