获取阶段概述

获取用作基本映像或实用工具映像的外部容器映像是容器供应链的第一阶段。 企业可能缺乏从源生成每一件软件的专业知识或资源,并且需要依赖容器映像的外部源。 此类映像的示例包括操作系统或框架映像、NGINX 和 Envoy 等服务代理,或日志记录和指标映像(如 Fluentd 和 Kafka)。 在使用之前,必须建立某些质量检查,并确保此类映像符合企业政策。

Microsoft 的容器安全供应链(CSSC)框架确定需要获取外部映像。 CSSC 框架建议一组标准做法和工具,以帮助安全地获取外部容器映像以供内部使用。 在本文中,你将了解可在 CSSC 框架的“获取”阶段中使用的目标、标准做法和工具。

背景

目前,企业没有建立用于获取外部容器映像的过程。 方法因企业规模和专业知识而异。

以安全为中心的企业将预先批准的映像从外部源(如 Docker 中心)引入内部 隔离 注册表。 在发布漏洞和恶意软件供内部使用之前,会检查这些映像是否存在漏洞和恶意软件。 但是,此过程并不统一或完全自动化。 企业还缺乏一种方法来保证整个供应链中这些图像的真实性和完整性。 最后,它们没有一致的方式来使用供应链后续阶段的额外元数据来扩充图像。

企业开始安全旅程时,会直接在其生成和部署脚本中使用来自外部注册表的容器映像。 此方法可能会引入漏洞、恶意软件和不符合性软件,从而损害映像生成和容器化服务的可用性。

CSSC 框架的“获取”阶段建议实施一组步骤和安全控制,以确保在内部使用外部映像之前验证并符合企业策略。

Microsoft 建议尽可能从源生成软件。 如果企业无法做到这一点,我们建议采用以下做法来获取外部容器映像和云本机项目。

  • 将外部映像导入企业控制的内部注册表,以删除对第三方的依赖项并降低对可用性的影响。 应仅从信誉源导入映像。
  • 如果可用,请验证外部映像的签名,以确保发布者的真实性和映像完整性在导入过程中。
  • 在允许内部使用之前,扫描容器映像中是否存在漏洞和恶意软件,以减少引入安全漏洞的风险。
  • 使用其他元数据(如 SBOM、来源和生命周期)扩充容器映像,以便在软件供应链的后续阶段启用策略。
  • 使用企业密钥对容器映像和相关元数据进行签名,以确保完整性并提供受信任的审批标记供内部使用。

Microsoft 的 CSSC 框架指南还与在NCF 软件供应链最佳做法保护材料的指导相匹配。

用于获取外部图像的工作流

尽管信任企业投入供应商或开源项目,但他们应始终验证从外部源获取的软件。 容器映像和云原生项目并不例外。 CSSC 框架建议使用以下工作流来获取外部图像。

  1. 在企业控制下,将容器映像和云原生项目导入内部注册表。
  2. 隔离内部注册表中的映像,以防止它们在内部使用,直到它们得到验证。
  3. 验证与映像关联的任何签名,以确保映像的真实性和完整性(如果外部注册表中存在签名)。
  4. 如果外部注册表中存在其他元数据,请验证与映像关联的任何其他元数据(包括 SBOM 和来源),以防止违反企业策略(如不合规许可证)。
  5. 扫描映像中是否存在已知漏洞和恶意软件,以防止引入安全漏洞。
  6. 将漏洞和恶意软件报告附加为映像证明,以在供应链的后续阶段使用。
  7. 如果不可用,请为映像生成 SBOM 和证明,并将其附加为映像证明,以便在供应链的后续阶段使用。
  8. 使用其他元数据(如生命周期元数据)扩充图像,以便在供应链的后续阶段使用。
  9. 使用企业密钥对映像和相关元数据进行签名,以确保完整性并提供受信任的审批戳供内部使用。
  10. 如果映像符合内部策略,请将映像发布到黄金注册表内部使用。

获取阶段的安全目标

拥有定义完善的外部图像获取工作流可帮助企业提高其安全性,并减少容器供应链上的攻击面。 CSSC 框架的“获取”阶段旨在满足以下安全目标。

由于外部依赖项,减少攻击面

由于公共注册表的开放性质和缺乏严格的安全措施,公共注册表容易受到各种类型的攻击。 允许企业中的用户直接从外部注册表拉取映像会让他们受到依赖项混淆和拼写错误等攻击。

CSSC 框架中的“获取”阶段通过集中获取和管理外部项目,并为内部用户提供所有图像和云原生项目的单一事实来源来解决这一风险。

