Azure Storage Lifecycle Management Policies

💼 Management Samenvatting

Azure Storage Lifecycle Management Policies bieden een geautomatiseerde manier om de kosten van opslag te optimaliseren en te voldoen aan compliance-vereisten door automatisch gegevens te verplaatsen tussen opslaglagen of te verwijderen op basis van vooraf gedefinieerde regels. Deze functionaliteit is essentieel voor Nederlandse overheidsorganisaties die grote hoeveelheden gegevens beheren en moeten voldoen aan strikte bewaartermijnen zoals de Archiefwet (7 jaar) en AVG-vereisten voor dataminimalisatie.

Aanbeveling
IMPLEMENT
Risico zonder
Medium
Risk Score
6/10
Implementatie
100u (tech: 40u)
Van toepassing op:
Azure opslag

Zonder lifecycle management policies kunnen organisaties aanzienlijke onnodige kosten maken door gegevens te bewaren in dure opslaglagen wanneer deze niet meer actief worden gebruikt. Bovendien lopen organisaties het risico om niet te voldoen aan compliance-vereisten wanneer gegevens te lang worden bewaard (AVG schending) of te vroeg worden verwijderd (Archiefwet schending). Lifecycle policies automatiseren het proces van het verplaatsen van gegevens naar goedkopere opslaglagen naarmate deze ouder worden en minder vaak worden benaderd, en zorgen ervoor dat gegevens worden verwijderd wanneer wettelijke bewaartermijnen zijn verstreken. Dit vermindert niet alleen opslagkosten met 40-70%, maar waarborgt ook consistente naleving van retentiebeleid zonder handmatige interventie.

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

Implementatie

Dit artikel beschrijft hoe u Azure Storage Lifecycle Management Policies configureert om automatisch gegevens te verplaatsen tussen opslaglagen (Hot, Cool, Archive) en gegevens te verwijderen op basis van leeftijd, laatste toegangsdatum of andere criteria. We behandelen de configuratie van regels voor blob-tiering, automatische verwijdering na bewaartermijnen, integratie met compliance-kaders zoals BIO en AVG, en best practices voor het optimaliseren van kosten terwijl compliance wordt gewaarborgd. Het gekoppelde PowerShell-script ondersteunt u bij het controleren van bestaande policies, het implementeren van nieuwe regels en het monitoren van de effectiviteit van lifecycle management.

Vereisten en Juridische Context

Azure Storage Lifecycle Management Policies vereisen een grondig begrip van zowel technische als juridische aspecten voordat zij kunnen worden geïmplementeerd. Vanuit technisch perspectief is een actief Azure Storage-account met blob storage-functionaliteit vereist, bij voorkeur een General Purpose v2-account of BlobStorage-account dat ondersteuning biedt voor meerdere opslaglagen. Het storage-account moet toegang hebben tot de Hot, Cool en Archive opslaglagen, waarbij Archive de meest kosteneffectieve optie is voor gegevens die zelden of nooit worden benaderd maar wel moeten worden bewaard voor compliance-doeleinden. Daarnaast is het essentieel dat beheerders beschikken over de juiste Azure RBAC-machtigingen, specifiek de rol van Storage Account Contributor of een aangepaste rol met machtigingen voor het beheren van lifecycle policies via de Microsoft.Storage/storageAccounts/blobServices/write machtiging.

Vanuit juridisch perspectief moeten Nederlandse overheidsorganisaties rekening houden met meerdere wettelijke bewaartermijnen die van invloed zijn op hoe lifecycle policies worden geconfigureerd. De Archiefwet vereist dat overheidsorganisaties bepaalde categorieën gegevens minimaal zeven jaar bewaren, waarbij specifieke termijnen kunnen variëren afhankelijk van het type gegevens en de context. Fiscale bewaarplichten vereisen dat financiële gegevens en administratieve documenten minimaal zeven jaar worden bewaard, terwijl arbeidsrechtelijke bewaarplichten kunnen variëren van twee tot dertig jaar afhankelijk van het type document. Deze verschillende termijnen maken het noodzakelijk om gedifferentieerde lifecycle policies te ontwikkelen die rekening houden met de specifieke bewaartermijnen die van toepassing zijn op verschillende categorieën gegevens.

