EU AI Act Vereisten Voor Nederlandse Overheidsorganisaties

💼 Management Samenvatting

De EU AI Act is de eerste omvattende wetgeving ter wereld die kunstmatige intelligentie reguleert en legt specifieke verplichtingen op aan organisaties die AI-systemen ontwikkelen, implementeren of gebruiken. Nederlandse overheidsorganisaties moeten voldoen aan deze vereisten om legaal AI-toepassingen te kunnen inzetten voor kritieke besluitvormingsprocessen die gevolgen hebben voor burgers.

Aanbeveling
IMPLEMENT
Risico zonder
Critical
Risk Score
9/10
Implementatie
200u (tech: 80u)
Van toepassing op:
Azure
M365
AI Services

Niet-naleving van de EU AI Act kan leiden tot boetes tot zes procent van de wereldwijde jaaromzet, een verbod op het gebruik van niet-conforme AI-systemen, juridische aansprakelijkheid bij schade veroorzaakt door AI, en ernstige reputatieschade voor publieke organisaties. Voor Nederlandse overheidsorganisaties komt hier nog bij dat zij moeten voldoen aan transparantieverplichtingen onder de Wet open overheid en verantwoording moeten afleggen aan burgers. Organisaties die high-risk AI-systemen gebruiken zonder de vereisten na te leven, kunnen bovendien in strijd zijn met fundamentele rechten en democratische waarden, wat kan leiden tot rechtszaken en politieke gevolgen.

PowerShell Modules Vereist
Primary API: Microsoft Graph API, Azure Portal
Connection: Connect-MgGraph, Connect-AzAccount
Required Modules: Microsoft.Graph, Az.Accounts

Implementatie

Dit artikel beschrijft alle vereisten die de EU AI Act stelt aan Nederlandse overheidsorganisaties die AI-systemen gebruiken, met specifieke focus op high-risk AI-systemen die veelvuldig worden toegepast in de publieke sector. Het behandelt technische vereisten zoals risicomanagement systemen, data governance, transparantie verplichtingen, menselijke toezicht, accuraatheid en robuustheid eisen. Daarnaast worden organisatorische vereisten beschreven zoals kwaliteitsmanagementsystemen, conformity assessments, registratie verplichtingen en gebruikersinformatie. Het artikel biedt praktische implementatie richtlijnen voor Microsoft AI-services zoals Azure OpenAI Service, Microsoft Copilot en Azure Cognitive Services, met concrete stappen om compliant te worden volgens de gefaseerde implementatie die start in 2025.

Overzicht van EU AI Act Vereisten

De EU AI Act introduceert een risico-gebaseerde aanpak waarbij AI-systemen worden ingedeeld in vier categorieën: verboden AI-praktijken, high-risk AI-systemen, beperkt risico AI-systemen, en minimaal risico AI-systemen. Nederlandse overheidsorganisaties gebruiken voornamelijk high-risk AI-systemen, wat betekent dat zij moeten voldoen aan de strengste vereisten. High-risk AI-systemen omvatten onder andere AI-toepassingen die worden gebruikt voor besluitvorming over toegang tot publieke diensten en voordelen, in het bijzonder wanneer deze beslissingen de kans van een natuurlijke persoon op toegang tot onderwijs of beroepsopleiding beïnvloeden, of belangrijke privé- of beroepsmatige kansen beïnvloeden.

Voor high-risk AI-systemen legt de EU AI Act acht kernvereisten op die strikt moeten worden nageleefd. Ten eerste moeten organisaties een risicomanagementsysteem implementeren dat continu identificeert, analyseert, evalueert en beheerst de risico's die het AI-systeem kan veroorzaken gedurende de volledige levenscyclus. Dit systeem moet gebaseerd zijn op risicobeoordelingen en moet worden bijgewerkt wanneer nieuwe risico's worden geïdentificeerd of wanneer het systeem significant wordt gewijzigd. Het risicomanagementsysteem moet een systematische aanpak volgen en moet worden geïntegreerd in het algemene risicomanagementsysteem van de organisatie.

De tweede vereiste betreft data governance. Organisaties moeten ervoor zorgen dat trainings-, validatie- en testdatasets relevant, representatief, accuraat en compleet zijn. Dit betekent dat datasets moeten worden geselecteerd en beheerd met het oog op het minimaliseren van risico's op fouten en het identificeren van mogelijke vooroordelen. Organisaties moeten bovendien documenteren welke datasets zijn gebruikt, hoe deze zijn verzameld en voorbereid, en welke maatregelen zijn genomen om kwaliteit en representativiteit te waarborgen. Dit is bijzonder relevant voor Nederlandse overheidsorganisaties die vaak werken met historische data die mogelijk vooroordelen bevatten.

Transparantie is de derde kernvereiste. AI-systemen moeten zodanig zijn ontworpen en ontwikkeld dat hun werking transparant is voor gebruikers, wat betekent dat gebruikers moeten kunnen begrijpen hoe het systeem tot beslissingen komt en welke factoren daarbij een rol spelen. Voor Nederlandse overheidsorganisaties betekent dit bovendien dat zij moeten voldoen aan de Wet open overheid, die burgers het recht geeft om informatie te verkrijgen over hoe automatische besluitvorming werkt. Dit vereist dat organisaties gebruikersinformatie verstrekken die duidelijk, begrijpelijk en toegankelijk is, zonder gebruik van onnodig technisch jargon.

