Post

Kubernetes 101: Role-Based Access Control (RBAC)

Fala galera! Seis tão baum?

O Role-Based Access Control (RBAC) é o mecanismo do Kubernetes para controlar quem pode acessar o quê dentro de um cluster. Com o RBAC, é possível definir políticas que determinam quais ações (como criar, listar ou excluir recursos) um usuário, grupo ou service account pode realizar.

RBAC é baseado em quatro principais componentes:

  • Role: Concede permissões específicas dentro de um namespace.
  • RoleBinding: Associa uma Role a um usuário, grupo ou service account em um namespace.
  • ClusterRole: Define permissões em nível de cluster ou para recursos globais.
  • ClusterRoleBinding: Associa uma ClusterRole a um usuário, grupo ou service account em todo o cluster.

Esses componentes trabalham juntos para oferecer um controle de acesso granular e seguro. O RBAC é habilitado por padrão no Kubernetes, mas caso precise garantir que ele está ativo, o servidor da API (kube-apiserver) deve ser iniciado com o modo de autorização configurado:

1
kube-apiserver --authorization-mode=RBAC

Roles e RoleBindings

Role

Um Role é um objeto que concede um conjunto de permissões (ações como get, list, create, etc.) sobre recursos específicos dentro de um namespace. Roles nunca podem ser usadas para conceder acesso fora do namespace em que estão definidas.

Exemplo de Role que permite listar e criar pods no namespace default:

1
2
3
4
5
6
7
8
9
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # "" refere-se ao grupo core API
  resources: ["pods"]
  verbs: ["get", "list", "create"]

Explicação:

  • apiGroups: O grupo de API ao qual o recurso pertence (pods estão no grupo core, representado por “”).
  • resources: Lista de recursos aos quais as permissões se aplicam.
  • verbs: Ações permitidas — como get, list, create, delete, etc.

RoleBinding

O RoleBinding conecta uma Role a um ou mais sujeitos (usuário, grupo ou service account) em um namespace específico.

Exemplo de RoleBinding que atribui a Role pod-reader ao usuário jane:

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods-binding
  namespace: default
subjects:
- kind: User
  name: jane
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Explicação:

  • subjects: Define quem receberá a permissão — pode ser User, Group ou ServiceAccount.
  • roleRef: Faz referência à Role que está sendo vinculada.

Teste se o usuário jane pode listar pods no namespace default:

1
kubectl auth can-i list pods --namespace=default --as=jane

Se configurado corretamente, o resultado será:

1
yes

ClusterRoles e ClusterRoleBindings

ClusterRole

Diferente de um Role, uma ClusterRole não está associada a um namespace específico. Ela pode definir permissões para:

  • Recursos não namespaced (como Nodes ou PersistentVolumes).
  • Recursos namespaced em todos os namespaces (por exemplo, listar pods em todos os namespaces).
  • Permissões em nível de cluster (como gerenciar Namespaces).

Exemplo de ClusterRole que permite listar e assistir Nodes em todo o cluster:

1
2
3
4
5
6
7
8
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-admin-role
rules:
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["get", "list", "watch"]

ClusterRoleBinding

Um ClusterRoleBinding conecta uma ClusterRole a um ou mais sujeitos, aplicando as permissões globalmente no cluster.

Exemplo de ClusterRoleBinding que concede permissões de admin ao usuário admin em todo o cluster:

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cluster-admin-binding
subjects:
- kind: User
  name: admin
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-admin-role
  apiGroup: rbac.authorization.k8s.io

Teste se o usuário admin pode criar Nodes:

1
kubectl auth can-i create nodes --as=admin

Comparação: Role vs ClusterRole

CaracterísticaRoleClusterRole
EscopoNamespace específicoCluster inteiro
Recursos gerenciadosPods, ConfigMaps, SecretsNodes, Namespaces, PVs
Uso comumControle granular por appAcesso administrativo global
VinculaçãoRoleBindingClusterRoleBinding
Exemplo de permissãoget pods em defaultlist nodes em todo o cluster

Testando permissões

O comando kubectl auth can-i é uma ferramenta poderosa para validar permissões rapidamente.

Sintaxe:

1
kubectl auth can-i <ação> <recurso> --namespace=<namespace>

Exemplos:

Verificar se você pode listar pods no namespace default:

1
kubectl auth can-i list pods --namespace=default

Testar uma ação em nível de cluster:

1
kubectl auth can-i create nodes

Testar permissões como um usuário específico:

1
kubectl auth can-i delete services --as=jane --namespace=default

Checar todas as permissões de um usuário:

1
kubectl auth can-i --list --as=admin

Resultado: O comando retorna yes ou no, facilitando a verificação rápida.

Conclusão

O RBAC no Kubernetes é essencial para controlar o acesso aos recursos do cluster de forma segura e flexível. Ao dominar Roles, RoleBindings, ClusterRoles e ClusterRoleBindings, você poderá configurar autorizações precisas para usuários, grupos e service accounts.

Dica: Sempre teste permissões com kubectl auth can-i para garantir que as configurações estão corretas!

Você pode acessar a documentação oficial aqui: Using RBAC Authorization

É isso, galera! Se você gostou do artigo, comenta ou mande pra galera que também quer aprender Kubernetes!

Se você tiver alguma dúvida ou comentário, sinta-se à vontade para compartilhá-los conosco na seção de comentários abaixo!

Forte Abraço!

Este post está licenciado sob CC BY 4.0 e pelo autor.