De Algemene Verordening Gegevensbescherming (AVG) introduceert daarnaast het beginsel van dataminimalisatie, wat betekent dat persoonsgegevens niet langer mogen worden bewaard dan noodzakelijk voor het doel waarvoor zij zijn verzameld. Dit creëert een spanning tussen bewaarplichten en dataminimalisatie, waarbij organisaties zorgvuldig moeten balanceren tussen het voldoen aan bewaartermijnen en het respecteren van privacyrechten. Lifecycle policies kunnen helpen bij het oplossen van deze spanning door automatisch gegevens te verwijderen zodra wettelijke bewaartermijnen zijn verstreken, terwijl zij tegelijkertijd waarborgen dat gegevens niet te vroeg worden verwijderd. Voor organisaties die werken met persoonsgegevens is het essentieel om een Data Protection Impact Assessment (DPIA) uit te voeren voordat automatische verwijderingsregels worden geïmplementeerd, om te waarborgen dat het beleid voldoet aan AVG-vereisten en dat de rechten van betrokkenen worden gerespecteerd.

Organisaties moeten ook overwegen hoe lifecycle policies zich verhouden tot andere Azure Storage-functies zoals blob versioning, soft delete en immutable storage policies. Deze functies kunnen elkaar aanvullen of conflicteren, afhankelijk van hoe zij zijn geconfigureerd. Bijvoorbeeld, immutable storage policies kunnen voorkomen dat gegevens worden verwijderd door lifecycle policies, zelfs wanneer bewaartermijnen zijn verstreken, wat kan leiden tot compliance-problemen wanneer gegevens langer worden bewaard dan wettelijk vereist. Het is daarom essentieel om een geïntegreerde aanpak te ontwikkelen waarbij alle relevante functies samenwerken om zowel beveiligings- als compliance-doelen te bereiken. Deze aanpak vereist regelmatige evaluatie en aanpassing van policies om te waarborgen dat zij blijven voldoen aan veranderende wettelijke vereisten en organisatorische behoeften.

Implementatie van Lifecycle Policies

Het implementeren van Azure Storage Lifecycle Management Policies begint met een grondige inventarisatie van alle gegevens die worden opgeslagen in Azure Storage accounts, inclusief een classificatie van gegevens op basis van gevoeligheid, wettelijke bewaartermijnen en toegangspatronen. Deze inventarisatie vormt de basis voor het ontwikkelen van gedifferentieerde lifecycle policies die zijn afgestemd op de specifieke behoeften van verschillende categorieën gegevens. Organisaties moeten gegevens classificeren in categorieën zoals kritieke bedrijfsgegevens, persoonsgegevens, audit logs, backups en archiefmateriaal, waarbij voor elke categorie specifieke bewaartermijnen en toegangspatronen worden vastgesteld. Deze classificatie moet worden gedocumenteerd in het gegevensclassificatiebeleid van de organisatie en moet regelmatig worden geëvalueerd om te waarborgen dat deze actueel blijft.

Een typische lifecycle policy bestaat uit meerdere regels die bepalen wanneer gegevens moeten worden verplaatst tussen opslaglagen of moeten worden verwijderd. Regels kunnen worden gebaseerd op verschillende criteria, waaronder de leeftijd van gegevens (aantal dagen sinds creatie), de laatste toegangsdatum (wanneer gegevens voor het laatst zijn gelezen), blob-prefixes (specifieke containers of mappen), en blob-index tags (metadata die is gekoppeld aan blobs). Voor gegevens die regelmatig worden benaderd, zoals actieve documenten of recente backups, is de Hot-opslaglaag het meest geschikt, hoewel deze de duurste optie is. Gegevens die minder vaak worden benaderd, zoals maandelijkse rapporten of oude projectdocumenten, kunnen worden verplaatst naar de Cool-opslaglaag, die ongeveer 50% goedkoper is dan Hot storage maar nog steeds snelle toegang biedt wanneer nodig. Gegevens die zelden of nooit worden benaderd maar wel moeten worden bewaard voor compliance-doeleinden, zoals archiefmateriaal of oude audit logs, kunnen worden verplaatst naar de Archive-opslaglaag, die tot 90% goedkoper is dan Hot storage maar vereist dat gegevens eerst worden gerehydrateerd voordat zij kunnen worden benaderd, wat uren kan duren.

