Pular para o conteúdo principal

PaaS push — Heroku, Vercel, Netlify

A partir da v4.5, o CipherVault pode pushar secrets para plataformas Platform-as-a-Service que não suportam OIDC pull. Workaround pragmático para apps deployadas em Heroku, Vercel ou Netlify.

Preferência ainda é OIDC pull quando suportado. Plugin oficial Vercel/Netlify estão em roadmap. Por enquanto, PaaS push é a opção sem reescrever apps existentes.

Plataformas suportadas

PaaSAPI usadaAuth no PaaS
HerokuPATCH /apps/:app/config-varsPersonal Access Token
VercelPOST /v10/projects/:id/envVercel API Token
NetlifyPATCH /api/v1/accounts/:id/envNetlify Personal Access Token

Setup

1. Adicionar PaaS integration

Settings → Integrações → Categoria PaaS → adicionar credencial do PaaS (armazenada como secret no próprio CV).

curl -X POST https://cv.acme.com.br/cloud-integrations \
-H "Authorization: Bearer $CV_TOKEN" \
-d '{
"category": "paas",
"provider": "heroku",
"credentials": {
"api_token_secret": "internal/paas/heroku-token"
}
}'

2. Configurar mapping vault → PaaS app

curl -X POST https://cv.acme.com.br/paas-mappings \
-d '{
"integration_id": 12,
"vault_id": 1,
"vault_path_prefix": "api/",
"paas_app": "billing-api",
"paas_env": "production",
"push_on_rotate": true
}'

push_on_rotate: true faz com que toda rotação automática propague imediatamente para o Heroku. Sem isso, push acontece via cron 24h.

3. Push manual (uma vez ou ad-hoc)

curl -X POST https://cv.acme.com.br/paas-mappings/42/push \
-d '{ "reason": "Deploy v1.4.0 — sync inicial" }'

Audit: paas_secrets_pushed, severity=medium.

Filtros

vault_path_prefix limita o que é pushado:

producao/
├── api/stripe/secret_key → push (prefix "api/" bate)
├── api/openai/key → push
├── db/postgres/master → NÃO push (não bate prefix "api/")
└── internal/admin-token → NÃO push

Naming convention

Por default, path do CV é convertido para nome de env var:

api/stripe/secret_key → API_STRIPE_SECRET_KEY
api/openai/key → API_OPENAI_KEY

Customizável via name_template:

{
"name_template": "{{ upper (replace .Path \"/\" \"_\") }}"
}

Boas práticas

  • Use OIDC pull quando o PaaS suportar — Vercel, GitHub Actions, GitLab CI suportam. Push é fallback
  • Push em rotação apenas para PaaS que não tem hot-reload (Heroku exige restart pra new env vars)
  • Audit cruzado — combine paas_secrets_pushed no CV com audit log do PaaS
  • Filtros estritosvault_path_prefix específico evita push acidental de secrets sensíveis
  • PaaS token rotacionado a cada 90 dias

Limitações

  • Sem reverse-sync — se alguém muda env var no PaaS direto, CV não detecta. Considere drift detection na Anomaly Detection
  • Volume limitado — Heroku tem cap de 32KB total para config vars; Vercel ~64KB
  • Sem suporte a binary secrets — apenas strings (limitação do PaaS, não nosso)