EU AI Act-documentatie En Audittrail In Microsoft 365 En Azure

💼 Management Samenvatting

De EU AI Act verplicht organisaties om gedetailleerde documentatie, risicobeoordelingen en logische audittrails bij te houden voor iedere significante AI-toepassing. Voor Nederlandse publieke organisaties die Microsoft 365, Azure AI en Azure OpenAI inzetten betekent dit dat documentatie niet langer een statische verzameling PDF's is, maar een levend systeem dat ontwerpbeslissingen, datasetbeschrijvingen, testresultaten, monitoring en escalaties integraal vastlegt.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
320u (tech: 140u)
Van toepassing op:
Rijksoverheid
Gemeenten
Provincies
ZBO's
Vitale aanbieders

Zonder een robuuste documentatiestructuur lopen organisaties het risico dat ze tijdens inspecties van de Autoriteit Persoonsgegevens, Agentschap Telecom of Europese toezichthouders geen sluitend bewijs kunnen leveren dat AI-systemen volgens de EU AI Act zijn ontworpen en beheerd. Onvolledige audittrails maken het onmogelijk om achteraf te reconstrueren welke datasets zijn gebruikt, waarom een model een bepaalde output gaf of welke maatregelen zijn genomen bij incidenten. Dit vergroot de kans op bestuurlijke boetes, opschorting van AI-diensten en reputatieschade, en kan bovendien de continuïteit van cruciale publieke dienstverlening in gevaar brengen.

PowerShell Modules Vereist
Primary API: Microsoft Purview, Microsoft 365 Compliance Center, Azure Portal
Connection: PowerShell, Microsoft Graph, Azure CLI
Required Modules: Microsoft.Graph, Az.Accounts

Implementatie

Dit artikel beschrijft hoe u een EU AI Act-compliant documentatieraamwerk inricht binnen Microsoft 365 en Azure. We behandelen de juridische context, leggen uit hoe u een digitaal dossier opbouwt per AI-systeem en tonen hoe u technische evidence verzamelt via Microsoft Purview, Azure Monitor en PowerShell-automatisering. Het gekoppelde script helpt u kernstukken te inventariseren, hiaten zichtbaar te maken en managementrapportages te genereren. Zo ontstaat een aantoonbare keten van verantwoordelijkheid die aansluit op de Nederlandse Baseline voor Veilige Cloud.

Juridische grondslag en documentatie-eisen van de EU AI Act

De EU AI Act introduceert een verplicht documentatiepakket dat verder gaat dan traditionele compliance-eisen. Voor hoog-risico AI-systemen – waaronder veel toepassingen binnen de overheid zoals besluitvorming over subsidies, toezicht, identificatie of kritieke infrastructuur – moet de zorgdrager een technisch dossier bijhouden met beschrijvingen van het systeemdoel, de gebruikte datasets, risicoanalyses, validatieactiviteiten, menselijk toezicht en incidentafhandeling. Deze verplichtingen sluiten aan op bestaande Europese regelgeving zoals de AVG en NIS2, maar voegen specifieke AI-elementen toe zoals verplichtingen rond bias-mitigatie, transparantie van modelarchitecturen en traceerbare modelupdates. Het dossier moet beschikbaar zijn voor toezichthouders en bij elke significante wijziging worden bijgewerkt. Bovendien verlangt de wet dat organisaties aantonen hoe ontwerpkeuzes zijn gemaakt, welke aannames zijn gedaan in veiligheidsanalyses en hoe proportionele maatregelen zijn gekozen wanneer risico’s niet volledig konden worden geëlimineerd.

