Rotación de credenciales¶
Vault lo instala el chart hashicorp-vault. External Secrets copia los campos del KV a los Secrets de Kubernetes que leen PostgreSQL, Redis y 3scale. Las passwords no van en git. Los valores iniciales salen de values-secret.yaml con ./pattern.sh make load-secrets.
| Path en Vault | Secret de Kubernetes |
|---|---|
secret/data/hub/3scale-postgresql (username, password) |
system-database en 3scale-db (DB_USER, DB_PASSWORD) y en 3scale (URL) |
secret/data/hub/3scale-system-redis (password) |
system-redis en 3scale y system-redis-auth en 3scale-db |
secret/data/hub/3scale-backend-redis (password) |
backend-redis en 3scale y backend-redis-auth en 3scale-db |
Entrar y ver los secretos¶
El host de la Route de Vault es vault-vault.<dominio-apps>. El token root está en el Secret vaultkeys del namespace imperative, campo vault_data_json. No pegar la salida del comando en git ni en este sitio.
export VAULT_ADDR="https://$(oc get route -n vault vault -o jsonpath='{.spec.host}')"
export VAULT_TOKEN="$(oc get secret vaultkeys -n imperative -o go-template='{{index .data "vault_data_json"}}' | base64 -d | python -c 'import json,sys; print(json.load(sys.stdin)["root_token"])')"
vault login "$VAULT_TOKEN"
vault kv get secret/hub/3scale-postgresql
vault kv get secret/hub/3scale-system-redis
vault kv get secret/hub/3scale-backend-redis
oc get secret system-database -n 3scale-db -o jsonpath='{.data.DB_USER}{"\n"}' | base64 -d; echo
oc get secret system-database -n 3scale -o jsonpath='{.data.URL}{"\n"}' | base64 -d; echo
oc get secret system-redis -n 3scale -o jsonpath='{.data.URL}{"\n"}' | base64 -d; echo
oc get secret backend-redis -n 3scale -o jsonpath='{.data.REDIS_STORAGE_URL}{"\n"}{.data.REDIS_QUEUES_URL}{"\n"}' | base64 -d; echo
Si ./pattern.sh make install escribió pattern-vault.init en el directorio del repo, awk '/^root_token:/ {print $2}' pattern-vault.init es el mismo token. Ese archivo está en .gitignore.
Rotar PostgreSQL¶
Una réplica y Recreate: es un corte corto. Cambiar la password dentro de la base antes de reiniciar el pod. Si el pod reinicia primero, el probe usa la password nueva y el data directory sigue con la vieja.
ALTER USER system PASSWORD '…'en el pod que está corriendo, con la password actual.vault kv put secret/hub/3scale-postgresql username=system password='…'- Forzar el sync del ExternalSecret y esperar a que
system-databaseen3scale-dby elURLen3scalemuestren la password nueva.
oc annotate externalsecret system-database -n 3scale-db force-sync=$(date +%s) --overwrite
oc annotate externalsecret system-database -n 3scale force-sync=$(date +%s) --overwrite
oc rollout restartdesystem-postgresql-externalen3scale-db, y desystem-appysystem-sidekiqen3scale.
Rotar Redis¶
vault kv putde la password nueva ensecret/hub/3scale-system-redisosecret/hub/3scale-backend-redis.- Force-sync del ExternalSecret de auth en
3scale-dby del de URLs en3scale. oc rollout restartdesystem-redis-externalobackend-redis-external.- Reiniciar los consumidores:
backend-listener,backend-worker,backend-cron,system-app,system-sidekiq.
La primera vez que se enciende auth en un Redis que estaba abierto, se parte de URLs sin password y se siguen los mismos pasos.