Kubernetes RBAC ☸️

RBAC in Kubernetes controls who can do what to which resources.

Core Concepts

ObjectScopeUse
RoleNamespaceGrant permissions within a namespace
ClusterRoleCluster-wideGrant permissions across all namespaces or cluster-scoped resources
RoleBindingNamespaceBind a Role/ClusterRole to users within a namespace
ClusterRoleBindingCluster-wideBind a ClusterRole to users across all namespaces

Built-in Roles

RoleAccess
viewRead-only to most resources
editRead/write but not manage RBAC
adminFull read/write within a namespace
cluster-adminSuperuser on the entire cluster

Example: Read-Only Namespace User

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: readonly
  namespace: default
rules:
- apiGroups: [""]
  resources: ["pods", "services"]
  verbs: ["get", "list", "watch"]

Example: EKS Cluster Access via IRSA

For AWS IAM-based access to EKS:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: eks-irsa-reader
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: view
subjects:
- kind: AWSIAMRole
  name: my-app-role  # IRSA role
  namespace: default

IRSA vs RBAC

  • IRSA — Maps AWS IAM role to a Kubernetes ServiceAccount
  • RBAC — Controls what that ServiceAccount can do in K8s
  • Use IRSA for pod-level AWS access, RBAC for K8s API access