Perfis de acesso ao cluster via RBAC do Kubernetes
TLDR: Definir três perfis de acesso ao cluster (
dev,<project>-head,infra) via Terraform, com os namespaces descobertos dinamicamente em vez de listados à mão.
Contexto
Sem RBAC, qualquer pessoa com um kubeconfig tem acesso total ao cluster. Esta spec cria perfis granulares para controlar o que desenvolvedores, pontos focais de projeto e o time de infra podem fazer.
Objetivos
| Perfil | Tipo | Acesso |
|---|---|---|
dev |
Group | total em *-staging, read-only em *-production, nenhum acesso a namespace de sistema |
<project>-head |
User | total no namespace <project>-production do próprio projeto |
infra |
Group | total em tudo |
Fora de escopo
- Isolamento entre projetos no perfil
dev— um dev vê o staging de todos os projetos. Isso só foi resolvido depois, em RBAC por projeto.
Mudanças
src/stacks/shared/kubernetes/terraform/rbac.tf— ClusterRoles e RoleBindings dinâmicos, com os namespaces vindos dedata "kubernetes_all_namespaces"em vez de uma lista fixa.src/stacks/shared/kubernetes/terraform/variables.tf— variávelproject_heads.
Como verificar
bash
kubectl auth can-i delete pods -n onion-staging --as-group=dev # yes
kubectl auth can-i delete pods -n onion-production --as-group=dev # no
kubectl auth can-i get pods -n monitoring --as-group=dev # no
kubectl auth can-i delete pods -n onion-production --as=head@email.com # yes
kubectl auth can-i get pods -n kube-system --as-group=infra # yes
Documentação
— (não registrado na spec original)