Voor Nederlandse overheidsorganisaties die moeten voldoen aan de Archiefwet, is het essentieel om lifecycle policies te configureren die gegevens automatisch verplaatsen naar de Archive-opslaglaag zodra deze niet meer actief worden gebruikt, maar deze gegevens wel bewaren voor de volledige wettelijke bewaartermijn. Een typische configuratie zou kunnen zijn: gegevens die ouder zijn dan 90 dagen en niet zijn benaderd in de afgelopen 30 dagen worden verplaatst van Hot naar Cool storage, gegevens die ouder zijn dan 365 dagen en niet zijn benaderd in de afgelopen 90 dagen worden verplaatst van Cool naar Archive storage, en gegevens die ouder zijn dan de wettelijke bewaartermijn (bijvoorbeeld 7 jaar voor de meeste overheidsdocumenten) worden automatisch verwijderd, tenzij zij onder een immutable storage policy of legal hold vallen. Deze configuratie waarborgt dat gegevens worden bewaard voor compliance-doeleinden terwijl opslagkosten worden geminimaliseerd door gegevens te verplaatsen naar goedkopere opslaglagen zodra deze niet meer actief worden gebruikt.

Het configureren van lifecycle policies kan worden uitgevoerd via de Azure Portal, Azure PowerShell, Azure CLI of REST API's. De Azure Portal biedt een gebruiksvriendelijke interface waarbij beheerders regels kunnen definiëren via een wizard die stapsgewijs door het configuratieproces leidt. Voor geavanceerde scenario's of geautomatiseerde implementaties bieden PowerShell en CLI meer flexibiliteit en kunnen zij worden geïntegreerd in Infrastructure as Code (IaC) workflows. Ongeacht de gebruikte methode, is het essentieel om policies eerst te testen in een testomgeving voordat zij worden geïmplementeerd in productie, om te waarborgen dat regels correct functioneren en geen onbedoelde gegevensverwijdering veroorzaken. Testen moet omvatten: verificatie dat regels correct worden toegepast op de beoogde gegevens, controle dat gegevens niet worden verwijderd voordat bewaartermijnen zijn verstreken, en verificatie dat gegevens correct worden verplaatst tussen opslaglagen volgens de gedefinieerde regels.

Na implementatie moeten lifecycle policies regelmatig worden geëvalueerd en bijgewerkt om te waarborgen dat zij blijven voldoen aan veranderende wettelijke vereisten, organisatorische behoeften en kostenoptimalisatie doelen. Deze evaluatie moet minimaal jaarlijks plaatsvinden, maar vaker wanneer er significante wijzigingen zijn in wettelijke vereisten of wanneer nieuwe typen gegevens worden toegevoegd aan de opslagomgeving. Evaluatie moet omvatten: analyse van de effectiviteit van bestaande policies in termen van kostenbesparingen, verificatie dat policies nog steeds voldoen aan compliance-vereisten, identificatie van gegevenscategorieën die mogelijk nieuwe of aangepaste policies vereisen, en controle op onbedoelde gevolgen zoals gegevens die per ongeluk worden verwijderd of verplaatst. Deze continue evaluatie en verbetering waarborgt dat lifecycle management een effectief en efficiënt proces blijft dat bijdraagt aan zowel kostenoptimalisatie als compliance-naleving.

Monitoring en Verificatie

Gebruik PowerShell-script lifecycle-management-policies.ps1 (functie Invoke-Monitoring) – Controleert of lifecycle management policies correct zijn geconfigureerd en actief zijn voor alle relevante storage accounts.

Monitoring van Azure Storage Lifecycle Management Policies is essentieel om te waarborgen dat policies correct functioneren, dat gegevens worden verplaatst en verwijderd volgens de gedefinieerde regels, en dat de verwachte kostenbesparingen worden gerealiseerd. Azure biedt verschillende mechanismen voor het monitoren van lifecycle policies, waaronder Azure Monitor metrics, Activity Logs en Storage Analytics logs. Azure Monitor metrics bieden inzicht in het aantal blobs dat is verplaatst tussen opslaglagen, het aantal blobs dat is verwijderd, en de resulterende kostenbesparingen. Deze metrics kunnen worden gebruikt om dashboards te maken die de effectiviteit van lifecycle policies visualiseren en trends identificeren die kunnen wijzen op problemen of verbeteringsmogelijkheden.

Activity Logs bevatten gedetailleerde informatie over alle acties die worden uitgevoerd door lifecycle policies, inclusief wanneer gegevens zijn verplaatst tussen opslaglagen, wanneer gegevens zijn verwijderd, en eventuele fouten die zijn opgetreden tijdens het uitvoeren van policies. Deze logs zijn essentieel voor troubleshooting wanneer policies niet correct functioneren en voor het aantonen van compliance tijdens audits. Organisaties moeten ervoor zorgen dat Activity Logs worden bewaard voor een periode die voldoet aan compliance-vereisten, typisch minimaal zeven jaar voor Nederlandse overheidsorganisaties die moeten voldoen aan de Archiefwet. Logs moeten ook worden gearchiveerd naar een goedkope opslaglocatie zodra zij niet meer actief worden gebruikt, waarbij lifecycle policies kunnen worden gebruikt om logs automatisch te archiveren na een bepaalde periode.

