Veilige Deployment Van Machine Learning-modellen In Azure

💼 Management Samenvatting

Machine Learning Deployment is het proces waarbij getrainde modellen worden geïmplementeerd in productieomgevingen, zodat ze beschikbaar komen voor real-time voorspellingen of batchverwerking. In Azure gebeurt dit typisch via Azure Machine Learning-werkruimten, containerregistraties, Kubernetes-clusters of serverless endpoints, waarbij beveiliging, schaalbaarheid en monitorbaarheid centraal staan.

Aanbeveling
IMPLEMENTEER STRUCTUREEL VEILIGE MACHINE LEARNING DEPLOYMENT
Risico zonder
High
Risk Score
9/10
Implementatie
200u (tech: 120u)
Van toepassing op:
Azure
Azure Machine Learning
Azure Kubernetes Service
Azure Container Instances

Voor Nederlandse overheidsorganisaties is het veilig deployen van machine learning-modellen essentieel om te borgen dat AI-systemen niet alleen accuraat en betrouwbaar zijn, maar ook voldoen aan beveiligingseisen, privacywetgeving en operationele risicomanagement. Een slecht beveiligde deployment kan leiden tot datalekken, ongeautoriseerde toegang tot modellen of trainingdata, modelmanipulatie of onvoldoende traceerbaarheid van AI-beslissingen. Bovendien is correcte deployment noodzakelijk voor compliance met de EU AI Act, die eisen stelt aan de operationele fase van AI-systemen, inclusief logging, monitoring en incidentrespons.

PowerShell Modules Vereist
Primary API: Azure API
Connection: Connect-AzAccount
Required Modules: Az.Accounts, Az.Resources, Az.MachineLearning, Az.ContainerRegistry, Az.Monitor

Implementatie

Dit artikel beschrijft hoe u in Azure een veilig en beheerst deployment-proces inricht voor machine learning-modellen. U leert welke deployment-opties beschikbaar zijn, hoe u modellen containeriseert, hoe u endpoints beveiligt met authenticatie en autorisatie, hoe u monitoring en logging configureert en hoe u versiebeheer en rollback-strategieën implementeert. De focus ligt op praktische implementatie binnen de Nederlandse publieke sector, met aandacht voor compliance, risicomanagement en operationele beheersbaarheid.

Keuze van deployment-strategie en architectuur

De keuze van een geschikte deployment-strategie voor machine learning-modellen hangt af van meerdere factoren: het type voorspellingen dat het model maakt, de verwachte belasting, de latentie-eisen, de kosten en de beveiligings- en compliance-eisen. Real-time inferentie, waarbij voorspellingen binnen milliseconden of seconden beschikbaar moeten zijn, vraagt om een andere aanpak dan batchverwerking, waarbij grote hoeveelheden gegevens periodiek worden verwerkt. Azure Machine Learning biedt hierbij verschillende opties, waaronder managed endpoints voor real-time scoring, batch endpoints voor asynchrone verwerking, Azure Kubernetes Service voor schaalbare container-deployments en Azure Container Instances voor eenvoudige, geïsoleerde workloads.

Voor Nederlandse overheidsorganisaties is het belangrijk om deployment te beschouwen als onderdeel van een bredere MLOps-strategie, waarbij modellen niet alleen worden geïmplementeerd, maar ook worden gemonitord, bijgewerkt en uiteindelijk buiten gebruik gesteld. Dit betekent dat u al in de ontwerpfase nadenkt over hoe modellen worden versiebeheerd, hoe wijzigingen worden getest voordat ze in productie komen en hoe u kunt terugrollen wanneer een nieuwe modelversie problemen veroorzaakt. Bovendien moet deployment zijn ingebed in bestaande governance-structuren, zodat security officers, privacy officers en compliance-teams kunnen verifiëren dat AI-systemen voldoen aan beleid, wetgeving en risicomanagement-eisen.

Een belangrijke overweging bij deployment is de scheiding tussen ontwikkel-, test- en productieomgevingen. Modellen moeten door meerdere fasen gaan voordat ze operationeel worden, waarbij in elke fase specifieke tests en controles plaatsvinden. In ontwikkelomgevingen kunnen data scientists experimenteren met verschillende modelconfiguraties en hyperparameters, terwijl testomgevingen worden gebruikt voor gecontroleerde validatie met representatieve datasets. Productieomgevingen moeten daarentegen strikt beveiligd zijn, met minimale toegangsrechten, uitgebreide logging en geautomatiseerde monitoring om afwijkingen snel te signaleren. Deze scheiding moet niet alleen gelden voor de model-endpoints zelf, maar ook voor de onderliggende infrastructuur, zoals compute-resources, opslagaccounts en netwerkconfiguraties.

