Kubernetes RBAC 权限速查

常用命令

kubectl auth can-i get pods -n app
kubectl auth can-i '*' '*' --all-namespaces
kubectl auth can-i --list -n app
kubectl auth can-i create deployments --as=system:serviceaccount:app:deployer -n app
kubectl auth can-i get secrets --as=alice -n app
kubectl get role,rolebinding -n app
kubectl get clusterrole,clusterrolebinding
kubectl describe role app-reader -n app
kubectl describe clusterrole view
kubectl get rolebinding app-reader -n app -o yaml
kubectl get sa -n app
kubectl create token deployer -n app
kubectl create role app-reader --verb=get,list,watch --resource=pods -n app --dry-run=client -o yaml
kubectl create rolebinding app-reader --role=app-reader --serviceaccount=app:deployer -n app --dry-run=client -o yaml

场景速查

目的 写法/命令 注意
查当前权限 kubectl auth can-i --list -n app 只反映当前身份
模拟用户 --as=alice 执行者需要 impersonate 权限
模拟 SA --as=system:serviceaccount:app:deployer 格式为 namespace:name
查绑定对象 get rolebinding -n app -o yaml 看 roleRef 与 subjects
查聚合权限 describe clusterrole admin aggregationRule 会合并规则
最小权限 resourceNames + 具体 verb 只对指定资源名生效
命名空间隔离 Role + RoleBinding ClusterRoleBinding 是全局的
使用内置角色 view / edit / admin / cluster-admin 绑定前评估实际权限
生成清单 kubectl create role ... --dry-run=client -o yaml 避免手写字段拼错
取 SA 令牌 kubectl create token <sa> -n app 新版本默认短期令牌

易错点

相关命令

读完自测

  1. Role 与 ClusterRole 的区别是什么?
  2. kubectl logs 需要什么资源权限?
  3. 如何验证某个 ServiceAccount 能否创建 Deployment?
答案
  1. Role 只在命名空间内生效,ClusterRole 是集群级规则,可通过 Binding 授权。
  2. 需要 pods/log 的 get 权限。
  3. 执行 kubectl auth can-i create deployments --as=system:serviceaccount:<ns>:<sa> -n <ns>。