Pular para o conteúdo principal

Migração do Doppler

A partir da v4.5, o CipherVault tem CLI cv-migrate-doppler que importa projects / configs / secrets do Doppler preservando estrutura semântica.

Mapeamento​

DopplerCipherVault
Project(label / metadata — não tem equivalente direto)
Config (dev, stg, prd)Vault com environment correspondente
Secret (key/value)Secret convencional (não Fortress)
Secret valuesecrets.value (cifrado AES-256-GCM)
Service tokenAppConnection
Team membersUsers (manual import via SCIM ou CSV)

Instalação​

# Via Homebrew
brew install ciphervault/tap/cv-migrate-doppler

# Ou baixar binário do GitHub Releases
curl -LO https://github.com/Martinez1991/ciphervault/releases/latest/download/cv-migrate-doppler-linux-amd64
chmod +x cv-migrate-doppler-linux-amd64
sudo mv cv-migrate-doppler-linux-amd64 /usr/local/bin/cv-migrate-doppler

Pré-requisitos​

  • Doppler API token com permissão de leitura de todos projects (Service Token global ou Admin token)
  • CipherVault JWT admin ou AppConnection com vaults:write
  • Conta Doppler com a estrutura que você quer migrar

Comando básico​

cv-migrate-doppler \
--doppler-token $DOPPLER_TOKEN \
--cv-url https://cv.acme.com.br \
--cv-token $CV_TOKEN \
--project billing \
--config prd \
--dry-run

--dry-run mostra o que seria importado sem aplicar.

Comando completo (todos projects)​

cv-migrate-doppler \
--doppler-token $DOPPLER_TOKEN \
--cv-url https://cv.acme.com.br \
--cv-token $CV_TOKEN \
--all-projects \
--vault-naming "{{ .Project }}-{{ .Config }}" \
--path-prefix "imported/" \
--report report.json

Output​

[cv-migrate-doppler] Found 12 Doppler projects, 36 configs, 1247 secrets total
[migrate] billing/prd → vault "billing-prd" (created)
[migrate] ├── DATABASE_URL → imported/DATABASE_URL (created)
[migrate] ├── STRIPE_KEY → imported/STRIPE_KEY (created)
[migrate] ├── ...
[migrate] billing/stg → vault "billing-stg" (created)
[migrate] └── 42 secrets imported
...

✓ Migration complete:
- 36 vaults created (or already existed)
- 1247 secrets imported
- 0 errors
- report: report.json

Resolução de conflitos​

Se um secret já existe no CV no mesmo path:

FlagComportamento
--on-conflict=skip (default)Mantém valor existente, skipa Doppler
--on-conflict=overwriteSobrescreve com valor do Doppler
--on-conflict=versionCria nova versão preservando histórico
--on-conflict=failAborta migração

Cutover gradual​

Padrão recomendado:

  1. Migrar Dev primeiro com --config dev
  2. Apps em Dev atualizam para SDK CV (ou Secretless Proxy)
  3. Migrar Staging com --config stg
  4. Apps em Staging atualizam
  5. Production por último, com janela de manutenção
  6. Confirmar 2 semanas de uso do CV antes de revogar Doppler tokens

Tokens Doppler​

Após migração, revogue todos os service tokens do Doppler que estavam sendo usados pelas apps. Apps agora devem usar AppConnections do CV.

Limitações​

  • Doppler Branch Configs — herança suportada via parent_vault_id no CV (configurar manualmente após import)
  • Doppler Token rotation — histórico não preservado (CV começa novo histórico)
  • Doppler Webhooks — recriar manualmente no CV (Settings → Webhooks)
  • Doppler Integrations (AWS Secrets Manager sync, etc.) — recriar via CV cloud integrations
  • Secret References ($REF() no Doppler) — resolvidos no momento da migração (valor final é importado, não a referência)

Boas práticas​

  • Sempre --dry-run primeiro — revise output antes de aplicar
  • Migre por projeto, não tudo de uma vez — fica mais fácil reverter se algo der errado
  • Backup do Doppler via export CSV antes — opção de recovery
  • Documente cutover em runbook — apps que mudaram, datas, validações
  • Audit cruzado — compare logs do Doppler (últimos acessos) com audit do CV (primeiros acessos) para detectar apps que esqueceu de migrar

Roadmap​

  • v5: support para AWS Secrets Manager migration
  • v5: support para HashiCorp Vault migration (KV + Transit + Database)
  • v5: support para GCP Secret Manager migration