Automatizar la rotación de secretos
Qué cubre este artículo sobre rotación automática de secretos
- Por qué la rotación manual no escala.
- Cómo automatizar la rotación con scripts y cronjobs.
- Cómo los gestores de secretos se hacen cargo de la rotación.
- Cómo disparar la rotación con flujos de trabajo en n8n o CI/CD.
- Trampas comunes y mejores prácticas.
Introducción: Automatizar la rotación de secretos
El intercambio regular de claves API, tokens y contraseñas es esencial pero tedioso si se hace a mano. Cuantos más servicios y agentes ejecutes, más rápido se convierte la rotación en una carga. La automatización reduce errores, ahorra tiempo y garantiza que ningún secreto se use más allá de su período de validez.
Este artículo te muestra cómo automatizar la rotación en proyectos de IA local, tanto con scripts simples como con gestores de secretos y herramientas de flujos de trabajo.
Conceptos clave
- Rotación: Reemplazo de un secreto antiguo por uno nuevo.
- Automatización: Intercambio regular o basado en eventos sin intervención manual.
- Cronjob: Tarea programada por tiempo en Linux.
- Webhook: Callback HTTP que desencadena acciones.
- Gestor de secretos: Gestión centralizada de secretos.
- CI/CD: Pipelines de compilación e implementación automatizadas.
- Grace Period: Período de transición durante el cual los secretos antiguos y nuevos son válidos.
Por qué la automatización es importante
- Escalabilidad: Muchos secretos requieren muchos pasos.
- Confiabilidad: No se olvidan las fechas límite.
- Capacidad de respuesta: Intercambiar inmediatamente ante filtraciones.
- Coherencia: El mismo procedimiento para todos los servicios.
- Auditoría: Registros automáticos.
Automatización con scripts
Un enfoque simple en Bash para claves API de Ollama o tokens:
#!/bin/bash
set -e
# Configuración
SECRET_FILE="/etc/openclaw/secrets.env"
BACKUP_DIR="/backup/secrets"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# Respaldo
mkdir -p "$BACKUP_DIR"
cp "$SECRET_FILE" "$BACKUP_DIR/secrets.env.$TIMESTAMP"
# Generar nuevo secreto
NEW_KEY=$(openssl rand -hex 32)
# Actualizar archivo
sed -i "s/^API_KEY=.*/API_KEY=$NEW_KEY/" "$SECRET_FILE"
# Reiniciar servicio
systemctl restart openclaw
# Desactivar secreto antiguo después de grace period
# Nota: se requiere paso específico del proveedor
echo "Rotado en $TIMESTAMP" >> /var/log/secret-rotation.log
Este script respalda el archivo, genera una nueva clave, actualiza la configuración y reinicia el servicio.
Cronjobs
Un cronjob periódico:
0 3 * * 0 /usr/local/bin/rotate-secrets.sh
Esto rota semanalmente los domingos a las 3 de la mañana. La salida debe redirigirse a un archivo de registro:
0 3 * * 0 /usr/local/bin/rotate-secrets.sh >> /var/log/secret-rotation.log 2>&1
Automatización con Python
import secrets
import os
import shutil
import subprocess
from datetime import datetime
SECRET_FILE = "/etc/myapp/secrets.env"
BACKUP_DIR = "/backup/secrets"
SERVICE = "myapp"
def rotate_secret():
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
os.makedirs(BACKUP_DIR, exist_ok=True)
shutil.copy(SECRET_FILE, f"{BACKUP_DIR}/secrets.env.{timestamp}")
new_key = secrets.token_urlsafe(32)
with open(SECRET_FILE, "w") as f:
f.write(f"API_KEY={new_key}\n")
subprocess.run(["systemctl", "restart", SERVICE], check=True)
print(f"Rotado en {timestamp}")
if __name__ == "__main__":
rotate_secret()
Gestores de secretos con rotación automática
- HashiCorp Vault: Credenciales dinámicas de base de datos con TTL.
- Infisical: Integraciones para rotación automática con proveedores seleccionados.
- Proveedores de nube: AWS Secrets Manager, Azure Key Vault y GCP Secret Manager ofrecen rotación integrada.
Con gestores de secretos, las aplicaciones obtienen el secreto actual dinámicamente en lugar de almacenarlo en archivos.
Flujos de trabajo con n8n
n8n puede disparar la rotación según un calendario o en respuesta a webhooks:
- Trigger: Calendario o webhook ante sospecha de fuga.
- Generar nuevo secreto: Nodo HTTP en el proveedor.
- Actualizar configuración: Nodo SSH o llamada API.
- Reiniciar servicio: Nodo SSH.
- Desactivar secreto antiguo: Después del grace period.
- Notificación: Correo electrónico o mensajería.
Integración con CI/CD
En GitHub Actions o GitLab CI puedes definir un trabajo de rotación que se ejecute bajo demanda o en horario:
rotate-secrets:
schedule:
- cron: '0 3 * * 0'
steps:
- name: Rotate API key
run: ./scripts/rotate-api-key.sh
Estrategia de reversión
Crea un respaldo antes de cada rotación. Si un servicio no funciona después de la rotación, puedes revertir rápidamente:
cp "$BACKUP_DIR/secrets.env.20260907_030000" "$SECRET_FILE"
systemctl restart openclaw
Grace Period y limpieza
Los secretos nuevos y antiguos deben ser válidos brevemente en paralelo. Un paso de limpieza desactiva el secreto antiguo después de un tiempo definido. Esto evita interrupciones si un servicio aún tiene cached el secreto antiguo.
Trampas típicas
- Sin respaldo: Los errores en la rotación causan interrupciones.
- Grace period muy corto: Los servicios aún cargan el secreto antiguo.
- Secretos hardcodeados: Las aplicaciones que almacenan claves en el código no pueden rotarse.
- Sin pruebas: Verifica que todo funcione después de la rotación.
- Logs contienen secretos: Nunca escribas claves en los logs.
- Intervención manual: La automatización se ralentiza con pasos de confirmación.
Enlaces y recursos adicionales
- BotServ.de Secret Rotation
- BotServ.de HashiCorp Vault
- BotServ.de Infisical
- BotServ.de dotenvx
- BotServ.de Mozilla SOPS
FAQ: Automatizar la rotación de secretos
¿Debo realmente automatizar la rotación? Sí, en el momento en que tengas más que unos pocos secretos en uso.
¿Con qué frecuencia debo rotar automáticamente? Por ejemplo, semanalmente o mensualmente, dependiendo del riesgo.
¿Puedo automatizar la rotación sin un gestor de secretos? Sí, con scripts, cronjobs o CI/CD, pero requiere más trabajo propio.
¿Qué sucede si hay un error? Un respaldo y un paso de reversión minimizan las interrupciones.
¿Son seguros los secretos generados automáticamente?
Sí, si son criptográficamente fuertes, por ejemplo con openssl o secrets.token_urlsafe.
Fuentes y lecturas adicionales
- HashiCorp Vault Dynamic Secrets: https://developer.hashicorp.com/vault/docs/secrets/databases
- Infisical Rotation: https://infisical.com/docs/
- Python secrets: https://docs.python.org/3/library/secrets.html
Resumen: Automatizar la rotación de secretos
La rotación manual de secretos no escala. Con scripts, cronjobs, gestores de secretos o flujos de trabajo, puedes realizar el intercambio de forma regular y confiable. Lo importante es contar con respaldos, grace periods, pruebas después de la rotación y logs limpios sin secretos. Quien implementa la automatización correctamente reduce significativamente el riesgo de filtraciones y ahorra esfuerzo administrativo.


