Estou executando 2 instâncias de n8n (EKS) auto-hospedadas - dev e prod. No momento, sempre que atualizo ou adiciono credenciais em dev, tenho que recriá-las/atualizá-las manualmente em prod também, o que é tedioso e propenso a erros, especialmente conforme o número de workflows e credenciais cresce.
Estou preso em como evitar essa etapa de sincronização manual. Quais são as melhores maneiras possíveis de automatizar a sincronização de credenciais entre instâncias auto-hospedadas de dev e prod?
Há algumas coisas sobre as quais gostaria de receber orientação:
Existe uma maneira suportada de exportar/importar credenciais via CLI ou API que pudesse ser automatizada?
Alguém já configurou um pipeline de CI/CD (por exemplo, usando controle de fonte + n8n CLI) para promover credenciais/workflows de dev para prod?
Variáveis de ambiente ou um gerenciador de secrets externo (Vault, AWS Secrets Manager, etc.) são uma abordagem melhor a longo prazo do que armazenar credenciais diretamente em cada instância?
Qualquer conselho, workflows ou exemplos de pessoas que resolveram isso seria muito apreciado. Obrigado!
A CLI do n8n é a forma principal de automatizar isso. Você pode, de fato, exportar e importar tanto fluxos de trabalho quanto credenciais.
O Obstáculo: A Chave de Criptografia O n8n criptografa todas as credenciais em seu banco de dados usando a N8N_ENCRYPTION_KEY. Se suas instâncias EKS de Dev e Prod têm chaves diferentes (o que devem ter por segurança), uma exportação/importação direta de arquivos criptografados falhará em Prod porque a instância Prod não conseguirá descriptografá-los.
A Solução: Arquivos Intermediários Descriptografados Você pode usar a flag --decrypted para contornar isso, mas deve tratar os arquivos em texto plano resultantes com extremo cuidado.
Fluxo de Trabalho Proposto:
Lado Dev: Execute um script em seu contêiner Dev: n8n export:credentials --all --decrypted --output=credentials_export/
Transporte Seguro: Envie esses arquivos JSON para um local seguro e efêmero (p. ex., um bucket AWS S3 criptografado com uma política de ciclo de vida para deletar após 1 dia, ou uma entrada AWS Secrets Manager). Nunca faça commit desses JSONs em texto plano no seu repositório Git.
Lado Prod (Pipeline CI/CD):
Puxe os JSONs descriptografados de seu armazenamento seguro.
Execute o comando de importação em seu contêiner Prod: n8n import:credentials --input=credentials_export/ --separate
Apague os arquivos locais imediatamente após a importação.
Para uma configuração profissional de EKS, você deve se afastar de tratar o banco de dados interno do n8n como a “fonte da verdade” para segredos. Em vez disso, trate suas credenciais como parte de sua infraestrutura.
A Estratégia: Gerenciador Externo de Segredos + Variáveis de Ambiente Em vez de sincronizar a “Entidade de Credencial” no n8n, você aproveita a capacidade do n8n de usar variáveis de ambiente para muitas configurações de serviço.
Arquitetura: Armazene suas chaves de API e senhas reais no AWS Secrets Manager ou HashiCorp Vault.
Implementação:
Use o External Secrets Operator (ESO) em seu cluster EKS para sincronizar valores do AWS Secrets Manager em Kubernetes Secrets.
Injete esses Kubernetes Secrets em seus Pods n8n como variáveis de ambiente.
Enquanto as credenciais criadas via UI do n8n são baseadas em BD, você pode usar a API do n8n em um pipeline CI/CD para “provisionar” credenciais usando essas variáveis de ambiente como valores de entrada. Isso garante que a definição da credencial viva em seu código/vault, e apenas o valor seja injetado em tempo de execução.