Tot slot moet deployment rekening houden met gegevensbescherming en datalocatie. Nederlandse overheidsorganisaties moeten vaak voldoen aan eisen rond datasoevereiniteit, waarbij persoonsgegevens binnen de EU blijven en niet worden verwerkt in datacenters buiten de Europese Unie. Azure biedt hiervoor opties zoals EU Data Boundary en configuraties waarbij alle componenten, inclusief model-endpoints, compute-resources en logging, expliciet worden geconfigureerd voor EU-locaties. Daarnaast moeten deployment-processen ervoor zorgen dat gevoelige gegevens niet onnodig worden blootgesteld, bijvoorbeeld door modellen te exporteren zonder de onderliggende trainingsdata, door endpoints te beveiligen met encryptie en door toegang te beperken tot geautoriseerde systemen en gebruikers.

Containerisatie en packaging van machine learning-modellen

Containerisatie is een fundamenteel onderdeel van moderne machine learning-deployment, omdat het ervoor zorgt dat modellen consistent draaien ongeacht de onderliggende infrastructuur. Een container bevat niet alleen het getrainde model zelf, maar ook alle benodigde dependencies, zoals Python-packages, runtime-omgevingen, configuratiebestanden en eventuele voorverwerkingsscripts. Azure Machine Learning kan automatisch containers bouwen op basis van uw modelcode, maar u kunt ook zelf Docker-images definiëren voor volledige controle over de deployment-omgeving. Dit laatste is met name relevant wanneer u specifieke beveiligingsconfiguraties wilt afdwingen, wanneer u custom dependencies nodig heeft of wanneer u modellen wilt deployen buiten de Azure Machine Learning-werkruimte, bijvoorbeeld op on-premises infrastructuur of andere cloudproviders.

Bij het containeriseren van modellen is het essentieel om security best practices toe te passen. Containers moeten worden gebouwd vanuit minimale base-images, zonder onnodige software die potentiële kwetsbaarheden introduceert. Daarnaast moet u container-images regelmatig scannen op bekende kwetsbaarheden, bijvoorbeeld met Azure Security Center of Azure Container Registry-taken. Wanneer containers worden opgeslagen in Azure Container Registry, kunt u configureerbare retentiebeleid instellen, versiebeheer toepassen en toegang beperken via Azure Active Directory-authenticatie en op rollen gebaseerd toegangsbeheer. Dit voorkomt dat oude of onveilige container-versies per ongeluk worden gebruikt en zorgt ervoor dat alleen geautoriseerde systemen en gebruikers toegang hebben tot model-artefacten.

Een belangrijke stap in container-deployment is het correct verwerken van model-artefacten en configuratiebestanden. Modellen zelf moeten worden opgeslagen in versiebeheerde opslag, zoals Azure Machine Learning model-registries, waarbij elke versie wordt geassocieerd met metadata over trainingsdata, hyperparameters, prestaties en eventuele compliance-informatie. Configuratiebestanden, zoals instellingen voor logging, monitoring en feature engineering, moeten worden gescheiden van de container zelf, zodat u configuraties kunt wijzigen zonder nieuwe container-images te bouwen. Dit maakt het ook eenvoudiger om dezelfde model-container in verschillende omgevingen te gebruiken, waarbij alleen de configuratie per omgeving verschilt.

Voor productie-deployments moet u bovendien rekening houden met resource-limieten en autoscaling-configuraties. Containers moeten worden geconfigureerd met passende CPU- en geheugenlimieten, zodat ze niet meer resources consumeren dan nodig is en andere workloads niet beïnvloeden. Autoscaling stelt u in staat om automatisch extra container-instanties op te starten wanneer de belasting toeneemt en deze weer af te schalen wanneer de vraag afneemt. In Azure Kubernetes Service kunt u hiervoor gebruikmaken van Kubernetes Horizontal Pod Autoscaler, terwijl Azure Container Instances en managed endpoints in Azure Machine Learning ingebouwde autoscaling-ondersteuning bieden. Het is belangrijk om deze configuraties te testen onder verschillende belastingsscenario's, zodat u zeker weet dat het systeem schaalt wanneer dat nodig is, zonder onnodige kosten te genereren tijdens rustige periodes.

Beveiliging van model-endpoints en API-toegang

