Back-up En Herstelplanning In Azure

💼 Management Samenvatting

Een doordacht back-up en herstelplan vormt de fundering van elke robuuste Azure-omgeving. Zonder adequate back-upstrategieën lopen Nederlandse overheidsorganisaties het risico op onherstelbaar gegevensverlies bij hardwarestoringen, menselijke fouten, malware-aanvallen of onbedoelde configuratiewijzigingen. Azure Backup biedt een schaalbare en kostenefficiënte oplossing voor het beschermen van virtuele machines, databases, bestandsservers en applicaties, maar vereist wel een gestructureerde aanpak voor planning, configuratie, monitoring en regelmatige validatie.

Aanbeveling
IMPLEMENTEER AZURE BACKUP VOOR ALLE KRITIEKE WORKLOADS
Risico zonder
High
Risk Score
9/10
Implementatie
120u (tech: 80u)
Van toepassing op:
Azure Tenant
Azure Virtual Machines
Azure SQL Databases
Azure Storage Accounts
On-premises workloads

Zonder een goed doordacht back-up en herstelplan lopen organisaties een onacceptabel risico op permanent verlies van kritieke gegevens, configuraties en applicatiestaten. In de praktijk blijkt dat veel organisaties wel Azure Backup hebben ingeschakeld, maar dat back-upconfiguraties incompleet zijn, retentiebeleidsregels niet aansluiten bij wettelijke bewaarplichten, of dat herstelprocedures niet zijn getest. Dit leidt tot valse zekerheid: wanneer een restore daadwerkelijk nodig is, blijkt dat back-ups niet beschikbaar zijn, dat hersteltijden veel langer duren dan verwacht, of dat gereconstrueerde systemen niet functioneel zijn. Voor Nederlandse overheidsorganisaties heeft dit directe impact op wettelijke verplichtingen zoals de Archiefwet, de AVG, en sectorale normen die vereisen dat gegevens adequaat worden beschermd en herstelbaar zijn. Daarnaast stellen kaders zoals BIO en NIS2 expliciet eisen aan back-up- en herstelmaatregelen: organisaties moeten aantonen dat zij passende maatregelen hebben getroffen om gegevens te beschermen tegen verlies, inclusief geteste herstelprocedures en gedocumenteerde retentiebeleidsregels. Zonder een correct geconfigureerd en getest back-up en herstelplan kunnen organisaties niet aantonen dat zij voldoen aan deze verplichtingen.

PowerShell Modules Vereist
Primary API: Azure API
Connection: Connect-AzAccount
Required Modules: Az.Accounts, Az.RecoveryServices, Az.Compute, Az.Sql, Az.Storage

Implementatie

Dit artikel beschrijft stap voor stap hoe u een complete back-up en herstelstrategie inricht voor Azure-omgevingen. U leert hoe u een Recovery Services-kluis configureert als centrale beheeromgeving voor alle back-ups, hoe u back-upbeleidsregels definieert die aansluiten bij uw retentievereisten en wettelijke bewaarplichten, en hoe u verschillende typen workloads beschermt: Azure virtuele machines, SQL-databases, bestandsservers en on-premises systemen. Vervolgens wordt uitgelegd hoe u herstelprocedures documenteert en test, hoe u back-upstatus monitort via Azure Monitor en alerts, en hoe u back-upkosten optimaliseert zonder de bescherming te verminderen. Het artikel behandelt ook geavanceerde scenario's zoals cross-region back-ups, immutabele back-ups voor ransomware-bescherming, en integratie met Azure Site Recovery voor een complete disaster recovery-strategie. Tot slot wordt ingegaan op compliance-rapportage en audit-evidence, zodat u aantoonbaar kunt rapporteren aan bestuur en auditors dat uw back-up en herstelomgeving correct is geconfigureerd en regelmatig wordt gevalideerd. Het bijbehorende PowerShell-script ondersteunt beheerteams bij het controleren van back-upconfiguraties, het identificeren van workloads zonder back-upbescherming en het rapporteren van back-upstatus en hersteltestresultaten.

Back-upstrategie en Architectuurkeuzes

