OCR-implementatie Met Azure Cognitive Services Voor Nederlandse Overheidsorganisaties

💼 Management Samenvatting

Optical Character Recognition (OCR) met Azure Cognitive Services maakt het mogelijk om tekst automatisch te extraheren uit gescande documenten, afbeeldingen en PDF-bestanden, wat essentieel is voor digitale transformatie en archiefbeheer in Nederlandse overheidsorganisaties.

Aanbeveling
IMPLEMENTEER OCR MET AZURE COGNITIVE SERVICES VOOR EFFICIËNTE DOCUMENTVERWERKING
Risico zonder
Medium
Risk Score
6/10
Implementatie
60u (tech: 40u)
Van toepassing op:
Azure
Azure Cognitive Services
Computer Vision
Document Intelligence

Nederlandse overheidsorganisaties werken met grote volumes historische en nieuwe documenten die moeten worden gedigitaliseerd, doorzoekbaar gemaakt en geïntegreerd in moderne workflows. Zonder geautomatiseerde OCR-oplossingen blijven documenten ondoorzoekbaar, wordt handmatige invoer tijdrovend en foutgevoelig, en ontstaan bottlenecks in processen zoals aanvraagverwerking, archiefbeheer en compliance-rapportage. Bovendien vereisen kaders zoals de Archiefwet en AVG dat organisaties documenten kunnen vinden, doorzoeken en beheren. Een goed geïmplementeerde OCR-oplossing met Azure Cognitive Services biedt schaalbaarheid, nauwkeurigheid en integratiemogelijkheden, terwijl het voldoet aan eisen rond dataresidency, encryptie en logging die voor de publieke sector gelden.

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

Implementatie

Dit artikel beschrijft een praktische aanpak voor het implementeren van OCR-functionaliteit met Azure Cognitive Services, specifiek toegesneden op Nederlandse overheidsorganisaties. U leert hoe u Azure Computer Vision of Document Intelligence configureert voor tekstextractie uit verschillende documenttypen, hoe u beveiliging en compliance borgt volgens BIO- en AVG-vereisten, en hoe u PowerShell-scripts gebruikt om OCR-resources te monitoren en te beheren. We behandelen onder andere architectuurkeuzes, kostenoptimalisatie, foutafhandeling, logging en integratie met bestaande systemen zoals SharePoint, documentmanagementsystemen en workflowtools.

Vereisten en architectuurkeuzes voor OCR-implementatie

Voordat u OCR-functionaliteit implementeert met Azure Cognitive Services, is het belangrijk om helder te hebben welke documenttypen u wilt verwerken, welke nauwkeurigheidseisen gelden en welke integraties nodig zijn. Nederlandse overheidsorganisaties werken vaak met een mix van historische archiefstukken, moderne digitale documenten, handgeschreven formulieren en gestructureerde formulieren zoals aanvragen en meldingen. Elk type vraagt om een andere aanpak: historische documenten kunnen beschadigd zijn of oude lettertypes bevatten, handgeschreven tekst vereist geavanceerde modellen, en gestructureerde formulieren kunnen profiteren van custom models die specifiek zijn getraind op uw formulieren.

Azure biedt twee hoofdopties voor OCR: Computer Vision Read API en Document Intelligence (voorheen Form Recognizer). De Read API is geschikt voor algemene tekstextractie uit afbeeldingen en PDF's, ondersteunt meerdere talen inclusief Nederlands, en biedt goede prestaties voor moderne, digitale documenten. Document Intelligence gaat verder door ook gestructureerde data te extraheren, tabellen te herkennen, key-value pairs te identificeren en custom models te ondersteunen voor specifieke formulieren. Voor overheidsorganisaties die veel gestandaardiseerde formulieren verwerken, zoals aanvraagformulieren, meldingen of registraties, biedt Document Intelligence significante voordelen in nauwkeurigheid en automatisering.

Architectuurkeuzes rondom OCR hebben impact op beveiliging, kosten en schaalbaarheid. Een eerste overweging is waar Cognitive Services-resources worden geplaatst: in dezelfde Azure-regio als uw data om latency te minimaliseren, of in een specifieke regio om te voldoen aan dataresidency-eisen. Voor Nederlandse overheidsorganisaties is het gebruikelijk om resources in West-Europa te plaatsen, of in specifieke regio's wanneer contractuele afspraken dat vereisen. Daarnaast moet worden bepaald of u een gedeelde Cognitive Services-resource gebruikt voor meerdere toepassingen, of aparte resources per workload om isolatie en kostencontrole te verbeteren. Tags en resource naming helpen om resources te categoriseren en kosten toe te wijzen aan specifieke projecten of afdelingen.

