3. 发布窗口机制:时间窗口定义、窗口类型与合规要求
发布窗口(Release Window)是镜像供应链中控制信任边界变更的核心时间约束机制。它定义了从镜像构建完成到正式部署之间允许进行基线偏差回归检查的时间段。合理的窗口机制能够平衡安全合规与业务敏捷性,防止因检查窗口过短导致漏检,或因窗口过长阻塞正常发布。
3.1 时间窗口定义
时间窗口由三个关键参数构成,所有参数必须在发布策略中显式声明:
| 参数 | 定义 | 典型值 | 合规影响 |
|---|---|---|---|
| 窗口起始点 | 镜像签名完成并推送至可信仓库的时间戳 | 构建流水线结束时刻 | 作为回归检查的计时起点 |
| 窗口持续时间 | 从起始点到截止点的最大允许时长 | 4h / 8h / 24h / 72h | 决定检查深度与覆盖范围 |
| 窗口截止点 | 必须完成所有基线偏差回归检查并生成报告的最后时间 | 起始点 + 持续时间 | 超时未完成则自动阻断发布 |
关键约束:窗口起始点必须基于不可篡改的时间戳(如 TSA 签章时间戳),防止人为回溯窗口起点以规避检查。
3.2 窗口类型:固定窗口 vs 滚动窗口
根据业务场景和安全等级,发布窗口分为两种基本类型。下表从多个维度进行对比:
| 对比维度 | 固定窗口(Fixed Window) | 滚动窗口(Sliding Window) |
|---|---|---|
| 时间边界 | 硬性截止时间,超时即关闭 | 以当前时间为基准向前推移 |
| 适用场景 | 合规审计、金融核心、监管报告 | 持续交付、DevOps 流水线、紧急修复 |
| 检查触发 | 窗口开启时一次性触发全量检查 | 每次镜像推送触发增量检查 |
| 超时处理 | 镜像标记为“未通过窗口”,禁止部署 | 窗口自动前移,旧镜像退出检查范围 |
| 合规复杂度 | 低,边界清晰 | 高,需维护窗口状态机 |
3.2.1 固定窗口机制
固定窗口适用于对时间边界有严格合规要求的场景。窗口一旦关闭,任何未完成的回归检查均视为失败。典型流程如下:
- 镜像签名完成,记录起始时间 T0。
- 窗口持续 D 时长(如 24 小时),期间执行基线偏差回归检查。
- 在 T0 + D 时刻,窗口强制关闭。
- 检查结果汇总为通过/失败报告,失败则阻断发布。
3.2.2 滚动窗口机制
滚动窗口适用于高频率发布的 DevOps 场景。窗口不设硬性截止时间,而是以当前时间点为基准,向前推移固定时长。每次镜像更新都会重置窗口内的检查范围:
- 当前时间 T_now,窗口覆盖 [T_now - D, T_now] 区间内的所有镜像。
- 新镜像推送后,窗口自动前移,旧镜像若超出区间则退出检查。
- 回归检查持续进行,结果实时更新。
- 任何时刻窗口内的镜像都必须满足基线要求。
实践建议:对于生产环境的关键镜像,建议采用固定窗口 + 滚动窗口的混合策略:固定窗口用于合规审计,滚动窗口用于日常持续检查。
3.3 窗口策略与合规要求
发布窗口策略必须与组织的合规框架对齐。以下列出常见的策略要求及其对应的合规映射:
| 策略项 | 要求描述 | 合规映射 |
|---|---|---|
| 窗口时长上限 | 固定窗口最长不超过 72 小时,滚动窗口滑动步长不超过 24 小时 | NIST SP 800-190 / CIS Docker Benchmark |
| 检查覆盖率 | 窗口内必须覆盖 CVE 扫描、签名验证、SBOM 一致性、策略基线 | SLSA Level 2+ / SSDF |
| 超时阻断 | 窗口关闭时未完成检查的镜像自动标记为“未通过” | PCI DSS / SOC 2 变更管理 |
| 审计追溯 | 窗口开启/关闭事件、检查结果、阻断记录必须写入不可篡改日志 | FedRAMP / GDPR 审计要求 |
| 人工干预 | 紧急情况下可申请窗口延期,但需双人审批并记录原因 | SOX / ITIL 变更管理 |
3.4 发布窗口状态机与基线偏差回归检查流程
下图展示了发布窗口从开启到关闭的完整状态流转,以及基线偏差回归检查在窗口内的执行时机:
3.5 窗口策略配置示例
以下是一个基于 YAML 的发布窗口策略配置示例,展示了固定窗口与滚动窗口的声明方式:
# release-window-policy.yaml
apiVersion: supplychain.security/v1
kind: ReleaseWindowPolicy
metadata:
name: production-critical-window
spec:
# 窗口类型: fixed | sliding
windowType: fixed
# 窗口持续时间(单位: hours)
duration: 24
# 窗口起始偏移(从镜像签名完成开始计算)
startOffset: 0
# 超时行为: block | warn
timeoutAction: block
# 合规要求
compliance:
- standard: "NIST SP 800-190"
- standard: "SLSA Level 2"
# 检查项列表
checks:
- name: cve-scan
required: true
maxSeverity: HIGH
- name: signature-verify
required: true
- name: sbom-consistency
required: true
- name: policy-baseline
required: true
# 审计日志配置
audit:
enabled: true
storage: immutable-log
retentionDays: 365
注意:窗口策略配置必须与镜像仓库的准入控制器(Admission Controller)集成,确保策略在部署阶段强制生效。任何绕过窗口机制的部署行为都应触发安全告警。
3.6 窗口合规检查清单
在实施发布窗口机制时,建议对照以下清单进行合规验证:
- 窗口定义完整性:是否明确声明起始点、持续时间和截止点?
- 窗口类型选择:是否根据业务场景选择了固定窗口或滚动窗口?
- 检查覆盖率:窗口内是否覆盖了所有必需的基线偏差回归检查项?
- 超时处理:超时后是否自动阻断发布并记录审计日志?
- 人工干预审批:窗口延期或豁免是否有双人审批流程?
- 不可篡改时间戳:窗口起始点是否使用 TSA 签章时间戳?
- 策略与合规对齐:窗口参数是否满足 NIST、SLSA、PCI DSS 等标准要求?