Rotar credenciales¶
Reemplaza una credencial por otra nueva: periódicamente, o de inmediato si
sospechas que se filtró. En todos los casos la credencial nueva se guarda
primero en 1Password (bóveda HomeLab) y después se lleva al clúster.
Antes de empezar
La app de 1Password desbloqueada, con Integrate with other apps, y la cuenta en la variable de entorno:
Los comandos de Ansible se corren desde ansible/ en homelab.
Resumen¶
| Credencial | Item en 1Password | Se aplica con |
|---|---|---|
Private key de una GitHub App (symintel-terraform, symintel-arc-runners, symintel-argocd) |
el item con el nombre de la App | playbook-platform-secrets.yml |
| Credenciales FTP de un repo | ftp-<repo> |
playbook-platform-secrets.yml + pipeline de infra |
| Client secret de Dex (login con GitHub) | symintel-dex |
playbook-dex-oauth-secrets.yml |
| Contraseña de root de los nodos | root@<nodo> (la crea el playbook) |
playbook-rotate-root-passwords.yml |
| Llave de Sealed Secrets | sealed-secrets |
playbook-platform-secrets.yml (ojo: ver abajo) |
Token de ArgoCD del pipeline de gitops (cuenta ci) |
argocd-ci |
playbook-platform-secrets.yml (cómo generarlo) |
Private key de una GitHub App¶
- En GitHub: symintel → Settings → Developer settings → GitHub Apps → la App → Private keys → Generate a private key.
- En 1Password, reemplaza el campo
private_keydel item de esa App por el contenido completo del.pemnuevo. -
Comprueba y aplica:
-
Si es la App de ARC (
symintel-arc-runners), reinicia su listener para que tome la llave nueva:kubectl -n arc-systems get podsy borra el pod del listener (se recrea solo). Los runners nuevos ya usan la llave nueva. - Cuando todo funcione, borra la llave vieja en GitHub (misma página,
Delete junto a la llave anterior) y el
.pemdescargado.
Credenciales FTP de un repo¶
- Cambia la contraseña en cPanel y actualiza el item
ftp-<repo>. -
Aplica y relanza el pipeline, que carga los secrets nuevos en los environments del repo:
../.venv/bin/python scripts/apply_platform_secrets.py --check ansible-playbook -i inventory.ini playbook-platform-secrets.ymlDespués, en
symintel/infra: Actions → tofu → Run workflow sobremain.
Client secret de Dex¶
- En la OAuth App Symintel Dex: Generate a new client secret. GitHub lo muestra una sola vez.
- Reemplaza
GITHUB_CLIENT_SECRETen el itemsymintel-dex. -
Aplica (actualiza
argocd-secrety reinicia Dex): -
Prueba el login con GitHub en ArgoCD y después borra el secret viejo en la OAuth App.
Contraseña de root de los nodos¶
Cada corrida genera y aplica una contraseña nueva por nodo, y la guarda en el
item root@<nodo>. No afecta al SSH (Secure Shell): el login de root por SSH
ya está deshabilitado; esta contraseña es para la consola.
ansible-playbook -i inventory.ini playbook-rotate-root-passwords.yml # todos
ansible-playbook -i inventory.ini playbook-rotate-root-passwords.yml --limit deborah
Llave de Sealed Secrets¶
No se rota a la ligera. Los SealedSecret que ya están en git se cifraron
con la llave actual: si la cambias, esos archivos dejan de poder
descifrarse. La llave no vence en la práctica (el certificado vale 10 años) y
la renovación automática está desactivada.
Solo hay que tocarla si se filtró la llave privada. En ese caso:
- Genera un par nuevo (comando).
- Antes de reemplazar nada, vuelve a sellar cada secreto con la llave
nueva (
kubeseal --cert <tls.crt nuevo> …) y commitea losSealedSecretnuevos. - Reemplaza
certificateyprivate_keyen el itemsealed-secrets, re-correplaybook-platform-secrets.ymly reinicia el controlador:kubectl -n kube-system rollout restart deploy/sealed-secrets.
Reinstalar K3s no es una rotación: con el item en 1Password, el playbook
vuelve a crear el mismo Secret y los SealedSecret de git siguen
funcionando. Hazlo antes de activar sealed-secrets en
root-appset.yaml.
Verificar¶
apply_platform_secrets.py --checkmuestra todo en ✓.- ArgoCD sigue sincronizando
gitops(kubectl get applications -n argocd). - El runner aparece Online en symintel → Settings → Actions → Runners.
- El login con GitHub funciona en ArgoCD.