Voordat u Azure Backup configureert, moet u eerst een duidelijk beeld hebben van uw back-upbehoeften en architectuurkeuzes. Begin met een inventarisatie van alle workloads die bescherming nodig hebben: virtuele machines, SQL-databases, bestandsservers, applicaties en configuratiegegevens. Voor elke workload bepaalt u de kriticiteit, de frequentie waarmee wijzigingen plaatsvinden, en de wettelijke of organisatorische bewaarplichten. Deze informatie vormt de basis voor uw back-upstrategie en bepaalt welke retentieperioden, back-upfrequenties en hersteldoelstellingen nodig zijn. Een belangrijke architectuurkeuze betreft de keuze tussen lokaal redundante opslag (LRS), geo-redundante opslag (GRS) en zone-redundante opslag (ZRS) voor de Recovery Services-kluis. LRS is de meest kostenefficiënte optie maar biedt alleen bescherming tegen hardwarestoringen binnen één datacenter. GRS repliceert back-ups naar een secundaire regio en biedt bescherming tegen regionale calamiteiten, wat essentieel is voor kritieke workloads. ZRS biedt redundantie binnen één regio via beschikbaarheidszones en is een goede balans tussen kosten en bescherming. Voor Nederlandse overheidsorganisaties is het verstandig om voor kritieke workloads GRS te kiezen met replicatie naar een andere Azure-regio binnen Europa, om te voldoen aan datalocatievereisten en om optimale hersteltijden te garanderen. Vervolgens moet u bepalen welke workloads in aanmerking komen voor Azure Backup en welke aanvullende bescherming nodig is. Niet alle systemen vereisen dezelfde back-upfrequentie: voor databases die dagelijks wijzigen kan een dagelijkse back-up met 30 dagen retentie voldoende zijn, terwijl voor configuratiebestanden wekelijkse back-ups met langere retentie passender kunnen zijn. Voor workloads met zeer hoge beschikbaarheidseisen kan een combinatie van Azure Backup en Azure Site Recovery worden overwogen: back-ups voor point-in-time recovery en replicatie voor snelle failover. Overweeg daarnaast of u immutabele back-ups nodig heeft voor ransomware-bescherming, wat vereist dat back-ups niet kunnen worden gewijzigd of verwijderd gedurende een vastgestelde periode, zelfs niet door beheerders met hoge rechten. Tot slot moet u nadenken over back-upkosten en optimalisatie. Azure Backup rekent kosten op basis van de hoeveelheid opgeslagen gegevens, de gekozen redundantie-optie en eventuele cross-region replicatie. Door slim gebruik te maken van incremental back-ups, compressie en deduplicatie kunnen kosten worden gereduceerd zonder de bescherming te verminderen. Daarnaast is het belangrijk om regelmatig te controleren of oude back-ups nog nodig zijn en of retentiebeleidsregels kunnen worden aangepast zonder in strijd te komen met wettelijke bewaarplichten. Door back-upkosten expliciet op te nemen in de jaarlijkse budgetcyclus en te koppelen aan risicomanagement, ontstaat een duurzame balans tussen bescherming en kostenbeheersing.

Implementatie van Azure Backup

Gebruik PowerShell-script backup-recovery-planning.ps1 (functie Invoke-Implementation) – Configureert Azure Backup voor workloads en controleert back-upstatus.

De implementatie van Azure Backup begint met het inrichten van een Recovery Services-kluis in de primaire regio. Deze kluis fungeert als centrale beheeromgeving voor alle back-upconfiguraties, retentiebeleidsregels en hersteloperaties. Kies een duidelijke naamgevingsconventie, bijvoorbeeld Backup-Vault-WestEurope-prod, zodat het direct duidelijk is voor welke omgeving en regio de kluis bedoeld is. Configureer de kluis met geo-redundante opslag voor kritieke workloads en zorg dat de kluis zich in dezelfde regio bevindt als uw primaire workloads voor optimale prestaties en lagere kosten. Vervolgens moet u back-upbeleidsregels configureren die aansluiten bij uw retentievereisten en wettelijke bewaarplichten. Een back-upbeleidsregel definieert hoe vaak back-ups worden gemaakt, hoe lang deze worden bewaard, en of app-consistente snapshots worden gemaakt. Voor workloads met dagelijkse wijzigingen configureert u een dagelijks back-upschema met een retentie van minimaal 30 dagen. Voor langetermijnarchivering, bijvoorbeeld voor compliance met de Archiefwet, kan aanvullende retentie nodig zijn voor maandelijkse of jaarlijkse back-ups die tot 7 jaar of langer worden bewaard. App-consistente snapshots zijn essentieel voor databases en applicaties die transacties verwerken, omdat deze ervoor zorgen dat de back-up in een consistente staat verkeert en direct functioneel is na herstel. Na het configureren van het back-upbeleid moet u de workloads koppelen aan dit beleid. Voor Azure VM's gebeurt dit via de Azure Portal of PowerShell door de VM te selecteren, Backup in te schakelen en het juiste back-upbeleid te kiezen. Voor SQL-databases binnen Azure VM's moet u de SQL Server Backup-extensie inschakelen, die automatisch app-consistente back-ups maakt. Voor on-premises workloads moet eerst de Microsoft Azure Recovery Services-agent worden geïnstalleerd op de bronmachines. Deze agent verzorgt de back-up van gegevens naar Azure en moet regelmatig worden bijgewerkt voor optimale prestaties en beveiliging. Een kritiek onderdeel van de implementatie is het configureren van immutabele back-ups voor ransomware-bescherming. Immutabele back-ups kunnen niet worden gewijzigd of verwijderd gedurende een vastgestelde periode, zelfs niet door beheerders met hoge rechten of door kwaadaardige actoren die toegang hebben gekregen tot beheeraccounts. Dit vereist dat u soft delete en immutability inschakelt op de Recovery Services-kluis en een minimum retentieperiode configureert, bijvoorbeeld 7 dagen of langer. Hoewel dit extra kosten met zich meebrengt, biedt het essentiële bescherming tegen ransomware-aanvallen waarbij aanvallers proberen back-ups te verwijderen om herstel te voorkomen.

