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