Regelmatige verificatie van lifecycle policies moet worden uitgevoerd om te waarborgen dat regels correct worden toegepast en dat er geen onbedoelde gevolgen zijn. Deze verificatie moet omvatten: controle dat gegevens correct worden verplaatst tussen opslaglagen volgens de gedefinieerde regels, verificatie dat gegevens niet worden verwijderd voordat bewaartermijnen zijn verstreken, controle op gegevens die mogelijk per ongeluk worden verwijderd of verplaatst, en analyse van kostenbesparingen om te verifiëren dat policies de verwachte resultaten opleveren. Verificatie kan worden uitgevoerd via de Azure Portal, waar beheerders de status van lifecycle policies kunnen bekijken en gedetailleerde rapporten kunnen genereren over welke acties zijn uitgevoerd. Voor geavanceerde monitoring kunnen PowerShell-scripts worden gebruikt die automatisch de status van policies controleren en waarschuwingen genereren wanneer problemen worden gedetecteerd.

Voor organisaties die moeten voldoen aan strikte compliance-vereisten, is het essentieel om regelmatig rapporten te genereren die documenteren welke lifecycle policies actief zijn, hoe zij zijn geconfigureerd, welke acties zijn uitgevoerd, en hoe policies bijdragen aan compliance-naleving. Deze rapporten moeten worden opgenomen in de compliance-documentatie van de organisatie en moeten beschikbaar zijn voor auditors tijdens compliance-audits. Rapporten moeten duidelijk aangeven hoe policies voldoen aan wettelijke bewaartermijnen, hoe dataminimalisatie wordt gewaarborgd, en hoe kosten worden geoptimaliseerd zonder inbreuk te maken op compliance-vereisten. Voor Nederlandse overheidsorganisaties die moeten voldoen aan BIO-normen, is dergelijke documentatie vaak een vereiste voor certificering en moet het worden bijgehouden volgens vastgestelde procedures.

Compliance en Framework Mapping

Azure Storage Lifecycle Management Policies spelen een cruciale rol bij het voldoen aan verschillende compliance-kaders die relevant zijn voor Nederlandse organisaties, met name voor overheidsorganisaties die moeten voldoen aan strikte regelgevingsvereisten. Binnen het BIO-kader wordt lifecycle management behandeld in norm 7.01, die specifiek ingaat op de vereisten voor gegevensretentie en -vernietiging. Deze norm vereist dat organisaties een duidelijk beleid hebben voor het bewaren en verwijderen van gegevens, waarbij gegevens worden bewaard zolang dit nodig is voor wettelijke, operationele of historische doeleinden, maar worden verwijderd zodra bewaartermijnen zijn verstreken. Lifecycle policies automatiseren dit proces en waarborgen dat gegevens consistent worden beheerd volgens het retentiebeleid van de organisatie, wat essentieel is voor het verkrijgen en behouden van BIO-certificering.

De Algemene Verordening Gegevensbescherming (AVG) introduceert het beginsel van dataminimalisatie in artikel 5, wat vereist dat persoonsgegevens niet langer worden bewaard dan noodzakelijk voor het doel waarvoor zij zijn verzameld. Lifecycle policies kunnen helpen bij het naleven van dit beginsel door automatisch persoonsgegevens te verwijderen zodra wettelijke bewaartermijnen zijn verstreken, wat helpt bij het voorkomen van AVG-schendingen en het verminderen van het risico op boetes van de Autoriteit Persoonsgegevens. Het is echter essentieel om te waarborgen dat automatische verwijdering alleen plaatsvindt nadat alle relevante bewaartermijnen zijn verstreken en dat er geen actieve rechtsgronden zijn die verdere bewaar vereisen. Organisaties moeten daarom zorgvuldig lifecycle policies configureren die rekening houden met alle relevante wettelijke vereisten en die voldoende flexibiliteit bieden om verwijdering uit te stellen wanneer dit nodig is voor compliance-doeleinden.

De Archiefwet vereist dat Nederlandse overheidsorganisaties bepaalde categorieën gegevens minimaal zeven jaar bewaren, waarbij specifieke termijnen kunnen variëren afhankelijk van het type gegevens. Lifecycle policies kunnen worden geconfigureerd om gegevens automatisch te archiveren naar de Archive-opslaglaag zodra deze niet meer actief worden gebruikt, maar deze gegevens wel te bewaren voor de volledige wettelijke bewaartermijn. Dit waarborgt dat organisaties voldoen aan bewaarplichten terwijl opslagkosten worden geminimaliseerd door gegevens te verplaatsen naar goedkopere opslaglagen. Na het verstrijken van de bewaartermijn kunnen policies automatisch gegevens verwijderen, tenzij deze onder een immutable storage policy of legal hold vallen, wat waarborgt dat gegevens niet te vroeg worden verwijderd maar ook niet langer worden bewaard dan wettelijk vereist.

