Trust Score
Trust Score is één getal tussen 0 en 100 dat de operationele betrouwbaarheid van je hele tenant samenvat. Geschikt voor je board-meeting; afgeleide bewijzen voor je auditor.
Formule (v1.2)
| Component | Gewicht | Bron |
|---|---|---|
| Patch hygiene | 30% | inventory_dependency_cves + cve_matches, KEV/EPSS-gewogen, age-since-fix |
| Agent health | 20% | agents.last_seen_at + version-currency, excluding agents in maintenance window |
| Secrets exposure | 15% | inventory_security_findings open vs resolved |
| Configuration drift | 15% | process_dna + config_file_baselines (zie Drift detection) |
| EAT resolution discipline | 10% | emergency_tokens: % met exit_code = 0 vs gefaald |
| Evidence continuity | 10% (0% voor tenants < 90d) | maandelijkse audit-pack coverage |
Score = gewogen gemiddelde, met blanked componenten herverdeeld.
Bootstrap-mode
Nieuwe tenants hebben per definitie nul evidence-continuity. Dat zou hun score artificieel laag maken. Daarom:
| Tenant-leeftijd | Evidence-continuity weight | Herverdeeld naar |
|---|---|---|
| < 30 dagen | 0% | patch_hygiene +5, agent_health +5 |
| 30 — 90 dagen | 5% | patch_hygiene +2, agent_health +1, secrets +1, drift +1 |
| ≥ 90 dagen | 10% (volledig) | — |
Het dashboard toont een blauwe banner “tenant {N} dagen oud — score wordt volledig vanaf dag 90” zodat de operator niet schrikt van een tijdelijk hoge score.
Maintenance-aware
Een agent binnen een actieve maintenance_windows row krijgt geen
heartbeat-penalty in agent_health. Geplande downtime ≠ ongezond.
Belangrijk voor NIS2-rapportage: je wilt geen score-dip alleen omdat je
een upgrade hebt aangekondigd.
Graceful degradation
Componenten zonder onderliggende data worden geblancht:
configuration_driftblanked als agent op binary < v1823 (geenconfig_hashesrapportage)evidence_continuityblanked tijdens bootstrap (< 30d)
De score loopt door op de overige componenten, gewichten worden geherverdeeld. UI toont in de breakdown welke componenten geblancht zijn en waarom — geen verborgen leeg getal.
Cadence
TrustScoreWorker draait elke 30 minuten:
- per agent → row in
trust_score_snapshots(agent_id NOT NULL) - per tenant → aggregate row (agent_id IS NULL)
Idempotent via inputs_hash — geen duplicate rows wanneer niets is
veranderd binnen het uur.
Dashboard
/trust-score— tenant aggregate met sparkline + 6-component breakdown/trust-score/agents/[id]— per-agent score + component-evidence-counts- Mobile PWA
/m/trust-score— quick-glance gauge
API
GET /api/v1/trust-score/v12/tenant?range=30d|90d|365dGET /api/v1/trust-score/v12/agents/:id?range=30d|90d|365dBeide vereisen viewer role.
Per-tenant tuning
Standaard weights uit trust_score_weights table. Override per tenant
door een rij in te voegen met tenant_id IS NOT NULL en je eigen
config JSON. Geen breaking change — bestaande weights versions blijven
naast nieuwe leven.