1. K8s 安全概述:威胁模型、攻击面与授权测试

Kubernetes 已成为云原生基础设施的事实标准,但其复杂的分布式架构也引入了大量安全风险。理解控制面的威胁模型与攻击面,是开展授权测试与 RBAC 策略调优的前提。本章从攻击者视角出发,系统梳理 K8s 安全的核心挑战。

1.1 Kubernetes 安全威胁模型

K8s 安全威胁模型可归纳为四个维度:集群外部攻击、内部横向移动、组件漏洞利用、配置与策略缺陷。下表列出各维度的典型威胁场景:

威胁维度 典型场景 影响等级
集群外部攻击 API Server 暴露公网、kubelet 未认证端口、Dashboard 弱口令 严重
内部横向移动 Pod 逃逸后窃取 ServiceAccount 、利用 ClusterRole 提权 高危
组件漏洞利用 etcd 未加密、kube-controller-manager 未授权访问、kube-scheduler 配置泄露 高危
配置与策略缺陷 RBAC 过度授权、PodSecurityPolicy 缺失、NetworkPolicy 未配置 中危
关键洞察: 超过 70% 的 K8s 安全事件源于配置错误与过度授权,而非 0-day 漏洞。RBAC 策略调优是成本最低、收益最高的安全加固手段。

1.2 控制面组件攻击面分析

Kubernetes 控制面由 API Server、etcd、kube-scheduler、kube-controller-manager 以及 Cloud Controller Manager 组成。每个组件都有独特的攻击面:

  • API Server (kube-apiserver):集群的入口,暴露 RESTful API。攻击面包括未认证的匿名请求、 泄露、RBAC 配置错误、Webhook 绕过。
  • etcd:集群状态存储,存储所有 Secret、ConfigMap、RBAC 绑定。若未启用 TLS 认证或未限制网络访问,攻击者可直接读取全部敏感数据。
  • kube-scheduler:调度 Pod 到节点。攻击面包括利用调度策略将恶意 Pod 调度到特权节点,或通过污点容忍绕过限制。
  • kube-controller-manager:运行控制器循环。攻击面包括未授权的 ServiceAccount 提权、控制器配置注入。
  • Cloud Controller Manager:与云平台交互。攻击面包括云凭证泄露、负载均衡器配置篡改。
Kubernetes 控制面组件攻击面全景图 kube-apiserver etcd kube-scheduler kube-controller-manager cloud-controller-manager 攻击面关键风险点 ① API Server:匿名请求 / 泄露 / RBAC 过度授权 ② etcd:未加密存储 / 未认证访问 / 网络暴露

1.3 授权测试的重要性

授权测试(Authorization Testing)是验证集群中“谁可以做什么”的系统性过程。在 K8s 环境中,授权测试的核心价值体现在以下方面:

  • 发现过度授权:识别被授予了超出职责范围的 ClusterRole/ Role 绑定,例如普通开发人员拥有 cluster-admin 权限。
  • 验证最小权限原则:确保每个 ServiceAccount、User、Group 仅拥有完成其任务所需的最小权限集。
  • 检测提权路径:通过组合多个低权限角色,攻击者可能实现权限提升。授权测试可提前发现这些路径。
  • 合规审计:满足 SOC2、PCI-DSS、ISO 27001 等标准对访问控制的审计要求。
实践建议: 授权测试应作为 CI/CD 流水线的一部分,每次 RBAC 变更后自动执行。推荐使用 kubectl auth can-i 命令进行快速验证,并结合 rbac-lookup、kubectl-who-can 等工具进行深度审计。

1.4 授权测试的典型流程

一个完整的授权测试流程通常包含以下步骤:

  1. 枚举身份与绑定:列出所有 ServiceAccount、User、Group 及其绑定的 Role/ClusterRole。
  2. 解析权限集合:将每个身份的有效权限展开为动词(get/list/watch/create/update/patch/delete)与资源(pods/secrets/deployments/…)的矩阵。
  3. 模拟请求:使用 kubectl auth can-i --as=system:serviceaccount:default:my-sa --list 模拟实际请求。
  4. 分析提权风险:检查是否存在 escalate、bind、impersonate 等敏感动词,或是否可访问 secrets、configmaps 等敏感资源。
  5. 生成报告与修复建议:输出权限矩阵、风险等级、建议的 RBAC 策略调整。
授权测试五步流程 1. 枚举身份 SA / User / Group 2. 解析权限 动词 × 资源矩阵 3. 模拟请求 can-i 验证 4. 分析提权 escalate / impersonate 5. 报告 修复建议 关键检查点 • 是否存在 cluster-admin 绑定给非管理员身份? • 是否有 ServiceAccount 可以 get secrets 或 create pods/exec? • 是否启用了 SubjectAccessReview 进行细粒度审计?

1.5 常见授权测试工具

工具 功能 适用场景
kubectl auth can-i 模拟用户/SA 的权限查询 快速验证单个请求
rbac-lookup 可视化 RBAC 绑定与权限 审计与报告生成
kubectl-who-can 反向查询谁有权限执行某操作 提权路径分析
kube-bench CIS Benchmark 合规检查 基线安全审计
polaris 配置最佳实践检查 持续合规
注意: 授权测试应始终在非生产环境或专用的测试集群中执行。在生产集群中执行 kubectl auth can-i --list 等只读操作是安全的,但切勿在生产环境中尝试提权攻击或修改 RBAC 绑定。

通过本章的学习,你应该对 K8s 安全威胁模型、控制面组件攻击面以及授权测试的核心价值有了系统性的认识。接下来的章节将深入 RBAC 原理、权限枚举技术与策略调优实战。