Configuring RBAC Authorization
1. Creating ServiceAccount
kubectl create serviceaccount deployer -n ci
| Property | Detail |
| Default SA | Each namespace gets default SA |
| Token | Projected at pod runtime since 1.24 |
2. Creating Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata: { namespace: prod, name: pod-reader }
rules:
- apiGroups: [""]
resources: [pods, pods/log]
verbs: [get, list, watch]
3. Creating ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata: { name: node-viewer }
rules:
- apiGroups: [""]
resources: [nodes]
verbs: [get, list, watch]
| Use | Detail |
| Cluster-scoped | nodes, PVs, namespaces |
| All-namespaces | Bind via ClusterRoleBinding |
| Reuse per-ns | Bind via RoleBinding |
4. Creating RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata: { namespace: prod, name: deployer-can-read }
subjects:
- { kind: ServiceAccount, name: deployer, namespace: ci }
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: pod-reader
5. Creating ClusterRoleBinding
kubectl create clusterrolebinding admin-bind \
--clusterrole=cluster-admin --user=alice@example.com
6. Viewing Permissions
kubectl get rolebindings,clusterrolebindings -A -o wide
kubectl describe clusterrole view
7. Testing User Permissions
kubectl auth can-i create deployments -n prod
kubectl auth can-i list pods --as=system:serviceaccount:ci:deployer -n prod
kubectl auth can-i --list --as=alice
8. Using Default ClusterRoles
| ClusterRole | Scope |
| cluster-admin | Full access (god-mode) |
| admin | Read/write all in namespace (no quotas) |
| edit | Read/write most non-RBAC objects |
| view | Read-only, no secrets |
9. Configuring API Groups
| API Group | Resources |
"" | Core (pods, services, cm, secrets) |
apps | deployments, statefulsets, daemonsets |
batch | jobs, cronjobs |
networking.k8s.io | ingresses, networkpolicies |
rbac.authorization.k8s.io | roles, bindings |
10. Setting Resource Names
rules:
- apiGroups: [""]
resources: [configmaps]
resourceNames: [app-config]
verbs: [get, update]
Note: resourceNames cannot be used with list, watch, create, deletecollection.
11. Understanding Verbs
| Verb | HTTP |
| get / list / watch | GET |
| create | POST |
| update / patch | PUT / PATCH |
| delete / deletecollection | DELETE |
| impersonate | Act as another user |
| bind / escalate | RBAC privilege controls |
12. Aggregating ClusterRoles
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: monitoring
labels:
rbac.authorization.k8s.io/aggregate-to-view: "true"
rules:
- apiGroups: [monitoring.coreos.com]
resources: [prometheuses, alertmanagers]
verbs: [get, list, watch]