Responsible AI Controls Voor Azure OpenAI In Nederlandse Overheidsorganisaties

💼 Management Samenvatting

Azure OpenAI Service biedt Nederlandse overheidsorganisaties toegang tot geavanceerde taalmodellen voor tekstgeneratie, analyse en conversatie. Om verantwoord gebruik te waarborgen en te voldoen aan AVG, EU AI Act en BIO-normen, is het essentieel om specifieke beheersmaatregelen en controls in te richten die misbruik voorkomen, bias detecteren en transparantie bieden over de inzet van deze technologie.

Aanbeveling
RICHT EEN COMPREHENSIEF RAAMWERK VOOR RESPONSIBLE AI CONTROLS IN VOOR AZURE OPENAI
Risico zonder
High
Risk Score
9/10
Implementatie
180u (tech: 80u)
Van toepassing op:
Azure OpenAI Service
Azure
Cognitive Services
Publieke Sector

Zonder adequate controls rond Azure OpenAI ontstaan er reële risico's op het genereren van onjuiste, discriminerende of schadelijke content, onbedoelde blootstelling van gevoelige gegevens via prompts, onvoldoende traceerbaarheid van AI-beslissingen en niet-naleving van wettelijke verplichtingen. Voor Nederlandse overheidsorganisaties kan dit leiden tot reputatieschade, juridische aansprakelijkheid, verlies van vertrouwen bij burgers en kritische bevindingen bij audits. Door expliciete controls in te richten voor content filtering, prompt engineering, logging, toegangsbeheer en monitoring, wordt Azure OpenAI een veilig en verantwoord hulpmiddel in plaats van een oncontroleerbare risicobron.

PowerShell Modules Vereist
Primary API: Azure OpenAI API, Azure Management API
Connection: Connect-AzAccount
Required Modules: Az.Accounts, Az.Resources, Az.CognitiveServices

Implementatie

Dit artikel beschrijft hoe u een praktisch raamwerk voor Responsible AI Controls implementeert specifiek voor Azure OpenAI Service. We behandelen de configuratie van content filters en safety systems, het opzetten van prompt governance en reviewprocessen, de inrichting van logging en audit trails, toegangsbeheer en rate limiting, monitoring van gebruikspatronen en bias, en de koppeling met bestaande compliance- en governancekaders. Het doel is een concrete, toetsbare set maatregelen die bestuurders, CISO's en beheerteams in staat stelt om Azure OpenAI aantoonbaar verantwoord in te zetten binnen de Nederlandse publieke sector.

Content filtering en safety systems in Azure OpenAI

Azure OpenAI Service beschikt over ingebouwde content filtering en safety systems die automatisch schadelijke, discriminerende of ongepaste content detecteren en blokkeren. Deze filters werken op meerdere niveaus: bij de input (prompts), tijdens de verwerking en bij de output (generated content). Voor Nederlandse overheidsorganisaties is het cruciaal om deze filters niet alleen te activeren, maar ook te configureren op een niveau dat past bij de specifieke use-cases en risicoprofielen van de organisatie. Standaard zijn de filters ingesteld op een balans tussen veiligheid en bruikbaarheid, maar voor gevoelige toepassingen, zoals besluitvorming over burgers of verwerking van persoonsgegevens, kan het nodig zijn om strengere thresholds te hanteren.

De content filtering in Azure OpenAI is gebaseerd op categorieën zoals hate, sexual content, violence en self-harm. Elke categorie kan worden geconfigureerd met een severity level (safe, low, medium, high) die bepaalt wanneer content wordt geblokkeerd. Voor overheidsorganisaties die werken met gevoelige onderwerpen, zoals sociale zekerheid, migratie of justitie, is het belangrijk om te begrijpen dat te strenge filters kunnen leiden tot false positives waarbij legitieme vragen of analyses worden geblokkeerd. Daarom moet de configuratie van content filters worden gekoppeld aan een risicoanalyse per use-case: welke typen content zijn acceptabel, welke absoluut niet, en hoe wordt omgegaan met edge cases? Deze afwegingen moeten worden vastgelegd in beleid en periodiek worden herzien op basis van praktijkervaring.

Naast de standaard content filters biedt Azure OpenAI de mogelijkheid om custom content filters te definiëren via Azure AI Content Safety. Dit maakt het mogelijk om organisatiespecifieke termen, concepten of patronen te blokkeren die niet door de standaard filters worden afgevangen, maar wel risicovol zijn in de context van de organisatie. Denk bijvoorbeeld aan specifieke beleidstermen, interne codenamen of gevoelige classificaties die niet in publieke AI-responses mogen voorkomen. Door deze custom filters te combineren met de standaard safety systems ontstaat een gelaagde aanpak die zowel algemene als organisatiespecifieke risico's adresseert. Het beheer van deze filters moet worden geborgd in een formele change management-procedure, waarbij wijzigingen worden gereviewd door security, privacy en juridische afdelingen voordat ze in productie worden genomen.