Beveiliging en compliance zijn cruciaal bij OCR-implementaties omdat documenten vaak persoonsgegevens, gevoelige informatie of vertrouwelijke overheidsinformatie bevatten. Alle communicatie tussen uw applicaties en Cognitive Services moet via HTTPS verlopen, en waar mogelijk via private endpoints om dataverkeer niet over het publieke internet te laten gaan. Access keys moeten worden opgeslagen in Azure Key Vault en worden geroteerd volgens een vast schema. Logging van alle OCR-aanroepen is essentieel voor auditdoeleinden en om te kunnen aantonen wie welke documenten heeft verwerkt, wanneer en met welk resultaat. Deze logs moeten worden opgeslagen in een Log Analytics-werkruimte met een retentieperiode die aansluit bij uw compliance-eisen, bijvoorbeeld zeven jaar voor archiefdoeleinden.

Kostenoptimalisatie vraagt om bewuste keuzes in pricing tiers en gebruikspatronen. Cognitive Services biedt verschillende pricing tiers: een gratis tier voor experimenten, standard tiers voor productiegebruik en custom tiers voor grote volumes. Voor overheidsorganisaties met voorspelbare volumes kan een commitment tier interessant zijn om kosten te reduceren. Daarnaast is het verstandig om te monitoren hoeveel pagina's of transacties daadwerkelijk worden gebruikt, om te voorkomen dat u betaalt voor capaciteit die niet nodig is. PowerShell-scripts kunnen helpen om gebruik te meten, trends te analyseren en alerts te genereren wanneer kosten boven verwachte drempels uitkomen. Door deze monitoring te combineren met resource tagging en cost allocation, krijgt u zicht op welke projecten of afdelingen de meeste OCR-kosten genereren.

Praktische implementatie en configuratie

De implementatie van OCR-functionaliteit begint bij het aanmaken van een Cognitive Services-resource in Azure. Via de Azure Portal, Azure CLI of PowerShell kunt u een Computer Vision of Document Intelligence-resource aanmaken in de gewenste resourcegroep en regio. Tijdens het aanmaken kiest u een pricing tier die past bij uw verwachte gebruik. Het is aan te raden om direct na het aanmaken tags toe te voegen die aangeven dat dit een OCR-resource is, bijvoorbeeld met tags zoals Workload=OCR, Environment=Production en Department=Archief. Deze tags helpen later bij het filteren van resources, het toepassen van policies en het alloceren van kosten.

Na het aanmaken van de resource ontvangt u endpoint-URL's en access keys. Deze credentials moeten veilig worden beheerd: sla ze op in Azure Key Vault in plaats van in code of configuratiebestanden, gebruik managed identities waar mogelijk om authenticatie te automatiseren, en implementeer key rotation volgens een vast schema. Voor applicaties die Cognitive Services aanroepen, is het gebruikelijk om een wrapper library of service te bouwen die de authenticatie afhandelt, fouten beheert, retry-logica implementeert en logging verzorgt. Deze abstractielaag maakt het eenvoudiger om later van API te wisselen, kosten te monitoren en compliance te borgen.

Voor Document Intelligence met custom models begint de implementatie met het trainen van een model op basis van voorbeelddocumenten. U uploadt representatieve formulieren naar een Azure Storage-account, labelt de relevante velden en start een trainingstaak. Het getrainde model kan vervolgens worden gebruikt om nieuwe documenten te analyseren met hoge nauwkeurigheid. Het is belangrijk om regelmatig de prestaties van custom models te evalueren en bij te trainen wanneer nieuwe formulieren worden geïntroduceerd of wanneer de nauwkeurigheid achteruitgaat. PowerShell-scripts kunnen helpen om trainingstaakjes te automatiseren, modelversies te beheren en prestaties te monitoren.

Integratie met bestaande systemen is een belangrijk onderdeel van OCR-implementaties. Veel Nederlandse overheidsorganisaties gebruiken SharePoint, documentmanagementsystemen of workflowtools waar OCR-functionaliteit naadloos in moet passen. Azure Logic Apps of Azure Functions kunnen worden gebruikt om workflows te bouwen die automatisch nieuwe documenten detecteren, OCR uitvoeren, resultaten valideren en de geëxtraheerde tekst opslaan in de juiste systemen. Voor grote volumes kan Azure Batch worden ingezet om OCR-taken parallel te verwerken. Het is verstandig om in deze workflows ook foutafhandeling, retry-logica en notificaties te bouwen, zodat gebruikers worden geïnformeerd wanneer documenten niet kunnen worden verwerkt of wanneer extra handmatige controle nodig is.

