Compliance Manager Als Ruggengraat Van Microsoft 365 Security Compliance

💼 Management Samenvatting

Compliance Manager vormt binnen Microsoft 365 de motor voor aantoonbare naleving. Het platform vertaalt wet- en regelgeving naar concrete verbeteracties, bewaakt scores en koppelt bewijs direct aan technische configuraties. Voor Nederlandse overheidsorganisaties, waar publieke verantwoording en politieke gevoeligheid elkaar raken, is dit de plek waar bestuurders, CISO's en privacy officers hetzelfde risicobeeld delen. De Nederlandse Baseline voor Veilige Cloud beschouwt Compliance Manager daarom als het primaire stuurmechanisme waarmee Microsoft 365 wordt beheerst.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
8/10
Implementatie
280u (tech: 120u)
Van toepassing op:
Microsoft 365 E5
Microsoft Purview
Microsoft Defender XDR
Security Copilot
Publieke Sector
Gemeenten
Rijk
ZBO's

Zonder centraal aangestuurde Compliance Manager blijven data over audits, bewijslast en mitigaties verspreid over SharePoint-bibliotheken, Excel-lijsten en mailboxen van leveranciers. Termijnen voor NIS2- en AVG-meldingen worden dan te laat gehaald, kwartaalrapportages veranderen in heroïsche reddingsacties en bestuurders kunnen tijdens begrotingsgesprekken geen helder verband leggen tussen risicoacceptatie en investeringen. Bovendien wordt het onmogelijk om richting toezichthouders te laten zien dat technische maatregelen daadwerkelijk aansluiten op juridische verplichtingen. Een professioneel ingerichte Compliance Manager voorkomt deze risico's door governance, data en rapportage te standaardiseren.

PowerShell Modules Vereist
Primary API: Microsoft Graph Security API (beta), Microsoft Purview Compliance PowerShell, Secure Score API
Connection: Connect-MgGraph -Scopes SecurityEvents.Read.All, Compliance.Read.All en Connect-IPPSSession voor Microsoft Purview PowerShell
Required Modules: Microsoft.Graph, ExchangeOnlineManagement

Implementatie

Dit artikel beschrijft hoe Compliance Manager wordt ingericht als ruggengraat van Microsoft 365 security compliance. We behandelen het bestuurlijke kader, de dataflows en automatisering die nodig zijn om het platform betrouwbaar te houden, en de rapportages die audits en bestuurders overtuigen. Het gekoppelde script `compliance-manager.ps1` levert reproduceerbare metingen, ondersteunt lokale DebugMode-tests en publiceert een hashbaar rapport dat direct gebruikt kan worden voor CISO-briefings, auditdossiers en ENSIA-rapportages.

Strategische governance en scope van Compliance Manager binnen de overheid

Een volwassen implementatie van Compliance Manager begint bij een bestuurlijke keuze. Het college van B&W, de secretaris-generaal of de raad van bestuur bevestigt dat dit platform de enige bron van waarheid is voor Microsoft 365-naleving. Die beslissing wordt vastgelegd in het informatiebeveiligings- en privacybeleid en gekoppeld aan de risicobereidheid: vitale processen, bijzondere persoonsgegevens en ketenafhankelijkheden krijgen een hogere prioriteit. Door die prioritering vooraf vast te leggen, ontstaat een toetsingskader dat standhoudt wanneer beleid verandert of politieke druk toeneemt.

Strategische governance gaat verder dan het selecteren van sjablonen. Het betekent dat BIO, AVG, NIS2 en sectorale normen worden gemodelleerd in portefeuilles met duidelijke eigenaars. Proceseigenaren, CISO-office, Functionaris Gegevensbescherming en controllers bepalen gezamenlijk welke maatregelen verplicht zijn, welke compenserende controles gelden en hoe uitzonderingen worden vastgelegd. Hierdoor sluiten Compliance Manager-acties naadloos aan op risicoregisters en planning- en controlcycli, waardoor bestuurders niet langer hoeven te gissen naar de impact van technische maatregelen.