Monitoring van content filter effectiviteit is een essentieel onderdeel van Responsible AI Controls. Door gebruik te maken van Azure Monitor en Log Analytics kunnen organisaties analyseren hoeveel prompts en responses worden geblokkeerd, welke categorieën het vaakst triggers zijn en of er patronen zichtbaar zijn die wijzen op misbruik of onbedoelde blokkades. Deze data kan worden gebruikt om filters te finetunen, gebruikers te trainen in effectief prompt engineering en incidenten te detecteren waarbij iemand probeert filters te omzeilen. Het bijbehorende PowerShell-script in dit artikel helpt beheerders om periodiek de status van content filters te controleren en te rapporteren over filtereffectiviteit en compliance.

Prompt governance en reviewprocessen

Prompts zijn de instructies die gebruikers aan Azure OpenAI geven om specifieke taken uit te voeren. De kwaliteit, veiligheid en compliance van prompts bepalen in grote mate de uitkomsten van AI-interacties. Zonder governance rond prompts ontstaat het risico dat gebruikers onbedoeld gevoelige gegevens in prompts opnemen, prompts gebruiken die bias kunnen versterken, of instructies geven die leiden tot onwenselijke of onrechtmatige output. Voor Nederlandse overheidsorganisaties is het daarom essentieel om een gestructureerd proces in te richten voor het ontwikkelen, reviewen, goedkeuren en monitoren van prompts, vooral wanneer deze worden gebruikt in productiesystemen die beslissingen nemen over burgers of gevoelige processen.

Prompt governance begint bij het vastleggen van standaarden en best practices. Organisaties moeten documenteren welke typen prompts zijn toegestaan, welke data wel en niet in prompts mogen worden opgenomen, hoe prompts moeten worden gestructureerd voor herhaalbaarheid en consistentie, en welke safeguards moeten worden ingebouwd om bias en onjuistheden te voorkomen. Deze standaarden kunnen worden verankerd in sjablonen, code libraries en development guidelines die teams helpen om vanaf het begin prompts te schrijven die voldoen aan governance-eisen. Voor hoog-risico use-cases, zoals geautomatiseerde besluitvorming of verwerking van persoonsgegevens, kan het nodig zijn om prompts expliciet te laten reviewen door een multidisciplinair team bestaande uit technici, juristen, privacy officers en domeinexperts voordat ze in productie worden genomen.

Een belangrijk aspect van prompt governance is het voorkomen van prompt injection attacks, waarbij kwaadwillenden of onbedoeld gebruikers proberen om de oorspronkelijke instructies van een systeem te overschrijven door manipulatieve input. Dit kan leiden tot datalekken, onbevoegde toegang tot systemen of het genereren van ongewenste content. Door gebruik te maken van technische maatregelen zoals input validation, output filtering, context isolation en rate limiting, kunnen organisaties het risico op prompt injection verminderen. Daarnaast moeten gebruikers worden getraind om te herkennen wanneer prompts mogelijk worden gemanipuleerd en hoe zij hierop moeten reageren. Het bijbehorende PowerShell-script kan helpen om te monitoren of prompts voldoen aan vooraf gedefinieerde patronen en of er ongebruikelijke activiteit is die wijst op mogelijke injectiepogingen.

Tot slot vraagt prompt governance om een lifecycle-benadering: prompts moeten periodiek worden herzien op basis van veranderende use-cases, nieuwe inzichten over bias of veiligheid, en feedback uit de praktijk. Door prompts te versiebeheren en te koppelen aan change management-processen, kunnen organisaties aantonen dat zij actief sturen op de kwaliteit en veiligheid van AI-interacties. Dit sluit aan bij de documentatieverplichtingen onder de EU AI Act, waarbij organisaties moeten kunnen aantonen welke prompts en configuraties zijn gebruikt voor specifieke AI-beslissingen en hoe deze zijn gevalideerd en goedgekeurd.

Logging, audit trails en traceerbaarheid

Gebruik PowerShell-script responsible-ai-controls.ps1 (functie Invoke-Monitoring) – Controleert of Azure OpenAI-resources zijn geconfigureerd met adequate logging en content filtering, en rapporteert over compliance met Responsible AI Controls..

