2. Kubernetes集群安全基线

2.1 CIS Kubernetes Benchmark 标准解读

CIS(Center for Internet Security)Kubernetes Benchmark 是业界公认的 Kubernetes 集群安全配置基线标准。该标准针对不同版本的 Kubernetes 组件(kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、etcd 等)提供了详细的审计与加固建议。每个检查项被划分为以下等级:

等级 含义 典型示例
Level 1 基础安全要求,不显著影响性能或可用性 禁止匿名请求、启用审计日志
Level 2 深度防御要求,可能带来性能或运维成本 启用 Pod 安全策略、限制 Secret 加密
Scored 可自动化评分,直接影响合规分数 kubelet 证书轮换、RBAC 最小权限
Not Scored 建议性检查,不纳入评分体系 容器镜像标签策略、命名空间命名规范
关键原则:初始策略组应优先修复所有 Level 1 + Scored 的检查项,这些项覆盖了最常见的攻击面且对业务影响最小。

2.2 Kube-bench 工具介绍

Kube-bench 是 Aqua Security 开源的 CIS Benchmark 自动化检测工具。它通过运行一组 Go 语言编写的检查程序,对比当前集群配置与 CIS 标准,输出 JSON/YAML 格式的合规报告。Kube-bench 支持以下运行模式:

  • 本地节点模式:直接在 Master/Worker 节点上运行二进制文件,检测本地组件配置。
  • Job 模式:以 Kubernetes Job 形式部署到集群中,自动检测所有节点。
  • DaemonSet 模式:在每个节点上运行一个 Pod,持续监控配置漂移。
# 使用 Job 模式运行 kube-bench(推荐初始基线扫描)
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml

# 查看检测结果
kubectl logs job/kube-bench

# 输出示例片段(JSON 格式)
{
  "id": "1.1.1",
  "text": "Ensure that the API server pod specification file permissions are set to 644 or more restrictive",
  "type": "manual",
  "score": "WARN",
  "remediation": "Run: chmod 644 /etc/kubernetes/manifests/kube-apiserver.yaml"
}
实践建议:在 CI/CD 流水线中集成 kube-bench,每次集群变更后自动触发扫描,并将结果与初始基线对比,防止配置退化。

2.3 初始策略组设计原则

初始策略组是集群上线前必须强制执行的一组安全配置集合。设计时应遵循以下五大原则:

  1. 最小权限原则:所有组件、用户、ServiceAccount 仅授予完成任务所需的最小权限。例如:kubelet 使用 TLS 证书认证而非 ,避免使用 cluster-admin 角色。
  2. 纵深防御原则:在多个层面设置安全控制。网络层(NetworkPolicy)、容器层(SecurityContext)、节点层(AppArmor/Seccomp)形成多层防护。
  3. 可审计原则:启用 API Server 审计日志、kubelet 日志、etcd 日志,并配置集中式日志收集(如 ELK/Loki)。
  4. 默认拒绝原则:所有未显式允许的访问默认拒绝。例如:默认拒绝所有 Ingress 流量,仅开放必要端口;默认拒绝特权容器。
  5. 自动化与可重复原则:策略组应通过 Infrastructure as Code(IaC)管理,使用 OPA/Gatekeeper、Kyverno 等策略引擎自动执行,避免人工操作。
常见误区:不要一次性启用所有 CIS 检查项。部分 Level 2 项(如强制 Pod 使用只读根文件系统)可能破坏现有应用。初始策略组应选择 Scored + Level 1 项,逐步迭代。

2.4 初始策略组与 CIS Benchmark 映射关系

下表展示了初始策略组中必须包含的核心策略及其对应的 CIS 检查项 ID:

策略组类别 具体策略 CIS 检查项 ID 严重等级
API Server 安全 禁用匿名请求、启用 TLS 1.2+、设置审计日志 1.1.1, 1.2.1, 1.2.2 Level 1
etcd 安全 启用 TLS 认证、限制访问 IP、启用数据加密 2.1, 2.2, 2.3 Level 1
kubelet 安全 启用证书轮换、禁用只读端口、设置身份验证模式 4.1.1, 4.2.1, 4.2.2 Level 1
Pod 安全 禁止特权容器、限制容器用户为 non-root、启用只读根文件系统 5.1.1, 5.1.2, 5.1.3 Level 2
网络策略 默认拒绝所有入站/出站流量、仅允许必要端口 5.3.1, 5.3.2 Level 1

2.5 初始策略组设计流程

下图展示了从 CIS 标准到初始策略组落地的完整设计流程:

初始策略组设计流程 初始策略组设计流程 CIS Benchmark Kube-bench 扫描 风险分级 策略组定义 IaC 编码 自动化部署 持续监控 虚线表示反馈闭环:持续监控发现配置漂移后,重新触发 Kube-bench 扫描,迭代更新策略组

2.6 初始策略组参数调优示例

以下是一个基于 CIS Benchmark 的初始策略组 YAML 配置片段,使用 OPA/Gatekeeper 实现:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
  name: require-security-context
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
  parameters:
    labels:
      - key: "security-tier"
        allowedRegex: "^baseline|restricted$"
---
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAllowedUsers
metadata:
  name: non-root-container
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
  parameters:
    runAsUser:
      min: 1000
      max: 65535
    runAsGroup:
      min: 1000
      max: 65535
参数调优要点:
  • runAsUser 范围:根据业务容器实际用户 ID 调整,避免设置过严导致 Pod 启动失败。
  • allowedRegex:初始阶段可放宽为 ^baseline|restricted|privileged$,逐步收紧。
  • 豁免机制:为系统组件(如 kube-proxy、coredns)设置豁免标签,避免影响集群核心功能。