Files
athletic-map-deploy/tenants/plataforma/16-rbac-provisionamento.yaml
T

55 lines
2.5 KiB
YAML

# =============================================================================
# P5.6/P5.9 — a permissao que o provisionamento precisa nos tenants.
#
# ── O QUE O CODIGO FAZ (e nada alem disso) ──────────────────────────────────
#
# `ApiDoKubernetes`, no `servico-captacao`, faz exatamente duas coisas com o
# token do proprio pod:
#
# GET /apis/apps/v1/namespaces/<tenant>-prod/deployments/<nome>
# — esperar o rollout do tenant novo terminar (P5.6);
# PATCH /apis/apps/v1/namespaces/<tenant>-prod/deployments/<nome>/scale
# — suspender o cliente inadimplente, zerando replicas (P5.9).
#
# Sem estas regras a etapa falha com 403. No caso da suspensao, o 403 vem DEPOIS
# de o realm ja ter sido desligado: o cliente fica bloqueado com os pods de pe —
# gasta memoria, mas nenhum dado corre risco — e o evento fica FALHOU ate a
# permissao existir.
#
# ── POR QUE ClusterRole + RoleBinding, E NAO ClusterRoleBinding ─────────────
#
# O ClusterRole aqui e so a LISTA de verbos (um ClusterRole sem binding nao da
# acesso a nada). Quem concede e o RoleBinding, que vive DENTRO do namespace do
# tenant — um por tenant, em `tenants/<tenant>/16-rolebinding-provisionamento.yaml`.
# Com um ClusterRoleBinding, a plataforma passaria a ler e escalar Deployment de
# QUALQUER namespace, inclusive `kube-system` e `argocd`.
#
# Tenant novo entra pelo molde consolidado, que ja traz o RoleBinding.
#
# ── A ServiceAccount ────────────────────────────────────────────────────────
#
# Dedicada. Ate aqui o `servico-captacao` rodava com a `default` do namespace, e
# dar poder a `default` significa dar poder a QUALQUER pod que suba sem
# `serviceAccountName` — inclusive um pod de teste.
# =============================================================================
apiVersion: v1
kind: ServiceAccount
metadata:
name: atm-provisionamento
namespace: plataforma-prod
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: atm-provisionamento-tenants
rules:
# Esperar o rollout: so leitura.
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get"]
# Suspender e reativar: o subrecurso `scale` altera SO as replicas. Escrever no
# Deployment inteiro deixaria trocar imagem e variavel de ambiente.
- apiGroups: ["apps"]
resources: ["deployments/scale"]
verbs: ["get", "patch"]