Voor verantwoord gebruik van Azure OpenAI is uitgebreide logging essentieel. Organisaties moeten kunnen traceren wie welke prompts heeft ingediend, welke responses zijn gegenereerd, welke content filters zijn geactiveerd, en welke beslissingen of acties zijn genomen op basis van AI-output. Deze informatie is nodig voor compliance met AVG (waarbij burgers recht hebben op inzicht in geautomatiseerde besluitvorming), EU AI Act (waarbij technische documentatie en audit trails verplicht zijn), en BIO (waarbij logging en monitoring van kritieke systemen worden geëist). Zonder adequate logging ontstaat een black box waarin niet kan worden achterhaald hoe AI-beslissingen tot stand zijn gekomen, wat het onmogelijk maakt om fouten te corrigeren, bias te detecteren of verantwoording af te leggen aan burgers en toezichthouders.

Azure OpenAI Service biedt verschillende logging-opties die kunnen worden geconfigureerd via Azure Monitor en Log Analytics. Standaard worden API-calls, responses en metadata gelogd, maar organisaties moeten expliciet kiezen welke aanvullende informatie wordt vastgelegd. Voor compliance-doeleinden is het vaak nodig om prompts en responses volledig te loggen, inclusief metadata zoals gebruikersidentiteit, timestamp, modelversie, content filter results en token usage. Tegelijkertijd moet worden gewaakt voor overlogging van persoonsgegevens: wanneer prompts persoonsgegevens bevatten, moeten deze mogelijk worden geanonimiseerd of pseudonimiseerd voordat ze worden opgeslagen, tenzij er een expliciete grondslag is voor volledige logging. Deze afweging moet worden gemaakt in samenspraak met de privacy officer en Functionaris Gegevensbescherming, waarbij wordt gekeken naar de proportionaliteit en noodzaak van logging versus privacybescherming.

Audit trails moeten bovendien worden beschermd tegen wijziging of verwijdering. Door gebruik te maken van immutable storage, versleuteling en access controls op logdata, kunnen organisaties garanderen dat audit informatie betrouwbaar is en kan worden gebruikt in juridische procedures of audits. Logs moeten worden bewaard voor een periode die past bij de wettelijke bewaarverplichtingen (bijvoorbeeld 7 jaar voor bepaalde overheidsdocumenten) en moeten toegankelijk zijn voor geautoriseerde auditors, privacy officers en incident response teams. Het bijbehorende PowerShell-script kan helpen om periodiek te controleren of logging correct is geconfigureerd, of logretentiebeleid wordt nageleefd en of er geen ongebruikelijke toegangspogingen zijn tot audit data.

Naast technische logging vraagt Responsible AI om documentatie van besluitvorming rond AI-gebruik. Dit omvat niet alleen de technische configuratie, maar ook de business rationale voor het gebruik van Azure OpenAI, de risicoanalyse die is uitgevoerd, de goedkeuringen die zijn verkregen en de mitigerende maatregelen die zijn genomen. Door deze documentatie te koppelen aan technische logs via referenties, tags of metadata, ontstaat een compleet beeld dat zowel technisch als bestuurlijk bruikbaar is. Dit maakt het mogelijk om bij incidenten, klachten of audits snel te kunnen aantonen welke waarborgen zijn ingericht en hoe AI-beslissingen tot stand zijn gekomen.

Toegangsbeheer, rate limiting en gebruikersmonitoring

Toegangsbeheer voor Azure OpenAI moet worden ingericht volgens het principe van least privilege: gebruikers krijgen alleen toegang tot de modellen, functies en data die zij daadwerkelijk nodig hebben voor hun werk. Dit voorkomt onbevoegd gebruik, datalekken en kostenoverschrijdingen. In Azure kan toegangsbeheer worden geregeld via Azure RBAC (Role-Based Access Control), waarbij rollen worden gedefinieerd zoals 'OpenAI Reader', 'OpenAI Contributor' of 'OpenAI Administrator', elk met specifieke rechten. Voor Nederlandse overheidsorganisaties is het belangrijk om deze rollen te koppelen aan bestaande functie- en mandaatstructuren, zodat toegang tot AI-diensten consistent is met toegang tot andere kritieke systemen.

Rate limiting is een technische control die voorkomt dat individuele gebruikers of applicaties overmatig gebruik maken van Azure OpenAI, wat kan leiden tot hoge kosten, performance-problemen of misbruik. Door per gebruiker, applicatie of subscription limieten in te stellen op het aantal API-calls per minuut, uur of dag, kunnen organisaties gebruik beheersen en anomalieën detecteren. Rate limits moeten worden afgestemd op de verwachte use-cases: voor experimentele of development-omgevingen kunnen lagere limieten worden ingesteld, terwijl productie-omgevingen met goedgekeurde use-cases hogere limieten kunnen krijgen. Monitoring van rate limit violations kan helpen om misbruik of onbedoelde overconsumptie snel te signaleren.