Voor Nederlandse publieke organisaties betekent dit dat bestaande governanceprocessen – bijvoorbeeld het BIO-controleplan, het AVG-DPIA-proces en de Wbni/NIS2 rapportagelijnen – moeten worden uitgebreid met AI-specifieke documentatiestromen. Iedere AI-toepassing moet gekoppeld worden aan een uniek registratienummer, een verantwoordelijke proceseigenaar en een beheerder die wijzigingen goedkeurt. De documentatie omvat zowel tekstuele toelichtingen als technische artefacten zoals modelcards, data lineage-diagrammen, testresultaten en monitoringuitvoer. Deze moeten eenduidig worden opgeslagen, geclassificeerd en versiebeheerd zodat herleidbaarheid gegarandeerd blijft. Microsoft 365 biedt hiervoor de basis door gebruik te maken van SharePoint Site Collections, beveiligde Teams-kanalen en Purview-recordlabels waarmee retentie en bewaartermijnen worden afgedwongen. Voor iedere AI-toepassing kan een dossier worden ingericht dat dezelfde structuur volgt, zodat auditors snel herkennen welke documenten waar te vinden zijn.

Belangrijk is dat het documentatieproces niet alleen op de implementatiefase gericht is. De EU AI Act schrijft een ‘lifecycle’-benadering voor waarin ontwerp, ontwikkeling, uitrol, gebruik, monitoring en uitfasering evenveel aandacht krijgen. Daarom moet het dossier ook incidentmeldingen, gebruikersfeedback en bewaarbeslissingen bevatten. Wanneer een model wordt gehertraind op nieuwe data of wanneer de organisatie overstapt op generatieve AI, moet het dossier inzichtelijk maken welke kwaliteitscontroles zijn uitgevoerd, welke nieuwe risico’s zijn geïdentificeerd en hoe menselijke beoordeling is georganiseerd. Door deze eisen te integreren met bestaande change-, risk- en releaseprocessen ontstaat een consistent governancebeeld waarin elke wijziging automatisch een documentatie-update triggert. Dat is essentieel om bij audits te voorkomen dat documentatie achterloopt op de realiteit van het AI-landschap.

Een digitaal documentatieraamwerk ontwerpen in Microsoft 365 en Azure

Een effectief documentatieraamwerk begint bij een gestandaardiseerde informatiestructuur. Richt per AI-systeem een SharePoint-site in met vooraf gedefinieerde bibliotheken voor beleid, ontwerpdocumenten, data- en modeldocumentatie, testresultaten, operationele logs en managementrapportages. Gebruik Microsoft Purview om recordlabels en gevoeligheidslabels toe te wijzen die bewaartermijnen en toegangsrechten afdwingen. Door te werken met contenttypes voor bijvoorbeeld ‘AI Risicobeoordeling’, ‘Modelkaart’ en ‘Incidentrapport’ ontstaat een herleidbare catalogus waarin ieder document automatisch van metadata wordt voorzien, zoals toepassingsnaam, versie, datum van vaststelling en verantwoordelijke reviewer. Koppel de site aan een Teams-kanaal voor besluitvorming, zodat chatberichten en vergadersamenvattingen automatisch onderdeel worden van het dossier.

Voor technische evidence is Azure de primaire bron. Modeltrainingen in Azure Machine Learning, inferentie-werkbelasting in Azure Kubernetes Service en data-inname in Azure Data Factory genereren logboeken en metrieken die nodig zijn om te laten zien dat veiligheidsmaatregelen werken. Verzamel deze logs centraal in Microsoft Sentinel of Azure Monitor en exporteer relevante rapportages periodiek naar het documentatiedossier. Denk aan metriek over driftdetectie, foutpercentages, latency en menselijke interventies. Gebruik daarnaast Azure Policy om af te dwingen dat alleen goedgekeurde regio's, compute-typen en AI-services worden gebruikt. Policy-compliance rapporten worden automatisch toegevoegd aan het dossier, waardoor zichtbaar blijft of workloads conform de EU AI Act zijn ingericht. Combineer dit met data lineage-informatie uit Microsoft Purview zodat elke dataset in het dossier kan worden gevolgd van bron tot modelinput.

