3. 安全基线定义:什么是安全基线、常见安全基线标准(CIS、NIST)、如何在Kubernetes中定义安全基线策略
3.1 安全基线的核心概念
安全基线(Security Baseline)是指一组经过验证、最小化的安全配置规则集合,用于确保系统、容器或集群在部署时处于已知的安全状态。它不是最高安全等级,而是“最低可接受的安全门槛”——任何偏离基线的配置都应被视为潜在风险,触发告警或自动修复。
关键原则: 安全基线 = 可重复 + 可审计 + 可自动执行。在 Kubernetes 环境中,基线策略必须能够通过声明式配置(如 OPA/Gatekeeper、Kyverno)持续强制实施,并与 GitOps 工作流(Argo CD)联动,实现“配置即合规”。
3.2 常见安全基线标准对比
| 标准 | 发布机构 | 核心关注点 | Kubernetes 适用性 | 典型控制项示例 |
|---|---|---|---|---|
| CIS Benchmarks | Center for Internet Security | 具体、可操作的配置检查项(1.0/1.1/1.2 等级) | 极高:有专门的 Kubernetes Benchmark(v1.24+) | 禁止特权容器、限制宿主机网络命名空间、启用审计日志 |
| NIST SP 800-53 | National Institute of Standards and Technology | 风险管理框架、控制族(AC/IA/SC 等) | 中高:需映射到 Kubernetes 具体资源 | AC-3 访问控制强制、SC-7 边界保护、IA-2 身份标识 |
| NSA/CISA Kubernetes Hardening Guide | NSA & CISA | 实战化攻击面缩减、Pod 安全、网络隔离 | 高:直接面向 K8s 集群 | 使用 Pod Security Standards、限制 ServiceAccount 令牌挂载 |
| PCI DSS / SOC 2 | PCI SSC / AICPA | 合规审计、数据保护、变更管理 | 中:需通过策略引擎翻译为 K8s 规则 | 加密传输、最小权限原则、变更审批记录 |
实践建议: 大多数团队以 CIS Kubernetes Benchmark 作为基线起点,再叠加 NIST 控制族中的“访问控制”和“配置管理”要求。CIS 提供可自动扫描的 JSON/ YAML 规则,适合直接集成到 CI/CD 和 Admission Controller 中。
3.3 在 Kubernetes 中定义安全基线策略
Kubernetes 原生提供了三层安全基线定义机制,从集群级到工作负载级逐层收紧:
- Pod Security Standards (PSS) — 内置的 Pod 安全策略,分
privileged、baseline、restricted三个档位。 - OPA/Gatekeeper — 通过 ConstraintTemplate 和 Constraint 自定义任意安全规则。
- Kyverno — 专为 Kubernetes 设计的策略引擎,支持 mutate/validate/generate。
3.3.1 使用 Pod Security Standards 定义基线
Kubernetes v1.23+ 推荐使用 Pod Security Admission(PSA)替代废弃的 PodSecurityPolicy。以下示例将 baseline 级别应用于 production 命名空间:
apiVersion: v1
kind: Namespace
metadata:
name: production
labels:
pod-security.kubernetes.io/enforce: baseline
pod-security.kubernetes.io/enforce-version: latest
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/warn: restricted
baseline 级别禁止的行为包括:
- 特权容器(
privileged: true) - 宿主机 PID/IPC/网络命名空间共享
- 允许
hostPort、hostNetwork - 允许
seccomp未设置或设置为unconfined - 允许
capabilities包含CAP_SYS_ADMIN等危险权限
3.3.2 使用 OPA/Gatekeeper 定义自定义基线
当内置 PSS 无法覆盖业务特定规则时(例如:必须禁止挂载 /var/run/docker.sock、必须设置 readOnlyRootFilesystem: true),使用 Gatekeeper 定义 ConstraintTemplate:
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8sbaselineblockhostpaths
spec:
crd:
spec:
names:
kind: K8sBaselineBlockHostPaths
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8sbaselineblockhostpaths
violation[{"msg": msg}] {
container := input.review.object.spec.containers[_]
container.volumeMounts[_].mountPath == "/var/run/docker.sock"
msg := sprintf("Container %v mounts docker socket, which is forbidden by baseline", [container.name])
}
3.3.3 使用 Kyverno 定义声明式基线
Kyverno 的 YAML 风格更接近 Kubernetes 原生资源,适合快速编写常见基线规则:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: baseline-restrict-seccomp
spec:
validationFailureAction: Enforce
rules:
- name: require-seccomp-profile
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Seccomp profile must be set to RuntimeDefault or Localhost"
pattern:
spec:
securityContext:
seccompProfile:
type: "RuntimeDefault"
注意: 安全基线策略必须与 Argo CD 的 Sync 阶段联动。建议在 Argo CD Application 的
spec.syncPolicy 中配置 syncOptions: Validate=false 仅用于资源同步,而将策略校验交给 Admission Controller(Gatekeeper/Kyverno)在 Apply 时拦截。这样可以避免 Argo CD 因策略拒绝而陷入无限重试。
3.4 安全基线策略与 GitOps 的集成架构
下图展示了安全基线在 GitOps 工作流中的位置——策略即代码(Policy as Code)存储在 Git 仓库中,通过 Admission Controller 在部署时强制校验,并通过 Argo CD 的健康检查反馈合规状态:
3.5 基线策略的自动化验证清单
在将安全基线集成到 Argo CD 自动化回滚体系之前,建议按以下清单逐项确认:
| 检查项 | 工具/方法 | 基线等级 | 与回滚联动方式 |
|---|---|---|---|
| 禁止特权容器 | PSS baseline / Kyverno | CIS 5.2.1 | 阻断部署 → 触发 Argo CD Sync 失败 → 自动回滚 |
| 禁止宿主机网络 | PSS baseline / OPA | CIS 5.2.4 | 阻断部署 → 触发 Argo CD Sync 失败 → 自动回滚 |
| 强制只读根文件系统 | Kyverno / OPA | NIST SC-7 | 告警 + 允许部署(审计模式)→ 人工判断是否回滚 |
| 限制容器 Capabilities | PSS baseline / OPA | CIS 5.2.7 | 阻断部署 → 触发 Argo CD Sync 失败 → 自动回滚 |
| 强制 Seccomp 配置 | Kyverno | CIS 5.7.2 | 阻断部署 → 触发 Argo CD Sync 失败 → 自动回滚 |
| 禁止挂载 Docker Socket | OPA / Kyverno | NSA 指南 | 阻断部署 → 触发 Argo CD Sync 失败 → 自动回滚 |
关键设计决策: 安全基线策略应分为 “强制阻断” 和 “审计告警” 两类。强制阻断类直接导致 Argo CD Sync 失败,触发自动回滚;审计告警类仅记录合规事件,用于事后分析。在课程后续章节中,我们将详细设计 Argo CD 如何根据 Admission Controller 的拒绝响应自动触发回滚流程。