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
  1. Verificar permissões do usuário

Verifique se o usuário atual pode criar pods.

BASH
kubectl auth can-i create pods

Ou verifique as permissões para um usuário específico:

BASH
kubectl auth can-i <verb> <resource> -n <namespace> --as=<user>

Exemplo:

BASH
kubectl auth can-i get pods -n dev --as=john
  1. Verificar papeis
BASH
kubectl get roles -n <namespace>
kubectl describe role <role-name> -n <namespace>
  1. Verificar papeis do cluster
BASH
kubectl get clusterroles
kubectl describe clusterrole <clusterrole-name>​​
  1. Verificar RoleBindings
BASH
kubectl get rolebindings -n <namespace>
kubectl describe rolebinding <rolebinding-name> -n <namespace>
  1. Verifique ClusterRoleBindings
BASH
kubectl get clusterrolebindings
kubectl describe clusterrolebinding <binding-name>
  1. Verifique a ServiceAccount.
BASH
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
BASH
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 com kubectl auth can-i, depois verifique Role, RoleBinding e ServiceAccount.

Próximo Artigo Artigo anterior