Monitoring en logging zijn essentieel om te begrijpen hoe OCR wordt gebruikt, waar problemen optreden en hoe kosten zich ontwikkelen. Configureer diagnostische instellingen op Cognitive Services-resources om alle API-aanroepen, fouten en gebruik te loggen naar een Log Analytics-werkruimte. Maak dashboards in Azure Monitor die inzicht geven in het aantal verwerkte documenten, de gemiddelde verwerkingstijd, foutpercentages en kosten per dag of week. Stel alerts in voor ongebruikelijk hoge foutpercentages, kosten die boven drempels uitkomen of wanneer resources niet beschikbaar zijn. PowerShell-scripts kunnen periodiek worden gedraaid om deze metrics te verzamelen, te analyseren en te rapporteren aan verantwoordelijke teams.

Compliance, beveiliging en AVG-overwegingen

OCR-implementaties in Nederlandse overheidsorganisaties moeten voldoen aan verschillende compliance-kaders, waaronder de AVG, de Archiefwet, de BIO en eventuele sectorspecifieke eisen. Een eerste aandachtspunt is dat OCR-documenten vaak persoonsgegevens bevatten, wat betekent dat verwerking moet voldoen aan AVG-principes zoals doelbinding, dataminimalisatie en bewaartermijnen. Wanneer u OCR gebruikt om documenten doorzoekbaar te maken, moet duidelijk zijn welk doel dit dient, wie toegang heeft tot de geëxtraheerde tekst en hoe lang deze data wordt bewaard. Documenteer deze afwegingen in een verwerkingsregister en voer waar nodig een DPIA uit, vooral wanneer OCR wordt gebruikt voor grootschalige verwerking of wanneer bijzondere categorieën van persoonsgegevens in het spel zijn.

Dataresidency is een belangrijk thema voor Nederlandse overheidsorganisaties. Zorg ervoor dat Cognitive Services-resources worden geplaatst in regio's die voldoen aan uw contractuele of beleidsmatige eisen rondom dataopslag. Microsoft biedt voor bepaalde Cognitive Services ook opties voor customer-managed keys, wat betekent dat u zelf de encryptiesleutels beheert in plaats van Microsoft. Dit kan belangrijk zijn wanneer u zeer gevoelige documenten verwerkt of wanneer compliance-eisen dit verplichten. Daarnaast is het verstandig om te overwegen of documenten die worden verwerkt via OCR mogelijk moeten worden versleuteld voordat ze naar Cognitive Services worden gestuurd, vooral wanneer deze over het publieke internet worden getransporteerd.

Logging en auditability zijn cruciaal voor compliance. Alle OCR-aanroepen moeten worden gelogd met informatie over wie de aanroep heeft gedaan, welk document is verwerkt, wanneer dit gebeurde en wat het resultaat was. Deze logs moeten worden opgeslagen met een retentieperiode die aansluit bij uw compliance-eisen, bijvoorbeeld zeven jaar voor archiefdoeleinden of langer wanneer specifieke wetgeving dit vereist. Gebruik Azure Log Analytics of een SIEM-oplossing om deze logs centraal te verzamelen, te analyseren en te beveiligen tegen ongeautoriseerde wijzigingen. PowerShell-scripts kunnen helpen om periodiek te controleren of logging correct is geconfigureerd en of er geen resources zijn zonder diagnostische instellingen.

Toegangsbeheer moet worden afgestemd op het gevoeligheidsniveau van de documenten die worden verwerkt. Gebruik Azure RBAC om te bepalen wie Cognitive Services-resources mag beheren en wie applicaties mag ontwikkelen die OCR gebruiken. Voor de daadwerkelijke OCR-aanroepen kunt u overwegen om aparte access keys te gebruiken per applicatie of omgeving, zodat u bij een incident snel specifieke toegang kunt intrekken zonder alle systemen te beïnvloeden. Implementeer waar mogelijk managed identities zodat applicaties automatisch kunnen authenticeren zonder dat keys in code hoeven te staan. Monitor regelmatig wie toegang heeft tot resources en of deze toegang nog nodig is, en voer access reviews uit volgens een vast schema.

Tot slot is het belangrijk om te overwegen hoe OCR-resultaten worden gebruikt en opgeslagen. Geëxtraheerde tekst kan worden opgeslagen in databases, zoekindexen of documentmanagementsystemen. Zorg ervoor dat deze opslag voldoet aan dezelfde beveiligings- en compliance-eisen als de originele documenten. Overweeg of geëxtraheerde tekst moet worden versleuteld, wie toegang heeft en hoe lang deze data wordt bewaard. Wanneer OCR wordt gebruikt om documenten doorzoekbaar te maken, moet duidelijk zijn dat zoekresultaten ook persoonsgegevens kunnen bevatten en dat toegang daarom moet worden gecontroleerd. Door deze overwegingen expliciet te maken in architectuurdocumenten en procedures, voorkomt u dat compliance achteraf problemen oplevert.

