1. 课程导论:Sigstore 与 Trivy 协同的价值、策略即代码概念、回滚护栏的运维意义
1.1 为什么需要 Sigstore 与 Trivy 协同?
在云原生软件供应链中,镜像安全扫描(Trivy)与签名验证(Sigstore)长期处于“各自为政”的状态。运维团队往往先扫描镜像,确认无高危漏洞后部署;但扫描结果本身并未被签名,攻击者可在镜像通过扫描后、推送至仓库前篡改内容。Sigstore 与 Trivy 的协同,本质上是将“安全扫描结果”与“不可篡改的签名”绑定,形成一条可验证的信任链。
| 维度 | Trivy 单独使用 | Sigstore 单独使用 | 协同使用 |
|---|---|---|---|
| 漏洞检测 | ✅ 支持 | ❌ 不支持 | ✅ 扫描 + 签名绑定 |
| 防篡改 | ❌ 扫描结果可被篡改 | ✅ 签名保证完整性 | ✅ 扫描结果签名固化 |
| 策略执行 | ❌ 无策略引擎 | ❌ 仅签名验证 | ✅ 策略即代码统一决策 |
| 回滚安全 | ❌ 无回滚护栏 | ❌ 无回滚护栏 | ✅ 签名策略阻断不安全回滚 |
核心价值:协同后,运维团队可以在部署前同时验证“镜像是否被篡改”和“镜像是否通过安全扫描”,并将这两项检查固化为策略代码,实现自动化门禁。
1.2 策略即代码(Policy as Code)概念
策略即代码(PaC)是将安全、合规、运维规则以声明式代码形式编写、版本化管理、自动化执行的方法论。在 Sigstore-Trivy 协同场景中,PaC 的核心作用是将“允许部署的条件”转化为可编程的断言。
典型策略示例:
# 策略:仅允许 Trivy 扫描结果为 CRITICAL=0 且经过 Sigstore 签名的镜像部署
package sigstore_trivy_policy
import rego.v1
default allow := false
allow if {
# 1. 镜像必须包含有效的 Sigstore 签名
input.sigstore.verified == true
# 2. Trivy 扫描结果中无 CRITICAL 漏洞
input.trivy.summary.critical == 0
# 3. 签名时间必须在扫描时间之后(防止先签名后扫描)
input.sigstore.signed_at > input.trivy.scanned_at
}
PaC 优势:策略代码可纳入 Git 仓库进行 PR 评审、版本回滚、审计追溯;相比人工配置,PaC 消除了“配置漂移”和“人为遗漏”的风险。
1.3 回滚护栏的运维意义
回滚是运维中最易被忽视的安全窗口。传统回滚操作通常跳过安全扫描和签名验证,直接拉取历史镜像部署,这为已知漏洞的重新引入或已被篡改的旧版本提供了可乘之机。回滚护栏是指在回滚流程中强制插入安全策略检查,确保回滚的镜像同样满足当前的安全基线。
回滚护栏的三大运维意义:
- 防止漏洞回潮:旧版本镜像可能包含已修复的漏洞,回滚护栏通过 Trivy 扫描策略阻止此类镜像上线。
- 防止签名失效:旧版本镜像的签名可能已过期或被吊销,回滚护栏通过 Sigstore 验证确保签名仍然有效。
- 审计可追溯:每次回滚操作都会生成策略评估日志,满足合规审计要求。
常见误区:不要认为“回滚的镜像以前部署过就一定是安全的”。镜像内容可能被篡改,或漏洞库已更新导致旧版本被判定为高危。回滚护栏不是限制回滚,而是确保回滚操作的安全质量。
1.4 协同架构总览
下图展示了 Sigstore 与 Trivy 协同策略即代码回滚护栏的整体架构,包含 CI/CD 流水线、策略引擎、镜像仓库和 Kubernetes 集群四个核心域。
1.5 本章小结
Sigstore 与 Trivy 的协同解决了软件供应链中“扫描结果不可信”和“签名无扫描上下文”的双重困境。策略即代码将安全规则从人工操作升级为自动化门禁,而回滚护栏则填补了运维中最容易被攻击的安全缺口。三者结合,构成了云原生部署安全的最后一道防线。
| 关键概念 | 一句话定义 | 在本课程中的角色 |
|---|---|---|
| Sigstore | 开源软件签名与验证框架 | 提供镜像签名、验证、透明度日志 |
| Trivy | 开源容器镜像漏洞扫描器 | 提供漏洞检测、SBOM 生成、策略输入 |
| 策略即代码 | 用代码定义安全与运维规则 | 将协同逻辑固化为可版本管理的策略 |
| 回滚护栏 | 回滚操作的安全强制检查机制 | 确保回滚镜像同样满足当前安全基线 |