cks

3.2 RBAC

Detalhamento de RBAC (Role-Based Access Control) no Kubernetes para o CKS.

O que é

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

Documentação oficial

Verificar permissões (impersonation)

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>

ClusterRole + RoleBinding em vários namespaces

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

Diferença list vs get (secrets)

Um usuário com list mas sem get vê que o secret existe, mas não consegue ler seus dados.

Habilitar RBAC

O API server deve rodar com --authorization-mode=RBAC (ou RBAC incluído em AuthorizationConfiguration). Em clusters kubeadm isso já costuma estar ativo.