Model-endpoints vormen de interface tussen externe systemen en uw machine learning-modellen, waardoor beveiliging van deze endpoints cruciaal is voor de algehele beveiliging van uw AI-infrastructuur. Onbeveiligde endpoints kunnen worden misbruikt voor ongeautoriseerde toegang, denial-of-service-aanvallen, model-extractie of datalekken wanneer gevoelige invoerdata wordt verwerkt. Daarom moeten alle endpoints worden beschermd met authenticatie en autorisatie, waarbij u controle heeft over wie toegang heeft, welke acties zij mogen uitvoeren en hoe deze toegang wordt geaudit. Azure Machine Learning managed endpoints ondersteunen hiervoor Azure Active Directory-integratie, waardoor u gebruikers en service principals kunt authenticeren en toegang kunt verlenen op basis van rollen, zoals lezer, eigenaar of bijdrager.

Naast authenticatie en autorisatie is het belangrijk om endpoints te beschermen tegen veelvoorkomende aanvallen, zoals injection attacks, waar kwaadwillenden gepoogd inputdata te manipuleren om het model te misleiden of foutieve resultaten te veroorzaken. Inputvalidatie is hierbij essentieel: controleer altijd of de binnenkomende data voldoet aan verwachte formaten, datatypen en waardebereiken voordat u deze doorgeeft aan het model. Daarnaast kunt u rate limiting implementeren om te voorkomen dat endpoints worden overbelast door een enkele aanvrager of botnet, en kunt u request logging gebruiken om verdachte patronen te detecteren. Azure Application Gateway of Azure Front Door kunnen hiervoor worden gebruikt als extra beveiligingslaag, met ondersteuning voor Web Application Firewall, DDoS-bescherming en geografische filtering.

Encryptie van data in transit en at rest is een andere belangrijke beveiligingsmaatregel. Alle communicatie met model-endpoints moet plaatsvinden via HTTPS met TLS 1.2 of hoger, waarbij u certificaten beheert via Azure Key Vault of andere beveiligde certificaatopslag. Data die wordt opgeslagen, zoals model-artefacten, logs en invoerdata, moet worden versleuteld met door Microsoft beheerde sleutels of, voor extra controle, met door de klant beheerde sleutels via Azure Key Vault. Dit zorgt ervoor dat zelfs wanneer iemand toegang krijgt tot opslagaccounts of databases, de gegevens niet leesbaar zijn zonder de juiste encryptiesleutels. Voor Nederlandse overheidsorganisaties is dit met name relevant vanwege AVG-eisen rond gegevensbescherming en omdat gevoelige overheidsdata vaak als vertrouwelijk of geheim moet worden behandeld.

Tot slot moet u endpoints integreren met bestaande security monitoring en incident response-processen. Alle toegang tot endpoints, inclusief succesvolle en mislukte authenticatiepogingen, moet worden gelogd en geaudit, bijvoorbeeld via Azure Monitor of Azure Sentinel. Alerts kunnen worden geconfigureerd om automatisch te waarschuwen wanneer verdachte activiteiten worden gedetecteerd, zoals ongebruikelijke toegangspatronen, onverwacht hoge belasting of foutmeldingen die wijzen op mogelijke aanvallen. Deze signalen worden vervolgens gekoppeld aan incident response-procedures, zodat beveiligingsteams snel kunnen reageren wanneer een endpoint wordt bedreigd. Door endpoints op deze manier te beveiligen en te monitoren, voldoet u niet alleen aan beveiligingseisen, maar creëert u ook het vertrouwen dat AI-systemen veilig en betrouwbaar kunnen worden ingezet in kritieke overheidsprocessen.

Monitoring, logging en observability van deployed modellen

Gebruik PowerShell-script machine-learning-deployment.ps1 (functie Invoke-Monitoring) – Controleert of deployed machine learning-endpoints zijn geconfigureerd met uitgebreide logging en monitoring in Azure Monitor..

Monitoring van deployed machine learning-modellen is essentieel om te garanderen dat modellen blijven presteren zoals verwacht, om problemen tijdig te signaleren en om aantoonbaar te maken dat AI-systemen correct functioneren volgens compliance-eisen. Monitoring moet meerdere aspecten dekken: technische performance, zoals latentie, doorvoer en foutpercentages, functionele performance, zoals de verdeling van voorspellingen en eventuele drift in modeluitkomsten, en beveiligingsaspecten, zoals toegangspatronen en verdachte activiteiten. Azure biedt hiervoor verschillende tools, waaronder Azure Monitor voor metrieken en logs, Application Insights voor gedetailleerde application performance monitoring en Azure Machine Learning ingebouwde monitoring-capaciteiten voor model drift en data drift.

