Retention Public Folders

πŸ’Ό Management Samenvatting

Deze security regelen waarborgt de correcte configuratie van beveiligingsinstellingen op Windows endpoints.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
7/10
Implementatie
2u (tech: 1u)
Van toepassing op:
βœ“ Windows

Deze instelling is onderdeel van de Windows security baseline en beschermt tegen bekende aanvalsvectoren door het afdwingen van veilige configuraties.

PowerShell Modules Vereist
Primary API: Graph
Connection: Connect-MgGraph
Required Modules: Microsoft.Graph.DeviceManagement

Implementatie

Dit regelen configureert retention public folders via Microsoft Intune apparaat configuratie beleid of compliance policies om Windows endpoints te beveiligen volgens security best practices.

Vereisten

m365

Implementatie

Gebruik PowerShell-script retention-public-folders.ps1 (functie Invoke-Monitoring) – Monitoren.

monitoring

Gebruik PowerShell-script retention-public-folders.ps1 (functie Invoke-Monitoring) – Controleren.

Remediatie

Gebruik PowerShell-script retention-public-folders.ps1 (functie Invoke-Remediation) – Herstellen.

Compliance en Auditing

Beleid documentatie

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
<# .SYNOPSIS Retention Policy Public Folders 7 Jaar .DESCRIPTION Configures 7-year retention policy for Exchange Public Folders. Ensures compliance with Dutch legal retention requirements. .NOTES Filename: retention-public-folders.ps1 Author: Nederlandse Baseline voor Veilige Cloud Category: data-lifecycle-management .EXAMPLE .\retention-public-folders.ps1 -Monitoring Check if 7-year retention is configured for public folders .EXAMPLE .\retention-public-folders.ps1 -Remediation Create 7-year retention policy for public folders #> #Requires -Version 5.1 #Requires -Modules ExchangeOnlineManagement [CmdletBinding()] param( [Parameter(Mandatory = $false)] [switch]$Monitoring, [Parameter(Mandatory = $false)] [switch]$Remediation, [Parameter(Mandatory = $false)] [switch]$Revert, [switch]$WhatIf ) $ErrorActionPreference = 'Stop' $script:RetentionDays = 2555 # 7 years $script:RetentionYears = 7 Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Retention Policy Public Folders 7 Jaar" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Invoke-Monitoring { try { Write-Host "Connecting to Security & Compliance..." -ForegroundColor Gray Connect-IPPSSession -ShowBanner:$false -ErrorAction Stop Write-Host "Checking retention policies for Public Folders..." -ForegroundColor Gray $policies = Get-RetentionCompliancePolicy -ErrorAction Stop | Where-Object { $_.PublicFolderLocation -ne $null -and $_.PublicFolderLocation.Count -gt 0 } $result = @{ isCompliant = $false total = $policies.Count compliant = 0 policyDetails = @() } if ($policies.Count -eq 0) { Write-Host " [FAIL] No Public Folder retention policies found" -ForegroundColor Red } else { foreach ($policy in $policies) { $rules = Get-RetentionComplianceRule -Policy $policy.Name -ErrorAction SilentlyContinue $maxDuration = 0 foreach ($rule in $rules) { if ($rule.RetentionDuration) { $duration = [int]$rule.RetentionDuration if ($duration -gt $maxDuration) { $maxDuration = $duration } if ($duration -ge $script:RetentionDays -and $policy.Enabled) { $result.compliant++ $result.isCompliant = $true } } } $daysText = "$maxDuration days (~$([math]::Round($maxDuration / 365, 1)) years)" $status = if ($maxDuration -ge $script:RetentionDays) { "[OK]" } else { "⚠️" } Write-Host " $status $($policy.Name): $daysText" -ForegroundColor $( if ($maxDuration -ge $script:RetentionDays) { "Green" } else { "Yellow" } ) $result.policyDetails += @{ Name = $policy.Name Duration = $maxDuration Enabled = $policy.Enabled } } } Write-Host "`n Total policies: $($result.total)" -ForegroundColor Cyan Write-Host " Compliant (β‰₯7 years): $($result.compliant)" -ForegroundColor $( if ($result.compliant -gt 0) { "Green" } else { "Red" } ) if ($result.isCompliant) { Write-Host "`n[OK] COMPLIANT - 7-year retention configured" -ForegroundColor Green exit 0 } else { Write-Host "`n[FAIL] NON-COMPLIANT - Configure 7-year retention" -ForegroundColor Red exit 1 } } catch { Write-Host "`n[FAIL] ERROR: $_" -ForegroundColor Red exit 2 } } function Invoke-Remediation { try { Write-Host "Connecting to Security & Compliance..." -ForegroundColor Gray Connect-IPPSSession -ShowBanner:$false -ErrorAction Stop $policyName = "Public Folders $script:RetentionYears Year Retention - NL Baseline" Write-Host "Creating retention policy..." -ForegroundColor Gray Write-Host " Policy name: $policyName" -ForegroundColor Cyan Write-Host " Retention: $script:RetentionYears years ($script:RetentionDays days)" -ForegroundColor Cyan $policy = New-RetentionCompliancePolicy -Name $policyName ` -Comment "Nederlandse Baseline voor Veilige Cloud - 7 jaar bewaarplicht" ` -PublicFolderLocation All ` -Enabled $true ` -ErrorAction Stop Write-Host " [OK] Policy created" -ForegroundColor Green Write-Host "Creating retention rule..." -ForegroundColor Gray $rule = New-RetentionComplianceRule -Name "$policyName - Rule" ` -Policy $policyName ` -RetentionDuration $script:RetentionDays ` -RetentionComplianceAction Keep ` -ErrorAction Stop Write-Host " [OK] Rule created" -ForegroundColor Green Write-Host "`n[OK] 7-year retention configured for Public Folders" -ForegroundColor Green Write-Host "`nPolicy details:" -ForegroundColor Cyan Write-Host " β€’ Location: All Public Folders" -ForegroundColor Gray Write-Host " β€’ Duration: $script:RetentionYears years" -ForegroundColor Gray Write-Host " β€’ Action: Keep (retain)" -ForegroundColor Gray Write-Host " β€’ Status: Enabled" -ForegroundColor Gray exit 0 } catch { Write-Host "`n[FAIL] ERROR: $_" -ForegroundColor Red exit 2 } } function Invoke-Revert { try { Write-Host "⚠️ WARNING: Removing retention policy!" -ForegroundColor Yellow Write-Host "Connecting to Security & Compliance..." -ForegroundColor Gray Connect-IPPSSession -ShowBanner:$false -ErrorAction Stop $policyName = "Public Folders $script:RetentionYears Year Retention - NL Baseline" $policy = Get-RetentionCompliancePolicy -Identity $policyName -ErrorAction SilentlyContinue if ($policy) { Remove-RetentionCompliancePolicy -Identity $policyName -Confirm:$false -ErrorAction Stop Write-Host " [OK] Policy removed" -ForegroundColor Yellow } else { Write-Host " Policy not found" -ForegroundColor Gray } exit 0 } catch { Write-Host "[FAIL] ERROR: $_" -ForegroundColor Red exit 2 } } try { if ($Revert) { Invoke-Revert } elseif ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { Invoke-Remediation } else { Write-Host "Usage:" -ForegroundColor Yellow Write-Host " -Monitoring Check current retention policies" -ForegroundColor Gray Write-Host " -Remediation Create 7-year retention policy" -ForegroundColor Gray Write-Host " -Revert Remove retention policy" -ForegroundColor Gray } } catch { throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: No auth tracking.

Management Samenvatting

Schakel in audit logging.