Estoy ejecutando 2 instancias de n8n autohospedadas (EKS) - desarrollo y producción. Ahora mismo, siempre que actualizo o agrego credenciales en desarrollo, tengo que recrearlas/actualizarlas manualmente en producción también, lo cual es tedioso y propenso a errores, especialmente a medida que crece el número de flujos de trabajo y credenciales.
Estoy atrapado en cómo evitar este paso de sincronización manual. ¿Cuáles son las mejores formas posibles de automatizar la sincronización de credenciales entre instancias autohospedadas de desarrollo y producción?
Hay algunas cosas sobre las que me gustaría recibir opiniones:
¿Hay alguna forma compatible para exportar/importar credenciales a través de la CLI o API que se pueda escribir en scripts?
¿Alguien ha configurado un pipeline de CI/CD (por ejemplo, usando control de versiones + CLI de n8n) para promover credenciales/flujos de trabajo de desarrollo a producción?
¿Son las variables de entorno o un administrador de secretos externo (Vault, AWS Secrets Manager, etc.) un enfoque mejor a largo plazo que almacenar credenciales directamente en cada instancia?
Agradecería mucho cualquier consejo, flujos de trabajo o ejemplos de personas que hayan resuelto esto. ¡Gracias!
La CLI de n8n es la forma principal de automatizar esto. Efectivamente, puedes exportar e importar tanto flujos de trabajo como credenciales.
El Obstáculo: La Clave de Cifrado n8n cifra todas las credenciales en su base de datos usando N8N_ENCRYPTION_KEY. Si tus instancias de EKS en Dev y Prod tienen claves diferentes (como deberían por seguridad), una exportación/importación directa de archivos cifrados fallará en Prod porque la instancia de Prod no podrá descifrarlos.
La Solución: Archivos Intermedios Descifrados Puedes usar la bandera --decrypted para saltarte esto, pero debes manejar los archivos de texto plano resultantes con extremo cuidado.
Flujo de Trabajo Propuesto:
Lado Dev: Ejecuta un script en tu contenedor Dev: n8n export:credentials --all --decrypted --output=credentials_export/
Transporte Seguro: Carga estos archivos JSON a una ubicación segura y efímera (por ejemplo, un bucket de AWS S3 cifrado con una política de ciclo de vida para eliminar después de 1 día, o una entrada en AWS Secrets Manager). Nunca confirmes estos JSONs de texto plano en tu repositorio de Git.
Lado Prod (Tubería CI/CD):
Descarga los JSONs descifrados de tu almacenamiento seguro.
Ejecuta el comando de importación en tu contenedor Prod: n8n import:credentials --input=credentials_export/ --separate
Elimina inmediatamente los archivos locales después de la importación.
Para una configuración profesional de EKS, deberías dejar de tratar la base de datos interna de n8n como la “fuente de verdad” para los secretos. En su lugar, trata tus credenciales como parte de tu infraestructura.
La Estrategia: Gestor Externo de Secretos + Variables de Entorno En lugar de sincronizar la “Entidad de Credencial” en n8n, aprovechas la capacidad de n8n para usar variables de entorno para muchas configuraciones de servicio.
Arquitectura: Almacena tus claves API/contraseñas reales en AWS Secrets Manager o HashiCorp Vault.
Implementación:
Usa el Operador de Secretos Externos (ESO) en tu clúster EKS para sincronizar valores de AWS Secrets Manager en Kubernetes Secrets.
Inyecta estos Kubernetes Secrets en tus Pods de n8n como variables de entorno.
Aunque las credenciales creadas desde la UI de n8n se basan en BD, puedes usar la API de n8n dentro de una tubería CI/CD para “provisionar” credenciales usando esas variables de entorno como valores de entrada. Esto asegura que la definición de la credencial viva en tu código/vault, y solo el valor se inyecte en tiempo de ejecución.