Secret Health Analytics
A partir da v4.5, o CipherVault tem um dashboard de analítica de saúde dos secrets — métricas agregadas para entender postura geral de segurança do tenant.
UI: Dashboard → Analytics. API: /analytics/health.
Métricas calculadas
Distribuição de idade
Histograma de now - last_rotated_at por bucket:
0-7 dias ████████████████ 320 (54%)
7-30 dias ██████████ 180 (30%)
30-90 dias ████ 65 (11%)
90-180 dias █ 20 (3%)
180+ dias ▌ 10 (2%)
Risk Score average por vault
| Vault | Avg Score | Median | Worst |
|---|---|---|---|
producao | 23 | 18 | 87 (stripe-master-key) |
producao-billing | 41 | 38 | 92 (postgres-master) |
staging | 12 | 10 | 35 |
Top 10 secrets nunca rotacionados
Lista de secrets com last_rotated_at IS NULL (apenas created_at),
ordenado por idade.
Top 10 com Risk Score crítico
score >= 80, com link direto para investigar.
Compliance distribution
| Compliance tag | Count |
|---|---|
pii | 124 |
pci | 47 |
pii + pci | 12 |
| Untagged | 215 (⚠️ 36% — auditar) |
API
curl "https://cv.acme.com.br/analytics/health?vault=producao&since=30d" \
-H "Authorization: Bearer $CV_TOKEN"
Resposta:
{
"summary": {
"total_secrets": 595,
"active_secrets": 587,
"avg_risk_score": 24.3,
"median_age_days": 12,
"fresh_percent": 84.2
},
"age_distribution": {
"0-7d": 320,
"7-30d": 180,
"30-90d": 65,
"90-180d": 20,
"180d+": 10
},
"by_vault": [
{ "vault": "producao", "count": 247, "avg_score": 23.0, "max_score": 87 },
...
],
"never_rotated": [
{ "id": "sec_...", "path": "...", "age_days": 423, "score": 91 },
...
],
"critical_secrets": [...],
"compliance_tags": {
"pii": 124,
"pci": 47,
"untagged": 215
},
"generated_at": "2026-05-12T14:00:00Z"
}
CSV export
GET /analytics/health/export?format=csv&vault=producao&since=90d
Devolve CSV com uma row por secret (para análise em Excel/Power BI).
Inclui colunas: id, path, vault, type, environment, age_days, last_rotated_days_ago, risk_score, classification, owner_email.
Use cases
1. Relatório trimestral de compliance
CSV export → análise em Excel → highlight secrets sem rotação > 90d para tickets de remediation.
2. Detecção de "secret graveyard"
Vaults com avg_age_days > 180 provavelmente têm secrets ativos
abandonados — candidatos para audit + cleanup.
3. SLA interno
KPI: "% de secrets em produção rotacionados nos últimos 90 dias > 95%". Track em Grafana via:
sum(cv_secrets_rotated_in_window{window="90d", env="prd"}) /
sum(cv_secrets_total{env="prd"})
Caching
Dashboard calcula lazy + cache 1h. Use ?nocache=1 para forçar recálculo
em tenants grandes (custo: ~30s em tenants com 10k+ secrets).
Métricas Prometheus relacionadas
cv_secrets_total{tenant, vault, environment, status}
cv_secrets_age_seconds{tenant, vault} histogram
cv_secrets_risk_score{tenant, vault} gauge
cv_secrets_compliance_tagged{tenant, tag}
cv_secrets_rotated_total{tenant, vault} counter
Boas práticas
- Schedule export CSV mensalmente — base para audit interno
- KPI dashboard em Grafana — torne visível para o time
- Highlights em standups SRE — top 3 piores secrets por Risk Score
- Definir SLA interno — rotações em < 90d para prd, < 180d para staging
- Tag compliance imediatamente —
untaggeddeve cair com tempo