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 原生提供了三层安全基线定义机制,从集群级到工作负载级逐层收紧:

  1. Pod Security Standards (PSS) — 内置的 Pod 安全策略,分 privileged、baseline、restricted 三个档位。
  2. OPA/Gatekeeper — 通过 ConstraintTemplate 和 Constraint 自定义任意安全规则。
  3. 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 的健康检查反馈合规状态:

安全基线策略与 GitOps 集成架构 Git 仓库 应用配置 + 基线策略 Argo CD GitOps 同步引擎 Admission Controller Gatekeeper / Kyverno Kubernetes 集群 合规工作负载 策略仓库 CIS / NIST 规则 合规报告 告警 / 阻断 / 审计 反馈闭环(策略更新)

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 的拒绝响应自动触发回滚流程。