3. 安全基线水位定义
安全基线水位是衡量集群合规状态的核心标尺。它定义了从“完全合规”到“严重违规”的离散水位等级,每个等级对应一组可量化的合规性判定条件。在 Gatekeeper 策略引擎中,水位直接决定变更门禁的放行策略与回滚触发阈值。
3.1 什么是安全基线水位
安全基线水位是对 Kubernetes 集群当前安全合规状态的数字化分级。它基于 OPA/Gatekeeper 策略的违反数量、违反严重程度、违反资源类型覆盖度三个维度综合计算得出。
核心公式(简化):
水位等级 = f(违反策略数, 最高违反级别, 受影响资源比例)
其中违反级别由策略模板中预定义的 severity 标签决定:low、medium、high、critical。
水位不是静态值,而是随集群资源变更实时演算的动态指标。每次变更请求(Admission Review)触发时,Gatekeeper 会评估变更后的预期水位,并与当前水位对比,决定是否放行。
3.2 水位等级划分(低/中/高/严重)
安全基线水位划分为四个等级,每个等级有明确的判定标准和业务含义:
| 水位等级 | 等级标识 | 判定条件 | 业务含义 |
|---|---|---|---|
| 低 | L1 |
无违反策略,或仅存在 low 级别违反且数量 ≤ 3 |
集群处于理想安全状态,变更门禁完全开放 |
| 中 | L2 |
存在 medium 级别违反,或 low 级别违反数量 > 3 |
集群存在可容忍风险,变更需人工确认 |
| 高 | L3 |
存在 high 级别违反,或 medium 级别违反数量 ≥ 5 |
集群处于高风险状态,变更门禁收紧,需审批 |
| 严重 | L4 |
存在 critical 级别违反,或 high 级别违反数量 ≥ 3 |
集群处于危险状态,变更门禁关闭,触发自动回滚 |
水位跃迁规则: 水位等级只允许逐级上升(L1→L2→L3→L4),不允许跳级。但水位下降时,允许跨级下降(例如 L4 可直接降至 L1),前提是所有高等级违反已被修复。
3.3 水位与合规性映射
合规性是指集群实际状态与安全基线之间的差距。水位等级直接映射为合规性评分和合规状态:
| 水位等级 | 合规性评分 | 合规状态 | 合规性描述 |
|---|---|---|---|
| 低 (L1) | 90–100 | ● 完全合规 | 所有策略均通过,无安全缺陷 |
| 中 (L2) | 70–89 | ● 基本合规 | 存在低风险违反,需在下一迭代修复 |
| 高 (L3) | 40–69 | ● 不合规 | 存在高风险违反,变更受限,需立即修复 |
| 严重 (L4) | 0–39 | ● 严重不合规 | 存在严重违反,变更冻结,自动回滚 |
合规性评分计算公式:
合规性评分 = 100 - (违反策略数 × 权重因子)
权重因子映射:
low: 5
medium: 10
high: 20
critical: 40
重要: 合规性评分仅用于水位等级的辅助判定。最终水位等级以“判定条件”表中的硬性规则为准,评分只作为参考指标。当评分与判定条件冲突时,以判定条件为准。
3.4 水位与策略模板的关联
每个 Gatekeeper 策略模板(ConstraintTemplate)必须声明 severity 标签,用于水位计算:
apiVersion: templates.gatekeeper.sh/v1
kind: ConstraintTemplate
metadata:
name: k8srequiredlabels
annotations:
security.baseline/severity: "high" # 水位等级标签
security.baseline/category: "identity"
spec:
crd:
spec:
names:
kind: K8sRequiredLabels
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8srequiredlabels
violation[{"msg": msg}] {
# 策略逻辑
}
策略模板的 severity 标签决定了该策略违反时对水位的影响权重。一个 critical 级别的违反会直接将水位推至 L4,而 low 级别的违反需要累积多个才会影响水位。
3.5 水位与变更门禁的联动逻辑
下图展示了水位等级如何驱动变更门禁的决策流程: