Detalhamento de RBAC (Role-Based Access Control) no Kubernetes para o CKS.
O RBAC controla quem pode fazer quais ações em quais recursos. Usa quatro tipos de objetos:
| Objeto | Escopo | Uso |
|---|---|---|
| Role | Namespace | Permissões dentro de um namespace |
| ClusterRole | Cluster ou todos os namespaces | Permissões reutilizáveis (nodes, CRDs, ou recursos em qualquer ns) |
| RoleBinding | Namespace | Liga Role/ClusterRole a usuário/grupo/ServiceAccount no namespace |
| ClusterRoleBinding | Cluster | Liga ClusterRole a usuário/grupo/SA em todo o cluster |
Simular um usuário ou ServiceAccount para testar permissões:
kubectl auth can-i get secrets --as <user>
kubectl auth can-i list secrets --as <user>
kubectl auth can-i create pods --as=system:serviceaccount:dev:foo -n prod
kubectl auth can-i --list --as <user> -n <namespace>
--as: usuário ou SA no formato system:serviceaccount:<namespace>:<name>.--list: lista todas as ações permitidas para aquele sujeito no namespace.Para dar a mesma permissão a um usuário em vários namespaces, use uma ClusterRole e um RoleBinding por namespace:
# ClusterRole (uma vez)
kubectl create clusterrole <name> --verb=create --resource=pods --resource=deployments
# RoleBinding em cada namespace (security, restricted, internal, etc.)
kubectl create rolebinding <name> --clusterrole=<clusterrole-name> --user=<user> -n security
kubectl create rolebinding <name> --clusterrole=<clusterrole-name> --user=<user> -n restricted
kubectl create rolebinding <name> --clusterrole=<clusterrole-name> --user=<user> -n internal
--verb: create, get, list, update, delete, patch, watch, etc.--resource: pods, deployments, secrets, etc. Pode repetir --resource para vários recursos.Um usuário com list mas sem get vê que o secret existe, mas não consegue ler seus dados.
O API server deve rodar com --authorization-mode=RBAC (ou RBAC incluído em AuthorizationConfiguration). Em clusters kubeadm isso já costuma estar ativo.