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
| PaaS | API usada | Auth no PaaS |
|---|---|---|
| Heroku | PATCH /apps/:app/config-vars | Personal Access Token |
| Vercel | POST /v10/projects/:id/env | Vercel API Token |
| Netlify | PATCH /api/v1/accounts/:id/env | Netlify 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_pushedno CV com audit log do PaaS - Filtros estritos —
vault_path_prefixespecí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)