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)
Section titled “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) + MCP-toolschema-drift (onbevestigde wijzigingen, zie Agent-kanalen) |
| 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
Section titled “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
Section titled “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
Section titled “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
Section titled “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
Section titled “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
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
Section titled “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.
Geen verse data, geen score
Section titled “Geen verse data, geen score”Een server die zich al meer dan een uur niet meldt (buiten een onderhoudsvenster), een gearchiveerde server of een server zonder één beoordeelbaar onderdeel krijgt geen score, met de reden erbij. Vroeger hield zo een server zijn laatste getal; een server die 67 dagen stil was, kon zo groen blijven. De score van de tenant is het gemiddelde van de servers die wel verse data leveren; is er geen enkele, dan is er geen tenantscore (vroeger een neutrale 70).