Een belangrijk onderdeel van modelmonitoring is het detecteren van concept drift en data drift. Concept drift treedt op wanneer de relatie tussen invoerfeatures en de doelvariabele verandert in de tijd, bijvoorbeeld doordat omstandigheden of gedragingen veranderen. Data drift verwijst naar veranderingen in de verdeling van invoerdata, bijvoorbeeld wanneer nieuwe categorieën verschijnen of wanneer bepaalde waarden vaker voorkomen dan tijdens de training. Beide vormen van drift kunnen leiden tot verslechterde modelprestaties, waardoor voorspellingen minder betrouwbaar worden. Azure Machine Learning kan automatisch drift detecteren door productie-invoerdata te vergelijken met baselinedata uit de trainingsfase, waarbij alerts worden geactiveerd wanneer drempelwaarden worden overschreden. Wanneer drift wordt gedetecteerd, moet dit leiden tot een formele evaluatie: is het nodig om het model opnieuw te trainen, zijn aanvullende controles nodig of is er sprake van een tijdelijk effect dat geen actie vereist?

Logging van model-invoer en -uitvoer is een ander cruciaal onderdeel van observability, omdat dit nodig is voor debugging, audittrails en compliance. Voor elk model-aanroep moet worden vastgelegd welke data is ingevoerd, welke voorspelling is gemaakt, welke versie van het model is gebruikt en wanneer de aanroep heeft plaatsgevonden. Deze logs moeten worden opgeslagen in een centrale, beveiligde locatie, zoals een Log Analytics-werkruimte, met passende retentieperioden en toegangscontroles. Het is belangrijk om hierbij privacy en gegevensbescherming in acht te nemen: wanneer logs persoonsgegevens bevatten, moeten deze worden behandeld volgens AVG-vereisten, inclusief bepalingen rond dataminimalisatie, bewaartermijnen en rechten van betrokkenen. In sommige gevallen kan het nodig zijn om alleen metadata of gehashte identificatoren te loggen, in plaats van volledige persoonsgegevens.

Dashboards en rapportages maken monitoringresultaten inzichtelijk voor verschillende stakeholders, van data scientists tot CISO's en bestuurders. Dashboards kunnen worden opgebouwd in Azure Monitor, Power BI of andere visualisatietools, waarbij verschillende views worden gemaakt voor verschillende doelgroepen. Technische teams hebben baat bij gedetailleerde metrieken over performance en fouten, terwijl management meer geïnteresseerd is in trends, compliance-status en business impact. Automatische rapportages kunnen periodiek worden gegenereerd en verzonden naar relevante personen, zodat monitoring niet afhankelijk is van proactieve actie van individuele medewerkers. Door monitoring op deze manier te structureren, ontstaat een volwassen observability-strategie die zowel operationele stabiliteit als compliance en governance ondersteunt.

Versiebeheer, rollback en change management

Versiebeheer van machine learning-modellen is complexer dan traditioneel softwareversiebeheer, omdat modellen niet alleen bestaan uit code, maar ook uit getrainde gewichten, configuratiebestanden, dependencies en metadata over trainingsdata en prestaties. Azure Machine Learning ondersteunt model-registries waarin modellen worden opgeslagen met versienummers, tags en beschrijvingen, waardoor u altijd kunt terugzien welke modellen in het verleden zijn gebruikt en welke versie op welk moment in productie was. Dit is essentieel voor reproduceerbaarheid, debugging en compliance, omdat u moet kunnen aantonen welke versie van een model een specifieke voorspelling heeft gemaakt, vooral wanneer deze voorspelling gevolgen heeft voor besluitvorming of wanneer er vragen ontstaan over de juistheid van AI-beslissingen.

Bij het deployen van nieuwe modelversies is het belangrijk om een gestructureerd change management-proces te volgen, waarbij nieuwe versies eerst worden getest in ontwikkel- en testomgevingen voordat ze naar productie gaan. Blue-green deployment of canary deployment zijn strategieën die u kunnen helpen om risico's te beperken: bij blue-green deployment draaien twee volledige productieomgevingen naast elkaar, waarbij u tussen beide kunt schakelen wanneer een nieuwe versie klaar is. Bij canary deployment wordt een nieuwe versie eerst op een klein percentage van het verkeer getest, waarna deze geleidelijk wordt uitgerold naar alle verkeer wanneer de prestaties goed zijn. Beide strategieën maken snelle rollback mogelijk wanneer problemen worden gedetecteerd, wat essentieel is voor kritieke AI-systemen waarbij fouten directe impact kunnen hebben op burgers of overheidsprocessen.