ISO 27001:2022 behandelt lifecycle management in controle A.8.13, die betrekking heeft op het beheer van informatie tijdens de gehele levenscyclus. Deze controle vereist dat organisaties processen hebben voor het beheren van informatie van creatie tot vernietiging, inclusief het bepalen van bewaartermijnen, het archiveren van gegevens wanneer nodig, en het veilig verwijderen van gegevens wanneer deze niet meer nodig zijn. Lifecycle policies automatiseren deze processen en waarborgen dat gegevens consistent worden beheerd volgens het informatiebeveiligingsbeleid van de organisatie. Voor organisaties die ISO 27001-certificering nastreven of behouden, is het essentieel om te kunnen aantonen dat lifecycle policies correct zijn geconfigureerd en effectief functioneren, wat vereist dat regelmatige evaluaties en audits worden uitgevoerd om de effectiviteit van policies te verifiëren.

Remediatie en Best Practices

Gebruik PowerShell-script lifecycle-management-policies.ps1 (functie Invoke-Remediation) – Implementeert of corrigeert lifecycle management policies volgens best practices en compliance-vereisten.

Wanneer lifecycle management policies ontbreken of niet correct zijn geconfigureerd, moeten organisaties onmiddellijk actie ondernemen om policies te implementeren of te corrigeren. Het implementeren van lifecycle policies begint met een grondige analyse van de huidige opslagomgeving, waarbij alle storage accounts worden geïnventariseerd en gegevens worden geclassificeerd op basis van gevoeligheid, wettelijke bewaartermijnen en toegangspatronen. Deze analyse vormt de basis voor het ontwikkelen van gedifferentieerde lifecycle policies die zijn afgestemd op de specifieke behoeften van verschillende categorieën gegevens. Voor organisaties die al grote hoeveelheden gegevens hebben opgeslagen, kan het implementeren van lifecycle policies aanzienlijke kostenbesparingen opleveren door bestaande gegevens te verplaatsen naar goedkopere opslaglagen zodra deze niet meer actief worden gebruikt.

Best practices voor het configureren van lifecycle policies omvatten: het gebruik van blob-index tags om gegevens te classificeren en specifieke policies toe te passen op verschillende categorieën gegevens, het configureren van regels die gegevens geleidelijk verplaatsen tussen opslaglagen (bijvoorbeeld van Hot naar Cool na 90 dagen, van Cool naar Archive na 365 dagen), het waarborgen dat kritieke gegevens niet per ongeluk worden verwijderd door gebruik te maken van immutable storage policies of legal holds voor gegevens die permanent moeten worden bewaard, het regelmatig testen van policies in een testomgeving voordat zij worden geïmplementeerd in productie, en het monitoren van de effectiviteit van policies om te waarborgen dat zij de verwachte resultaten opleveren. Daarnaast is het essentieel om policies te documenteren en regelmatig te evalueren om te waarborgen dat zij blijven voldoen aan veranderende wettelijke vereisten en organisatorische behoeften.

Voor organisaties die moeten voldoen aan strikte compliance-vereisten, is het belangrijk om een geïntegreerde aanpak te ontwikkelen waarbij lifecycle policies samenwerken met andere Azure Storage-functies zoals blob versioning, soft delete en immutable storage policies. Deze integratie waarborgt dat gegevens worden bewaard voor compliance-doeleinden terwijl kosten worden geoptimaliseerd, en voorkomt dat gegevens per ongeluk worden verwijderd wanneer dit niet is toegestaan. Bijvoorbeeld, immutable storage policies kunnen worden gebruikt om te voorkomen dat gegevens worden verwijderd door lifecycle policies wanneer deze onder een legal hold vallen, terwijl lifecycle policies kunnen worden gebruikt om oude versies automatisch te verwijderen wanneer bewaartermijnen zijn verstreken. Deze geïntegreerde aanpak vereist zorgvuldige planning en configuratie om te waarborgen dat alle functies samenwerken om zowel beveiligings- als compliance-doelen te bereiken.

