Configuring RBAC Authorization

1. Creating ServiceAccount

kubectl create serviceaccount deployer -n ci
PropertyDetail
Default SAEach namespace gets default SA
TokenProjected 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]
UseDetail
Cluster-scopednodes, PVs, namespaces
All-namespacesBind via ClusterRoleBinding
Reuse per-nsBind 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

ClusterRoleScope
cluster-adminFull access (god-mode)
adminRead/write all in namespace (no quotas)
editRead/write most non-RBAC objects
viewRead-only, no secrets

9. Configuring API Groups

API GroupResources
""Core (pods, services, cm, secrets)
appsdeployments, statefulsets, daemonsets
batchjobs, cronjobs
networking.k8s.ioingresses, networkpolicies
rbac.authorization.k8s.ioroles, 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

VerbHTTP
get / list / watchGET
createPOST
update / patchPUT / PATCH
delete / deletecollectionDELETE
impersonateAct as another user
bind / escalateRBAC 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]