Automatisering via CI/CD-pipelines kan deployment-processen versnellen en fouten verminderen, maar moet altijd worden gecombineerd met menselijke goedkeuringsmomenten voor belangrijke wijzigingen. Pipelines kunnen automatisch tests uitvoeren, zoals unit tests, integratietests en performance tests, voordat een nieuwe modelversie wordt gepromoveerd. Goedkeuringsgates kunnen worden ingesteld zodat specifieke personen, zoals model owners of security officers, expliciet moeten goedkeuren voordat een model naar productie gaat. Deze combinatie van automatisering en menselijke controle zorgt ervoor dat deployment snel en efficiënt verloopt, terwijl belangrijke wijzigingen nog steeds worden beoordeeld door mensen met de juiste expertise en autoriteit.

Wanneer een nieuwe modelversie problemen veroorzaakt, moet rollback snel en eenvoudig mogelijk zijn. Dit vereist dat vorige versies beschikbaar blijven en dat configuraties en endpoints gemakkelijk kunnen worden teruggedraaid naar eerdere versies. Azure Machine Learning managed endpoints ondersteunen hiervoor automatische rollback wanneer health checks falen, en u kunt handmatig schakelen tussen modelversies via de Azure-portal of via API's. Het is belangrijk om rollback-scenario's vooraf te testen en te documenteren, zodat teams weten wat ze moeten doen wanneer problemen optreden. Daarnaast moeten alle rollbacks worden gelogd en geaudit, zodat u achteraf kunt analyseren waarom een bepaalde versie is teruggedraaid en wat er is geleerd voor toekomstige deployments.

Remediatie en best practices voor veilige deployment

Gebruik PowerShell-script machine-learning-deployment.ps1 (functie Invoke-Remediation) – Identificeert machine learning-endpoints zonder adequate beveiliging, logging of monitoring en geeft gerichte aanbevelingen voor remediatie..

Wanneer deployment-problemen worden gedetecteerd, is snelle en gestructureerde remediatie essentieel om risico's te beperken en de continuïteit van AI-systemen te waarborgen. Problemen kunnen variëren van technische issues, zoals endpoints die niet beschikbaar zijn of modellen die onverwacht langzaam zijn, tot beveiligingsproblemen, zoals onvoldoende authenticatie of logging, of functionele problemen, zoals modellen die onjuiste voorspellingen maken. Elk type probleem vereist een specifieke aanpak: technische problemen vragen om troubleshooting en mogelijk rollback, beveiligingsproblemen vereisen onmiddellijke mitigatie en functionele problemen kunnen leiden tot model-retraining of aanpassing van deployment-configuraties.

Een belangrijke best practice voor veilige deployment is het implementeren van defense in depth, waarbij meerdere beveiligingslagen worden gecombineerd. Dit betekent bijvoorbeeld dat endpoints niet alleen worden beveiligd met authenticatie, maar ook met netwerkisolatie, waarbij endpoints alleen toegankelijk zijn vanuit geautoriseerde netwerken of via VPN's. Daarnaast kunnen endpoints worden geïsoleerd in aparte resourcegroepen of abonnementen, met strikte toegangscontroles en monitoring. Wanneer modellen gevoelige gegevens verwerken, kan het bovendien wenselijk zijn om endpoints te deployen binnen private endpoints of ExpressRoute-verbindingen, zodat verkeer niet over het publieke internet loopt en niet zichtbaar is voor externe partijen.

Documentatie en training zijn andere cruciale aspecten van veilige deployment. Alle deployment-processen moeten worden gedocumenteerd in procedures en runbooks, zodat teams weten hoe ze modellen moeten deployen, monitoren en onderhouden. Nieuwe teamleden moeten worden getraind in deze procedures, en bestaande teamleden moeten regelmatig worden bijgeschoold wanneer nieuwe tools of processen worden geïntroduceerd. Daarnaast moeten incident response-procedures duidelijk beschrijven wat er moet gebeuren wanneer een deployed model problemen veroorzaakt, wie verantwoordelijk is voor welke acties en hoe communicatie plaatsvindt naar stakeholders, gebruikers of burgers wanneer dat nodig is.

