2. Kubernetes API 访问控制全景:认证、授权、准入控制三层架构,RBAC在授权层的作用

Kubernetes 控制平面的安全核心在于对 API Server 的访问控制。所有对集群状态的查询与变更(通过 kubectl、客户端库、Pod 内 ServiceAccount 或直接 REST 调用)都必须经过 API Server 的三层安全防线:认证(Authentication) → 授权(Authorization) → 准入控制(Admission Control)。理解这三层架构是进行 RBAC 权限审计的前提。

2.1 三层架构总览:认证 → 授权 → 准入

下图展示了请求到达 API Server 后依次经过的三个安全阶段。每一层都独立负责一个安全决策,只有全部通过,请求才会被持久化到 etcd 并返回响应。

Kubernetes API 访问控制三层架构 用户 / 客户端 ① 认证 Authentication ② 授权 Authorization ③ 准入控制 Admission Control etcd 持久化 拒绝 拒绝 拒绝 关键原则: 每一层独立决策,前一层通过后才会进入下一层。任何一层拒绝,请求立即终止,不会进入后续阶段。

2.2 第一层:认证(Authentication)

认证层负责确认“你是谁”。API Server 支持多种认证模块,按顺序尝试,只要有一个模块验证通过即完成认证。认证通过后,请求中会携带用户的身份信息(Username、UID、Groups)。

认证模块 典型场景 身份来源
X.509 客户端证书 kubeconfig 中的 client-certificate CN → Username,O → Groups
静态令牌(Static ) ServiceAccount 的 Secret 令牌文件中的用户名
Bootstrap kubeadm 初始化时的节点加入 system:bootstrappers 组
OpenID Connect (OIDC) 企业 SSO 集成(如 Dex、Keycloak) ID 中的 claims
Webhook 自定义认证服务 外部服务返回的身份
匿名请求 未配置认证信息的请求 system:anonymous 用户
审计要点:检查集群是否启用了匿名认证(--anonymous-auth=false)。生产环境应禁用匿名访问,或严格限制其权限。

2.3 第二层:授权(Authorization)—— RBAC 的核心战场

授权层负责确认“你能做什么”。在认证通过后,API Server 根据请求者的身份(User、Group、ServiceAccount)和请求的操作(Verb、Resource、Namespace)来决定是否允许该请求。Kubernetes 支持多种授权模式,其中 RBAC(Role-Based Access Control) 是生产环境最常用、也是安全审计最关注的标准模式。

2.3.1 授权模式对比

授权模式 工作原理 适用场景 审计复杂度
RBAC 基于 Role/ClusterRole + RoleBinding/ClusterRoleBinding 生产标准,细粒度权限控制 中(需审计绑定关系)
ABAC 基于 JSON 策略文件,属性匹配 已弃用,不推荐 高(策略文件难以维护)
Webhook 调用外部 REST 服务做授权决策 企业自定义策略引擎 高(依赖外部系统)
Node 专门授权 kubelet 的节点相关操作 节点自身权限 低(内置规则)
AlwaysDeny / AlwaysAllow 全部拒绝或全部允许 测试/开发环境 无

2.3.2 RBAC 在授权层中的角色

当 API Server 的授权模块设置为 --authorization-mode=RBAC 时,所有请求都会经过 RBAC 评估器。RBAC 的核心逻辑可以概括为:

# 伪代码:RBAC 授权决策逻辑
if 请求者 (User/Group/SA) 通过 RoleBinding/ClusterRoleBinding
   关联了某个 Role/ClusterRole:
   且该 Role/ClusterRole 包含匹配请求 (Verb, Resource, Namespace) 的规则:
      → 允许 (Allow)
else:
   → 拒绝 (Deny)
RBAC 授权决策流程 请求者身份 查找 RoleBinding / ClusterRoleBinding 匹配 Role / ClusterRole 规则 允许 / 拒绝 Allow / Deny 拒绝 允许 RBAC 授权是“白名单”机制:没有显式允许的操作,默认全部拒绝。审计时需检查所有允许的绑定关系。

2.4 第三层:准入控制(Admission Control)

准入控制层在请求被持久化之前执行,负责确认“请求是否符合集群策略”。与认证和授权不同,准入控制器可以修改(Mutating)或验证(Validating)请求对象。Mutating 控制器先执行(如自动注入 Sidecar),Validating 控制器后执行(如检查资源配额)。

安全提示:某些准入控制器(如 PodSecurityPolicy、ValidatingAdmissionWebhook)可以绕过 RBAC 的限制。例如,即使 RBAC 允许创建 Pod,但 PSP 拒绝特权容器,则 Pod 创建仍会失败。审计时需同时检查 RBAC 和准入控制器的配置。

2.5 三层架构与 RBAC 审计的关系

在进行 RBAC 权限审计时,必须将三层架构作为一个整体来考虑:

  • 认证层:确认所有用户身份来源可靠,没有匿名或弱认证方式。
  • 授权层(RBAC):检查 Role/ClusterRole 的规则是否最小权限,绑定关系是否合理。
  • 准入控制层:确认没有控制器绕过 RBAC 的限制,或引入额外的安全风险。
审计黄金法则:“认证通过 ≠ 授权通过,授权通过 ≠ 准入通过”。三层必须全部通过,请求才能成功。因此,RBAC 审计不能孤立进行,必须结合认证配置和准入控制器列表综合评估。