De vierde vereiste betreft menselijke toezicht. High-risk AI-systemen moeten menselijk toezicht mogelijk maken om risico's te minimaliseren en te zorgen dat het systeem niet buiten zijn beoogde doelstellingen en geografische en temporele toepassingsgebied wordt gebruikt. Dit betekent dat organisaties procedures moeten implementeren waarin wordt vastgelegd wanneer en hoe menselijke interventie kan plaatsvinden, wie verantwoordelijk is voor toezicht, en hoe beslissingen kunnen worden getoetst of aangepast. Voor automatische besluitvorming in uitkeringsprocessen of fraudedetectie betekent dit bijvoorbeeld dat er altijd een menselijke reviewer beschikbaar moet zijn die beslissingen kan herzien.

Accuraatheid, robuustheid en cybersecurity vormen de vijfde tot en met zevende vereisten. AI-systemen moeten accuraat, robuust en cyberveilig zijn gedurende hun volledige levenscyclus. Dit vereist dat organisaties maatregelen nemen om te zorgen dat systemen weerstand kunnen bieden tegen aanvallen, dat fouten worden gedetecteerd en gecorrigeerd, en dat systemen blijven functioneren zoals bedoeld onder verschillende omstandigheden. Voor Microsoft AI-services betekent dit dat organisaties moeten configureren voor beveiliging, monitoring moeten implementeren, en regelmatig moeten testen op kwetsbaarheden.

De achtste vereiste betreft kwaliteitsmanagementsystemen en technische documentatie. Organisaties moeten een kwaliteitsmanagementsysteem implementeren dat alle aspecten van de AI-levenscyclus dekt, en moeten uitgebreide technische documentatie opstellen die de systeemarchitectuur, trainingsdata, algoritmes en besluitvormingsprocessen beschrijft. Deze documentatie moet up-to-date worden gehouden en moet beschikbaar zijn voor conformity assessments en audits.

Implementatie van Vereisten voor Microsoft AI-Services

Het implementeren van EU AI Act vereisten voor Microsoft AI-services vereist een systematische aanpak die begint bij de selectie van de juiste services en configuratie, en doorloopt tot en met continue monitoring en onderhoud. Voor Azure OpenAI Service betekent dit bijvoorbeeld dat organisaties moeten beginnen met het configureren van content filters om te voorkomen dat het systeem ongepaste of discriminerende output genereert. Daarnaast moeten organisaties data residency instellen om ervoor te zorgen dat data binnen de Europese Unie blijft, wat vereist is voor bepaalde categorieën overheidsdata.

Voor de risicomanagement vereiste moeten organisaties een gestructureerd proces opzetten dat begint bij de initiële risicobeoordeling wanneer een AI-service wordt geselecteerd en geïmplementeerd. Dit proces moet alle potentiële risico's identificeren die kunnen ontstaan bij het gebruik van de service, inclusief risico's op discriminatie, privacy schendingen, beveiligingslekken, en functionele fouten. Voor Microsoft Copilot betekent dit bijvoorbeeld dat organisaties moeten beoordelen welke data worden geraadpleegd door het systeem, welke beslissingen kunnen worden beïnvloed door de output, en welke mitigatiemaatregelen nodig zijn om risico's te beheersen.

Data governance implementatie vereist dat organisaties een overzicht hebben van alle data die worden gebruikt door AI-systemen. Voor Azure Cognitive Services die werken met documenten, afbeeldingen of spraak, betekent dit dat organisaties moeten inventariseren welke datasets worden gebruikt voor training of fine-tuning, moeten valideren dat deze data representatief zijn en geen vooroordelen bevatten, en moeten implementeren hoe data worden beheerd en bijgewerkt. Organisaties moeten bovendien logging implementeren om bij te houden welke data worden verwerkt door AI-systemen, wat essentieel is voor compliance en auditing.

Transparantie vereisten kunnen worden geïmplementeerd door gebruikersinformatie te verstrekken die uitlegt hoe AI-systemen werken. Voor Microsoft Copilot betekent dit dat organisaties duidelijke richtlijnen moeten opstellen die uitleggen welke taken Copilot kan uitvoeren, welke beperkingen het systeem heeft, wanneer gebruikers kritisch moeten zijn op de output, en hoe zij kunnen verifiëren of informatie correct is. Deze informatie moet worden geïntegreerd in gebruikershandleidingen en training materialen, en moet beschikbaar zijn op intranet sites of in help systemen.

Menselijk toezicht implementatie vereist dat organisaties workflows aanpassen om menselijke review in te bouwen voor kritieke beslissingen. Dit betekent dat voor AI-systemen die worden gebruikt voor automatische besluitvorming, er altijd een escalatiepad moet zijn naar menselijke reviewers. Organisaties moeten bovendien training verzorgen aan deze reviewers zodat zij weten wanneer en hoe zij moeten ingrijpen, welke criteria zij moeten gebruiken om AI-beslissingen te beoordelen, en hoe zij beslissingen moeten documenteren. Voor uitkeringssystemen of fraudedetectie betekent dit bijvoorbeeld dat alle automatische beslissingen moeten worden gereviewd door een menselijke caseworker voordat definitieve actie wordt ondernomen.

Accuraatheid en robuustheid kunnen worden waarborgd door regelmatige testing en monitoring. Organisaties moeten testprocedures opstellen die de prestaties van AI-systemen evalueren op verschillende scenarios, inclusief edge cases en adversariale voorbeelden. Monitoring moet worden geïmplementeerd om te detecteren wanneer systemen afwijkend gedrag vertonen, wanneer accuraatheid daalt, of wanneer nieuwe risico's ontstaan. Voor Microsoft AI-services betekent dit dat organisaties moeten gebruik maken van Azure Monitor en Application Insights om metrics te verzamelen over systeemgedrag, en moeten alerts configureren voor anomalie detectie.

