RBAC (Permissão negada)
O que é um problema de permissão RBAC?
Um problema de RBAC (Controle de Acesso Baseado em Funções) ocorre quando um usuário, conta de serviço ou aplicativo não tem permissão para executar uma ação no cluster Kubernetes. O Kubernetes retorna erros de Forbidden ou Unauthorized quando as permissões necessárias estão ausentes.
Dica: se você ver um erro ´Forbidden´, geralmente é porque o usuário ou a conta de serviço não possui as permissões de Role ou ClusterRole necessárias.
Sintomas
- Erros Forbidden.
- Mensagens de permissão negada.
- O usuário ou aplicativo não pode criar, atualizar, excluir ou visualizar recursos do Kubernetes.
- Os pods que utilizam uma ServiceAccount não podem acessar a API do Kubernetes.
Causas comuns
| Causa | Descrição |
|---|---|
| Função Ausente | A função necessária não foi criada. |
| Função de Cluster Ausente | A função de cluster necessária está ausente. |
| Vinculação de Função Incorreta | A função não está vinculada ao usuário ou à conta de serviço correta. |
| Vinculação de Função de Cluster Incorreta | As permissões de todo o cluster não foram atribuídas corretamente. |
| Problema com a Conta de Serviço | O pod está usando a conta de serviço incorreta ou a padrão. |
Como diagnosticar
- Verificar permissões do usuário
Verifique se o usuário atual pode criar pods.
kubectl auth can-i create pods
Ou verifique as permissões para um usuário específico:
kubectl auth can-i <verb> <resource> -n <namespace> --as=<user>
Exemplo:
kubectl auth can-i get pods -n dev --as=john
- Verificar papeis
kubectl get roles -n <namespace>
kubectl describe role <role-name> -n <namespace>
- Verificar papeis do cluster
kubectl get clusterroles
kubectl describe clusterrole <clusterrole-name>
- Verificar RoleBindings
kubectl get rolebindings -n <namespace>
kubectl describe rolebinding <rolebinding-name> -n <namespace>
- Verifique ClusterRoleBindings
kubectl get clusterrolebindings
kubectl describe clusterrolebinding <binding-name>
- Verifique a ServiceAccount.
kubectl get serviceaccount -n <namespace>
kubectl describe serviceaccount <serviceaccount-name> -n <namespace>
Certifique-se de que o Pod esteja usando a ServiceAccount correta.
Como consertar
- Crie ou atualize o Role ou ClusterRole necessário.
- Associe o Role ou ClusterRole ao usuário, grupo ou conta de serviço corretos.
- Siga o princípio do menor privilégio, concedendo apenas as permissões necessárias.
- Verifique os tokens ou certificados de autenticação se estiver usando autenticação externa (OIDC, LDAP, etc.).
- Reinicie o aplicativo se for necessário recarregar as credenciais atualizadas.
Comandos importantes
kubectl auth can-i create pods
kubectl auth can-i <verb> <resource> -n <namespace> --as=<user>
kubectl get roles -n <namespace>
kubectl get rolebindings -n <namespace>
kubectl get clusterroles
kubectl get clusterrolebindings
kubectl get serviceaccount -n <namespace>
kubectl describe serviceaccount <serviceaccount-name> -n <namespace>
Pontos-chave
Forbidden → A autenticação foi bem-sucedida, mas a autorização (RBAC) falhou.
Role → Permissões em nível de namespace.
ClusterRole → Permissões para todo o cluster.
RoleBinding → Concede uma função dentro de um namespace.
ClusterRoleBinding → Concede uma ClusterRole em todo o cluster.
Comece sempre a resolução de problemas comkubectl auth can-i, depois verifique Role, RoleBinding e ServiceAccount.