4、权限审计(RBAC Audit)基础:Kubernetes RBAC 模型、Role/ClusterRole、RoleBinding/ClusterRoleBinding、审计日志基础
4.1 Kubernetes RBAC 模型概述
RBAC(基于角色的访问控制)是 Kubernetes 默认的授权机制,用于控制用户、服务账户对集群资源的操作权限。在 GitOps 交付场景中,RBAC 的精确配置直接决定了资源配额校准与审计的合规性。
RBAC 模型的核心原则是:权限 = 角色 + 绑定。通过将权限预定义到角色中,再将角色绑定到主体(用户/组/服务账户),实现权限的灵活分配与集中管理。
核心概念关系:
- 主体(Subject):User、Group、ServiceAccount
- 角色(Role/ClusterRole):权限规则的集合
- 绑定(RoleBinding/ClusterRoleBinding):将角色与主体关联
4.2 Role 与 ClusterRole 的差异与使用场景
| 对比维度 | Role | ClusterRole |
|---|---|---|
| 作用范围 | 单个命名空间(namespace) | 整个集群(所有命名空间 + 集群级资源) |
| 可授权资源 | 命名空间内的资源(pods、services、deployments 等) | 集群级资源(nodes、persistentvolumes、namespaces)以及所有命名空间资源 |
| 典型用途 | 开发团队只能操作自己命名空间的 Pod | 集群管理员查看所有节点、跨命名空间读取日志 |
| YAML 示例 | |
|
最佳实践:在 GitOps 资源配额校准场景中,优先使用 Role + RoleBinding 将权限限制在目标命名空间内。仅当需要跨命名空间或操作集群级资源时,才使用 ClusterRole + ClusterRoleBinding。
4.3 RoleBinding 与 ClusterRoleBinding 的绑定机制
绑定是 RBAC 的“胶水层”,决定了谁拥有什么权限。绑定关系支持以下组合:
- RoleBinding + Role:将命名空间级角色绑定到主体,权限限制在该命名空间
- RoleBinding + ClusterRole:将集群级角色绑定到主体,但权限仍限制在该命名空间(常用做法,复用 ClusterRole 定义)
- ClusterRoleBinding + ClusterRole:将集群级角色绑定到主体,权限覆盖整个集群
4.4 审计日志基础与 RBAC 关联
Kubernetes 审计日志记录了所有对 API 服务器的请求,是权限审计的核心数据源。在 GitOps 交付资源配额校准场景中,审计日志用于验证 RBAC 配置是否按预期生效。
4.4.1 审计日志阶段
| 阶段 | 说明 | RBAC 审计用途 |
|---|---|---|
| RequestReceived | API 服务器收到请求 | 记录原始请求主体与操作 |
| ResponseStarted | 响应头已发送,但响应体未完成 | 用于流式请求的权限检查 |
| ResponseComplete | 响应体已完全发送 | 确认授权结果(允许/拒绝) |
| Panic | 内部错误发生 | 异常权限请求的标记 |
4.4.2 审计日志关键字段
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "xxx-xxx-xxx",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/default/pods",
"verb": "list",
"user": {
"username": "dev-user",
"groups": ["system:authenticated"]
},
"sourceIPs": ["10.0.0.1"],
"userAgent": "kubectl/v1.28.0",
"responseStatus": {
"code": 200
},
"requestReceivedTimestamp": "2025-01-15T10:00:00Z",
"stageTimestamp": "2025-01-15T10:00:01Z"
}
审计配置注意事项:
- 审计日志默认不开启,需在 API 服务器启动参数中配置
--audit-policy-file和--audit-log-path - 生产环境建议设置
level: RequestResponse以记录请求和响应详情 - 审计日志会占用大量磁盘空间,建议配置日志轮转(
--audit-log-maxsize、--audit-log-maxbackup)
4.5 权限审计实践:从审计日志反推 RBAC 配置
在 GitOps 交付流程中,权限审计的典型场景是:验证资源配额校准操作是否由授权主体执行。以下是一个完整的审计流程:
- 收集审计日志:从 API 服务器日志或集中式日志系统(如 Elasticsearch)获取指定时间段的审计事件
- 过滤关键事件:按
verb(create/update/delete)、resource(resourcequotas)、responseStatus.code(403/200)过滤 - 关联主体与角色:从审计日志中提取
user.username,查询其绑定的 Role/ClusterRole - 验证权限合规:检查主体是否拥有执行该操作所需的 verbs 和 resources
- 生成审计报告:记录违规操作(403 拒绝)和异常权限提升
GitOps 场景示例:当 ArgoCD 同步 ResourceQuota 变更时,审计日志会记录 ServiceAccount
argocd-application-controller 的 update 操作。通过审计日志可以确认该 SA 是否绑定了正确的 Role(包含 resourcequotas 的 update 权限),从而避免权限过大或不足的问题。
4.6 本章小结
RBAC 权限审计是 Kubernetes 安全治理的基石。通过理解 Role/ClusterRole 的作用范围差异、RoleBinding/ClusterRoleBinding 的绑定机制,以及审计日志的采集与分析,运维团队可以精确控制 GitOps 交付过程中的资源配额操作权限。下一阶段将深入 Kustomize 如何与 RBAC 策略结合,实现声明式的权限管理。