Herstelprocedures en Testen

Een back-up is alleen waardevol als deze daadwerkelijk kan worden hersteld binnen de afgesproken tijd en met de vereiste functionaliteit. Daarom is het essentieel om herstelprocedures te documenteren en regelmatig te testen. Begin met het opstellen van gedetailleerde hersteldraaiboeken voor elk type workload: virtuele machines, databases, bestandsservers en applicaties. Elk draaiboek beschrijft stap voor stap hoe een restore wordt uitgevoerd, welke voorbereidingen nodig zijn, hoe lang het herstel duurt en hoe de functionaliteit wordt gevalideerd na herstel. Voor virtuele machines beschrijft het hersteldraaiboek hoe u een volledige VM-restore uitvoert naar de oorspronkelijke locatie of naar een alternatieve locatie, hoe u individuele bestanden herstelt vanuit een VM-back-up, en hoe u een VM herstelt naar een specifiek herstelpunt. Belangrijk is dat u ook beschrijft hoe netwerkconfiguraties, identiteitsintegratie en applicatieconfiguraties worden hersteld, omdat een VM die technisch correct is hersteld maar niet kan communiceren met andere systemen niet functioneel is. Voor SQL-databases beschrijft het draaiboek hoe u een volledige database-restore uitvoert, hoe u point-in-time recovery gebruikt om te herstellen naar een specifiek tijdstip vóór een data corruption incident, en hoe u individuele tabellen of records herstelt vanuit een back-up. Regelmatig testen van herstelprocedures is cruciaal om te garanderen dat back-ups daadwerkelijk herstelbaar zijn en dat hersteltijden binnen de afgesproken RTO blijven. Voer minimaal kwartaalgewijze hersteltests uit voor alle kritieke workloads, waarbij u een volledige restore uitvoert naar een geïsoleerde testomgeving. Tijdens deze tests meet u de daadwerkelijke hersteltijd, controleert u of de gereconstrueerde workload functioneel is, en valideert u of alle afhankelijkheden correct zijn hersteld. Documenteer de resultaten, inclusief doorlooptijden, geïdentificeerde problemen en verbeteracties, zodat deze informatie beschikbaar is voor toekomstige audits en verbeteringen. Voor Nederlandse overheidsorganisaties is het belangrijk om hersteltestresultaten te koppelen aan compliance-rapportage. BIO en NIS2 vereisen dat organisaties aantoonbaar testen of back-up- en herstelprocedures werken. Documenteer daarom voor elke hersteltest het scenario, de geteste workloads, de doorlooptijden, de geïdentificeerde problemen en de opgevolgde verbeteracties. Deze documentatie vormt het bewijs voor auditors en toezichthouders dat uw back-up en herstelomgeving niet alleen is geconfigureerd, maar ook regelmatig wordt getest en verbeterd.

Monitoring en Alerting

Gebruik PowerShell-script backup-recovery-planning.ps1 (functie Invoke-Monitoring) – Controleert back-upstatus, health en hersteltestresultaten.

Monitoring van Azure Backup is essentieel om te garanderen dat back-ups daadwerkelijk worden gemaakt en dat workloads binnen de afgesproken RPO kunnen worden hersteld. Azure Backup biedt ingebouwde monitoring via de Recovery Services-kluis, waar u de back-upstatus, health en recente back-upjobs kunt bekijken. Configureer Azure Monitor alerts voor kritieke gebeurtenissen zoals mislukte back-upjobs, workloads zonder back-upbescherming, of back-ups die niet binnen de afgesproken RPO zijn gemaakt, zodat beheerteams direct worden gewaarschuwd wanneer er problemen optreden. Naast technische monitoring moet u ook regelmatig controleren of alle workloads daadwerkelijk zijn beschermd. Nieuwe virtuele machines, databases of bestandsservers worden niet automatisch toegevoegd aan back-upbeleidsregels; dit vereist expliciete configuratie. Gebruik Azure Policy om af te dwingen dat nieuwe workloads automatisch worden gekoppeld aan een back-upbeleidsregel, of implementeer een regelmatige scan die identificeert welke workloads niet zijn beschermd. Voor grote omgevingen kan dit worden geautomatiseerd via PowerShell-scripts die periodiek alle workloads inventariseren en rapporteren welke workloads back-upbescherming missen. Voor Nederlandse overheidsorganisaties is het belangrijk om back-upmonitoring te koppelen aan compliance-rapportage. BIO en NIS2 vereisen dat organisaties aantoonbaar monitoren of back-up- en herstelmaatregelen correct functioneren. Documenteer daarom welke monitoring en alerts zijn geconfigureerd, hoe vaak back-upstatus wordt gecontroleerd, en welke acties worden ondernomen wanneer problemen worden gesignaleerd. Deze documentatie vormt het bewijs voor auditors en toezichthouders dat uw back-up en herstelomgeving niet alleen is geconfigureerd, maar ook actief wordt gemonitord en beheerd.