Cybersecurity vereisten voor AI-systemen omvatten zowel traditionele beveiligingsmaatregelen als AI-specifieke beveiliging. Organisaties moeten zorgen dat alle verbindingen naar AI-services worden versleuteld, dat authenticatie en autorisatie correct zijn geconfigureerd, dat API-keys en credentials veilig worden beheerd, en dat logging en auditing zijn ingeschakeld. Daarnaast moeten organisaties zich bewust zijn van AI-specifieke aanvallen zoals prompt injection, model poisoning, of adversarial attacks, en moeten maatregelen nemen om deze te mitigeren. Voor Azure OpenAI Service betekent dit bijvoorbeeld het gebruik van content filtering, rate limiting, en input validation.

Het kwaliteitsmanagementsysteem moet worden geïntegreerd in het bestaande kwaliteitsmanagement van de organisatie. Dit betekent dat procedures moeten worden opgesteld die beschrijven hoe AI-systemen worden geselecteerd, geëvalueerd, geïmplementeerd, gemonitord en bijgewerkt. Deze procedures moeten worden gedocumenteerd, moeten verantwoordelijkheden duidelijk maken, en moeten regelmatig worden gereviewd en bijgewerkt. Organisaties moeten bovendien training verzorgen aan alle medewerkers die betrokken zijn bij AI-implementatie, zodat zij begrijpen welke vereisten gelden en hoe deze moeten worden nageleefd.

Conformity Assessment en Registratie

Voor high-risk AI-systemen vereist de EU AI Act dat organisaties een conformity assessment uitvoeren voordat het systeem in gebruik wordt genomen. Deze assessment moet aantonen dat het systeem voldoet aan alle vereisten en moet worden gedocumenteerd in een EU-verklaring van overeenstemming. Nederlandse overheidsorganisaties kunnen kiezen tussen een interne conformity assessment, waarbij de organisatie zelf beoordeelt of zij voldoet aan de vereisten, of een externe assessment door een aangemelde conformity assessment body. Voor de meeste overheidsorganisaties zal een interne assessment voldoende zijn, mits deze wordt uitgevoerd volgens de voorgeschreven procedures en wordt gedocumenteerd.

De conformity assessment moet een systematische beoordeling omvatten van alle acht kernvereisten. Organisaties moeten voor elke vereiste bewijs verzamelen dat aantoont dat maatregelen zijn genomen om te voldoen, en moeten documenteren hoe deze maatregelen zijn geïmplementeerd. Dit kan bijvoorbeeld betekenen dat organisaties documentatie moeten verzamelen over risicobeoordelingen, testresultaten, gebruikersinformatie, procedures voor menselijk toezicht, en kwaliteitsmanagementsysteem documentatie. Alle documentatie moet actueel zijn en moet regelmatig worden bijgewerkt wanneer het systeem wordt gewijzigd.

Na de conformity assessment moeten high-risk AI-systemen worden geregistreerd in de EU-database voor high-risk AI-systemen. Deze database wordt beheerd door de Europese Commissie en maakt het mogelijk voor toezichthouders en het publiek om te zien welke AI-systemen worden gebruikt en door wie. Registratie vereist dat organisaties informatie verstrekken over het AI-systeem, inclusief een beschrijving van het systeem, de risicocategorie, de geïdentificeerde risico's en mitigatiemaatregelen, en de conformity assessment resultaten. Nederlandse overheidsorganisaties moeten ervoor zorgen dat alle benodigde informatie correct en compleet wordt ingevuld, en moeten registraties bijwerken wanneer significante wijzigingen worden doorgevoerd.

Naast de EU-database moeten Nederlandse overheidsorganisaties ook voldoen aan nationale registratieverplichtingen. Dit kan betekenen dat informatie over AI-systemen moet worden opgenomen in registers die worden beheerd door het ministerie van Binnenlandse Zaken en Koninkrijksrelaties, of in registers die worden beheerd door individuele overheidsorganisaties. Organisaties moeten ervoor zorgen dat alle registraties consistent zijn en dat informatie accuraat is, omdat onjuiste informatie kan leiden tot compliance issues en mogelijke boetes.

Post-market monitoring is een continue verplichting die inhoudt dat organisaties hun AI-systemen moeten monitoren nadat deze in gebruik zijn genomen om te detecteren of er nieuwe risico's ontstaan of of het systeem niet meer voldoet aan de vereisten. Dit vereist dat organisaties monitoringprocessen implementeren die automatisch of handmatig controleren op afwijkend gedrag, dalende prestaties, nieuwe risico's, of gebruik buiten de beoogde context. Wanneer problemen worden gedetecteerd, moeten organisaties onmiddellijk actie ondernemen om deze te mitigeren, en moeten zij indien nodig de conformity assessment herzien en registraties bijwerken.

Monitoring van Compliance Status

Gebruik PowerShell-script eu-ai-act-requirements.ps1 (functie Invoke-Monitoring) – Controleert of AI-systemen voldoen aan EU AI Act vereisten en identificeert compliance gaps.

Het monitoren van compliance met EU AI Act vereisten is een continue activiteit die moet worden geïntegreerd in de dagelijkse operaties van de organisatie. Organisaties moeten een framework opzetten dat regelmatig controleert of alle vereisten worden nageleefd, of nieuwe risico's zijn ontstaan, of systemen nog binnen hun beoogde gebruik vallen, en of alle documentatie en registraties actueel zijn. Dit framework moet zowel automatische controles omvatten, bijvoorbeeld door middel van scripts die configuraties controleren, als handmatige reviews door compliance officers en technische teams.

Automatische monitoring kan worden geïmplementeerd door scripts te ontwikkelen die controleren op specifieke configuraties of settings die vereist zijn voor compliance. Voor Microsoft AI-services betekent dit bijvoorbeeld dat scripts kunnen controleren of content filtering is ingeschakeld, of data residency correct is geconfigureerd, of logging en auditing zijn ingeschakeld, of access controls correct zijn ingesteld, en of monitoring en alerting zijn geconfigureerd. Deze scripts kunnen regelmatig worden uitgevoerd, bijvoorbeeld wekelijks of maandelijks, en kunnen rapporteren over compliance status.

