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 de data "kubernetes_all_namespaces" em vez de uma lista fixa.
  • src/stacks/shared/kubernetes/terraform/variables.tf — variável project_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)