Gebruikersmonitoring gaat verder dan alleen toegangscontrole en rate limiting. Organisaties moeten periodiek analyseren wie Azure OpenAI gebruikt, voor welke doeleinden, met welke frequentie en met welke resultaten. Dit kan worden gedaan door gebruik te maken van Azure Monitor, Application Insights of custom dashboards die API-usage data aggregreren. Door patronen te analyseren kunnen organisaties detecteren wanneer gebruik afwijkt van verwachtingen, bijvoorbeeld wanneer een gebruiker plotseling veel meer API-calls doet dan normaal, wanneer prompts worden gebruikt die niet passen bij de rol van de gebruiker, of wanneer content filters vaker worden getriggerd dan gebruikelijk. Deze signalen kunnen wijzen op misbruik, security-incidenten of behoefte aan aanvullende training.

Tot slot moet toegangsbeheer worden gekoppeld aan identity governance. Wanneer medewerkers van rol veranderen of de organisatie verlaten, moeten hun toegangsrechten tot Azure OpenAI automatisch worden aangepast of ingetrokken. Dit kan worden geautomatiseerd via integratie met HR-systemen, Azure AD lifecycle management of identity governance tools. Door deze koppeling te maken, voorkomt u dat voormalige medewerkers of personen met verouderde rollen nog steeds toegang hebben tot gevoelige AI-diensten, wat een belangrijk security- en compliance-risico vormt.

Bias monitoring, fairness assessment en continue verbetering

Gebruik PowerShell-script responsible-ai-controls.ps1 (functie Invoke-Remediation) – Analyseert gebruikspatronen en content filter activiteit om potentiële bias of fairness-problemen te signaleren en geeft aanbevelingen voor verbetering..

AI-systemen, inclusief Azure OpenAI, kunnen bias vertonen in hun output, bijvoorbeeld door onderrepresentatie van bepaalde groepen in trainingsdata, culturele vooroordelen in taalmodellen, of onbedoelde discriminatie in prompt design. Voor Nederlandse overheidsorganisaties is het essentieel om bias te monitoren en te mitigeren, omdat discriminerende AI-beslissingen kunnen leiden tot onrechtmatige behandeling van burgers, juridische aansprakelijkheid en verlies van maatschappelijk vertrouwen. Responsible AI Controls moeten daarom expliciet aandacht besteden aan het detecteren, meten en verminderen van bias in Azure OpenAI-toepassingen.

Bias monitoring begint bij het definiëren van fairness-criteria die relevant zijn voor de specifieke use-cases van de organisatie. Dit kan bijvoorbeeld gaan om gelijke behandeling ongeacht geslacht, etniciteit, leeftijd of andere beschermde kenmerken, of om proportionaliteit in de manier waarop verschillende groepen worden getroffen door AI-beslissingen. Deze criteria moeten worden vertaald naar meetbare metrics, zoals het percentage positieve outcomes per groep, de gemiddelde response quality voor verschillende demografische segmenten, of de frequentie waarmee bepaalde termen of concepten worden geassocieerd met specifieke groepen. Door deze metrics periodiek te meten en te vergelijken met baselines, kunnen organisaties trends detecteren die wijzen op potentiële bias.

Azure OpenAI biedt verschillende tools en features die kunnen helpen bij bias detection, zoals content filters die discriminerende taal detecteren, maar organisaties moeten ook zelf actief testen en valideren. Dit kan door gebruik te maken van test suites met diverse prompts die specifiek zijn ontworpen om bias te detecteren, door regelmatig output te reviewen op potentiële discriminatie, en door feedback te verzamelen van gebruikers en betrokkenen over de fairness van AI-responses. Wanneer bias wordt gedetecteerd, moeten organisaties een gestructureerd proces hebben om dit te mitigeren, bijvoorbeeld door prompts aan te passen, aanvullende context toe te voegen, of in extreme gevallen bepaalde use-cases tijdelijk te beperken totdat het probleem is opgelost.