Handmatige monitoring omvat regelmatige reviews van AI-systemen door compliance officers en technische teams. Deze reviews moeten beoordelen of risicobeoordelingen nog actueel zijn, of nieuwe risico's zijn geïdentificeerd, of gebruikersinformatie nog correct is, of procedures voor menselijk toezicht nog worden nageleefd, en of kwaliteitsmanagementsysteem procedures nog worden gevolgd. Reviews moeten worden gedocumenteerd en moeten leiden tot actie wanneer non-compliance wordt gedetecteerd. Organisaties moeten een schema opstellen voor deze reviews, bijvoorbeeld kwartaalreviews voor alle AI-systemen en jaarlijkse deep-dive reviews.

Incident monitoring is een kritiek onderdeel van compliance monitoring. Wanneer incidenten voorkomen waarbij AI-systemen niet correct functioneren, bijvoorbeeld wanneer discriminatie wordt gedetecteerd, wanneer privacy wordt geschonden, of wanneer beveiligingslekken worden gevonden, moeten organisaties onmiddellijk beoordelen of dit impact heeft op compliance met EU AI Act vereisten. Incidenten moeten worden onderzocht om te begrijpen waarom zij zijn opgetreden, welke risico's zijn gerealiseerd, en welke maatregelen nodig zijn om herhaling te voorkomen. Alle incidenten moeten worden gedocumenteerd en moeten leiden tot updates van risicobeoordelingen en mitigatiemaatregelen indien nodig.

Performance monitoring is essentieel om te zorgen dat AI-systemen blijven voldoen aan accuraatheid en robuustheid vereisten. Organisaties moeten metrics verzamelen over systeemprestaties, bijvoorbeeld accuraatheid, false positive rates, response times, en gebruikersfeedback. Deze metrics moeten regelmatig worden geanalyseerd om te detecteren of prestaties dalen, of nieuwe patronen ontstaan die mogelijk wijzen op problemen, of of systemen buiten hun beoogde gebruik vallen. Wanneer prestaties significant afwijken van verwachtingen, moet dit leiden tot onderzoek en mogelijk tot updates van het systeem of de configuratie.

Remediatie van Non-Compliance

Gebruik PowerShell-script eu-ai-act-requirements.ps1 (functie Invoke-Remediation) – Helpt bij het implementeren van vereiste configuraties en maatregelen om compliant te worden met EU AI Act.

Wanneer monitoring non-compliance detecteert, moeten organisaties onmiddellijk actie ondernemen om de situatie te remediëren. De prioriteit van remediatie moet worden bepaald op basis van het risiconiveau: high-risk non-compliance issues moeten onmiddellijk worden aangepakt, terwijl lager risico issues kunnen worden gepland voor de volgende onderhoudscyclus. Organisaties moeten een proces opzetten dat beschrijft hoe non-compliance wordt gedetecteerd, hoe prioriteiten worden bepaald, hoe remediatie wordt gepland en uitgevoerd, en hoe compliance wordt geverifieerd na remediatie.

Voor technische non-compliance, bijvoorbeeld wanneer configuraties niet correct zijn ingesteld, moet remediatie worden uitgevoerd door technische teams onder toezicht van compliance officers. Dit kan betekenen dat scripts moeten worden aangepast, configuraties moeten worden gewijzigd, monitoring moet worden geïmplementeerd, of toegangscontroles moeten worden aangescherpt. Alle technische wijzigingen moeten worden getest voordat zij worden geïmplementeerd in productie, en moeten worden gedocumenteerd. Organisaties moeten bovendien verifiëren dat remediatie daadwerkelijk de non-compliance oplost en geen nieuwe problemen introduceert.

Voor organisatorische non-compliance, bijvoorbeeld wanneer documentatie ontbreekt of procedures niet worden gevolgd, moet remediatie worden uitgevoerd door de relevante teams in samenwerking met compliance officers. Dit kan betekenen dat documentatie moet worden opgesteld of bijgewerkt, dat procedures moeten worden herzien en gecommuniceerd, dat training moet worden verzorgd, of dat verantwoordelijkheden moeten worden herzien. Organisaties moeten ervoor zorgen dat alle betrokken medewerkers begrijpen wat er is veranderd en waarom, en moeten verificeren dat nieuwe procedures daadwerkelijk worden gevolgd.

In sommige gevallen kan non-compliance zo ernstig zijn dat het gebruik van een AI-systeem moet worden gestopt totdat remediatie is voltooid. Organisaties moeten criteria opstellen die bepalen wanneer systemen moeten worden uitgeschakeld, en moeten procedures hebben voor het veilig stilleggen van systemen zonder de dienstverlening teveel te verstoren. Wanneer systemen moeten worden uitgeschakeld, moeten organisaties bovendien communiceren met gebruikers over waarom dit gebeurt en wanneer het systeem weer beschikbaar zal zijn. Na remediatie moeten systemen worden getest en gevalideerd voordat zij weer in gebruik worden genomen.