尽量减少引入安全漏洞的风险

公共注册表中图像缺乏严格的验证和审批流程意味着任何人都可以在不严格审查的情况下推送映像。 这会增加无意中使用泄露的映像的风险,这些映像可能会给企业应用程序带来安全漏洞。

“获取”阶段通过添加对映像的漏洞和恶意软件扫描所需的步骤,然后才获准供内部使用,从而解决此风险。 将映像导入内部注册表的另一个附加好处是,现在可以定期扫描和修补这些映像。

提高容器生成和部署的可用性

由于需要在全球范围内分发容器映像,公共注册表容易受到限制。 公共注册表也是影响映像分发的 DDoS 攻击的目标。 最后,公共注册表托管在未受企业控制的基础结构上,并且可能会受到中断的影响。 这一切可能会导致企业内部版本和部署出现延迟或失败。

通过将映像从外部注册表导入内部注册表,Acquire 阶段通过删除对外部注册表的依赖关系,并允许企业控制从内部注册表中提取映像的速率来解决此风险。 还可以更好地保护专用注册表免受外部攻击,并符合企业可用性要求。

控制外部映像的生命周期

软件发布者可以在不通知的情况下更新外部注册表中的映像。 这可能会导致企业内部版本和部署发生意外更改。 此外,可以在没有通知的情况下从外部注册表中删除映像,这可能会导致企业生成和部署失败。

通过引入中间注册表来托管外部映像,“获取”阶段通过提供内部使用所需的映像的缓存版本来解决此风险。 这样,企业就可以控制映像的生命周期,并确保它们根据企业策略停用。

确保最小图像质量

虽然外部映像的一些发布者开始包括证明(如 SBOM 和来源)以及签名容器映像,但公共注册表中的许多映像没有此类证明。 这也是因为某些公共注册表不支持此类功能。 这使得企业难以确保获取的映像符合其策略。

在 CSSC 框架的“获取”阶段,企业可以使用满足其策略的其他元数据(包括 SBOM、来源、生命周期和其他满足其策略的内部元数据)来丰富映像。 他们还可以使用企业密钥对项目进行签名,以确保完整性并提供受信任的审批戳供内部使用。

Microsoft 提供了一组工具和服务,可帮助企业在“获取”阶段工作流中实施建议的步骤,并解决上面列出的安全目标。

用于导入外部映像的工具和服务

Azure 容器注册表(ACR)是一个托管的符合 OCI 的注册表,支持分发容器映像和其他云原生项目。 ACR 符合最新的 OCI 规范,可用于存储供应链项目。

ACR 导入 功能可用于将映像从外部注册表导入 ACR。 导入会保留映像摘要和标记,并允许从支持 Docker 注册表 V2 API 的任何公共和专用注册表导入映像。

ORAS 是由 Microsoft 支持的一个NCF 项目,它提供一个开源 CLI 和库来与 OCI 注册表进行交互。 ORAS 还可用于将映像和其他 OCI 项目从外部注册表复制到 ACR。

用于验证外部映像的工具和服务

ACR 任务是Azure 容器注册表中的一套功能,允许企业自动执行不同的任务,例如漏洞扫描、SBOM 或签名验证。 将外部映像导入Azure 容器注册表后,可以使用 ACR 任务来验证外部映像。 ACR 任务还可用于将映像从外部注册表自动导入到Azure 容器注册表。

Microsoft Defender for Cloud 是云原生解决方案,用于改进、监视和维护容器化工作负载的安全性。 Microsoft Defender for Cloud 为存储在Azure 容器注册表中的映像提供漏洞评估和管理工具。

使用企业元数据扩充外部映像的工具

作为与 OCI 注册表交互的通用工具, ORAS 还可用于添加批注并将元数据附加到容器映像。 ORAS 可用于添加 SBOM、来源、生命周期和其他元数据,以扩充供应链中后续阶段的图像。

Microsoft 的 SBOM 工具 是一种开源、高度可缩放且企业就绪的工具,用于为各种项目创建与 SPDX 2.2 兼容的 SBOM。 SBOM 工具可用于为容器映像生成详细的 SBOM。

公证项目 是一个 Microsoft 支持的NCF 项目,用于开发用于签名和验证软件项目的规范和工具。 公证项目 notation 的工具可用于使用企业密钥对容器映像和其他云原生项目进行签名。

后续步骤

请参阅 目录阶段 概述,以便安全地托管容器映像供内部使用。