Monitoring en beheer van OCR-resources

Gebruik PowerShell-script ocr-implementation.ps1 (functie Invoke-Monitoring) – Controleert of Cognitive Services-resources voor OCR correct zijn geconfigureerd, of diagnostische logging is ingeschakeld en of resources voldoen aan beveiligings- en compliance-eisen..

Effectief beheer van OCR-resources vereist continue monitoring van beschikbaarheid, prestaties, kosten en compliance. Azure Monitor biedt verschillende metrics die inzicht geven in hoe Cognitive Services worden gebruikt, zoals het aantal transacties, de gemiddelde responsetijd, het aantal fouten en de kosten. Maak dashboards die deze metrics visualiseren en stel alerts in voor situaties die aandacht vereisen, zoals ongebruikelijk hoge foutpercentages, kosten die boven budget uitkomen of resources die niet beschikbaar zijn. Deze monitoring helpt niet alleen om problemen snel te detecteren, maar ook om trends te identificeren en capaciteitsplanning te ondersteunen.

Diagnostische logging is essentieel voor zowel operationeel beheer als compliance. Zorg ervoor dat op alle Cognitive Services-resources diagnostische instellingen zijn geconfigureerd die alle relevante gebeurtenissen loggen naar een Log Analytics-werkruimte. Dit omvat onder andere API-aanroepen, authenticatiepogingen, fouten en gebruik. Deze logs kunnen worden gebruikt om te analyseren welke applicaties het meest gebruikmaken van OCR, waar fouten optreden en of er ongebruikelijke activiteiten zijn die mogelijk wijzen op misbruik of beveiligingsincidenten. PowerShell-scripts kunnen periodiek controleren of diagnostische instellingen correct zijn geconfigureerd en of er geen resources zijn zonder logging.

Kostenmonitoring is belangrijk omdat Cognitive Services-gebruik kan oplopen wanneer grote volumes documenten worden verwerkt. Gebruik Azure Cost Management om kosten per resource, per tag of per tijdperiode te analyseren. Stel budget alerts in die waarschuwen wanneer kosten boven bepaalde drempels uitkomen, zodat u tijdig kunt ingrijpen. Analyseer kostenpatronen om te begrijpen welke workloads de meeste kosten genereren en of er mogelijkheden zijn voor optimalisatie, bijvoorbeeld door batchverwerking te gebruiken in plaats van real-time verwerking of door commitment tiers te overwegen bij voorspelbare volumes. PowerShell-scripts kunnen helpen om kostenperiodiek te rapporteren en trends te analyseren.

Compliance-monitoring omvat het controleren of resources voldoen aan beveiligings- en compliance-eisen zoals dataresidency, encryptie, logging en toegangsbeheer. Azure Policy kan worden gebruikt om automatisch te controleren of resources in de juiste regio's staan, of diagnostische logging is ingeschakeld, of resources de juiste tags hebben en of toegangsbeheer correct is geconfigureerd. Maak policy-initiatieven die specifiek zijn gericht op OCR-resources en wijs deze toe aan management groups of subscriptions. PowerShell-scripts kunnen periodiek worden gedraaid om te controleren of alle resources voldoen aan deze eisen en om rapportages te genereren voor auditdoeleinden.

Tot slot is het belangrijk om regelmatig te evalueren of OCR-implementaties nog voldoen aan de behoeften van de organisatie. Verzamel feedback van gebruikers over nauwkeurigheid, snelheid en bruikbaarheid. Analyseer metrics om te begrijpen waar verbeteringen mogelijk zijn, bijvoorbeeld door custom models te trainen voor specifieke formulieren of door workflows te optimaliseren. Houd bij of nieuwe features of services beschikbaar komen die voordelen kunnen bieden, en evalueer periodiek of de gekozen pricing tier nog het meest geschikt is. Door deze continue evaluatie en verbetering blijft de OCR-implementatie effectief, kostenefficiënt en compliant.

Remediatie en probleemoplossing

Gebruik PowerShell-script ocr-implementation.ps1 (functie Invoke-Remediation) – Configureert automatisch diagnostische logging, tags en basisbeveiligingsinstellingen voor Cognitive Services-resources die niet voldoen aan compliance-eisen..