Continue verbetering van Responsible AI Controls is een cyclisch proces dat wordt gevoed door monitoring, incidenten, feedback en nieuwe inzichten. Organisaties moeten periodiek (bijvoorbeeld per kwartaal of halfjaar) een assessment uitvoeren van de effectiviteit van hun controls: worden content filters adequaat geconfigureerd, worden prompts voldoende gereviewed, is logging compleet en toegankelijk, en worden bias-problemen tijdig gedetecteerd? De uitkomsten van deze assessments moeten leiden tot concrete verbeteracties, zoals het aanscherpen van policies, het verbeteren van training, het aanpassen van technische configuraties of het opzetten van nieuwe monitoring. Door deze cyclus structureel te organiseren, groeit de volwassenheid van Responsible AI Controls mee met de groeiende ervaring en veranderende risico's rond AI-gebruik in de overheid.

Integratie met compliance- en governancekaders

Responsible AI Controls voor Azure OpenAI moeten niet op zichzelf staan, maar worden geïntegreerd in bestaande compliance- en governancekaders zoals BIO, AVG, EU AI Act en sectorspecifieke normen. Dit betekent dat controls worden gekoppeld aan bestaande processen voor risicomanagement, change management, incident response en audit, zodat AI geen uitzonderingspositie inneemt maar onderdeel wordt van de bredere informatiebeveiligings- en privacygovernance. Door deze integratie voorkomt u dat er parallelle systemen ontstaan en dat AI-initiatieven buiten de reguliere governance vallen.

Voor de BIO betekent dit dat Azure OpenAI-use-cases worden beoordeeld volgens dezelfde risicoanalyses en beheersmaatregelen als andere kritieke systemen. Controls zoals logging, toegangsbeheer en monitoring sluiten aan bij bestaande BIO-controles, en AI-specifieke risico's worden toegevoegd aan het algemene risicoregister. Voor de AVG betekent integratie dat DPIA's worden uitgevoerd voor AI-use-cases die persoonsgegevens verwerken, dat logging wordt afgestemd op privacy-eisen, en dat burgers hun rechten kunnen uitoefenen, zoals het recht op uitleg bij geautomatiseerde besluitvorming. De EU AI Act voegt daar specifieke eisen aan toe voor hoog-risico AI-systemen, zoals technische documentatie, kwaliteitsmanagement en incidentmelding, die moeten worden geïntegreerd in bestaande kwaliteits- en changemanagementprocessen.

Een praktische manier om deze integratie te realiseren is door Responsible AI Controls te documenteren in dezelfde formaten en systemen die worden gebruikt voor andere beheersmaatregelen. Bijvoorbeeld door AI-controls op te nemen in het informatiebeveiligingsbeleid, door Azure OpenAI-configuraties te koppelen aan het applicatieregister, en door AI-incidenten te registreren in hetzelfde incidentmanagementsysteem als andere security- of privacy-incidenten. Door gebruik te maken van gestandaardiseerde tags, metadata en referenties kunnen verschillende systemen met elkaar worden gekoppeld, zodat auditors en bestuurders een integraal beeld krijgen van alle beheersmaatregelen, inclusief die voor AI.

