在Kubernetes中配置RBAC(基于角色的访问控制)需要遵循以下核心步骤和原则:
-
确定用户/服务账户:通过KubeConfig或ServiceAccount绑定用户身份,例如用户user1
或服务账户sa-frontend
。
-
定义角色(Role/ClusterRole):
- Role(命名空间级):使用
kind: Role
定义特定命名空间内的权限(如apps/v1
资源的get/list
操作)
- ClusterRole(集群级):通过
kind: ClusterRole
定义跨命名空间的权限(如查看所有节点的权限)
-
绑定权限(RoleBinding/ClusterRoleBinding):
- RoleBinding:将Role绑定到用户/组/SA,作用域限定在单个命名空间
- ClusterRoleBinding:将ClusterRole全局绑定,授予集群范围的权限
-
YAML配置示例:
# Role示例
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: production
name: pod-viewer
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
RoleBinding示例
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: view-pods-binding
namespace: production
subjects:
- kind: User
name: user1
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-viewer
apiGroup: rbac.authorization.k8s.io
- 验证与调试:
- 使用
kubectl auth can-i list pods --as user1 -n production
验证权限
- 通过审计日志监控权限使用情况
关键注意事项:
- 遵循最小权限原则,避免过度授权
- 生产环境推荐使用ServiceAccount而非个人用户账号
- 定期使用
kubectl get rolebindings,clusterrolebindings --all-namespaces
审查权限
- 敏感操作(如
*
权限)应限制在特定命名空间
推荐结合RBAC Manager等工具实现动态权限管理,并通过OPA/Gatekeeper实施策略即代码(Policy as Code)。