Pular para o conteúdo principal

Rotação automática de credenciais

A rotação automática reduz a janela de risco de credenciais comprometidas e atende requisitos de compliance (PCI DSS exige rotação a cada 90 dias). O CipherVault rotaciona credenciais nativas em 9 plataformas, executadas pelo Sensor Service.

Plataformas suportadas

PlatformComo
PostgreSQLALTER USER x WITH PASSWORD $1 via pg
MySQL/MariaDBALTER USER x@'%' IDENTIFIED BY ? via mysql2
SQL ServerALTER LOGIN [x] WITH PASSWORD via mssql
Oracle DBALTER USER x IDENTIFIED BY via oracledb
MongoDBdb.updateUser command
RedisACL SETUSER (v6+) ou CONFIG SET requirepass
ElasticsearchPOST /_security/user/:user/_password
AWS IAMCreateAccessKey + DeleteAccessKey
Generic API Keyshell commands customizados (Shell / Python / JavaScript / Java via JBang)

Nota: rotação de credenciais é diferente de Dynamic Secrets. Rotação atualiza periodicamente uma credencial persistente (que vive no DB do app); Dynamic Secrets emite credenciais efêmeras sob demanda com TTL ≤ 24h. Veja Dynamic Secrets.

Como funciona (zero downtime)

O Sensor Service mantém a credencial nova e antiga válidas durante grace_window antes de revogar a antiga:

  1. T-0 — Sensor gera nova credencial e faz ALTER USER (ou equivalente)
  2. T-0 a T-graceWindow — versão antiga e nova ficam ativas em paralelo
  3. T-graceWindow — versão antiga é revogada (DROP USER, DeleteAccessKey, etc.)

graceWindow padrão é 5 minutos (configurável). Aplicações que usam o SDK detectam a nova versão automaticamente via cache TTL.

Configurando rotação (PostgreSQL)

curl -X POST https://cv.acme.com.br/secrets \
-H "Authorization: Bearer $CV_TOKEN" \
-d '{
"name": "billing-master",
"category": "database",
"environment": "prd",
"value": "senha_inicial_change_me",
"rotation_policy_days": 30,
"metadata": {
"platform": "postgresql",
"host": "db-billing.internal.acme.com.br",
"port": 5432,
"database": "billing",
"target_username": "app_user",
"admin_credential_id": 42
}
}'

admin_credential_id aponta para outro secret no CV — credencial admin que o sensor usa para executar ALTER USER.

Self-rotation das credenciais cloud (do CV para os providers)

A v1.5 trouxe rotação das credenciais que o CV usa para acessar AWS, GCP e IBM (Sensor coleta secrets da cloud, mas precisa de uma cred para isso — essa cred também rotaciona).

Padrão "create → test → delete":

  1. Sensor cria nova cred no provider (CreateAccessKey na AWS, etc.)
  2. Testa que funciona (STS:GetCallerIdentity, etc.)
  3. Persiste no CV
  4. Só então deleta a antiga

Se qualquer etapa antes do persist falhar, a cred atual continua intacta — rollback automático.

ProviderMecanismo
AWSIAM Access Keys
GCPService Account Keys
IBMIAM API Keys

Não suportado: Azure, OCI, Huawei (paradigmas distintos), e PAMs por design (são rotacionadores, não rotacionados).

Configuração:

  • Manual: botão "Rotacionar credenciais" no card da integração ou POST /cloud-integrations/:id/rotate-credentials
  • Auto: opt-in via toggle auto_rotate. Rotação imediata após primeiro sync + scheduler 24h com leader-lock + retry 1h em failure

Custom rotation script

Para plataformas não suportadas nativamente, use custom_script com selector de linguagem (Shell / Python 3 / Node / Java via JBang). Variáveis disponíveis:

  • {{new_password}} no template
  • $NEW_SECRET no env

O Sensor é responsável pela execução; o backend só encaminha script_language + script_body opacos.

Boas práticas

  • Comece com staging. Habilite rotação em homologação por 2 semanas antes de produção.
  • Monitore o next_rotation. Configure alertas Prometheus para rotações próximas e para falhas.
  • Use grace window generosa. Aplicações com cache longo precisam de 10–30 min.
  • Teste rollback. Pelo menos uma vez por trimestre em ambiente de teste.
  • Rotação de admin separada. A credencial admin do Sensor deve ter ciclo próprio (ex.: semestral, com aprovação manual via Approvals).
  • Considere Dynamic Secrets se o caso de uso é JIT (job batch, ETL diário) em vez de credencial persistente — TTL muito menor (minutos vs. dias).