Wanneer monitoring aangeeft dat OCR-resources niet voldoen aan beveiligings- of compliance-eisen, moeten remediatiestappen worden ondernomen. Veelvoorkomende problemen zijn het ontbreken van diagnostische logging, resources die in de verkeerde regio staan, ontbrekende tags of onjuiste toegangsbeheerconfiguraties. PowerShell-scripts kunnen worden gebruikt om deze problemen automatisch te verhelpen, bijvoorbeeld door diagnostische instellingen aan te maken, resources te verplaatsen naar de juiste regio of tags toe te voegen. Het is belangrijk om deze remediatie te documenteren en te loggen, zodat duidelijk is welke wijzigingen zijn doorgevoerd en waarom.

Voor problemen met OCR-nauwkeurigheid of prestaties zijn andere aanpakken nodig. Wanneer OCR-resultaten onnauwkeurig zijn, kan dit komen door slechte beeldkwaliteit, ongebruikelijke lettertypes, complexe layouts of handgeschreven tekst. Overweeg om documenten voor te bewerken voordat ze naar Cognitive Services worden gestuurd, bijvoorbeeld door contrast te verbeteren, ruis te verwijderen of documenten te roteren. Voor gestructureerde formulieren kan het trainen van custom models de nauwkeurigheid significant verbeteren. Wanneer prestaties een probleem zijn, overweeg dan om batchverwerking te gebruiken in plaats van real-time verwerking, of om meerdere resources te gebruiken voor parallelle verwerking.