Tot slot moet deployment worden gezien als een continu verbeterproces, waarbij lessen worden geleerd uit elke deployment en waarin best practices worden gedeeld binnen de organisatie. Post-mortem reviews na belangrijke deployments of incidenten helpen om te identificeren wat goed ging, wat beter kon en welke aanpassingen nodig zijn voor toekomstige deployments. Deze lessen worden vervolgens verwerkt in deployment-procedures, automatisering en training, zodat de organisatie steeds beter wordt in het veilig en betrouwbaar deployen van machine learning-modellen. Door deployment op deze manier te benaderen, ontstaat een volwassen MLOps-cultuur die niet alleen technisch sterk is, maar ook organisatorisch en governance-matig goed is ingericht voor de uitdagingen van AI in de publieke sector.

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 beveiliging en monitoring van machine learning-deployments in Azure .DESCRIPTION Dit script helpt om inzicht te krijgen in de beveiliging en monitoring van deployed machine learning-modellen in Azure. Het controleert of endpoints zijn voorzien van adequate logging, monitoring en beveiligingsconfiguraties. Daarnaast kan het worden gebruikt als onderdeel van periodieke controles of CI/CD-pijplijnen om te signaleren waar aanvullende maatregelen nodig zijn. .NOTES Filename: machine-learning-deployment.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Gerelateerde JSON: content/azure/ai/machine-learning-deployment.json .EXAMPLE .\machine-learning-deployment.ps1 Voert een korte samenvattende controle uit. .EXAMPLE .\machine-learning-deployment.ps1 -Monitoring Toont gedetailleerde informatie over gevonden endpoints en hun configuratie. .EXAMPLE .\machine-learning-deployment.ps1 -Remediation Geeft gerichte aanbevelingen voor endpoints zonder adequate beveiliging of monitoring. #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.Resources, Az.MachineLearning, Az.Monitor [CmdletBinding()] param( [Parameter()][switch]$Monitoring, [Parameter()][switch]$Remediation ) $ErrorActionPreference = 'Stop' $PolicyName = 'Machine Learning Deployment beveiligingscontrole' $DeploymentTagName = 'MLDeployment' $DeploymentTagRequiredValue = 'Production' function Connect-RequiredServices { <# .SYNOPSIS Maakt verbinding met Azure als er nog geen context is. #> 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-MachineLearningWorkspaces { <# .SYNOPSIS Haalt alle Azure Machine Learning-werkruimten op. .DESCRIPTION Selecteert alle ML-werkruimten in het huidige abonnement of alle abonnementen waartoe de gebruiker toegang heeft. #> [CmdletBinding()] param() $workspaces = Get-AzResource -ResourceType 'Microsoft.MachineLearningServices/workspaces' -ErrorAction SilentlyContinue return $workspaces } function Get-MLEndpoints { <# .SYNOPSIS Haalt endpoints op voor een specifieke ML-werkruimte. .DESCRIPTION Haalt managed endpoints op via Azure Machine Learning REST API of via resource queries wanneer mogelijk. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$WorkspaceName, [Parameter(Mandatory = $true)] [string]$ResourceGroupName ) $endpoints = @() try { # Probeer endpoints op te halen via Azure ML module # Let op: Dit vereist mogelijk aanvullende modules of REST API calls $ws = Get-AzMachineLearningWorkspace -ResourceGroupName $ResourceGroupName -Name $WorkspaceName -ErrorAction SilentlyContinue if ($ws) { # Endpoints kunnen worden opgehaald via REST API # Voor nu retourneren we een placeholder-structuur # In productie zou dit via Invoke-RestMethod naar Azure ML API moeten Write-Verbose "Werkruimte gevonden: $WorkspaceName" } } catch { Write-Verbose "Kon endpoints niet ophalen voor werkruimte $WorkspaceName : $_" } return $endpoints } function Test-EndpointSecurity { <# .SYNOPSIS Controleert of endpoints voldoen aan beveiligingseisen. .DESCRIPTION Controleert of endpoints zijn geconfigureerd met logging, monitoring en beveiligingsinstellingen zoals vereist voor productie-deployments. .OUTPUTS PSCustomObject met samenvattende en gedetailleerde resultaten. #> [CmdletBinding()] param() Write-Verbose "Ophalen van Machine Learning-werkruimten..." $workspaces = Get-MachineLearningWorkspaces $details = @() foreach ($ws in $workspaces) { $hasDeploymentTag = $false $deploymentTagValue = $null if ($ws.Tags -and $ws.Tags.ContainsKey($DeploymentTagName)) { $hasDeploymentTag = $true $deploymentTagValue = $ws.Tags[$DeploymentTagName] } # Controleer op diagnostische instellingen $diagSetting = $null try { $diagSetting = Get-AzDiagnosticSetting -ResourceId $ws.ResourceId -ErrorAction SilentlyContinue } catch { # Sommige resourcetypen ondersteunen geen diagnostische instellingen } # Controleer op Key Vault-integratie (indicatie van goede beveiliging) $usesKeyVault = $false try { # Controleer tags of andere indicatoren voor Key Vault-gebruik if ($ws.Tags -and $ws.Tags.ContainsKey('KeyVault')) { $usesKeyVault = $true } } catch { # Negeer fouten bij deze check } $obj = [PSCustomObject]@{ Name = $ws.Name ResourceGroup = $ws.ResourceGroupName Type = $ws.ResourceType HasDeploymentTag = $hasDeploymentTag DeploymentTagValue = $deploymentTagValue HasDiagnostics = [bool]$diagSetting UsesKeyVault = $usesKeyVault Location = $ws.Location } $details += $obj } $production = $details | Where-Object { $_.HasDeploymentTag -and $_.DeploymentTagValue -eq $DeploymentTagRequiredValue } $summary = [PSCustomObject]@{ TotalWorkspaces = $details.Count ProductionDeployments = $production.Count WithDiagnostics = ($production | Where-Object { $_.HasDiagnostics }).Count WithoutDiagnostics = ($production | Where-Object { -not $_.HasDiagnostics }).Count WithKeyVault = ($production | Where-Object { $_.UsesKeyVault }).Count WithoutKeyVault = ($production | Where-Object { -not $_.UsesKeyVault }).Count AllDetails = $details } return $summary } function Invoke-Monitoring { <# .SYNOPSIS Voert een gedetailleerde monitoringcontrole uit. .DESCRIPTION Toont een overzicht van Machine Learning-werkruimten en hun beveiligings- en monitoringconfiguratie, zodat beheerders gericht vervolgacties kunnen plannen. #> [CmdletBinding()] param() Connect-RequiredServices $result = Test-EndpointSecurity Write-Host "" -ForegroundColor White Write-Host "========================================" -ForegroundColor Cyan Write-Host $PolicyName -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host ("Totaal ML-werkruimten: {0}" -f $result.TotalWorkspaces) -ForegroundColor White Write-Host ("Productie-deployments: {0}" -f $result.ProductionDeployments) -ForegroundColor White Write-Host ("Met diagnostische logging: {0}" -f $result.WithDiagnostics) -ForegroundColor ($(if ($result.WithDiagnostics -gt 0) { 'Green' } else { 'Yellow' })) Write-Host ("Zonder diagnostische logging: {0}" -f $result.WithoutDiagnostics) -ForegroundColor ($(if ($result.WithoutDiagnostics -eq 0) { 'Green' } else { 'Red' })) Write-Host ("Met Key Vault-integratie: {0}" -f $result.WithKeyVault) -ForegroundColor ($(if ($result.WithKeyVault -gt 0) { 'Green' } else { 'Yellow' })) Write-Host ("Zonder Key Vault-integratie: {0}" -f $result.WithoutKeyVault) -ForegroundColor ($(if ($result.WithoutKeyVault -eq 0) { 'Green' } else { 'Yellow' })) if ($result.ProductionDeployments -eq 0) { Write-Host "`nLet op: er zijn nog geen werkruimten gemarkeerd met $DeploymentTagName=$DeploymentTagRequiredValue." -ForegroundColor Yellow Write-Host "Gebruik tags om duidelijk vast te leggen welke ML-werkruimten productie-deployments bevatten." -ForegroundColor Yellow } elseif ($result.WithoutDiagnostics -gt 0) { Write-Host "`nDe volgende productie-deployments missen diagnostische logging:" -ForegroundColor Yellow $result.AllDetails | Where-Object { $_.HasDeploymentTag -and $_.DeploymentTagValue -eq $DeploymentTagRequiredValue -and -not $_.HasDiagnostics } | Select-Object Name, ResourceGroup, Location | Format-Table -AutoSize } if ($result.ProductionDeployments -gt 0 -and $result.WithoutKeyVault -gt 0) { Write-Host "`nDe volgende productie-deployments hebben geen Key Vault-integratie:" -ForegroundColor Yellow $result.AllDetails | Where-Object { $_.HasDeploymentTag -and $_.DeploymentTagValue -eq $DeploymentTagRequiredValue -and -not $_.UsesKeyVault } | Select-Object Name, ResourceGroup, Location | Format-Table -AutoSize Write-Host "Aanbeveling: gebruik Azure Key Vault voor beveiligde opslag van secrets, keys en certificaten." -ForegroundColor Yellow } } function Invoke-Remediation { <# .SYNOPSIS Geeft aanbevelingen voor remediatie rond ML-deployment beveiliging. .DESCRIPTION Dit script wijzigt zelf geen resources, maar rapporteert waar beveiliging, logging en monitoring ontbreken zodat beheerders gerichte wijzigingen kunnen doorvoeren via beleid, ARM/Bicep of Terraform. #> [CmdletBinding()] param() Connect-RequiredServices $result = Test-EndpointSecurity Write-Host "" -ForegroundColor White Write-Host "========================================" -ForegroundColor Cyan Write-Host "$PolicyName - Remediatieadvies" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan $noTag = $result.AllDetails | Where-Object { -not $_.HasDeploymentTag } $tagNoDiag = $result.AllDetails | Where-Object { $_.HasDeploymentTag -and $_.DeploymentTagValue -eq $DeploymentTagRequiredValue -and -not $_.HasDiagnostics } $tagNoKeyVault = $result.AllDetails | Where-Object { $_.HasDeploymentTag -and $_.DeploymentTagValue -eq $DeploymentTagRequiredValue -and -not $_.UsesKeyVault } if ($noTag.Count -gt 0) { Write-Host "`nWerkruimten zonder $DeploymentTagName-tag (overweeg classificatie):" -ForegroundColor Yellow $noTag | Select-Object Name, ResourceGroup, Location | Format-Table -AutoSize Write-Host "Aanbeveling: bepaal per werkruimte of deze productie-deployments bevat en voeg de tag toe." -ForegroundColor Yellow } else { Write-Host "`nAlle gevonden werkruimten hebben een $DeploymentTagName-tag." -ForegroundColor Green } if ($tagNoDiag.Count -gt 0) { Write-Host "`nProductie-deployments zonder diagnostische logging:" -ForegroundColor Red $tagNoDiag | Select-Object Name, ResourceGroup, Location | Format-Table -AutoSize Write-Host "Aanbeveling: configureer diagnostische instellingen naar een centrale Log Analytics-werkruimte." -ForegroundColor Red Write-Host "Dit is essentieel voor monitoring, debugging en compliance-audittrails." -ForegroundColor Red } else { Write-Host "`nAlle productie-deployments hebben diagnostische logging geconfigureerd." -ForegroundColor Green } if ($tagNoKeyVault.Count -gt 0) { Write-Host "`nProductie-deployments zonder Key Vault-integratie:" -ForegroundColor Yellow $tagNoKeyVault | Select-Object Name, ResourceGroup, Location | Format-Table -AutoSize Write-Host "Aanbeveling: integreer Azure Key Vault voor beveiligde opslag van API-keys, connection strings en certificaten." -ForegroundColor Yellow } else { Write-Host "`nAlle productie-deployments gebruiken Key Vault voor secrets management." -ForegroundColor Green } Write-Host "`nAanvullende best practices:" -ForegroundColor Cyan Write-Host "- Configureer Azure Private Endpoints voor werkruimten die gevoelige data verwerken" -ForegroundColor Cyan Write-Host "- Implementeer Azure Policy om te controleren dat alle productie-endpoints logging hebben" -ForegroundColor Cyan Write-Host "- Gebruik Managed Identities voor authenticatie tussen services" -ForegroundColor Cyan Write-Host "- Configureer Application Insights voor gedetailleerde performance monitoring" -ForegroundColor Cyan Write-Host "- Implementeer versioning en rollback-strategieën voor model-deployments" -ForegroundColor Cyan } function Invoke-Implementation { <# .SYNOPSIS Wrapper om remediatieadvies aan te roepen. .DESCRIPTION Voor integratie in generieke tooling kan deze functie worden gebruikt als standaard implementatie-entrypoint. #> [CmdletBinding()] param() Invoke-Remediation } try { if ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { Invoke-Remediation } else { # Korte samenvatting voor snelle checks Connect-RequiredServices $result = Test-EndpointSecurity Write-Host ("ML Deployment beveiliging: {0} werkruimten, {1} productie, {2} met logging." -f ` $result.TotalWorkspaces, $result.ProductionDeployments, $result.WithDiagnostics) } } catch { Write-Error $_ exit 1 }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder veilige deployment-processen lopen machine learning-modellen in Azure een hoog risico op beveiligingsincidenten, datalekken, ongeautoriseerde toegang en onvoldoende traceerbaarheid. Dit kan leiden tot overtreding van AVG en EU AI Act, reputatieschade, operationele verstoringen en verlies van vertrouwen in AI-toepassingen binnen de overheid.

Management Samenvatting

Richt een veilig en beheerst deployment-proces in voor machine learning-modellen in Azure, met containerisatie, beveiligde endpoints, uitgebreide monitoring en logging, versiebeheer en gestructureerde change management. Combineer technische maatregelen met governance en compliance-borging om ervoor te zorgen dat AI-systemen veilig, betrouwbaar en aantoonbaar in control blijven gedurende de gehele operationele levenscyclus.