Controlul Securizat al Accesului cu RBAC: Role, ClusterRole și Bindings în Kubernetes (kubectl)

Configurare și context Kubernetes 1.25+

Ghid complet de Role-Based Access Control (RBAC) în Kubernetes: definirea permisiunilor granulare prin Role și ClusterRole, asocierea lor cu utilizatori sau ServiceAccounts prin RoleBinding și auditarea securității cu kubectl auth can-i.

Sintaxă comandă
kubectl auth can-i create deployments --as=developer | kubectl get rolebindings -A

Sistemul RBAC (Role-Based Access Control) controlează ce operațiuni are voie să execute un utilizator, o echipă sau o aplicație (reprezentată printr-un ServiceAccount) asupra resurselor din API Server. O permisiune K8s este o combinație între un grup de API, o resursă (ex: pods, deployments, secrets) și un verb (ex: get, list, watch, create, update, delete).

Crearea unui rol limitat la un singur namespace (Role + RoleBinding)
# 1. Definirea permisiunilor într-un namespace specific (Role):
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: dev-echipa
  name: deployment-manager
rules:
  - apiGroups: ["apps"]
    resources: ["deployments", "replicasets"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
  - apiGroups: [""]
    resources: ["pods", "pods/log"]
    verbs: ["get", "list", "watch"]

---
# 2. Asocierea rolului cu utilizatorul 'andrei' (RoleBinding):
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: bind-andrei-deployment-manager
  namespace: dev-echipa
subjects:
  - kind: User
    name: andrei@companie.ro
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: deployment-manager
  apiGroup: rbac.authorization.k8s.io

Auditarea Permisiunilor cu kubectl auth can-i

Puteți testa instantaneu dacă o persoană sau un cont de serviciu are dreptul de a executa o acțiune:

# Verificăm dacă Andrei poate șterge Pod-uri în namespace-ul dev-echipa:
kubectl auth can-i delete pods -n dev-echipa --as=andrei@companie.ro
# Răspuns: no (corect! Andrei are doar drepturi de vizualizare pe pods)

# Verificăm dacă Andrei poate actualiza un deployment:
kubectl auth can-i update deployments -n dev-echipa --as=andrei@companie.ro
# Răspuns: yes