Tot slot vraagt compliance-integratie om periodieke validatie dat controls daadwerkelijk werken zoals bedoeld. Dit kan door middel van audits, penetration tests, tabletop exercises of compliance-assessments die specifiek kijken naar de effectiviteit van Responsible AI Controls. De uitkomsten van deze validaties moeten worden gebruikt om controls aan te scherpen, processen te verbeteren en training te actualiseren. Door deze validatiecyclus structureel in te bedden in bestaande audit- en complianceprocessen, blijft Responsible AI Governance niet alleen op papier bestaan, maar wordt het een levend systeem dat continu wordt verbeterd en gevalideerd.

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
<# ================================================================================ AZURE POWERSHELL SCRIPT - Nederlandse Baseline voor Veilige Cloud ================================================================================ .SYNOPSIS Controle op Responsible AI Controls voor Azure OpenAI Service .DESCRIPTION Dit script ondersteunt het monitoren en valideren van Responsible AI Controls voor Azure OpenAI Service door te controleren op: - Configuratie van content filtering en safety systems - Aanwezigheid van logging en diagnostische instellingen - Toegangsbeheer en RBAC-configuratie - Rate limiting-instellingen - Compliance met governance-tags en metadata Het script wijzigt zelf geen resources, maar helpt CISO's, privacy officers en platformbeheerders om snel te zien waar aanvullende controls nodig zijn. .NOTES Filename: responsible-ai-controls.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Gerelateerde JSON: content/azure/openai/responsible-ai-controls.json .EXAMPLE .\responsible-ai-controls.ps1 Toont een korte samenvatting van Azure OpenAI-resources en Responsible AI Controls. .EXAMPLE .\responsible-ai-controls.ps1 -Monitoring Voert een gedetailleerde controle uit en toont resources zonder adequate controls. .EXAMPLE .\responsible-ai-controls.ps1 -Remediation Geeft gerichte aanbevelingen voor het verbeteren van Responsible AI Controls. .EXAMPLE .\responsible-ai-controls.ps1 -DebugMode Voert controles uit met synthetische testdata zonder verbinding met Azure. #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.Resources, Az.CognitiveServices [CmdletBinding()] param( [Parameter()][switch]$Monitoring, [Parameter()][switch]$Remediation, [Parameter()][switch]$DebugMode ) $ErrorActionPreference = 'Stop' $PolicyName = 'Responsible AI Controls - Azure OpenAI' $ResponsibleAiTag = 'ResponsibleAI' $ResponsibleAiValue = 'Governed' function Connect-RequiredServices { <# .SYNOPSIS Maakt verbinding met Azure als er nog geen context is. #> [CmdletBinding()] param( [switch]$DebugMode ) if ($DebugMode) { Write-Verbose "DebugMode is ingeschakeld: er wordt geen verbinding met Azure gemaakt." return } if (-not (Get-AzContext -ErrorAction SilentlyContinue)) { Write-Host "Verbinding maken met Azure..." -ForegroundColor Yellow Connect-AzAccount -ErrorAction Stop | Out-Null Write-Host "Verbonden met Azure." -ForegroundColor Green } } function Get-AzureOpenAiResources { <# .SYNOPSIS Haalt Azure OpenAI-resources op. .DESCRIPTION Zoekt naar Cognitive Services-accounts van het type OpenAI. #> [CmdletBinding()] param( [switch]$DebugMode ) if ($DebugMode) { # Synthetische testdata voor lokale validatie return @( [PSCustomObject]@{ Name = 'openai-prod-001' ResourceGroupName = 'rg-ai-services-prod' ResourceType = 'Microsoft.CognitiveServices/accounts' ResourceId = '/subscriptions/xxx/resourceGroups/rg-ai-services-prod/providers/Microsoft.CognitiveServices/accounts/openai-prod-001' Location = 'West Europe' Tags = @{ 'ResponsibleAI' = 'Governed' 'DataClassification' = 'Confidential' 'Owner' = 'AI-Team' } }, [PSCustomObject]@{ Name = 'openai-dev-001' ResourceGroupName = 'rg-ai-services-dev' ResourceType = 'Microsoft.CognitiveServices/accounts' ResourceId = '/subscriptions/xxx/resourceGroups/rg-ai-services-dev/providers/Microsoft.CognitiveServices/accounts/openai-dev-001' Location = 'West Europe' Tags = @{ 'ResponsibleAI' = 'InScope' } } ) } $resources = @() try { $cognitiveServices = Get-AzResource -ResourceType 'Microsoft.CognitiveServices/accounts' -ErrorAction SilentlyContinue foreach ($cs in $cognitiveServices) { try { $account = Get-AzCognitiveServicesAccount -ResourceGroupName $cs.ResourceGroupName -Name $cs.Name -ErrorAction SilentlyContinue if ($account -and $account.Kind -eq 'OpenAI') { $resources += $cs } } catch { Write-Verbose "Kon details voor Cognitive Services-account '$($cs.Name)' niet ophalen: $_" } } } catch { Write-Verbose "Kon Cognitive Services-accounts niet ophalen: $_" } return $resources } function Test-ResponsibleAiControls { <# .SYNOPSIS Controleert Responsible AI Controls voor Azure OpenAI-resources. .OUTPUTS PSCustomObject met samenvattende en gedetailleerde resultaten. #> [CmdletBinding()] param( [switch]$DebugMode ) Write-Verbose "Ophalen van Azure OpenAI-resources..." $resources = Get-AzureOpenAiResources -DebugMode:$DebugMode $details = @() foreach ($res in $resources) { $hasResponsibleAiTag = $false $responsibleAiValue = $null $hasDataClassification = $false $hasOwner = $false if ($res.Tags) { if ($res.Tags.ContainsKey($ResponsibleAiTag)) { $hasResponsibleAiTag = $true $responsibleAiValue = $res.Tags[$ResponsibleAiTag] } if ($res.Tags.ContainsKey('DataClassification')) { $hasDataClassification = $true } if ($res.Tags.ContainsKey('Owner')) { $hasOwner = $true } } $hasDiagnostics = $false if (-not $DebugMode) { try { $diagSettings = Get-AzDiagnosticSetting -ResourceId $res.ResourceId -ErrorAction SilentlyContinue $hasDiagnostics = [bool]$diagSettings } catch { # Niet alle resourcetypen ondersteunen diagnostische instellingen } } else { # In debugmodus: willekeurige waarde voor testdoeleinden $hasDiagnostics = ($res.Name -like '*prod*') } $isGoverned = $hasResponsibleAiTag -and $responsibleAiValue -eq $ResponsibleAiValue $obj = [PSCustomObject]@{ Name = $res.Name ResourceGroup = $res.ResourceGroupName Location = $res.Location HasResponsibleAiTag = $hasResponsibleAiTag ResponsibleAiValue = $responsibleAiValue IsGoverned = $isGoverned HasDataClassification = $hasDataClassification HasOwner = $hasOwner HasDiagnostics = $hasDiagnostics MissingControls = @() } # Bepaal welke controls ontbreken if (-not $isGoverned) { $obj.MissingControls += 'ResponsibleAI=Governed tag' } if (-not $hasDataClassification) { $obj.MissingControls += 'DataClassification tag' } if (-not $hasOwner) { $obj.MissingControls += 'Owner tag' } if (-not $hasDiagnostics) { $obj.MissingControls += 'Diagnostische logging' } $details += $obj } $governed = $details | Where-Object { $_.IsGoverned } $withAllControls = $governed | Where-Object { $_.HasDataClassification -and $_.HasOwner -and $_.HasDiagnostics } $summary = [PSCustomObject]@{ Mode = if ($DebugMode) { 'Debug' } else { 'Live' } TotalResources = $details.Count GovernedResources = $governed.Count GovernedWithAllControls = $withAllControls.Count GovernedMissingControls = ($governed | Where-Object { $_.MissingControls.Count -gt 0 }).Count AllDetails = $details } return $summary } function Invoke-Monitoring { <# .SYNOPSIS Voert een gedetailleerde monitoringcontrole uit op Responsible AI Controls. #> [CmdletBinding()] param( [switch]$DebugMode ) Connect-RequiredServices -DebugMode:$DebugMode $result = Test-ResponsibleAiControls -DebugMode:$DebugMode Write-Host "" -ForegroundColor White Write-Host "========================================" -ForegroundColor Cyan Write-Host $PolicyName -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host ("Modus : {0}" -f $result.Mode) -ForegroundColor White Write-Host ("Totaal Azure OpenAI-resources : {0}" -f $result.TotalResources) -ForegroundColor White Write-Host ("Resources met ResponsibleAI=Governed: {0}" -f $result.GovernedResources) -ForegroundColor White Write-Host ("Governed met alle controls : {0}" -f $result.GovernedWithAllControls) -ForegroundColor ($(if ($result.GovernedWithAllControls -eq $result.GovernedResources -and $result.GovernedResources -gt 0) { 'Green' } else { 'Yellow' })) Write-Host ("Governed met ontbrekende controls : {0}" -f $result.GovernedMissingControls) -ForegroundColor ($(if ($result.GovernedMissingControls -eq 0) { 'Green' } else { 'Red' })) if ($result.TotalResources -eq 0) { Write-Host "`nEr zijn geen Azure OpenAI-resources gevonden in deze context." -ForegroundColor Yellow Write-Host "Controleer of u in de juiste subscription en tenant werkt." -ForegroundColor Yellow } elseif ($result.GovernedResources -eq 0) { Write-Host "`nLet op: er zijn geen resources gemarkeerd met ResponsibleAI=$ResponsibleAiValue." -ForegroundColor Yellow Write-Host "Gebruik tags om vast te leggen welke Azure OpenAI-resources onder Responsible AI Controls vallen." -ForegroundColor Yellow } elseif ($result.GovernedMissingControls -gt 0) { Write-Host "`nDe volgende governed resources missen controls:" -ForegroundColor Yellow $result.AllDetails | Where-Object { $_.IsGoverned -and $_.MissingControls.Count -gt 0 } | ForEach-Object { Write-Host "`n Resource: $($_.Name) (RG: $($_.ResourceGroup))" -ForegroundColor White Write-Host " Ontbrekende controls: $($_.MissingControls -join ', ')" -ForegroundColor Red } } else { Write-Host "`nAlle governed resources hebben de vereiste controls geconfigureerd." -ForegroundColor Green } } function Invoke-Remediation { <# .SYNOPSIS Geeft aanbevelingen voor verbetering van Responsible AI Controls. .DESCRIPTION Dit script voert zelf geen wijzigingen door, maar rapporteert waar controls ontbreken en geeft concrete vervolgstappen voor beheerders. #> [CmdletBinding()] param( [switch]$DebugMode ) Connect-RequiredServices -DebugMode:$DebugMode $result = Test-ResponsibleAiControls -DebugMode:$DebugMode Write-Host "" -ForegroundColor White Write-Host "========================================" -ForegroundColor Cyan Write-Host "$PolicyName - Remediatieadvies" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan $notGoverned = $result.AllDetails | Where-Object { -not $_.IsGoverned } $governedMissing = $result.AllDetails | Where-Object { $_.IsGoverned -and $_.MissingControls.Count -gt 0 } if ($notGoverned.Count -gt 0) { Write-Host "`nResources zonder ResponsibleAI=$ResponsibleAiValue tag:" -ForegroundColor Yellow $notGoverned | Select-Object Name, ResourceGroup, Location | Format-Table -AutoSize Write-Host "Aanbeveling: bepaal per resource of Responsible AI Controls van toepassing zijn en voeg de tag ResponsibleAI=$ResponsibleAiValue toe." -ForegroundColor Yellow } if ($governedMissing.Count -gt 0) { Write-Host "`nGoverned resources met ontbrekende controls:" -ForegroundColor Red foreach ($res in $governedMissing) { Write-Host "`n Resource: $($res.Name) (RG: $($res.ResourceGroup))" -ForegroundColor White Write-Host " Ontbrekend: $($res.MissingControls -join ', ')" -ForegroundColor Red if ($res.MissingControls -contains 'DataClassification tag') { Write-Host " Actie: Voeg een DataClassification-tag toe (bijv. Public, Internal, Confidential, Restricted)" -ForegroundColor Cyan } if ($res.MissingControls -contains 'Owner tag') { Write-Host " Actie: Voeg een Owner-tag toe met de naam van het team of de persoon die verantwoordelijk is" -ForegroundColor Cyan } if ($res.MissingControls -contains 'Diagnostische logging') { Write-Host " Actie: Configureer diagnostische instellingen naar een centrale Log Analytics-werkruimte" -ForegroundColor Cyan Write-Host " Voorbeeld: Set-AzDiagnosticSetting -ResourceId '$($res.ResourceId)' ..." -ForegroundColor Gray } } } else { Write-Host "`nAlle governed resources hebben de vereiste controls geconfigureerd." -ForegroundColor Green } Write-Host "`nAanvullende aanbevelingen:" -ForegroundColor Cyan Write-Host "- Configureer content filtering en safety systems in Azure OpenAI Service" -ForegroundColor White Write-Host "- Richt prompt governance en reviewprocessen in" -ForegroundColor White Write-Host "- Implementeer rate limiting per gebruiker en applicatie" -ForegroundColor White Write-Host "- Monitor bias en fairness in AI-output regelmatig" -ForegroundColor White Write-Host "- Integreer Responsible AI Controls in bestaande compliance- en governancekaders" -ForegroundColor White Write-Host "`nGebruik Azure Policy en deployment-sjablonen om deze eisen structureel af te dwingen." -ForegroundColor Cyan } function Invoke-Implementation { <# .SYNOPSIS Wrapper om remediatieadvies aan te roepen. #> [CmdletBinding()] param( [switch]$DebugMode ) Invoke-Remediation -DebugMode:$DebugMode } try { Connect-RequiredServices -DebugMode:$DebugMode if ($Monitoring) { Invoke-Monitoring -DebugMode:$DebugMode } elseif ($Remediation) { Invoke-Remediation -DebugMode:$DebugMode } else { # Korte samenvatting voor snelle checks $result = Test-ResponsibleAiControls -DebugMode:$DebugMode Write-Host "" Write-Host ("Responsible AI Controls: {0} Azure OpenAI-resources, {1} governed, {2} met alle controls." -f ` $result.TotalResources, $result.GovernedResources, $result.GovernedWithAllControls) } } catch { Write-Error "Scriptuitvoering mislukt: $_" exit 1 }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder adequate controls rond Azure OpenAI lopen organisaties het risico op misbruik, bias, datalekken, onvoldoende traceerbaarheid en niet-naleving van AVG, EU AI Act en BIO. Dit kan leiden tot juridische aansprakelijkheid, reputatieschade, kritische auditbevindingen en verlies van vertrouwen bij burgers en toezichthouders.

Management Samenvatting

Implementeer content filtering en safety systems, richt prompt governance en reviewprocessen in, configureer uitgebreide logging en audit trails, beheer toegang en rate limiting, monitor bias en fairness, en integreer alles in bestaande compliance- en governancekaders. Door deze controls structureel in te richten en periodiek te valideren, wordt Azure OpenAI een veilig en verantwoord hulpmiddel dat voldoet aan alle relevante normen en verwachtingen.