Alle remediatie activiteiten moeten worden gedocumenteerd, inclusief wat de non-compliance was, welke maatregelen zijn genomen, wanneer remediatie is voltooid, en hoe compliance is geverifieerd. Deze documentatie is belangrijk voor audits en kan worden gebruikt om te leren van incidenten en om toekomstige non-compliance te voorkomen. Organisaties moeten bovendien updates maken aan risicobeoordelingen, conformity assessments, en registraties wanneer significante remediatie is uitgevoerd, omdat dit kan betekenen dat het systeem anders moet worden beoordeeld of geregistreerd.

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 EU AI Act Vereisten Monitoring en Remediatie .DESCRIPTION Controleert of AI-systemen voldoen aan de acht kernvereisten van de EU AI Act voor high-risk AI-systemen. Identificeert compliance gaps en helpt bij het implementeren van vereiste maatregelen. .NOTES Filename: eu-ai-act-requirements.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-15 Last Modified: 2025-01-15 Version: 1.0 Related JSON: content/ai/compliance/eu-ai-act-requirements.json Category: ai-compliance Workload: design .LINK https://github.com/m365-tenant-best-practise .EXAMPLE .\eu-ai-act-requirements.ps1 -Monitoring Controleert compliance status van AI-systemen met EU AI Act vereisten .EXAMPLE .\eu-ai-act-requirements.ps1 -Remediation Genereert remediatie rapporten en helpt bij implementatie van vereisten .EXAMPLE .\eu-ai-act-requirements.ps1 -Monitoring -WhatIf Toont wat gecontroleerd zou worden zonder daadwerkelijk te controleren #> #Requires -Version 5.1 #Requires -Modules Microsoft.Graph, Az.Accounts [CmdletBinding()] param( [Parameter(HelpMessage = "Monitor compliance status")] [switch]$Monitoring, [Parameter(HelpMessage = "Generate remediation reports and guidance")] [switch]$Remediation, [Parameter(HelpMessage = "Show what would happen without making changes")] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' # ============================================================================ # CONFIGURATION # ============================================================================ $EUAIActRequirements = @( @{ Id = "RiskManagement" Name = "Risicomanagementsysteem" Description = "Continu risicomanagement systeem voor identificatie en beheersing van risico's" }, @{ Id = "DataGovernance" Name = "Data Governance" Description = "Relevante, representatieve, accurate en complete datasets" }, @{ Id = "Transparency" Name = "Transparantie" Description = "Transparante werking en gebruikersinformatie" }, @{ Id = "HumanOversight" Name = "Menselijk Toezicht" Description = "Mogelijkheden voor menselijke interventie en toezicht" }, @{ Id = "Accuracy" Name = "Accuraatheid" Description = "Accurate en robuuste prestaties" }, @{ Id = "Robustness" Name = "Robuustheid" Description = "Weerstand tegen aanvallen en fouten" }, @{ Id = "Cybersecurity" Name = "Cybersecurity" Description = "Beveiliging tegen cyber aanvallen gedurende levenscyclus" }, @{ Id = "QualityManagement" Name = "Kwaliteitsmanagementsysteem" Description = "Kwaliteitsmanagement en technische documentatie" } ) $ConfigurationPath = "$env:USERPROFILE\Documents\EUAIActCompliance" $AISystemsConfigFile = Join-Path $ConfigurationPath "ai-systems-config.json" # ============================================================================ # FUNCTIONS # ============================================================================ function Connect-RequiredServices { <# .SYNOPSIS Verbindt met benodigde Microsoft services #> [CmdletBinding()] param() Write-Verbose "Controleren van Microsoft service verbindingen..." try { # Check Microsoft Graph $mgContext = Get-MgContext -ErrorAction SilentlyContinue if (-not $mgContext) { Write-Host "Verbinding maken met Microsoft Graph..." -ForegroundColor Yellow Connect-MgGraph -Scopes "User.Read.All", "Application.Read.All", "Directory.Read.All" -ErrorAction Stop Write-Host "Verbonden met Microsoft Graph" -ForegroundColor Green } else { Write-Verbose "Reeds verbonden met Microsoft Graph" } # Check Azure $azContext = Get-AzContext -ErrorAction SilentlyContinue if (-not $azContext) { Write-Host "Verbinding maken met Azure..." -ForegroundColor Yellow Connect-AzAccount -ErrorAction Stop Write-Host "Verbonden met Azure" -ForegroundColor Green } else { Write-Verbose "Reeds verbonden met Azure" } } catch { Write-Error "Kon niet verbinden met Microsoft services: $_" throw } } function Get-AISystems { <# .SYNOPSIS Haalt lijst van AI-systemen op die gecontroleerd moeten worden .OUTPUTS Array van AI-systeem objecten #> [CmdletBinding()] param() Write-Verbose "Ophalen van AI-systemen inventarisatie..." # Check if config file exists if (Test-Path -Path $AISystemsConfigFile) { try { $config = Get-Content -Path $AISystemsConfigFile -Raw | ConvertFrom-Json return $config.AISystems } catch { Write-Warning "Kon configuratiebestand niet lezen, gebruik standaard inventarisatie" } } # Default AI systems (should be configured by organization) return @( @{ Name = "Azure OpenAI Service" Type = "High-Risk" Provider = "Azure" ResourceGroup = "" }, @{ Name = "Microsoft Copilot" Type = "High-Risk" Provider = "Microsoft 365" ResourceGroup = "" }, @{ Name = "Azure Cognitive Services" Type = "High-Risk" Provider = "Azure" ResourceGroup = "" } ) } function Test-RiskManagement { <# .SYNOPSIS Test of risicomanagementsysteem is geïmplementeerd .OUTPUTS Compliance result object #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [PSCustomObject]$AISystem ) Write-Verbose "Controleren risicomanagement voor $($AISystem.Name)..." $riskAssessmentPath = Join-Path $ConfigurationPath "$($AISystem.Name.Replace(' ',''))-risk-assessment.json" $hasRiskAssessment = Test-Path -Path $riskAssessmentPath if ($hasRiskAssessment) { try { $assessment = Get-Content -Path $riskAssessmentPath -Raw | ConvertFrom-Json $isCurrent = $assessment.LastUpdated -gt (Get-Date).AddDays(-365) if ($isCurrent) { return @{ Requirement = "RiskManagement" IsCompliant = $true Details = "Risicobeoordeling aanwezig en actueel" } } else { return @{ Requirement = "RiskManagement" IsCompliant = $false Details = "Risicobeoordeling verouderd (laatste update: $($assessment.LastUpdated))" } } } catch { return @{ Requirement = "RiskManagement" IsCompliant = $false Details = "Risicobeoordeling bestand corrupt of ongeldig" } } } else { return @{ Requirement = "RiskManagement" IsCompliant = $false Details = "Geen risicobeoordeling gevonden" } } } function Test-DataGovernance { <# .SYNOPSIS Test of data governance maatregelen zijn geïmplementeerd .OUTPUTS Compliance result object #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [PSCustomObject]$AISystem ) Write-Verbose "Controleren data governance voor $($AISystem.Name)..." $dataGovernancePath = Join-Path $ConfigurationPath "$($AISystem.Name.Replace(' ',''))-data-governance.json" $hasDataGovernance = Test-Path -Path $dataGovernancePath if ($hasDataGovernance) { try { $governance = Get-Content -Path $dataGovernancePath -Raw | ConvertFrom-Json $hasDatasets = $governance.Datasets -and $governance.Datasets.Count -gt 0 $hasQuality = $governance.DataQuality -ne $null $hasBiasAnalysis = $governance.BiasAnalysis -ne $null if ($hasDatasets -and $hasQuality -and $hasBiasAnalysis) { return @{ Requirement = "DataGovernance" IsCompliant = $true Details = "Data governance documentatie compleet" } } else { return @{ Requirement = "DataGovernance" IsCompliant = $false Details = "Data governance documentatie incompleet (ontbrekende: datasets, kwaliteit, of bias analyse)" } } } catch { return @{ Requirement = "DataGovernance" IsCompliant = $false Details = "Data governance bestand corrupt of ongeldig" } } } else { return @{ Requirement = "DataGovernance" IsCompliant = $false Details = "Geen data governance documentatie gevonden" } } } function Test-Transparency { <# .SYNOPSIS Test of transparantie vereisten zijn geïmplementeerd .OUTPUTS Compliance result object #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [PSCustomObject]$AISystem ) Write-Verbose "Controleren transparantie voor $($AISystem.Name)..." $transparencyPath = Join-Path $ConfigurationPath "$($AISystem.Name.Replace(' ',''))-transparency.json" $hasTransparency = Test-Path -Path $transparencyPath if ($hasTransparency) { try { $transparency = Get-Content -Path $transparencyPath -Raw | ConvertFrom-Json $hasUserInfo = $transparency.UserInformation -ne $null $hasExplainability = $transparency.Explainability -ne $null $hasDocumentation = $transparency.DocumentationUrl -ne $null -or $transparency.DocumentationPath -ne $null if ($hasUserInfo -and $hasExplainability -and $hasDocumentation) { return @{ Requirement = "Transparency" IsCompliant = $true Details = "Transparantie documentatie aanwezig" } } else { return @{ Requirement = "Transparency" IsCompliant = $false Details = "Transparantie documentatie incompleet" } } } catch { return @{ Requirement = "Transparency" IsCompliant = $false Details = "Transparantie bestand corrupt of ongeldig" } } } else { return @{ Requirement = "Transparency" IsCompliant = $false Details = "Geen transparantie documentatie gevonden" } } } function Test-HumanOversight { <# .SYNOPSIS Test of menselijk toezicht procedures zijn geïmplementeerd .OUTPUTS Compliance result object #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [PSCustomObject]$AISystem ) Write-Verbose "Controleren menselijk toezicht voor $($AISystem.Name)..." $oversightPath = Join-Path $ConfigurationPath "$($AISystem.Name.Replace(' ',''))-human-oversight.json" $hasOversight = Test-Path -Path $oversightPath if ($hasOversight) { try { $oversight = Get-Content -Path $oversightPath -Raw | ConvertFrom-Json $hasProcedures = $oversight.Procedures -ne $null $hasEscalation = $oversight.EscalationPath -ne $null $hasRoles = $oversight.ReviewerRoles -ne $null -and $oversight.ReviewerRoles.Count -gt 0 if ($hasProcedures -and $hasEscalation -and $hasRoles) { return @{ Requirement = "HumanOversight" IsCompliant = $true Details = "Menselijk toezicht procedures aanwezig" } } else { return @{ Requirement = "HumanOversight" IsCompliant = $false Details = "Menselijk toezicht procedures incompleet" } } } catch { return @{ Requirement = "HumanOversight" IsCompliant = $false Details = "Menselijk toezicht bestand corrupt of ongeldig" } } } else { return @{ Requirement = "HumanOversight" IsCompliant = $false Details = "Geen menselijk toezicht procedures gevonden" } } } function Test-AccuracyRobustness { <# .SYNOPSIS Test of accuraatheid en robuustheid maatregelen zijn geïmplementeerd .OUTPUTS Compliance result object #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [PSCustomObject]$AISystem ) Write-Verbose "Controleren accuraatheid en robuustheid voor $($AISystem.Name)..." $performancePath = Join-Path $ConfigurationPath "$($AISystem.Name.Replace(' ',''))-performance.json" $hasPerformance = Test-Path -Path $performancePath if ($hasPerformance) { try { $performance = Get-Content -Path $performancePath -Raw | ConvertFrom-Json $hasMetrics = $performance.Metrics -ne $null $hasTesting = $performance.TestResults -ne $null $hasMonitoring = $performance.MonitoringEnabled -eq $true if ($hasMetrics -and $hasTesting -and $hasMonitoring) { return @{ Requirement = "AccuracyRobustness" IsCompliant = $true Details = "Accuraatheid en robuustheid maatregelen aanwezig" } } else { return @{ Requirement = "AccuracyRobustness" IsCompliant = $false Details = "Accuraatheid en robuustheid maatregelen incompleet" } } } catch { return @{ Requirement = "AccuracyRobustness" IsCompliant = $false Details = "Performance bestand corrupt of ongeldig" } } } else { return @{ Requirement = "AccuracyRobustness" IsCompliant = $false Details = "Geen performance documentatie gevonden" } } } function Test-Cybersecurity { <# .SYNOPSIS Test of cybersecurity maatregelen zijn geïmplementeerd .OUTPUTS Compliance result object #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [PSCustomObject]$AISystem ) Write-Verbose "Controleren cybersecurity voor $($AISystem.Name)..." $cyberPath = Join-Path $ConfigurationPath "$($AISystem.Name.Replace(' ',''))-cybersecurity.json" $hasCyber = Test-Path -Path $cyberPath if ($hasCyber) { try { $cyber = Get-Content -Path $cyberPath -Raw | ConvertFrom-Json $hasEncryption = $cyber.EncryptionEnabled -eq $true $hasAuth = $cyber.AuthenticationConfigured -eq $true $hasLogging = $cyber.AuditLoggingEnabled -eq $true $hasContentFilter = $cyber.ContentFilteringEnabled -eq $true if ($hasEncryption -and $hasAuth -and $hasLogging -and $hasContentFilter) { return @{ Requirement = "Cybersecurity" IsCompliant = $true Details = "Cybersecurity maatregelen geconfigureerd" } } else { return @{ Requirement = "Cybersecurity" IsCompliant = $false Details = "Cybersecurity maatregelen incompleet" } } } catch { return @{ Requirement = "Cybersecurity" IsCompliant = $false Details = "Cybersecurity bestand corrupt of ongeldig" } } } else { return @{ Requirement = "Cybersecurity" IsCompliant = $false Details = "Geen cybersecurity configuratie gevonden" } } } function Test-QualityManagement { <# .SYNOPSIS Test of kwaliteitsmanagementsysteem is geïmplementeerd .OUTPUTS Compliance result object #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [PSCustomObject]$AISystem ) Write-Verbose "Controleren kwaliteitsmanagement voor $($AISystem.Name)..." $qmPath = Join-Path $ConfigurationPath "$($AISystem.Name.Replace(' ',''))-quality-management.json" $hasQM = Test-Path -Path $qmPath if ($hasQM) { try { $qm = Get-Content -Path $qmPath -Raw | ConvertFrom-Json $hasProcedures = $qm.Procedures -ne $null $hasDocumentation = $qm.TechnicalDocumentation -ne $null $hasConformity = $qm.ConformityAssessment -ne $null if ($hasProcedures -and $hasDocumentation -and $hasConformity) { return @{ Requirement = "QualityManagement" IsCompliant = $true Details = "Kwaliteitsmanagementsysteem aanwezig" } } else { return @{ Requirement = "QualityManagement" IsCompliant = $false Details = "Kwaliteitsmanagementsysteem incompleet" } } } catch { return @{ Requirement = "QualityManagement" IsCompliant = $false Details = "Kwaliteitsmanagement bestand corrupt of ongeldig" } } } else { return @{ Requirement = "QualityManagement" IsCompliant = $false Details = "Geen kwaliteitsmanagementsysteem gevonden" } } } function Invoke-Monitoring { <# .SYNOPSIS Monitort compliance status van AI-systemen met EU AI Act vereisten .OUTPUTS Monitoring result object #> [CmdletBinding()] param() Write-Host "`nMonitoring: EU AI Act Vereisten Compliance" -ForegroundColor Yellow Write-Host "===========================================" -ForegroundColor Yellow # Ensure configuration directory exists if (-not (Test-Path -Path $ConfigurationPath)) { New-Item -Path $ConfigurationPath -ItemType Directory -Force | Out-Null Write-Host "`nConfiguratie map aangemaakt: $ConfigurationPath" -ForegroundColor Cyan Write-Host "Let op: Configureer eerst uw AI-systemen voordat monitoring kan worden uitgevoerd." -ForegroundColor Yellow } # Get AI systems $aiSystems = Get-AISystems if ($aiSystems.Count -eq 0) { Write-Host "`nGeen AI-systemen gevonden om te controleren." -ForegroundColor Yellow Write-Host "Configureer AI-systemen in: $AISystemsConfigFile" -ForegroundColor Cyan return @{ IsCompliant = $false TotalSystems = 0 CompliantSystems = 0 Results = @() } } Write-Host "`nControleren van $($aiSystems.Count) AI-systeem(en)..." -ForegroundColor Cyan $allResults = @() $totalCompliant = 0 foreach ($system in $aiSystems) { Write-Host "`n--- $($system.Name) ---" -ForegroundColor Cyan $systemResults = @() # Test all requirements $systemResults += Test-RiskManagement -AISystem $system $systemResults += Test-DataGovernance -AISystem $system $systemResults += Test-Transparency -AISystem $system $systemResults += Test-HumanOversight -AISystem $system $systemResults += Test-AccuracyRobustness -AISystem $system $systemResults += Test-Cybersecurity -AISystem $system $systemResults += Test-QualityManagement -AISystem $system # Display results $compliantCount = ($systemResults | Where-Object { $_.IsCompliant -eq $true }).Count $totalRequirements = $systemResults.Count foreach ($result in $systemResults) { $status = if ($result.IsCompliant) { "✅" } else { "❌" } $color = if ($result.IsCompliant) { "Green" } else { "Red" } Write-Host " $status $($result.Requirement): $($result.Details)" -ForegroundColor $color } $systemCompliant = ($compliantCount -eq $totalRequirements) if ($systemCompliant) { $totalCompliant++ } $allResults += @{ System = $system.Name IsCompliant = $systemCompliant CompliantRequirements = $compliantCount TotalRequirements = $totalRequirements Results = $systemResults } } # Summary Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "SAMENVATTING:" -ForegroundColor Cyan Write-Host " Totaal AI-systemen: $($aiSystems.Count)" -ForegroundColor White Write-Host " Compliante systemen: $totalCompliant" -ForegroundColor $(if ($totalCompliant -eq $aiSystems.Count) { "Green" } else { "Yellow" }) Write-Host " Non-compliante systemen: $($aiSystems.Count - $totalCompliant)" -ForegroundColor $(if (($aiSystems.Count - $totalCompliant) -eq 0) { "Green" } else { "Red" }) $overallCompliant = ($totalCompliant -eq $aiSystems.Count) if ($overallCompliant) { Write-Host "`n✅ ALLE SYSTEMEN COMPLIANT" -ForegroundColor Green exit 0 } else { Write-Host "`n❌ NON-COMPLIANCE GEDETECTEERD" -ForegroundColor Red Write-Host " Gebruik -Remediation om remediatie richtlijnen te genereren" -ForegroundColor Yellow exit 1 } return @{ IsCompliant = $overallCompliant TotalSystems = $aiSystems.Count CompliantSystems = $totalCompliant Results = $allResults } } function Invoke-Remediation { <# .SYNOPSIS Genereert remediatie rapporten en richtlijnen voor non-compliance #> [CmdletBinding()] param() Write-Host "`nRemediatie: EU AI Act Vereisten Implementatie" -ForegroundColor Yellow Write-Host "===============================================" -ForegroundColor Yellow if ($WhatIf) { Write-Host "`n[WhatIf] Zou remediatie rapporten genereren..." -ForegroundColor Yellow return } # First run monitoring to get current status Write-Host "`nAnalyseren van huidige compliance status..." -ForegroundColor Cyan $monitoringResult = Invoke-Monitoring if ($monitoringResult.IsCompliant) { Write-Host "`nAlle systemen zijn compliant. Geen remediatie nodig." -ForegroundColor Green return } Write-Host "`nGenereren van remediatie richtlijnen..." -ForegroundColor Cyan $remediationReport = @" # EU AI Act Vereisten Remediatie Rapport Gegenereerd op: $(Get-Date -Format "yyyy-MM-dd HH:mm:ss") ## Overzicht Totaal AI-systemen: $($monitoringResult.TotalSystems) Compliante systemen: $($monitoringResult.CompliantSystems) Non-compliante systemen: $($monitoringResult.TotalSystems - $monitoringResult.CompliantSystems) "@ foreach ($systemResult in $monitoringResult.Results) { if (-not $systemResult.IsCompliant) { $remediationReport += "`n## $($systemResult.System)`n`n" foreach ($requirementResult in $systemResult.Results) { if (-not $requirementResult.IsCompliant) { $req = $EUAIActRequirements | Where-Object { $_.Id -eq $requirementResult.Requirement } $remediationReport += @" ### $($req.Name) **Status:** Non-compliant **Probleem:** $($requirementResult.Details) **Remediatie stappen:** 1. Raadpleeg het artikel 'EU AI Act Vereisten voor Nederlandse Overheidsorganisaties' voor gedetailleerde implementatie richtlijnen 2. Implementeer vereiste maatregelen voor $($req.Name) 3. Documenteer alle genomen maatregelen 4. Voer opnieuw monitoring uit om compliance te verifiëren "@ } } } } $reportPath = Join-Path $ConfigurationPath "remediation-report-$(Get-Date -Format 'yyyyMMdd-HHmmss').md" $remediationReport | Out-File -FilePath $reportPath -Encoding UTF8 Write-Host "`n✅ Remediatie rapport gegenereerd: $reportPath" -ForegroundColor Green Write-Host "`nOpen het rapport voor gedetailleerde remediatie richtlijnen." -ForegroundColor Cyan } # ============================================================================ # MAIN EXECUTION # ============================================================================ try { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "EU AI Act Vereisten Monitoring" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan # Connect to services if needed (commented out for initial version) # Connect-RequiredServices if ($Remediation) { Invoke-Remediation } elseif ($Monitoring) { Invoke-Monitoring } else { # Default: Run monitoring Write-Host "Geen parameter opgegeven. Voer monitoring uit...`n" -ForegroundColor Yellow Invoke-Monitoring } } catch { Write-Error "Script execution failed: $_" exit 2 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan } # ============================================================================ # EXIT CODES # ============================================================================ # 0 = Success / All systems compliant # 1 = Warning / Non-compliant systems found # 2 = Error / Execution failed

Risico zonder implementatie

Risico zonder implementatie
Critical: Critical - Niet-naleving van EU AI Act kan leiden tot boetes tot 6% van wereldwijde omzet, verbod op gebruik van AI-systemen, juridische aansprakelijkheid, en ernstige reputatieschade. Voor Nederlandse overheidsorganisaties betekent non-compliance bovendien schending van transparantieverplichtingen en mogelijk verlies van vertrouwen van burgers.

Management Samenvatting

EU AI Act legt acht kernvereisten op aan high-risk AI-systemen: risicomanagement, data governance, transparantie, menselijk toezicht, accuraatheid, robuustheid, cybersecurity, en kwaliteitsmanagement. Nederlandse overheidsorganisaties moeten conformity assessments uitvoeren en systemen registreren. Implementatie: 200 uur. Critical compliance vereiste vanaf 2025.