2. 供应链安全基础概念:软件供应链、信任链、信任边界、镜像签名与验证
在云原生环境中,Envoy 代理镜像的供应链安全是保障整个服务网格可信运行的基石。理解软件供应链、信任链、信任边界以及镜像签名与验证等核心概念,是构建可信交付流水线的第一步。
2.1 软件供应链与信任链
软件供应链涵盖了从源代码开发、构建、测试、打包、分发到部署运行的全生命周期。在 Envoy 代理镜像的场景下,供应链中的每一个环节都可能成为攻击者的切入点。
关键洞察: 供应链攻击往往不是直接攻击最终运行的二进制文件,而是在上游依赖、构建工具、镜像仓库或 CI/CD 管道中植入恶意代码。Envoy 作为数据平面的核心组件,其镜像的完整性直接关系到整个网格的安全。
信任链(Chain of Trust)是供应链安全的核心机制。它通过逐级验证的方式,确保从根信任锚点到最终运行时的镜像内容未被篡改。典型的信任链包含以下层级:
- 根信任锚点:通常是硬件安全模块(HSM)或离线管理的根证书/密钥。
- 签名密钥:由根信任锚点签发的中间签名密钥,用于实际对镜像进行签名。
- 镜像签名:使用签名密钥对镜像清单(Manifest)或摘要(Digest)进行数字签名。
- 验证策略:在部署时,策略引擎(如 OPA/Connaisseur)验证签名是否有效、签名者是否被授权。
- 运行时准入:Kubernetes 准入控制器(如 Ratify)在 Pod 创建前完成验证,拒绝未签名或签名无效的镜像。
2.2 信任边界
信任边界(Trust Boundary)是供应链中不同安全域之间的分界线。在 Envoy 镜像的交付流程中,典型的信任边界包括:
| 信任边界 | 描述 | 安全控制措施 |
|---|---|---|
| 开发环境 → 构建系统 | 源代码从开发者本地环境提交到 CI/CD 构建系统 | 代码签名、分支保护、提交验证(GPG) |
| 构建系统 → 镜像仓库 | 构建完成的镜像被推送到容器镜像仓库 | 镜像签名、TLS 传输加密、仓库访问控制 |
| 镜像仓库 → 部署集群 | 镜像从仓库拉取到 Kubernetes 集群节点 | 镜像验证策略、准入控制器、Notary 验证 |
| 集群内部 → 运行时 | 镜像在节点上被拉取并启动为容器 | 运行时安全策略、Seccomp/AppArmor、只读根文件系统 |
实践建议: 在 Envoy 代理镜像的供应链中,构建系统到镜像仓库 的信任边界是最常被忽视的薄弱环节。建议在此边界实施强制签名策略,确保只有经过签名的镜像才能进入生产仓库。
2.3 镜像签名与验证
镜像签名是建立信任链的核心技术手段。它通过非对称加密算法,为镜像内容生成不可篡改的数字签名。Envoy 代理镜像的签名与验证流程通常遵循以下步骤:
2.3.1 签名流程
- 计算摘要:对 Envoy 镜像的 Manifest 文件进行 SHA-256 哈希计算,生成唯一的摘要值。
- 签名生成:使用私钥对摘要值进行加密签名,生成签名文件(通常为
.sig或signature.json)。 - 元数据绑定:将签名与镜像的标签(Tag)、摘要(Digest)以及签名者身份信息绑定,形成签名元数据。
- 存储签名:将签名元数据存储在镜像仓库的附属标签(如
envoyproxy/envoy:latest-sig)或独立的 Notary 服务中。
2.3.2 验证流程
- 拉取镜像与签名:部署时,准入控制器同时拉取镜像和对应的签名元数据。
- 摘要比对:重新计算拉取到的镜像 Manifest 的摘要值,与签名中绑定的摘要进行比对。
- 签名验证:使用预先配置的公钥对签名进行解密,验证解密后的摘要是否与步骤 2 计算的摘要一致。
- 策略评估:验证签名者身份是否在允许的签名者列表中,以及签名是否在有效期内。
- 准入决策:所有验证通过后,允许 Pod 创建;否则拒绝并记录审计日志。
2.4 常见签名工具与标准
在 Envoy 代理镜像的供应链安全实践中,以下工具和标准被广泛采用:
| 工具/标准 | 类型 | 适用场景 | 与 Envoy 的集成方式 |
|---|---|---|---|
| Cosign | 签名工具 | 容器镜像签名与验证,支持密钥对和 OIDC | 在 CI/CD 中直接对 Envoy 镜像执行 cosign sign |
| Notary v2 | 签名标准 | OCI 分发规范下的镜像签名与存储 | 作为 Envoy 镜像仓库的签名后端服务 |
| Sigstore | 签名基础设施 | 提供无密钥签名、透明日志和公钥分发 | 通过 Fulcio 和 Rekor 为 Envoy 镜像提供可审计签名 |
| Ratify | 验证准入控制器 | Kubernetes 准入阶段的镜像验证 | 作为 Envoy 部署前的最后一道验证关卡 |
常见误区: 仅对镜像标签(Tag)进行签名是不够的,因为标签是可变的。必须对镜像的摘要(Digest)进行签名,才能确保引用的镜像内容不可篡改。在 Envoy 的部署清单中,建议使用
envoyproxy/envoy@sha256:... 格式替代 envoyproxy/envoy:latest。
2.5 信任边界测试验证要点
在后续的课程实验中,我们将针对 Envoy 代理镜像的信任边界进行实际测试验证。以下是需要重点关注的关键验证点:
- 签名完整性验证:验证签名后的镜像在传输过程中是否被篡改。
- 密钥管理验证:测试私钥泄露场景下,攻击者能否伪造有效签名。
- 策略绕过验证:尝试使用未签名镜像或过期签名镜像部署 Envoy,验证准入控制器的拦截效果。
- 信任链断裂验证:模拟中间人攻击,验证信任链中某一环节被破坏后的系统行为。