Auditor Workbench + MSP Cockpit
Auditor Workbench (/auditor)
POST /api/v1/auditor/bundle met body {period_start, period_end}. Owner /
admin / auditor only. TOTP-gated in productie (purpose
auditor_bundle); in dev geen TOTP.
Bundle-inhoud (ZIP):
manifest.json bundle metadata + pack list + key listverify.py offline Ed25519-verifier (pynacl-based)signing_keys.json public keys + rotation reasons in periodecompliance_summary.md markdown audit-rapportevidence_packs/<id>.tar.gz elke pack uit de periode (alleen uit allowlisted opslag-paden)Path-traversal guard: evidence_packs.storage_uri MOET starten met één van:
/var/lib/monsys/ai-evidence-packs//var/lib/monsys/copilot-evidence-packs//var/lib/monsys/openai-evidence-packs/
Anders wordt de pack uit de bundle weggelaten (in manifest.json blijft een
archive_path:"" rij staan voor traceability).
Download URL is one-shot, 24h expiry. De atomic claim zit in de UPDATE:
UPDATE auditor_bundle_tokens SET downloaded_at = NOW(), downloaded_by = $3 WHERE token = $1 AND tenant_id = $2 AND downloaded_at IS NULL AND expires_at > NOW()RETURNING file_pathPostgres MVCC + row-lock garandeert dat twee concurrent requests niet beide RETURNING krijgen.
Offline verify
Elke ontvanger draait python3 verify.py (pynacl) inside de uitgepakte
bundle. Geen netwerk, geen monsys-credentials nodig — verifies elke pack’s
signature tegen de bundled signing_keys.json. Output:
pack 1234: OKpack 1235: BAD SIGNATURE=== 12 OK, 1 BAD ===Exit code 0 = alles OK, 1 = minstens één pack faalt.
MSP Cockpit (/msp/cockpit)
GET /api/v1/msp/overview. Strikt afgeschermd: role = msp_operator OF
is_superadmin = true. Een normale owner/admin user krijgt 403 —
deze endpoint walkt élke tenant in het platform.
Per tenant:
- naam + plan
- huidige Trust Score + Δ7d
-
open critical+warning alerts
-
failing compliance evidence rijen
- last login activity
Default sortering = urgency-composite:
urgency = open_alerts*5 + failing_controls + (-Δ7d if Δ7d < 0) + 0.5 * (60 - score) if score < 60Sorteer per kolom kan via dashboard (urgency / naam / score).
Nieuwe rollen
Migration 064 breidt users.role CHECK uit met:
| Role | Toegang |
|---|---|
auditor | read-only + bundle generate/download (TOTP-prod gated) |
msp_operator | cross-tenant via /api/v1/msp/overview |
Bestaande rollen (analyst, admin, owner) ongewijzigd.