Goede scopebepaling koppelt data-classificatie en leveranciersmanagement direct aan Compliance Manager. Zodra een proces als kritisch is aangemerkt, worden de bijbehorende applicaties, Azure-resources en contracten automatisch gelabeld zodat bewijs, licenties en service-levels traceerbaar blijven. Dit voorkomt dat bijvoorbeeld jeugdzorgdossiers of hooggeclassificeerde onderzoeksdata dezelfde behandeling krijgen als generieke HR-processen. Tegelijk wordt de lifecycle meegenomen: bij nieuwe releases of uitfaseringen bepaalt het architectuurboard direct hoe controles veranderen en welke teams trainingen nodig hebben.

Governance omvat ook financiering en mandaat. Compliance Manager-rapportages worden ingebed in kwartaalreviews en budgetrondes, waardoor bestuurders zien hoeveel middelen nodig zijn om scores boven afgesproken drempelwaarden te houden. Het FinOps-team koppelt licentiekosten aan de voortgang van maatregelen, terwijl procurement bewaakt dat leveranciers dezelfde kwaliteitsnormen volgen. Deze integrale aanpak maakt compliance voorspelbaar in plaats van reactief, omdat beslissingen over investeringen en risicoacceptatie op dezelfde dataset zijn gebaseerd.

Tot slot vraagt governance om cultuur en vaardigheden. Proceseigenaren buiten IT, bijvoorbeeld dienstverlening of sociale zaken, moeten begrijpen wat scorefluctuaties betekenen en hoe zij bewijs aanleveren. Organisaties investeren daarom in microlearning, scenario-oefeningen en communities of practice waarin praktijkvoorbeelden uit Nederlandse uitvoeringsorganisaties worden gedeeld. Door deze kennisopbouw groeit Compliance Manager uit tot een permanent vermogen dat ook overeind blijft tijdens reorganisaties of wisselingen van coalitie.

Automatisering, KPI-sturing en signalering op basis van Compliance Manager

Gebruik PowerShell-script compliance-manager.ps1 (functie Invoke-ComplianceManagerAssessment) – Verzamelt Secure Score-gegevens, verbeteracties en evidence-statussen via Microsoft Graph en Purview PowerShell en rekent deze om naar een volwassenheidsscore met prioriteiten..

Zodra governance staat, draait alles om betrouwbare telemetrie. Compliance Manager ontvangt signalen uit Secure Score, Defender, Entra ID, Purview en externe audits. De Nederlandse Baseline voor Veilige Cloud schrijft voor dat deze bronnen minimaal dagelijks worden ververst en dat bewaartermijnen aansluiten op Archiefwet en AVG. Dat betekent dat exportstromen naar een recordsmanagementsysteem standaard beschikbaar zijn en dat ieder bewijsstuk wordt vastgelegd met tijdstempel, classificatie en eigenaar.

Het script `Invoke-ComplianceManagerAssessment` fungeert als metrische ruggengraat. In DebugMode draait het volledig offline zodat ontwikkelaars en auditors veilig kunnen testen. In productie controleert het script Graph-verbindingen, leest Secure Score en improvement actions uit en vraagt via Purview PowerShell de status van assessments en bewijslast op. De uitkomst is een samengestelde volwassenheidsscore met duidelijke signalen wanneer bewijzen verlopen, acties ophopen of automatisering ontbreekt. Deze signalen worden automatisch geadresseerd aan de verantwoordelijke rol, waardoor opvolging niet verloren gaat in mailboxen.

KPI-sturing wordt hierdoor voorspelbaar. Het script levert cijfers over voltooiingsgraad, gemiddelde doorlooptijd per maatregel, verhouding tussen preventieve en detectieve controles en mate van automatisering. Deze cijfers worden gespiegeld aan drempelwaarden die vooraf zijn goedgekeurd door bestuur en auditcommissie. Zakt een indicator onder de grens, dan markeert het script het item als kritiek en adviseert het specifieke compenserende maatregelen, bijvoorbeeld tijdelijke additionele logging of versneld vrijmaken van licenties.

