RBAC Least-Privilege Patterns
ServiceAccount (namespace: ship)
apiVersion: v1
kind: ServiceAccount
metadata:
name: app-sa
namespace: ship
Role: read pods/log only (namespace-scoped)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: app-read-logs
namespace: ship
rules:
- apiGroups: [""]
resources: ["pods","pods/log"]
verbs: ["get","list","watch"]
RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: app-read-logs-binding
namespace: ship
subjects:
- kind: ServiceAccount
name: app-sa
namespace: ship
roleRef:
kind: Role
name: app-read-logs
apiGroup: rbac.authorization.k8s.io
can-i evidence (store output in artifacts/rbac-verify.txt)
kubectl -n ship auth can-i get pods --as=system:serviceaccount:ship:app-sa
kubectl -n ship auth can-i get pods/log --as=system:serviceaccount:ship:app-sa
kubectl -n ship auth can-i list pods --as=system:serviceaccount:ship:app-sa
kubectl -n kube-system auth can-i list pods --as=system:serviceaccount:ship:app-sa
Extend with additional Roles (e.g., read ConfigMaps) rather than cluster-wide permissions.