Een volwassen dossier bevat naast documenten ook beslisondersteuning voor reviewers en bestuurders. Maak binnen Microsoft Lists of Dataverse een register waarin alle AI-systemen zijn opgenomen met status, risicoklasse, datum laatste review en geplande audits. Verbind dit register met Power Automate zodat deadlines voor herbeoordelingen en incidentonderzoeken automatisch notificaties sturen naar verantwoordelijken. Gebruik Viva Goals of Planner om verbeteracties uit audits te volgen en koppel deze taken aan de juiste dossieronderdelen. Door deze componenten te combineren ontstaat een ‘single source of truth’ waarin beleidsdocumenten, technische evidence, acties en besluitvorming onlosmakelijk met elkaar verbonden zijn. Hierdoor kunnen bestuurders binnen enkele minuten zien welke AI-systemen actief zijn, of de vereiste documentatie compleet is en welke acties nog openstaan richting de EU AI Act-deadlines.

Technische evidence, logging en audittrails borgen

Toezichthouders zullen niet alleen vragen naar beleidsdocumenten, maar vooral naar concrete bewijsstukken waaruit blijkt dat AI-systemen aantoonbaar veilig en betrouwbaar functioneren. Daarom moeten organisaties een integraal audittrail-concept hanteren waarin elke kritieke handeling wordt gelogd: van datasetselectie tot modeldeploy, van bias-tests tot menselijke overrides. Azure Machine Learning biedt hiervoor auditlogs die vastleggen wie een experiment startte, welke computecluster is gebruikt en welke output is gegenereerd. Deze logs moeten worden gekoppeld aan het dossier en voorzien zijn van retentie die minstens gelijk is aan de bewaartermijnen in de EU AI Act. Ook Azure OpenAI logging – waaronder conversation telemetry en responsfilters – moet worden opgeslagen en geëtiketteerd zodat kan worden aangetoond welke mitigaties actief waren op het moment van een incident.

Daarnaast is het noodzakelijk om evidence te verzamelen over de werking van controlemaatregelen. Denk aan rapportages die aantonen dat differential privacy functies correct zijn geconfigureerd, dat promptsanitatie in Azure API Management actief is of dat meervoudige authenticatie verplicht is voor beheerders van AI-workloads. Door PowerShell- of Graph-queries te automatiseren kunnen deze controles periodiek worden uitgevoerd en de resultaten rechtstreeks in het dossier worden opgeslagen. Zo kan bij audits snel worden aangetoond dat beveiligings- en compliancecontroles niet alleen theoretisch bestaan, maar daadwerkelijk actief en effectief zijn. Waar mogelijk wordt gebruikgemaakt van hashwaarden en digitale ondertekening om te bewijzen dat evidence niet is gemanipuleerd sinds het moment van vastlegging.

Tot slot vraagt de EU AI Act expliciet om transparantie richting afnemers en belanghebbenden. Dit betekent dat communicatie met burgers, ketenpartners en interne gebruikers – zoals toelichtingen over de inzet van AI, beschrijvingen van risico’s en procedures voor klachten – onderdeel moet zijn van het audittrail. Documenteer welke informatie is gepubliceerd, wanneer deze is geactualiseerd en welke kanalen zijn gebruikt. Leg tevens vast hoe verzoeken tot uitleg of inzage in modelgedrag zijn afgehandeld. Door een compleet audittrail te combineren met heldere publiekscommunicatie ontstaat vertrouwen dat AI-systemen verantwoord worden ingezet en dat de organisatie bereid is verantwoording af te leggen. Dit is essentieel voor publieke organisaties die dagelijks te maken hebben met politieke en maatschappelijke controle.

Governance operationaliseren en tooling automatiseren

Gebruik PowerShell-script eu-ai-act-documentation.ps1 (functie Invoke-EuAiActDocumentationAssessment) – Controleert of kernonderdelen van het EU AI Act-dossier aanwezig zijn, waaronder risicoregisters, technische logs, modeldocumentatie en distributielijsten voor communicatie..

Gebruik PowerShell-script eu-ai-act-documentation.ps1 (functie Invoke-EuAiActDocumentationReport) – Stelt een managementrapport samen met bevindingen, prioriteiten en aanbevelingen voor verbeteracties rond EU AI Act-documentatie..

