Ga naar inhoud

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)

ComponentGewichtBron
Patch hygiene30%inventory_dependency_cves + cve_matches, KEV/EPSS-gewogen, age-since-fix
Agent health20%agents.last_seen_at + version-currency, excluding agents in maintenance window
Secrets exposure15%inventory_security_findings open vs resolved
Configuration drift15%process_dna + config_file_baselines (zie Drift detection)
EAT resolution discipline10%emergency_tokens: % met exit_code = 0 vs gefaald
Evidence continuity10% (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-leeftijdEvidence-continuity weightHerverdeeld naar
< 30 dagen0%patch_hygiene +5, agent_health +5
30 — 90 dagen5%patch_hygiene +2, agent_health +1, secrets +1, drift +1
≥ 90 dagen10% (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_drift blanked als agent op binary < v1823 (geen config_hashes rapportage)
  • evidence_continuity blanked 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|365d
GET /api/v1/trust-score/v12/agents/:id?range=30d|90d|365d

Beide 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.