Documentatie van lifecycle policies is essentieel voor compliance- en audit-doeleinden omdat het organisaties in staat stelt om aan te tonen dat zij proactief werken aan kostenoptimalisatie en compliance-naleving. Organisaties moeten bijhouden welke policies actief zijn, hoe zij zijn geconfigureerd, welke acties zijn uitgevoerd, en hoe policies bijdragen aan compliance-naleving. Deze documentatie moet regelmatig worden bijgewerkt om te reflecteren wijzigingen in policies en moet beschikbaar zijn voor auditors tijdens compliance-audits. Voor Nederlandse overheidsorganisaties die moeten voldoen aan BIO-normen, is dergelijke documentatie vaak een vereiste voor certificering en moet het worden bijgehouden volgens vastgestelde procedures. Door lifecycle policies te documenteren en regelmatig te evalueren, kunnen organisaties waarborgen dat zij effectief werken aan zowel kostenoptimalisatie als compliance-naleving, wat essentieel is voor het handhaven van een veilige en efficiënte opslagomgeving.

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 Storage Lifecycle Management Policies .DESCRIPTION Implementeert, monitort en herstelt: Azure Storage Lifecycle Management Policies voor automatische tiering en verwijdering van blobs op basis van leeftijd en toegangspatronen. .NOTES Filename: lifecycle-management-policies.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Workload: Azure Category: opslag Created: 2025-01-15 Last Modified: 2025-01-15 Related JSON: content/azure/storage/lifecycle-management-policies.json .EXAMPLE .\lifecycle-management-policies.ps1 -Monitoring Controleert of lifecycle management policies correct zijn geconfigureerd .EXAMPLE .\lifecycle-management-policies.ps1 -Remediation Implementeert of corrigeert lifecycle management policies .EXAMPLE .\lifecycle-management-policies.ps1 -Monitoring -DebugMode Voert een lokale debug-run uit met voorbeeldresultaten #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.Storage [CmdletBinding()] param( [Parameter(HelpMessage = "Voer controles uit op lifecycle management policies")] [switch]$Monitoring, [Parameter(HelpMessage = "Implementeer of corrigeer lifecycle management policies")] [switch]$Remediation, [Parameter(HelpMessage = "Toon welke acties zouden worden uitgevoerd zonder wijzigingen aan te brengen")] [switch]$WhatIf, [Parameter(HelpMessage = "Voer een veilige lokale test uit met voorbeelddata")] [switch]$DebugMode ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' function Get-RepositoryRoot { <# .SYNOPSIS Bepaalt de rootmap van de repository op basis van de locatie van dit script. #> [CmdletBinding()] param() $root = Resolve-Path (Join-Path $PSScriptRoot "..\..\..") -ErrorAction SilentlyContinue if (-not $root) { throw "Kon de repository-root niet bepalen op basis van PSScriptRoot: $PSScriptRoot" } return $root.Path } function Connect-AzureStorage { <# .SYNOPSIS Verbindt met Azure Storage services #> [CmdletBinding()] param() Write-Verbose "Controleren van Azure verbinding..." try { $context = Get-AzContext -ErrorAction SilentlyContinue if (-not $context) { Write-Host "Verbinding maken met Azure..." -ForegroundColor Yellow Connect-AzAccount -ErrorAction Stop | Out-Null Write-Host "Verbonden met Azure" -ForegroundColor Green } else { Write-Verbose "Reeds verbonden met Azure" } } catch { Write-Error "Kon niet verbinden met Azure: $_" throw } } function Get-StorageAccounts { <# .SYNOPSIS Haalt alle Azure Storage accounts op .OUTPUTS Array van storage account objecten #> [CmdletBinding()] param() try { $storageAccounts = Get-AzStorageAccount -ErrorAction Stop return $storageAccounts } catch { Write-Error "Kon storage accounts niet ophalen: $_" throw } } function Test-LifecycleManagementPolicy { <# .SYNOPSIS Test of lifecycle management policies zijn geconfigureerd voor een storage account .PARAMETER StorageAccount Het storage account object .OUTPUTS PSCustomObject met policy status #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount]$StorageAccount ) try { $resourceGroupName = $StorageAccount.ResourceGroupName $storageAccountName = $StorageAccount.StorageAccountName # Haal lifecycle management policy op $policy = Get-AzStorageAccountManagementPolicy -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName -ErrorAction SilentlyContinue $hasPolicy = $null -ne $policy $ruleCount = 0 $rules = @() if ($hasPolicy) { $ruleCount = $policy.Rules.Count foreach ($rule in $policy.Rules) { $rules += @{ Name = $rule.Name Enabled = $rule.Enabled Type = $rule.Type } } } return @{ StorageAccountName = $storageAccountName ResourceGroupName = $resourceGroupName HasPolicy = $hasPolicy RuleCount = $ruleCount Rules = $rules } } catch { Write-Warning "Kon policy niet ophalen voor $($StorageAccount.StorageAccountName): $_" return @{ StorageAccountName = $StorageAccount.StorageAccountName ResourceGroupName = $StorageAccount.ResourceGroupName HasPolicy = $false RuleCount = 0 Rules = @() Error = $_.Exception.Message } } } function Invoke-Monitoring { <# .SYNOPSIS Controleert of lifecycle management policies correct zijn geconfigureerd .OUTPUTS PSCustomObject met monitoring resultaten #> [CmdletBinding()] param() Write-Host "" Write-Host "Azure Storage Lifecycle Management Policies - Monitoring" -ForegroundColor Cyan Write-Host "========================================================" -ForegroundColor Cyan if ($DebugMode) { Write-Host "DebugMode ingeschakeld: er worden geen bestanden gewijzigd of aangemaakt." -ForegroundColor Yellow $summary = [PSCustomObject]@{ TotalStorageAccounts = 3 AccountsWithPolicies = 2 AccountsWithoutPolicies = 1 ComplianceStatus = "Partial" } Write-Host "" Write-Host "Voorbeeldsamenvatting (debug):" -ForegroundColor Cyan $summary | Format-Table return $summary } try { Connect-AzureStorage $storageAccounts = Get-StorageAccounts $totalAccounts = $storageAccounts.Count $accountsWithPolicies = 0 $accountsWithoutPolicies = 0 $results = @() Write-Host "" Write-Host "Controleren van $totalAccounts storage account(s)..." -ForegroundColor Cyan foreach ($account in $storageAccounts) { $result = Test-LifecycleManagementPolicy -StorageAccount $account if ($result.HasPolicy) { $accountsWithPolicies++ Write-Host " ✅ $($result.StorageAccountName): Policy aanwezig ($($result.RuleCount) regel(s))" -ForegroundColor Green } else { $accountsWithoutPolicies++ Write-Host " ❌ $($result.StorageAccountName): Geen policy geconfigureerd" -ForegroundColor Red } $results += $result } Write-Host "" Write-Host "Samenvatting:" -ForegroundColor Cyan Write-Host " Totaal storage accounts: $totalAccounts" -ForegroundColor Cyan Write-Host " Accounts met policies: $accountsWithPolicies" -ForegroundColor $(if ($accountsWithPolicies -eq $totalAccounts) { "Green" } else { "Yellow" }) Write-Host " Accounts zonder policies: $accountsWithoutPolicies" -ForegroundColor $(if ($accountsWithoutPolicies -eq 0) { "Green" } else { "Red" }) $complianceStatus = if ($accountsWithoutPolicies -eq 0) { "Compliant" } elseif ($accountsWithPolicies -gt 0) { "Partial" } else { "Non-Compliant" } $summary = [PSCustomObject]@{ TotalStorageAccounts = $totalAccounts AccountsWithPolicies = $accountsWithPolicies AccountsWithoutPolicies = $accountsWithoutPolicies ComplianceStatus = $complianceStatus } return $summary } catch { Write-Error "Monitoring failed: $_" throw } } function New-LifecycleManagementPolicy { <# .SYNOPSIS Maakt een standaard lifecycle management policy aan .PARAMETER StorageAccount Het storage account object .PARAMETER ResourceGroupName De resource group naam .PARAMETER StorageAccountName De storage account naam #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$ResourceGroupName, [Parameter(Mandatory = $true)] [string]$StorageAccountName ) try { Write-Verbose "Aanmaken van lifecycle management policy voor $StorageAccountName..." # Definieer een standaard policy met regels voor tiering en verwijdering # Deze policy is een voorbeeld en moet worden aangepast aan specifieke organisatievereisten $rule1 = New-AzStorageAccountManagementPolicyRule -Name "MoveToCoolAfter90Days" ` -Enabled $true ` -Type Lifecycle ` -Definition @{ Actions = @{ BaseBlob = @{ TierToCool = @{ DaysAfterModificationGreaterThan = 90 } } } Filters = @{ BlobTypes = @("blockBlob") } } $rule2 = New-AzStorageAccountManagementPolicyRule -Name "MoveToArchiveAfter365Days" ` -Enabled $true ` -Type Lifecycle ` -Definition @{ Actions = @{ BaseBlob = @{ TierToArchive = @{ DaysAfterModificationGreaterThan = 365 } } } Filters = @{ BlobTypes = @("blockBlob") } } $rule3 = New-AzStorageAccountManagementPolicyRule -Name "DeleteAfter7Years" ` -Enabled $true ` -Type Lifecycle ` -Definition @{ Actions = @{ BaseBlob = @{ Delete = @{ DaysAfterModificationGreaterThan = 2555 # 7 jaar } } } Filters = @{ BlobTypes = @("blockBlob") } } $policy = Set-AzStorageAccountManagementPolicy -ResourceGroupName $ResourceGroupName ` -StorageAccountName $StorageAccountName ` -Rule $rule1, $rule2, $rule3 ` -ErrorAction Stop Write-Host " ✅ Lifecycle management policy aangemaakt voor $StorageAccountName" -ForegroundColor Green return $policy } catch { Write-Error "Kon lifecycle management policy niet aanmaken voor $StorageAccountName : $_" throw } } function Invoke-Remediation { <# .SYNOPSIS Implementeert of corrigeert lifecycle management policies #> [CmdletBinding()] param() Write-Host "" Write-Host "Azure Storage Lifecycle Management Policies - Remediatie" -ForegroundColor Cyan Write-Host "========================================================" -ForegroundColor Cyan try { Connect-AzureStorage $storageAccounts = Get-StorageAccounts $remediatedCount = 0 Write-Host "" Write-Host "Controleren en remediëren van $($storageAccounts.Count) storage account(s)..." -ForegroundColor Cyan foreach ($account in $storageAccounts) { $result = Test-LifecycleManagementPolicy -StorageAccount $account if (-not $result.HasPolicy) { if ($WhatIf) { Write-Host " [WhatIf] Zou lifecycle management policy aanmaken voor: $($result.StorageAccountName)" -ForegroundColor Yellow } else { try { New-LifecycleManagementPolicy -ResourceGroupName $result.ResourceGroupName -StorageAccountName $result.StorageAccountName $remediatedCount++ } catch { Write-Warning "Kon policy niet aanmaken voor $($result.StorageAccountName): $_" } } } else { Write-Host " ✅ $($result.StorageAccountName): Policy reeds aanwezig" -ForegroundColor Green } } if (-not $WhatIf) { Write-Host "" Write-Host "✅ Remediatie voltooid. $remediatedCount storage account(s) bijgewerkt." -ForegroundColor Green Write-Host "" Write-Host "BELANGRIJK: De gegenereerde policies zijn voorbeelden en moeten worden aangepast" -ForegroundColor Yellow Write-Host "aan uw specifieke organisatievereisten, wettelijke bewaartermijnen en" -ForegroundColor Yellow Write-Host "compliance-kaders (BIO, AVG, Archiefwet)." -ForegroundColor Yellow } } catch { Write-Error "Remediatie failed: $_" throw } } # ============================================================================ # MAIN EXECUTION # ============================================================================ try { Write-Host "" Write-Host "========================================" -ForegroundColor Cyan Write-Host "Azure Storage Lifecycle Management" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan if ($Monitoring) { $result = Invoke-Monitoring if ($DebugMode) { return $result } } elseif ($Remediation) { Invoke-Remediation } else { Write-Host "" Write-Host "Geen modus opgegeven. Gebruik een van de volgende opties:" -ForegroundColor Yellow Write-Host " -Monitoring Controleer of lifecycle management policies aanwezig zijn" -ForegroundColor Yellow Write-Host " -Remediation Implementeer of corrigeer lifecycle management policies" -ForegroundColor Yellow Write-Host " -DebugMode Gebruik voorbeelddata voor een veilige lokale test" -ForegroundColor Yellow Write-Host " -WhatIf Toon remediatieacties zonder wijzigingen aan te brengen" -ForegroundColor Yellow } } catch { Write-Error "Fout in lifecycle-management-policies.ps1: $_" throw } finally { Write-Host "" Write-Host "========================================" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
Medium: Zonder lifecycle management policies maken organisaties onnodige opslagkosten (40-70% hoger) en lopen risico op compliance-schendingen wanneer gegevens niet correct worden bewaard of verwijderd volgens wettelijke vereisten.

Management Samenvatting

Configureer Azure Storage Lifecycle Management Policies om automatisch gegevens te verplaatsen tussen opslaglagen (Hot → Cool → Archive) en gegevens te verwijderen na bewaartermijnen. Dit optimaliseert kosten met 40-70% en waarborgt naleving van Archiefwet (7 jaar bewaren) en AVG (dataminimalisatie). Implementatie: 100 uur. Kritiek voor kostenoptimalisatie en compliance.