Governance rond AI-documentatie vraagt om duidelijke rolverdeling, escalatieroutes en tooling die de dagelijkse workload verlicht. De raad van bestuur of het college van B&W stelt de risicobereidheid vast en wijst een AI-governanceboard aan met vertegenwoordigers van CISO, privacy officer, chief data officer, juristen en proceseigenaren. Deze board valideert de dossiers, besluit over vrijgave naar productie en bewaakt dat incidenten worden afgehandeld volgens de eisen van de EU AI Act. Door governanceafspraken te koppelen aan Microsoft Entra-groepen en Purview-rollen wordt toegang tot dossiers strikt gereguleerd en is in auditlogs zichtbaar wie welke documenten heeft aangepast. Daarnaast worden change- en releaseprocessen aangepast zodat iedere wijziging in een AI-workload automatisch een checklist triggert voor documentatie, testresultaten en communicatie.

Automatisering is de sleutel om documentatie actueel te houden zonder dat teams verdrinken in administratieve taken. Het gekoppelde PowerShell-script kan in debugmodus lokaal worden getest en in productie worden aangeroepen vanuit Azure Automation of GitHub Actions. Het script inventariseert de aanwezigheid van dossieronderdelen, vergelijkt deze met een doelarchitectuur en genereert rapportages voor management en toezichthouders. Door de output te integreren met Planner of Azure DevOps kunnen verbeteracties meteen worden toegewezen en opgevolgd. Combineer dit met continue trainingsprogramma’s voor ontwikkelaars, juristen en bestuurders zodat iedereen begrijpt welke informatie in het dossier thuishoort. Zo ontstaat een cultuur waarin documentatie niet als bureaucratische last wordt gezien, maar als een strategisch hulpmiddel om verantwoorde AI te realiseren binnen de Nederlandse Baseline voor Veilige Cloud.

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 en rapporteert de volledigheid van EU AI Act-documentatie. .DESCRIPTION Ondersteunt Nederlandse publieke organisaties bij het aantoonbaar maken van compliance met de EU AI Act binnen Microsoft 365 en Azure. Het script controleert of kernonderdelen van het technische dossier aanwezig zijn (zoals risicoregisters, modeldocumentatie, monitoringlogs en communicatiedossiers) en kan een managementrapport genereren. .NOTES Filename: eu-ai-act-documentation.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-11-27 Last Modified: 2025-11-27 Version: 1.0 Related JSON: content/compliance/eu-ai-act-documentation.json .EXAMPLE .\eu-ai-act-documentation.ps1 -Assessment -DebugMode Voert een veilige lokale testrun uit zonder bestanden te lezen of te schrijven. .EXAMPLE .\eu-ai-act-documentation.ps1 -Assessment Controleert of het EU AI Act-dossier in de repository compleet is. .EXAMPLE .\eu-ai-act-documentation.ps1 -Report -OutputPath .\eu-ai-act-rapport.txt Genereert een managementrapport met bevindingen en aanbevelingen. #> #Requires -Version 5.1 [CmdletBinding()] param( [Parameter(HelpMessage = "Voer controles uit op aanwezigheid van EU AI Act-documentatie")] [switch]$Assessment, [Parameter(HelpMessage = "Genereer een managementrapport op basis van de assessment-resultaten")] [switch]$Report, [Parameter(HelpMessage = "Pad naar het rapportbestand (vereist bij -Report)")] [string]$OutputPath, [Parameter(HelpMessage = "Voer een lokale debugtest uit met voorbeelddata, zonder I/O-acties")] [switch]$DebugMode ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' function Get-RepositoryRoot { <# .SYNOPSIS Bepaalt de repository-root op basis van de scriptlocatie. #> [CmdletBinding()] param() $root = Resolve-Path (Join-Path $PSScriptRoot "..\..") -ErrorAction SilentlyContinue if (-not $root) { throw "Kon de repository-root niet bepalen. Controleer of het script zich in code\compliance bevindt." } return $root.Path } function Get-EuAiActDocumentationPaths { <# .SYNOPSIS Bepaalt de paden naar EU AI Act-documentatieonderdelen. .OUTPUTS PSCustomObject #> [CmdletBinding()] param() $repoRoot = Get-RepositoryRoot $docsRoot = Join-Path $repoRoot "documentatie\eu-ai-act-documentation" [PSCustomObject]@{ RepositoryRoot = $repoRoot DocsRoot = $docsRoot GovernanceRegisterPath = Join-Path $docsRoot "register-eu-ai-systemen.xlsx" RiskAssessmentsFolder = Join-Path $docsRoot "risicobeoordelingen" ModelCardsFolder = Join-Path $docsRoot "modeldocumentatie" MonitoringFolder = Join-Path $docsRoot "monitoring-logs" CommunicationFolder = Join-Path $docsRoot "communicatie" ImprovementPlanPath = Join-Path $docsRoot "verbeterplan-eu-ai-act.md" } } function Invoke-EuAiActDocumentationAssessment { <# .SYNOPSIS Voert controles uit op de aanwezigheid van dossieronderdelen. .OUTPUTS PSCustomObject #> [CmdletBinding()] param() Write-Host "" Write-Host "EU AI Act-documentatie – Controle kernonderdelen" -ForegroundColor Cyan Write-Host "================================================" -ForegroundColor Cyan if ($DebugMode) { Write-Host "DebugMode actief: resultaten worden gesimuleerd." -ForegroundColor Yellow $summary = [PSCustomObject]@{ DocsRootExists = $true HasGovernanceRegister = $true HasRiskAssessments = $true HasModelCards = $false HasMonitoringLogs = $true HasCommunicationSet = $false ImprovementPlanExists = $false Timestamp = Get-Date } $summary return $summary } $paths = Get-EuAiActDocumentationPaths Write-Verbose "Repository root: $($paths.RepositoryRoot)" Write-Verbose "Documentatiemap: $($paths.DocsRoot)" $summary = [PSCustomObject]@{ DocsRootExists = $false HasGovernanceRegister = $false HasRiskAssessments = $false HasModelCards = $false HasMonitoringLogs = $false HasCommunicationSet = $false ImprovementPlanExists = $false Timestamp = Get-Date } if (Test-Path -Path $paths.DocsRoot) { $summary.DocsRootExists = $true } else { Write-Host "Documentatiemap ontbreekt: $($paths.DocsRoot)" -ForegroundColor Yellow } if (Test-Path -Path $paths.GovernanceRegisterPath) { $summary.HasGovernanceRegister = $true } if (Test-Path -Path $paths.RiskAssessmentsFolder) { $summary.HasRiskAssessments = (Get-ChildItem -Path $paths.RiskAssessmentsFolder -File -ErrorAction SilentlyContinue).Count -gt 0 } if (Test-Path -Path $paths.ModelCardsFolder) { $summary.HasModelCards = (Get-ChildItem -Path $paths.ModelCardsFolder -File -ErrorAction SilentlyContinue).Count -gt 0 } if (Test-Path -Path $paths.MonitoringFolder) { $summary.HasMonitoringLogs = (Get-ChildItem -Path $paths.MonitoringFolder -File -ErrorAction SilentlyContinue).Count -gt 0 } if (Test-Path -Path $paths.CommunicationFolder) { $summary.HasCommunicationSet = (Get-ChildItem -Path $paths.CommunicationFolder -File -ErrorAction SilentlyContinue).Count -gt 0 } if (Test-Path -Path $paths.ImprovementPlanPath) { $summary.ImprovementPlanExists = $true } Write-Host "" Write-Host "Samenvatting:" -ForegroundColor Cyan Write-Host (" Documentatiemap aanwezig : {0}" -f $summary.DocsRootExists) -ForegroundColor Cyan Write-Host (" Register AI-systemen aanwezig : {0}" -f $summary.HasGovernanceRegister) -ForegroundColor Cyan Write-Host (" Risicobeoordelingen beschikbaar : {0}" -f $summary.HasRiskAssessments) -ForegroundColor Cyan Write-Host (" Modeldocumentatie aanwezig : {0}" -f $summary.HasModelCards) -ForegroundColor Cyan Write-Host (" Monitoring- en logevidence aanwezig: {0}" -f $summary.HasMonitoringLogs) -ForegroundColor Cyan Write-Host (" Communicatiemateriaal gepubliceerd : {0}" -f $summary.HasCommunicationSet) -ForegroundColor Cyan Write-Host (" Verbeterplan aanwezig : {0}" -f $summary.ImprovementPlanExists) -ForegroundColor Cyan return $summary } function Invoke-EuAiActDocumentationReport { <# .SYNOPSIS Genereert een managementrapport op basis van de assessment. .PARAMETER Result Het object dat is teruggegeven door Invoke-EuAiActDocumentationAssessment. .PARAMETER OutputPath Pad naar het tekstbestand dat moet worden aangemaakt. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [pscustomobject]$Result, [Parameter(Mandatory = $true)] [string]$OutputPath ) $folder = Split-Path -Path $OutputPath -Parent if (-not [string]::IsNullOrWhiteSpace($folder) -and -not (Test-Path -Path $folder)) { New-Item -Path $folder -ItemType Directory -Force | Out-Null } $lines = @() $lines += "EU AI Act-documentatie – Managementrapport" $lines += "Nederlandse Baseline voor Veilige Cloud" $lines += ("Datum: {0}" -f (Get-Date -Format "yyyy-MM-dd HH:mm")) $lines += "" $lines += "1. Resultaten" $lines += (" Documentatiemap aanwezig : {0}" -f $Result.DocsRootExists) $lines += (" Register AI-systemen aanwezig : {0}" -f $Result.HasGovernanceRegister) $lines += (" Risicobeoordelingen beschikbaar : {0}" -f $Result.HasRiskAssessments) $lines += (" Modeldocumentatie aanwezig : {0}" -f $Result.HasModelCards) $lines += (" Monitoring- en logevidence aanwezig: {0}" -f $Result.HasMonitoringLogs) $lines += (" Communicatiemateriaal gepubliceerd : {0}" -f $Result.HasCommunicationSet) $lines += (" Verbeterplan aanwezig : {0}" -f $Result.ImprovementPlanExists) $lines += "" $lines += "2. Interpretatie" $lines += " Deze controle geeft inzicht in de gereedheid richting de EU AI Act." $lines += " Gebruik de bevindingen om ontbrekende dossieronderdelen te prioriteren" $lines += " en rapporteer voortgang aan bestuur, CISO en privacy officer." $lines | Out-File -FilePath $OutputPath -Encoding UTF8 -Force Write-Host "Managementrapport aangemaakt: $OutputPath" -ForegroundColor Green } try { Write-Host "" Write-Host "========================================" -ForegroundColor Cyan Write-Host "EU AI Act-documentatie" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan if ($Assessment) { $result = Invoke-EuAiActDocumentationAssessment if ($DebugMode) { return $result } } if ($Report) { if (-not $result) { $result = Invoke-EuAiActDocumentationAssessment } if ([string]::IsNullOrWhiteSpace($OutputPath)) { throw "Parameter -OutputPath is verplicht wanneer -Report wordt gebruikt." } Invoke-EuAiActDocumentationReport -Result $result -OutputPath $OutputPath } if (-not $Assessment -and -not $Report) { Write-Host "" Write-Host "Geen modus opgegeven. Gebruik bijvoorbeeld:" -ForegroundColor Yellow Write-Host " -Assessment Controleer dossieronderdelen." -ForegroundColor Yellow Write-Host " -Report Genereer rapport (vereist -OutputPath)." -ForegroundColor Yellow Write-Host " -DebugMode Test veilig zonder I/O (combineer met -Assessment)." -ForegroundColor Yellow } } catch { Write-Error "Fout in eu-ai-act-documentation.ps1: $_" throw } finally { Write-Host "" Write-Host "========================================" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder een gedisciplineerd documentatieraamwerk kan de organisatie niet aantonen dat AI-systemen veilig, transparant en controleerbaar zijn. Dit vergroot het risico op stillegging, boetes en bestuurlijke interventies.

Management Samenvatting

Richt een centraal EU AI Act-dossier in per AI-systeem, combineer Microsoft 365-documentatie met Azure evidence en automatiseer controles en rapportages via PowerShell, zodat audits snel kunnen aantonen dat alle verplichtingen zijn geborgd.