Foutafhandeling in applicaties die OCR gebruiken moet robuust zijn. Cognitive Services kunnen verschillende fouten retourneren, zoals rate limiting, service unavailable, invalid request of authentication errors. Implementeer retry-logica met exponential backoff voor tijdelijke fouten, en zorg voor duidelijke foutmeldingen en logging voor permanente fouten. Monitor foutpercentages en stel alerts in voor ongebruikelijk hoge aantallen fouten, zodat problemen snel kunnen worden opgelost. Documenteer veelvoorkomende fouten en hun oplossingen, zodat ontwikkelaars en beheerders snel kunnen reageren wanneer problemen optreden.

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 Monitoring en remediatie voor OCR-implementatie met Azure Cognitive Services .DESCRIPTION Dit script ondersteunt organisaties bij het monitoren en beheren van Cognitive Services-resources die worden gebruikt voor OCR-functionaliteit. Het controleert of resources correct zijn geconfigureerd, of diagnostische logging is ingeschakeld, of resources de juiste tags hebben en of beveiligings- en compliance-eisen worden nageleefd. Het script kan worden gebruikt voor: - Monitoring: Controleren of OCR-resources voldoen aan compliance-eisen - Remediatie: Automatisch configureren van diagnostische logging en tags - Revert: Verwijderen van automatisch aangemaakte configuraties .NOTES Filename: ocr-implementation.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Gerelateerde JSON: content/azure/cognitive-services/ocr-implementation.json Vereiste modules: - Az.Accounts - Az.CognitiveServices - Az.Monitor - Az.Resources .EXAMPLE .\ocr-implementation.ps1 -Monitoring Voert een compliance-controle uit op alle Cognitive Services-resources. .EXAMPLE .\ocr-implementation.ps1 -Monitoring -SubscriptionId "00000000-0000-0000-0000-000000000000" Voert de controle uit voor één specifieke subscription. .EXAMPLE .\ocr-implementation.ps1 -Remediation Configureert automatisch diagnostische logging en tags voor resources die niet compliant zijn. .EXAMPLE .\ocr-implementation.ps1 -Revert Verwijdert automatisch aangemaakte diagnostische instellingen (gebruik met voorzichtigheid). #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.CognitiveServices, Az.Monitor, Az.Resources [CmdletBinding()] param( [Parameter(HelpMessage = "Voer monitoring uit op OCR-resources.")] [switch]$Monitoring, [Parameter(HelpMessage = "Voer automatische remediatie uit voor niet-compliant resources.")] [switch]$Remediation, [Parameter(HelpMessage = "Verwijder automatisch aangemaakte configuraties (gebruik met voorzichtigheid).")] [switch]$Revert, [Parameter(HelpMessage = "Optioneel: specifieke subscription-ID om te controleren.")] [string]$SubscriptionId, [Parameter(HelpMessage = "Optioneel: naam van Log Analytics-werkruimte voor diagnostische logging.")] [string]$LogAnalyticsWorkspaceName, [Parameter(HelpMessage = "Optioneel: resourcegroep van Log Analytics-werkruimte.")] [string]$LogAnalyticsResourceGroupName, [Parameter(HelpMessage = "Toon wat-if analyse zonder wijzigingen door te voeren.")] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' # Configuratie $RequiredTags = @('Workload', 'Environment') $OcrTagName = 'Workload' $OcrTagValue = 'OCR' $DiagnosticSettingName = 'OCR-Diagnostic-Logging' $CognitiveServicesTypes = @( 'Microsoft.CognitiveServices/accounts' ) function Connect-RequiredServices { <# .SYNOPSIS Maakt verbinding met Azure indien nog geen context aanwezig 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-TargetSubscriptions { <# .SYNOPSIS Bepaalt welke subscriptions worden meegenomen in de controle. #> [CmdletBinding()] param() if ($SubscriptionId) { $sub = Get-AzSubscription -SubscriptionId $SubscriptionId -ErrorAction Stop return ,$sub } return Get-AzSubscription -ErrorAction Stop } function Get-CognitiveServicesResources { <# .SYNOPSIS Haalt Cognitive Services-resources op binnen een subscription. .DESCRIPTION Filtert op resourcetypen die worden gebruikt voor OCR-functionaliteit. #> [CmdletBinding()] param( [Parameter(Mandatory)] [string]$SubscriptionId ) Set-AzContext -SubscriptionId $SubscriptionId -ErrorAction Stop | Out-Null $resources = @() foreach ($type in $CognitiveServicesTypes) { $res = Get-AzResource -ResourceType $type -ErrorAction SilentlyContinue if ($res) { $resources += $res } } return $resources } function Test-ResourceCompliance { <# .SYNOPSIS Controleert of een resource voldoet aan compliance-eisen. .OUTPUTS PSCustomObject met compliance-status en details. #> [CmdletBinding()] param( [Parameter(Mandatory)] [Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.PSResource]$Resource ) $compliance = @{ IsCompliant = $true Issues = @() HasDiagnosticLogging = $false HasRequiredTags = $false MissingTags = @() } # Controleer tags $tags = $Resource.Tags if ($tags) { $hasOcrTag = $tags.ContainsKey($OcrTagName) -and $tags[$OcrTagName] -eq $OcrTagValue $missingRequiredTags = $RequiredTags | Where-Object { -not $tags.ContainsKey($_) } if ($hasOcrTag -and $missingRequiredTags.Count -eq 0) { $compliance.HasRequiredTags = $true } else { $compliance.IsCompliant = $false if (-not $hasOcrTag) { $compliance.Issues += "Ontbrekende of onjuiste OCR-tag" } if ($missingRequiredTags.Count -gt 0) { $compliance.MissingTags = $missingRequiredTags $compliance.Issues += "Ontbrekende verplichte tags: $($missingRequiredTags -join ', ')" } } } else { $compliance.IsCompliant = $false $compliance.Issues += "Geen tags geconfigureerd" $compliance.MissingTags = $RequiredTags } # Controleer diagnostische logging try { $diagnosticSettings = Get-AzDiagnosticSetting -ResourceId $Resource.ResourceId -ErrorAction SilentlyContinue if ($diagnosticSettings -and $diagnosticSettings.Count -gt 0) { $compliance.HasDiagnosticLogging = $true } else { $compliance.IsCompliant = $false $compliance.Issues += "Geen diagnostische logging geconfigureerd" } } catch { $compliance.IsCompliant = $false $compliance.Issues += "Kan diagnostische instellingen niet controleren: $($_.Exception.Message)" } return [PSCustomObject]$compliance } function Set-ResourceRemediation { <# .SYNOPSIS Voert remediatie uit op een resource om compliance te verbeteren. #> [CmdletBinding()] param( [Parameter(Mandatory)] [Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.PSResource]$Resource, [Parameter(Mandatory)] [string]$LogAnalyticsWorkspaceId ) $changes = @() # Voeg ontbrekende tags toe $tags = if ($Resource.Tags) { $Resource.Tags.Clone() } else { @{} } $tagsChanged = $false if (-not $tags.ContainsKey($OcrTagName) -or $tags[$OcrTagName] -ne $OcrTagValue) { $tags[$OcrTagName] = $OcrTagValue $tagsChanged = $true $changes += "OCR-tag toegevoegd" } foreach ($requiredTag in $RequiredTags) { if (-not $tags.ContainsKey($requiredTag)) { $tags[$requiredTag] = "ToBeDefined" $tagsChanged = $true $changes += "Tag '$requiredTag' toegevoegd (waarde moet handmatig worden ingesteld)" } } if ($tagsChanged) { if (-not $WhatIf) { Set-AzResource -ResourceId $Resource.ResourceId -Tag $tags -Force -ErrorAction Stop | Out-Null Write-Host " Tags bijgewerkt voor $($Resource.Name)" -ForegroundColor Green } else { Write-Host " [WHAT-IF] Tags zouden worden bijgewerkt voor $($Resource.Name)" -ForegroundColor Yellow } } # Configureer diagnostische logging try { $existingSettings = Get-AzDiagnosticSetting -ResourceId $Resource.ResourceId -ErrorAction SilentlyContinue $hasDiagnosticSetting = $existingSettings | Where-Object { $_.Name -eq $DiagnosticSettingName } if (-not $hasDiagnosticSetting) { if (-not $WhatIf) { $diagnosticParams = @{ ResourceId = $Resource.ResourceId Name = $DiagnosticSettingName WorkspaceId = $LogAnalyticsWorkspaceId Enabled = $true } Set-AzDiagnosticSetting @diagnosticParams -ErrorAction Stop | Out-Null Write-Host " Diagnostische logging geconfigureerd voor $($Resource.Name)" -ForegroundColor Green $changes += "Diagnostische logging geconfigureerd" } else { Write-Host " [WHAT-IF] Diagnostische logging zou worden geconfigureerd voor $($Resource.Name)" -ForegroundColor Yellow $changes += "Diagnostische logging zou worden geconfigureerd" } } } catch { Write-Warning " Kan diagnostische logging niet configureren voor $($Resource.Name): $($_.Exception.Message)" $changes += "Fout bij configureren diagnostische logging: $($_.Exception.Message)" } return $changes } function Get-LogAnalyticsWorkspace { <# .SYNOPSIS Haalt Log Analytics-werkruimte op voor diagnostische logging. #> [CmdletBinding()] param() if ($LogAnalyticsWorkspaceName -and $LogAnalyticsResourceGroupName) { $workspace = Get-AzOperationalInsightsWorkspace ` -ResourceGroupName $LogAnalyticsResourceGroupName ` -Name $LogAnalyticsWorkspaceName ` -ErrorAction Stop return $workspace.ResourceId } # Zoek naar een bestaande Log Analytics-werkruimte $workspaces = Get-AzOperationalInsightsWorkspace -ErrorAction SilentlyContinue if ($workspaces -and $workspaces.Count -gt 0) { Write-Host "Gebruik van bestaande Log Analytics-werkruimte: $($workspaces[0].Name)" -ForegroundColor Yellow return $workspaces[0].ResourceId } throw "Geen Log Analytics-werkruimte gevonden. Geef -LogAnalyticsWorkspaceName en -LogAnalyticsResourceGroupName op." } function Invoke-Monitoring { <# .SYNOPSIS Hoofdfunctie die compliance-controle uitvoert op OCR-resources. .OUTPUTS PSCustomObject met per subscription compliance-status. #> [CmdletBinding()] param() Connect-RequiredServices $subscriptions = Get-TargetSubscriptions $results = @() $totalResources = 0 $compliantResources = 0 foreach ($sub in $subscriptions) { Write-Host "`nControleren van subscription: $($sub.Name) ($($sub.Id))..." -ForegroundColor Cyan $resources = Get-CognitiveServicesResources -SubscriptionId $sub.Id $totalResources += $resources.Count if ($resources.Count -eq 0) { Write-Host " Geen Cognitive Services-resources gevonden." -ForegroundColor Yellow continue } $subscriptionResults = @() foreach ($resource in $resources) { Write-Verbose "Controleren van resource: $($resource.Name)" $compliance = Test-ResourceCompliance -Resource $resource if ($compliance.IsCompliant) { $compliantResources++ Write-Host " ✓ $($resource.Name): COMPLIANT" -ForegroundColor Green } else { Write-Host " ✗ $($resource.Name): NON-COMPLIANT" -ForegroundColor Red foreach ($issue in $compliance.Issues) { Write-Host " - $issue" -ForegroundColor Yellow } } $subscriptionResults += [PSCustomObject]@{ SubscriptionId = $sub.Id SubscriptionName = $sub.Name ResourceName = $resource.Name ResourceGroup = $resource.ResourceGroupName ResourceType = $resource.ResourceType IsCompliant = $compliance.IsCompliant HasDiagnosticLogging = $compliance.HasDiagnosticLogging HasRequiredTags = $compliance.HasRequiredTags Issues = $compliance.Issues -join '; ' } } $results += $subscriptionResults } Write-Host "`n===================================================" -ForegroundColor Green Write-Host "OCR-implementatie - Compliance Overzicht" -ForegroundColor Green Write-Host "===================================================" -ForegroundColor Green Write-Host "Totaal resources gecontroleerd: $totalResources" -ForegroundColor White Write-Host "Compliant resources: $compliantResources" -ForegroundColor $(if ($compliantResources -eq $totalResources) { "Green" } else { "Yellow" }) Write-Host "Non-compliant resources: $($totalResources - $compliantResources)" -ForegroundColor $(if (($totalResources - $compliantResources) -eq 0) { "Green" } else { "Red" }) if ($totalResources -gt 0 -and $compliantResources -lt $totalResources) { Write-Host "`nGebruik -Remediation om automatisch remediatie uit te voeren." -ForegroundColor Yellow exit 1 } else { exit 0 } } function Invoke-Remediation { <# .SYNOPSIS Voert automatische remediatie uit op niet-compliant resources. #> [CmdletBinding()] param() Connect-RequiredServices try { $workspaceId = Get-LogAnalyticsWorkspace } catch { Write-Error "Kan Log Analytics-werkruimte niet vinden: $($_.Exception.Message)" Write-Host "Gebruik -LogAnalyticsWorkspaceName en -LogAnalyticsResourceGroupName om een werkruimte op te geven." -ForegroundColor Yellow exit 1 } $subscriptions = Get-TargetSubscriptions $totalRemediated = 0 foreach ($sub in $subscriptions) { Write-Host "`nRemediatie uitvoeren voor subscription: $($sub.Name)..." -ForegroundColor Cyan $resources = Get-CognitiveServicesResources -SubscriptionId $sub.Id foreach ($resource in $resources) { $compliance = Test-ResourceCompliance -Resource $resource if (-not $compliance.IsCompliant) { Write-Host " Remediatie uitvoeren voor: $($resource.Name)" -ForegroundColor Yellow $changes = Set-ResourceRemediation -Resource $resource -LogAnalyticsWorkspaceId $workspaceId if ($changes.Count -gt 0) { $totalRemediated++ Write-Host " Wijzigingen: $($changes -join ', ')" -ForegroundColor Green } } else { Write-Host " $($resource.Name): Al compliant, geen actie nodig" -ForegroundColor Green } } } Write-Host "`nRemediatie voltooid. $totalRemediated resource(s) bijgewerkt." -ForegroundColor Green } function Invoke-Revert { <# .SYNOPSIS Verwijdert automatisch aangemaakte configuraties (gebruik met voorzichtigheid). #> [CmdletBinding()] param() Connect-RequiredServices $subscriptions = Get-TargetSubscriptions $totalReverted = 0 foreach ($sub in $subscriptions) { Write-Host "`nRevert uitvoeren voor subscription: $($sub.Name)..." -ForegroundColor Yellow $resources = Get-CognitiveServicesResources -SubscriptionId $sub.Id foreach ($resource in $resources) { try { $diagnosticSettings = Get-AzDiagnosticSetting -ResourceId $resource.ResourceId -ErrorAction SilentlyContinue $autoCreatedSettings = $diagnosticSettings | Where-Object { $_.Name -eq $DiagnosticSettingName } if ($autoCreatedSettings) { if (-not $WhatIf) { Remove-AzDiagnosticSetting -ResourceId $resource.ResourceId -Name $DiagnosticSettingName -ErrorAction Stop Write-Host " Diagnostische instelling verwijderd voor: $($resource.Name)" -ForegroundColor Yellow $totalReverted++ } else { Write-Host " [WHAT-IF] Diagnostische instelling zou worden verwijderd voor: $($resource.Name)" -ForegroundColor Yellow } } } catch { Write-Warning " Kan diagnostische instelling niet verwijderen voor $($resource.Name): $($_.Exception.Message)" } } } Write-Host "`nRevert voltooid. $totalReverted configuratie(s) verwijderd." -ForegroundColor Yellow } # Hoofdlogica try { if ($Revert) { Invoke-Revert } elseif ($Remediation) { Invoke-Remediation } elseif ($Monitoring) { Invoke-Monitoring } else { Write-Host "Gebruik: -Monitoring | -Remediation | -Revert" -ForegroundColor Yellow Write-Host "`nVoorbeelden:" -ForegroundColor Cyan Write-Host " .\ocr-implementation.ps1 -Monitoring" -ForegroundColor White Write-Host " .\ocr-implementation.ps1 -Remediation -LogAnalyticsWorkspaceName 'MyWorkspace' -LogAnalyticsResourceGroupName 'MyResourceGroup'" -ForegroundColor White } } catch { Write-Error $_ exit 1 }

Risico zonder implementatie

Risico zonder implementatie
Medium: Zonder geautomatiseerde OCR blijven documenten ondoorzoekbaar, wordt handmatige invoer tijdrovend en foutgevoelig, en ontstaan bottlenecks in processen zoals aanvraagverwerking en archiefbeheer. Dit leidt tot hogere operationele kosten, langere doorlooptijden en compliance-risico's.

Management Samenvatting

Implementeer OCR-functionaliteit met Azure Cognitive Services om documenten automatisch te digitaliseren en doorzoekbaar te maken. Configureer beveiliging, logging en compliance volgens BIO- en AVG-eisen, en gebruik PowerShell-scripts om resources te monitoren en te beheren.