Compliance en Best Practices

Azure Backup-configuratie moet worden ingebed in een breder compliance- en governance-raamwerk. Voor Nederlandse overheidsorganisaties betekent dit dat back-upconfiguraties moeten aansluiten bij de Baseline Informatiebeveiliging Overheid (BIO), met name de normen rond back-up- en herstelmaatregelen. Documenteer daarom expliciet welke workloads zijn beschermd, welke retentieperioden gelden, en hoe deze aansluiten bij wettelijke bewaarplichten zoals de Archiefwet. Zorg dat deze documentatie centraal beschikbaar is en regelmatig wordt bijgewerkt wanneer workloads of beleidsregels wijzigen. Daarnaast is het belangrijk om back-upconfiguraties te beveiligen volgens het principe van least privilege. Gebruik Azure Role-Based Access Control (RBAC) om te bepalen wie back-upconfiguraties mag wijzigen, wie hersteloperaties mag uitvoeren en wie alleen monitoring mag uitvoeren. Configureer Azure Key Vault voor het veilig opslaan van wachtwoorden, certificaten en verbindingsstrings die nodig zijn voor back-ups en herstel. Zorg dat alle back-upoperaties worden gelogd in Azure Activity Logs en dat deze logs worden gearchiveerd voor audit-doeleinden. Voor workloads die persoonsgegevens verwerken is het belangrijk om te overwegen of back-ups voldoen aan AVG-vereisten. Azure biedt verschillende opties voor datalocatie, waaronder de EU Data Boundary die garandeert dat gegevens binnen de Europese Unie blijven. Configureer back-ups zodanig dat gegevens alleen worden opgeslagen in Azure-regio's binnen de EU en documenteer deze keuze in uw privacy impact assessment. Overweeg daarnaast of gegevensversleuteling in rust en tijdens overdracht voldoende is geconfigureerd voor de gevoeligheid van de verwerkte gegevens. Tot slot is het belangrijk om back-upconfiguraties te integreren met uw bredere disaster recovery- en business continuity-plannen. Back-ups zijn slechts één onderdeel van een complete continuïteitsstrategie die ook replicatie, netwerkconnectiviteit, identiteitsintegratie en communicatie omvat. Zorg dat back-up- en herstelprocedures zijn opgenomen in uw BCP-draaiboeken en dat deze procedures regelmatig worden getest in combinatie met andere continuïteitsmaatregelen. Op deze manier ontstaat een geïntegreerde aanpak waarin technische back-ups en organisatorische processen naadloos op elkaar aansluiten.

Remediatie en Verbetering

Gebruik PowerShell-script backup-recovery-planning.ps1 (functie Invoke-Remediation) – Identificeert workloads zonder back-upbescherming en genereert configuratie-aanbevelingen.