Automatisering betekent niet dat menselijk oordeel verdwijnt. Het script levert juist voedingen voor dashboards, Power BI-rapportages en SOC-runbooks. Analisten verrijken de output met context, zoals incidentdata of leveranciersbeperkingen, en besluiten of aanbevelingen worden opgevolgd of gemotiveerd afgewezen. Feedback wordt vastgelegd zodat het script inzicht houdt in bewuste afwijkingen en deze niet telkens opnieuw als fout bestempelt. Zo ontstaat een lerend systeem waarin technologie en governance elkaar versterken.

Omdat veel overheidsorganisaties met leveranciers werken, controleert het script ook op roltoekenningen en licentiegebruik. Wanneer een managed service provider ontbrekende rechten heeft of wanneer IPPS-sessies niet succesvol zijn, verschijnt direct een waarschuwing. Daarmee wordt voorkomen dat audits stranden doordat externe partijen onvoldoende data kunnen leveren. Contracten en service-levels refereren expliciet aan deze controles, zodat leveranciers weten dat zij dezelfde tooling moeten gebruiken en dat DebugMode-rapporten verplicht worden aangeleverd voor onafhankelijk verifiëren.

Bewijsketen, audit-assurance en continue verbetering

Gebruik PowerShell-script compliance-manager.ps1 (functie Publish-ComplianceManagerReport) – Bouwt een volledig rapport met telemetrie, volwassenheidsscore, kritieke acties en een auditvriendelijke bewijslijst inclusief integriteitscontrole..

Naleving staat of valt met aantoonbaarheid. Bewijslast moet niet alleen aanwezig zijn, maar ook toegankelijk, actueel en voorzien van context. De Nederlandse Baseline voor Veilige Cloud adviseert daarom een bewijsketen waarin Compliance Manager, recordsmanagement en Purview eDiscovery samenwerken. Elke maatregel verwijst naar een vaste dossierlocatie met bewaartermijn en classificatie. Wordt een dossier bijgewerkt, dan verschijnt automatisch een taak om het bewijs opnieuw te valideren en een hashwaarde te registreren.

Het script `Publish-ComplianceManagerReport` fungeert als slotstuk van die keten. Het bundelt telemetrie, volwassenheidsscore, acties en een auditchecklist in één JSON-bestand en voegt een SHA256-hash toe. Daardoor kunnen auditors, rekenkamers en toezichthouders verifiëren dat rapportages niet zijn aangepast na aanlevering. Het rapport wordt opgeslagen in immutable storage of een Purview records center en kan direct worden gekoppeld aan ENSIA-, NIS2- of AVG-dossiers.

Assurance stopt niet bij techniek. Het rapport bevat contextregels over uitzonderingen, risicobesluiten en incidenten die met dezelfde controles verband houden. Hierdoor begrijpen bestuurders en toezichthouders waarom bepaalde maatregelen extra aandacht krijgen of tijdelijk zijn uitgesteld. Wanneer een uitzonderingsbesluit afloopt, herinnert het rapport automatisch de eigenaar en suggereert het compenserende maatregelen totdat de structurele oplossing gereed is.

Continue verbetering wordt geborgd door het rapport te koppelen aan lessons learned en scenario-oefeningen. Na elk auditmoment of incident vindt een review plaats waarin wordt vastgelegd welke root causes zijn gevonden, welke aanpassingen in Compliance Manager nodig zijn en hoe snel maatregelen effect hebben gehad. Het script slaat deze deltas op zodat trendanalyse mogelijk wordt: lopen beleidsmaatregelen vaak vertraging op, of juist technische configuraties? Met die informatie kunnen bestuurders gericht investeren in capaciteit of tooling.

Samenwerking met ketenpartners en toezichthouders wordt eenvoudiger omdat iedereen dezelfde dataset gebruikt. Het rapport kan worden gefilterd per ketenproces zodat elke partij alleen relevante informatie ontvangt, wat dataminimalisatie en contractuele afspraken ondersteunt. Wanneer het Nationaal Cyber Security Centrum, de Autoriteit Persoonsgegevens of een provinciale rekenkamer aanvullende vragen stelt, kan de organisatie binnen minuten aantonen welke maatregelen golden, welke bewijsstukken beschikbaar waren en welke besluiten zijn genomen. Zo wordt compliance geen obstakel maar een bewezen kwaliteit van de dienstverlening.

Compliance & Frameworks

Automation

Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).

