🔐 Gestão de Segredos: Vault & External Secrets
A segurança dos agentes e runners depende da centralização de credenciais no HashiCorp Vault e sua injeção segura no Kubernetes via External Secrets Operator (ESO).
Fluxo de Credenciais
-
Origem (Vault):
- Endereço:
http://137.184.157.36:8200(Acesso via VPC interna10.116.0.30recomendado). - Engine: KV v2 (
kv/). - Caminho Padrão:
kv/data/agents/<nome-do-agente>.
- Endereço:
-
Ponte (External Secrets Operator - ESO):
- O ESO roda no cluster K8s.
- SecretStore: Define como acessar o Vault (Token ou AppRole). Existe um por namespace ou global.
- ExternalSecret: Define quais dados buscar.
dataFrom:
- extract:
key: kv/data/agents/roberval
-
Destino (Kubernetes Secret):
- O ESO cria um Secret nativo (ex:
roberval-env) com os dados decifrados. - O Deployment monta esse secret como variáveis de ambiente:
envFrom:
- secretRef:
name: roberval-env
- O ESO cria um Secret nativo (ex:
Como Adicionar/Rotacionar uma Chave
-
Acesse o Vault: Via UI ou CLI (requer token com permissão de escrita).
export VAULT_ADDR=http://137.184.157.36:8200
export VAULT_TOKEN=...
vault kv patch kv/agents/roberval NOVA_CHAVE=valor_super_secreto -
Sincronização: O ESO verifica mudanças a cada 1 minuto (padrão). Verifique se sincronizou:
kubectl get externalsecret roberval-env-secret -n bots
# Deve mostrar "SecretSynced" -
Aplicação: Se a aplicação não suporta hot-reload de variáveis de ambiente (a maioria não suporta), reinicie o Pod:
kubectl rollout restart deployment/roberval -n bots
Troubleshooting
- SecretSynced = False: Verifique se o Token do Vault no
SecretStoreexpirou ou se o caminho noExternalSecretestá correto. - Permissão Negada: O token usado pelo ESO deve ter policy de
readno pathkv/data/*.