Wanneer monitoring of audits uitwijzen dat Azure Backup-configuraties incompleet zijn of niet voldoen aan de gestelde eisen, is een gestructureerde remediatieaanpak noodzakelijk. Begin met een gap-analyse waarin u inventariseert welke kritieke workloads momenteel niet zijn beschermd door Azure Backup, welke configuraties afwijken van best practices, en welke hersteltests niet zijn uitgevoerd of zijn mislukt. Prioriteer deze bevindingen op basis van de kriticiteit van workloads en de potentiële impact van gegevensverlies. Voor workloads zonder back-upbescherming moet u eerst bepalen of back-up noodzakelijk is. Niet alle workloads vereisen dezelfde mate van bescherming: voor niet-kritieke systemen kan een eenvoudige back-upstrategie voldoende zijn, terwijl voor bedrijfskritieke workloads uitgebreide back-up- en herstelconfiguraties noodzakelijk zijn. Voor workloads die wel bescherming nodig hebben maar momenteel niet zijn beschermd, moet u direct Azure Backup-configuratie uitvoeren volgens de stappen beschreven in de implementatiesectie. Zorg dat u tijdens de configuratie expliciet rekening houdt met retentiebeleidsregels, immutability-instellingen en hersteltest-procedures, zodat de workload vanaf het begin correct is geconfigureerd. Voor bestaande back-upconfiguraties die niet voldoen aan de eisen moet u eerst analyseren wat de oorzaak is. Veelvoorkomende problemen zijn verouderde retentiebeleidsregels die niet aansluiten bij gewijzigde wettelijke bewaarplichten, ontbrekende immutability-instellingen voor ransomware-bescherming, of workloads die zijn toegevoegd aan Azure maar niet zijn gekoppeld aan back-upbeleidsregels. Update deze configuraties systematisch en test na elke wijziging of de back-ups nog steeds correct werken. Na remediatie is het belangrijk om de verbeteringen te valideren door middel van hersteltests en monitoring. Voer voor alle gerepareerde configuraties een hersteltest uit om te verifiëren dat workloads correct kunnen worden hersteld binnen de afgesproken RTO. Update monitoring en alerts zodat toekomstige problemen direct worden gesignaleerd. Documenteer alle remediatie-activiteiten, inclusief de geïdentificeerde problemen, de uitgevoerde wijzigingen en de validatieresultaten, zodat deze informatie beschikbaar is voor toekomstige audits en verbeteringen.

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 Azure Backup en Herstelplanning Monitoring en Remediatie .DESCRIPTION Controleert of Azure Backup correct is geconfigureerd voor virtuele machines, databases en bestandsservers. Het script identificeert workloads zonder back-upbescherming, controleert back-upstatus en genereert rapportages voor compliance-doeleinden. .NOTES Filename: backup-recovery-planning.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Related JSON: content/azure/management/backup-recovery-planning.json NBVC Debug: Gebruik de omgevingsvariabele NBVC_LOCAL_DEBUG=1 om lokale testen uit te voeren zonder verbinding te maken met Azure-API's. .EXAMPLE .\backup-recovery-planning.ps1 -Monitoring Controleert Azure Backup-configuratie en back-upstatus .EXAMPLE .\backup-recovery-planning.ps1 -Remediation Identificeert workloads zonder back-upbescherming #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.RecoveryServices, Az.Compute [CmdletBinding()] param( [Parameter(HelpMessage = "Controleert Azure Backup-configuratie en back-upstatus")] [switch]$Monitoring, [Parameter(HelpMessage = "Configureert Azure Backup voor workloads")] [switch]$Implementation, [Parameter(HelpMessage = "Identificeert workloads zonder back-upbescherming")] [switch]$Remediation, [Parameter(HelpMessage = "Preview wijzigingen zonder uit te voeren")] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' $PolicyName = "Azure Backup en Herstelplanning" function Get-IsLocalDebug { param() return [bool]($env:NBVC_LOCAL_DEBUG -eq '1') } function Connect-RequiredServices { if (Get-IsLocalDebug) { Write-Verbose "NBVC_LOCAL_DEBUG is actief - Azure verbinding wordt overgeslagen." return } try { if (-not (Get-Module -ListAvailable -Name Az.Accounts)) { throw "Het PowerShell-module 'Az.Accounts' is niet beschikbaar. Installeer dit module voordat u het script gebruikt." } if (-not (Get-Module -ListAvailable -Name Az.RecoveryServices)) { throw "Het PowerShell-module 'Az.RecoveryServices' is niet beschikbaar. Installeer dit module voordat u het script gebruikt." } $ctx = Get-AzContext -ErrorAction SilentlyContinue if (-not $ctx) { Write-Host "Verbinding maken met Azure (Connect-AzAccount)..." -ForegroundColor Yellow Connect-AzAccount -ErrorAction Stop | Out-Null } else { Write-Verbose "Bestaande Azure context gevonden: $($ctx.Name)" } } catch { throw "Kon niet verbinden met Azure: $($_.Exception.Message)" } } function Get-BackupConfigurationStatus { <# .SYNOPSIS Haalt Azure Backup-configuratiestatus op voor alle Recovery Services-kluizen. .OUTPUTS PSCustomObject met back-upconfiguratie-informatie. #> [CmdletBinding()] param() if (Get-IsLocalDebug) { # Gesimuleerde gegevens voor lokale debug en CI-tests return [PSCustomObject]@{ Timestamp = Get-Date TotalVaults = 2 VaultsWithBackup = 2 TotalVMs = 25 ProtectedVMs = 20 UnprotectedVMs = 5 TotalSQLDatabases = 10 ProtectedSQLDatabases = 8 UnprotectedSQLDatabases = 2 Vaults = @( [PSCustomObject]@{ VaultName = "Backup-Vault-WestEurope-prod" ResourceGroupName = "rg-recovery-services-prod" HasBackupConfigured = $true BackupPolicies = 3 ProtectedVMs = 15 ProtectedSQLDatabases = 5 StorageRedundancy = "GeoRedundant" }, [PSCustomObject]@{ VaultName = "Backup-Vault-NorthEurope-prod" ResourceGroupName = "rg-recovery-services-prod" HasBackupConfigured = $true BackupPolicies = 2 ProtectedVMs = 5 ProtectedSQLDatabases = 3 StorageRedundancy = "GeoRedundant" } ) } } Connect-RequiredServices $vaults = Get-AzRecoveryServicesVault -ErrorAction SilentlyContinue if (-not $vaults) { Write-Verbose "Geen Recovery Services-kluizen gevonden." return [PSCustomObject]@{ Timestamp = Get-Date TotalVaults = 0 VaultsWithBackup = 0 TotalVMs = 0 ProtectedVMs = 0 UnprotectedVMs = 0 TotalSQLDatabases = 0 ProtectedSQLDatabases = 0 UnprotectedSQLDatabases = 0 Vaults = @() } } $vaultSummaries = @() $totalVMs = 0 $protectedVMs = 0 $totalSQLDatabases = 0 $protectedSQLDatabases = 0 $vaultsWithBackup = 0 # Haal alle VMs op voor vergelijking try { $allVMs = Get-AzVM -ErrorAction SilentlyContinue $totalVMs = $allVMs.Count } catch { Write-Verbose "Kon niet alle VMs ophalen: $_" } # Haal alle SQL-databases op voor vergelijking try { $allSQLServers = Get-AzSqlServer -ErrorAction SilentlyContinue $totalSQLDatabases = 0 foreach ($server in $allSQLServers) { $dbs = Get-AzSqlDatabase -ResourceGroupName $server.ResourceGroupName -ServerName $server.ServerName -ErrorAction SilentlyContinue $totalSQLDatabases += $dbs.Count } } catch { Write-Verbose "Kon niet alle SQL-databases ophalen: $_" } foreach ($vault in $vaults) { try { Set-AzRecoveryServicesVaultContext -Vault $vault -ErrorAction Stop # Controleer of Backup is geconfigureerd door te zoeken naar back-upitems $backupItems = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureVM -ErrorAction SilentlyContinue $hasBackup = $backupItems.Count -gt 0 if ($hasBackup) { $vaultsWithBackup++ } # Haal back-upbeleidsregels op $backupPolicies = Get-AzRecoveryServicesBackupProtectionPolicy -ErrorAction SilentlyContinue $policyCount = $backupPolicies.Count # Tel SQL-databases met back-up $sqlBackupItems = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -ErrorAction SilentlyContinue $sqlProtectedCount = $sqlBackupItems.Count $vaultSummaries += [PSCustomObject]@{ VaultName = $vault.Name ResourceGroupName = $vault.ResourceGroupName HasBackupConfigured = $hasBackup BackupPolicies = $policyCount ProtectedVMs = $backupItems.Count ProtectedSQLDatabases = $sqlProtectedCount StorageRedundancy = $vault.StorageRedundancy } $protectedVMs += $backupItems.Count $protectedSQLDatabases += $sqlProtectedCount } catch { Write-Verbose "Fout bij uitlezen van kluis '$($vault.Name)': $($_.Exception.Message)" } } return [PSCustomObject]@{ Timestamp = Get-Date TotalVaults = $vaults.Count VaultsWithBackup = $vaultsWithBackup TotalVMs = $totalVMs ProtectedVMs = $protectedVMs UnprotectedVMs = $totalVMs - $protectedVMs TotalSQLDatabases = $totalSQLDatabases ProtectedSQLDatabases = $protectedSQLDatabases UnprotectedSQLDatabases = $totalSQLDatabases - $protectedSQLDatabases Vaults = $vaultSummaries } } function Invoke-Monitoring { <# .SYNOPSIS Controleert Azure Backup-configuratie en back-upstatus. #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$PolicyName - Monitoring" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan $status = Get-BackupConfigurationStatus Write-Host "Totaal Recovery Services-kluizen: $($status.TotalVaults)" -ForegroundColor White Write-Host "Kluizen met back-upconfiguratie: $($status.VaultsWithBackup)" -ForegroundColor $(if ($status.VaultsWithBackup -gt 0) { "Green" } else { "Yellow" }) Write-Host "Totaal virtuele machines: $($status.TotalVMs)" -ForegroundColor White Write-Host "Beschermde VMs (Backup): $($status.ProtectedVMs)" -ForegroundColor $(if ($status.ProtectedVMs -gt 0) { "Green" } else { "Yellow" }) Write-Host "Onbeschermde VMs: $($status.UnprotectedVMs)" -ForegroundColor $(if ($status.UnprotectedVMs -eq 0) { "Green" } elseif ($status.UnprotectedVMs -lt $status.TotalVMs * 0.2) { "Yellow" } else { "Red" }) Write-Host "Totaal SQL-databases: $($status.TotalSQLDatabases)" -ForegroundColor White Write-Host "Beschermde SQL-databases: $($status.ProtectedSQLDatabases)" -ForegroundColor $(if ($status.ProtectedSQLDatabases -gt 0) { "Green" } else { "Yellow" }) Write-Host "Onbeschermde SQL-databases: $($status.UnprotectedSQLDatabases)" -ForegroundColor $(if ($status.UnprotectedSQLDatabases -eq 0) { "Green" } elseif ($status.UnprotectedSQLDatabases -lt $status.TotalSQLDatabases * 0.2) { "Yellow" } else { "Red" }) if ($status.Vaults.Count -gt 0) { Write-Host "`nPer kluis:" -ForegroundColor Cyan foreach ($v in $status.Vaults) { $backupStatus = if ($v.HasBackupConfigured) { "Geconfigureerd" } else { "Niet geconfigureerd" } $backupColor = if ($v.HasBackupConfigured) { "Green" } else { "Yellow" } Write-Host "`nKluizenaam: $($v.VaultName)" -ForegroundColor Cyan Write-Host " Resourcegroep: $($v.ResourceGroupName)" -ForegroundColor Gray Write-Host " Back-upstatus: $backupStatus" -ForegroundColor $backupColor Write-Host " Back-upbeleidsregels: $($v.BackupPolicies)" -ForegroundColor White Write-Host " Beschermde VMs: $($v.ProtectedVMs)" -ForegroundColor White Write-Host " Beschermde SQL-databases: $($v.ProtectedSQLDatabases)" -ForegroundColor White Write-Host " Opslagredundantie: $($v.StorageRedundancy)" -ForegroundColor White } } $vmProtectionPercentage = if ($status.TotalVMs -gt 0) { [Math]::Round(($status.ProtectedVMs / $status.TotalVMs) * 100, 2) } else { 0 } $sqlProtectionPercentage = if ($status.TotalSQLDatabases -gt 0) { [Math]::Round(($status.ProtectedSQLDatabases / $status.TotalSQLDatabases) * 100, 2) } else { 0 } Write-Host "`nVM-beschermingspercentage: $vmProtectionPercentage%" -ForegroundColor $(if ($vmProtectionPercentage -ge 90) { "Green" } elseif ($vmProtectionPercentage -ge 70) { "Yellow" } else { "Red" }) Write-Host "SQL-beschermingspercentage: $sqlProtectionPercentage%" -ForegroundColor $(if ($sqlProtectionPercentage -ge 90) { "Green" } elseif ($sqlProtectionPercentage -ge 70) { "Yellow" } else { "Red" }) if ($status.VaultsWithBackup -eq 0) { Write-Host "`n[WAARSCHUWING] Geen Recovery Services-kluizen met back-upconfiguratie gevonden." -ForegroundColor Yellow Write-Host " Configureer Azure Backup voor kritieke workloads." -ForegroundColor Yellow } elseif ($status.UnprotectedVMs -gt 0 -or $status.UnprotectedSQLDatabases -gt 0) { Write-Host "`n[WAARSCHUWING] Er zijn workloads zonder back-upbescherming:" -ForegroundColor Yellow if ($status.UnprotectedVMs -gt 0) { Write-Host " - $($status.UnprotectedVMs) virtuele machines" -ForegroundColor Yellow } if ($status.UnprotectedSQLDatabases -gt 0) { Write-Host " - $($status.UnprotectedSQLDatabases) SQL-databases" -ForegroundColor Yellow } Write-Host " Overweeg om kritieke workloads te beschermen met Azure Backup." -ForegroundColor Yellow } else { Write-Host "`n[INFO] Alle workloads zijn beschermd met Azure Backup." -ForegroundColor Green } return $status } function Invoke-Implementation { <# .SYNOPSIS Configureert Azure Backup voor workloads. .DESCRIPTION Deze functie geeft richtlijnen voor Azure Backup-configuratie maar voert geen automatische configuratie uit vanwege de complexiteit en risico's. #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$PolicyName - Implementatie" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan $status = Get-BackupConfigurationStatus Write-Host "`n[INFO] Azure Backup implementatie vereist handmatige configuratie via Azure Portal of gedetailleerde PowerShell-scripts." -ForegroundColor Cyan Write-Host "`nAanbevolen stappen:" -ForegroundColor Cyan Write-Host " 1. Maak een Recovery Services-kluis aan in de primaire regio" -ForegroundColor White Write-Host " 2. Configureer back-upbeleidsregels die aansluiten bij uw retentievereisten" -ForegroundColor White Write-Host " 3. Schakel Backup in voor kritieke virtuele machines en SQL-databases" -ForegroundColor White Write-Host " 4. Configureer immutability-instellingen voor ransomware-bescherming" -ForegroundColor White Write-Host " 5. Voer regelmatig hersteltests uit om te valideren dat back-ups werken" -ForegroundColor White if ($status.UnprotectedVMs -gt 0 -or $status.UnprotectedSQLDatabases -gt 0) { Write-Host "`nEr zijn workloads zonder back-upbescherming:" -ForegroundColor Yellow if ($status.UnprotectedVMs -gt 0) { Write-Host " - $($status.UnprotectedVMs) virtuele machines" -ForegroundColor Yellow } if ($status.UnprotectedSQLDatabases -gt 0) { Write-Host " - $($status.UnprotectedSQLDatabases) SQL-databases" -ForegroundColor Yellow } Write-Host "Prioriteer kritieke workloads voor Azure Backup-configuratie." -ForegroundColor Yellow } return $status } function Invoke-Remediation { <# .SYNOPSIS Identificeert workloads zonder back-upbescherming en genereert aanbevelingen. #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$PolicyName - Remediatie" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan $status = Get-BackupConfigurationStatus if ($status.VaultsWithBackup -eq 0) { Write-Host "`n[KRITIEK] Geen Recovery Services-kluizen met back-upconfiguratie gevonden." -ForegroundColor Red Write-Host "`nAanbevolen acties:" -ForegroundColor Cyan Write-Host " 1. Richt een Recovery Services-kluis in voor Azure Backup" -ForegroundColor White Write-Host " 2. Configureer back-upbeleidsregels voor kritieke workloads" -ForegroundColor White Write-Host " 3. Schakel Backup in voor bedrijfskritieke virtuele machines en databases" -ForegroundColor White Write-Host " 4. Documenteer retentieperioden en herstelprocedures" -ForegroundColor White } elseif ($status.UnprotectedVMs -gt 0 -or $status.UnprotectedSQLDatabases -gt 0) { Write-Host "`n[WAARSCHUWING] Er zijn workloads zonder back-upbescherming:" -ForegroundColor Yellow if ($status.UnprotectedVMs -gt 0) { Write-Host " - $($status.UnprotectedVMs) virtuele machines" -ForegroundColor Yellow } if ($status.UnprotectedSQLDatabases -gt 0) { Write-Host " - $($status.UnprotectedSQLDatabases) SQL-databases" -ForegroundColor Yellow } Write-Host "`nAanbevolen acties:" -ForegroundColor Cyan Write-Host " 1. Inventariseer welke workloads bedrijfskritiek zijn" -ForegroundColor White Write-Host " 2. Configureer Azure Backup voor kritieke workloads volgens prioriteit" -ForegroundColor White Write-Host " 3. Overweeg voor niet-kritieke workloads een eenvoudigere back-upstrategie" -ForegroundColor White Write-Host " 4. Voer hersteltests uit om te valideren dat back-ups werken" -ForegroundColor White } else { Write-Host "`n[INFO] Alle workloads zijn beschermd met Azure Backup." -ForegroundColor Green Write-Host "Zorg dat hersteltests regelmatig worden uitgevoerd en dat configuraties up-to-date blijven." -ForegroundColor Cyan } return $status } try { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$PolicyName" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan if ($Monitoring) { Invoke-Monitoring | Out-Null } elseif ($Implementation) { Invoke-Implementation | Out-Null } elseif ($Remediation) { Invoke-Remediation | Out-Null } else { # Standaard: monitoring-uitvoer Invoke-Monitoring | Out-Null } } catch { Write-Error ("Fout tijdens uitvoering van {0}: {1}" -f $PolicyName, $_) exit 1 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder correct geconfigureerde Azure Backup lopen organisaties een kritiek risico op permanent verlies van kritieke gegevens, configuraties en applicatiestaten bij hardwarestoringen, menselijke fouten, malware-aanvallen of onbedoelde configuratiewijzigingen. Dit kan leiden tot schending van wettelijke verplichtingen (BIO, NIS2, Archiefwet, AVG), verlies van vertrouwen bij burgers, en mogelijk onherstelbaar gegevensverlies. Daarnaast kunnen organisaties niet aantonen dat zij voldoen aan compliance-eisen voor back-up- en herstelmaatregelen.

Management Samenvatting

Azure Backup biedt schaalbare en kostenefficiënte bescherming voor virtuele machines, databases, bestandsservers en applicaties. Correcte configuratie vereist een Recovery Services-kluis, back-upbeleidsregels die aansluiten bij retentievereisten en wettelijke bewaarplichten, immutability-instellingen voor ransomware-bescherming, en regelmatige hersteltests. Implementatie: 120 uur. Critical voor aantoonbare gegevensbescherming volgens BIO- en NIS2-eisen.