PowerShell
<# .SYNOPSIS Controleert de volwassenheid van Microsoft 365 Compliance Manager en bouwt een auditbestendig rapport. .DESCRIPTION Dit script ondersteunt het artikel content/m365/security-compliance/compliance-manager.json. Het verzamelt Secure Score-gegevens, verbeteracties en evidence-statussen via Microsoft Graph en Microsoft Purview (Security & Compliance PowerShell). De resultaten worden samengevoegd tot een volwassenheidsscore met aanbevelingen, inclusief hashbaar JSON-rapport voor audits. .NOTES Filename : compliance-manager.ps1 Author : Nederlandse Baseline voor Veilige Cloud Created : 2025-11-27 Version : 1.0 Category : security-compliance Workload : m365 .LINK https://github.com/m365-tenant-best-practise .EXAMPLE .\compliance-manager.ps1 -DebugMode Voert de beoordeling uit met lokale voorbeelddata voor snelle tests. .EXAMPLE .\compliance-manager.ps1 -Mode Publish -OutputPath .\compliance-manager-report.json Publiceert het rapport naar JSON, inclusief hashwaarde voor integriteitscontrole. #> #Requires -Version 5.1 #Requires -Modules Microsoft.Graph, ExchangeOnlineManagement [CmdletBinding()] param( [Parameter(HelpMessage = "Gebruik voorbeelddata en sla cloudverbindingen over.")] [switch]$DebugMode, [Parameter(HelpMessage = "Assess = toon rapport, Publish = exporteer rapport naar JSON.")] [ValidateSet("Assess", "Publish")] [string]$Mode = "Assess", [Parameter(HelpMessage = "Pad voor het geëxporteerde rapport wanneer -Mode Publish is gekozen.")] [string]$OutputPath, [Parameter(HelpMessage = "Drempelwaarde voor ReadinessScore waarmee items als kritiek worden gemarkeerd.")] [ValidateRange(40, 95)] [int]$ScoreThreshold = 75 ) Set-StrictMode -Version Latest $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' if (-not $OutputPath) { $OutputPath = Join-Path -Path (Get-Location) -ChildPath "compliance-manager-report.json" } Write-Host "`n============================================" -ForegroundColor Cyan Write-Host "Compliance Manager assessment" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "============================================`n" -ForegroundColor Cyan function Connect-ComplianceManagerContext { <# .SYNOPSIS Maakt verbinding met Microsoft Graph en Purview PowerShell. .DESCRIPTION Slaat verbindingen over in DebugMode zodat lokale testen veilig verlopen. #> [CmdletBinding()] param() if ($DebugMode) { Write-Host "DebugMode actief: cloudverbindingen worden overgeslagen." -ForegroundColor Yellow return } $graphScopes = @( "SecurityEvents.Read.All", "SecurityActions.Read.All", "Directory.Read.All" ) Write-Host "Verbinding maken met Microsoft Graph..." -ForegroundColor Gray Connect-MgGraph -Scopes $graphScopes -ErrorAction Stop | Out-Null Write-Host "Verbonden met Microsoft Graph." -ForegroundColor Green Write-Host "IPPS-sessie initialiseren..." -ForegroundColor Gray try { Connect-IPPSSession -ErrorAction Stop | Out-Null Write-Host "Verbonden met Microsoft Purview PowerShell." -ForegroundColor Green } catch { Write-Warning "Kon geen IPPS-sessie opzetten: $_" } } function Get-ComplianceTelemetry { <# .SYNOPSIS Verzamelt Secure Score, verbeteracties en evidence-signalen. .OUTPUTS PSCustomObject met kernindicatoren voor Compliance Manager. #> [CmdletBinding()] param() if ($DebugMode) { return [PSCustomObject]@{ SecureScore = 78 ImprovementActionsTotal = 142 ImprovementActionsPassed = 86 EvidencePending = 14 EvidenceExpiredDays = 26 AssessmentsActive = 9 AutomationsConfigured = 6 LastUpdatedUtc = (Get-Date).ToUniversalTime() } } Write-Verbose "Secure Score ophalen..." $secureScore = 0 try { $scoreResponse = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/security/secureScores?`$top=1&`$orderby=createdDateTime%20desc" if ($scoreResponse.value) { $secureScore = [math]::Round($scoreResponse.value[0].currentScore, 2) } } catch { Write-Warning "Secure Score niet opgehaald: $_" } Write-Verbose "Verbeteracties ophalen..." $actionsTotal = 0 $actionsPassed = 0 try { $controls = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/security/secureScoreControlProfiles?`$top=200" if ($controls.value) { $actionsTotal = $controls.value.Count $actionsPassed = ($controls.value | Where-Object { $_.controlStateUpdates -and ($_.controlCategory -ne $null) }).Count } } catch { Write-Warning "Control-gegevens niet opgehaald: $_" } Write-Verbose "Evidence-status ophalen via IPPS..." $evidencePending = 0 $evidenceExpiredDays = 0 $assessmentsActive = 0 $automationsConfigured = 0 try { $assessments = Get-ComplianceAssessment -ErrorAction Stop if ($assessments) { $assessmentsActive = ($assessments | Where-Object { $_.Status -eq "InProgress" -or $_.Status -eq "Active" }).Count } } catch { Write-Warning "Get-ComplianceAssessment niet beschikbaar: $_" } try { $actions = Get-ComplianceImprovementAction -ErrorAction Stop if ($actions) { $pending = $actions | Where-Object { $_.Status -eq "Pending" -or $_.Status -eq "InProgress" } $evidencePending = $pending.Count $latest = $pending | Sort-Object -Property LastModifiedDate -Descending | Select-Object -First 1 if ($latest -and $latest.LastModifiedDate) { $evidenceExpiredDays = [math]::Round(((Get-Date) - $latest.LastModifiedDate).TotalDays, 0) } } } catch { Write-Warning "Get-ComplianceImprovementAction niet beschikbaar: $_" } try { $automationPolicies = Get-ProtectionAlert -ResultSize 1 -ErrorAction SilentlyContinue if ($automationPolicies) { $automationsConfigured = 1 } } catch { $automationsConfigured = 0 } return [PSCustomObject]@{ SecureScore = $secureScore ImprovementActionsTotal = $actionsTotal ImprovementActionsPassed = $actionsPassed EvidencePending = $evidencePending EvidenceExpiredDays = $evidenceExpiredDays AssessmentsActive = $assessmentsActive AutomationsConfigured = $automationsConfigured LastUpdatedUtc = (Get-Date).ToUniversalTime() } } function Invoke-ComplianceManagerAssessment { <# .SYNOPSIS Berekent volwassenheid en aanbevelingen. .PARAMETER Telemetry Resultaat van Get-ComplianceTelemetry. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [pscustomobject]$Telemetry ) $score = 50 if ($Telemetry.SecureScore -gt 0) { $score += [math]::Min(20, $Telemetry.SecureScore / 5) } if ($Telemetry.ImprovementActionsTotal -gt 0) { $completion = 0 if ($Telemetry.ImprovementActionsPassed -gt 0) { $completion = ($Telemetry.ImprovementActionsPassed / $Telemetry.ImprovementActionsTotal) * 100 } $score += [math]::Min(15, $completion / 10) } if ($Telemetry.EvidencePending -lt 10) { $score += 5 } elseif ($Telemetry.EvidencePending -gt 40) { $score -= 5 } if ($Telemetry.EvidenceExpiredDays -gt 30) { $score -= 10 } elseif ($Telemetry.EvidenceExpiredDays -le 14 -and $Telemetry.EvidenceExpiredDays -gt 0) { $score += 5 } if ($Telemetry.AssessmentsActive -gt 5) { $score += 5 } if ($Telemetry.AutomationsConfigured -gt 0) { $score += 5 } $score = [math]::Max(40, [math]::Min(95, [math]::Round($score, 2))) $criticalFindings = @() if ($score -lt $ScoreThreshold) { $criticalFindings += "Volwassenheidsscore ($score) ligt onder drempel $ScoreThreshold." } if ($Telemetry.EvidencePending -gt 25) { $criticalFindings += "Aantal openstaande bewijzen ($($Telemetry.EvidencePending)) overstijgt afgesproken maximum." } if ($Telemetry.EvidenceExpiredDays -gt 30) { $criticalFindings += "Bewijs is ouder dan 30 dagen; actualiseer Compliance Manager dossiers." } if (-not $criticalFindings) { $criticalFindings = @("Geen kritieke afwijkingen; voer kwartaalreview uit ter bevestiging.") } $recommendations = @( "Plan een gezamenlijke sessie tussen CISO, FG en proceseigenaren voor herijking van scope en uitzonderingen.", "Publiceer het rapport in het recordsmanagementsysteem en koppel hashwaarden voor integriteitscontrole.", "Herbruik de JSON-export voor dashboards zodat bestuur realtime inzicht houdt." ) return [PSCustomObject]@{ ReadinessScore = $score CriticalFindings = $criticalFindings Recommendations = $recommendations Threshold = $ScoreThreshold } } function Get-ComplianceManagerPlaybook { <# .SYNOPSIS Bouwt een actieplan met rollen en audititems. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [pscustomobject]$Telemetry, [Parameter(Mandatory = $true)] [pscustomobject]$Assessment ) $actions = @( "Werk verbeteracties bij in Compliance Manager en koppel eigenaars aan ieder item.", "Controleer IPPS-connectoren en zorg dat Connect-MgGraph en Connect-IPPSSession minimaal maandelijks worden getest.", "Archiveer rapporten met bewaartermijn van 7 jaar conform BIO." ) if ($Assessment.ReadinessScore -lt $ScoreThreshold) { $actions += "Escalatie naar bestuur vereist: score onder drempel, voeg compenserende controles toe." } $roles = @( "CISO-office", "Privacy Officer / FG", "Security Operations Center", "Audit & Risk Committee" ) $evidence = @( "compliance-manager-report.json inclusief SHA256-hash", "Exports van Secure Score en Compliance Manager dashboards", "Actuele risicoregisters met verwijzing naar uitzonderingen en besluiten", "Bewijs van aangepaste playbooks in incident response en change management" ) return [PSCustomObject]@{ Actions = $actions ResponsibleRoles = $roles EvidenceList = $evidence NextReviewWeeks = 4 } } function Publish-ComplianceManagerReport { <# .SYNOPSIS Orkestreert de volledige assessment en export. #> [CmdletBinding()] param() $telemetry = Get-ComplianceTelemetry $assessment = Invoke-ComplianceManagerAssessment -Telemetry $telemetry $playbook = Get-ComplianceManagerPlaybook -Telemetry $telemetry -Assessment $assessment $report = [PSCustomObject]@{ GeneratedAtUtc = (Get-Date).ToUniversalTime() DebugMode = [bool]$DebugMode Telemetry = $telemetry Assessment = $assessment Playbook = $playbook } if ($Mode -eq "Publish") { Write-Verbose "Rapport exporteren naar $OutputPath" $json = $report | ConvertTo-Json -Depth 6 $json | Set-Content -Path $OutputPath -Encoding UTF8 $hash = Get-FileHash -Path $OutputPath -Algorithm SHA256 Write-Host "Rapport geexporteerd naar $OutputPath" -ForegroundColor Green Write-Host "SHA256: $($hash.Hash)" -ForegroundColor Cyan $report | Add-Member -MemberType NoteProperty -Name "ReportHash" -Value $hash.Hash -Force } return $report } try { Connect-ComplianceManagerContext $result = Publish-ComplianceManagerReport $result exit 0 } catch { Write-Error "Fout tijdens Compliance Manager assessment: $_" exit 1 } finally { Write-Host "`n============================================`n" -ForegroundColor Cyan } # Exitcodes: # 0 = Succes # 1 = Fout tijdens uitvoering

Risico zonder implementatie

Risico zonder implementatie
High: Auditbewijzen, Secure Score-data en risicobesluiten blijven verspreid over spreadsheets en e-mail, waardoor BIO-, AVG- en NIS2-toezichthouders geen vertrouwen hebben in de beheersing en sancties of aanwijzingen kunnen opleggen.

Management Samenvatting

Maak Compliance Manager tot het centrale sturingsmechanisme van Microsoft 365 security compliance, automatiseer monitoring met `compliance-manager.ps1` en borg bewijs, governance en KPI's in één geïntegreerd proces.