Intune App Protection Policies bepalen hoe zakelijke gegevens op mobiele apps en apparaten worden afgeschermd, ongeacht of het toestel eigendom is van de organisatie of de medewerker. Voor Nederlandse overheidsorganisaties maken deze beleidsregels het verschil tussen gecontroleerde mobiele samenwerking en ongecontroleerde datalekken waarbij staatsgevoelige informatie buiten het zicht van het SOC belandt.
Aanbeveling
PLAN_EN_IMPLEMENTEER
Risico zonder
High
Risk Score
8/10
Implementatie
130u (tech: 80u)
Van toepassing op:
✓ Microsoft 365 E5 ✓ Microsoft Intune ✓ Microsoft Defender voor Endpoint ✓ BYOD-programma's
BIO, AVG en de aangescherpte NIS2-verplichtingen vragen expliciet om maatregelen die dataminimalisatie, encryptie en incidentrespons afdwingbaar maken op mobiele eindpunten. Zonder App Protection Policies is het onmogelijk om aan auditors te laten zien dat Outlook, Teams, Edge en maatwerk-apps consistent omgaan met opslag, kopiëren en netwerkverbindingen. Bovendien verlangen ondernemingsraden, privacy officers en ketenpartners inzicht in welke gegevens worden verzameld en hoe snel zakelijke data kan worden gewist wanneer een apparaat zoekraakt of wordt ingenomen tijdens opsporingsonderzoek.
PowerShell Modules Vereist
Primary API: Microsoft Intune admin center, Microsoft Graph PowerShell Connection:Browser voor beleidsconfiguratie en PowerShell (Microsoft.Graph) voor geautomatiseerde controles, baseline-publicatie en rapportage Required Modules: Microsoft.Graph.Authentication
Implementatie
Dit artikel beschrijft hoe u een strategisch raamwerk, een schaalbare architectuur en een operationeel controlemechanisme opzet. De nadruk ligt op beleidsdoelen, technische configuraties, rapportage via het PowerShell-script app-protection-policies.ps1 en praktische adviezen om governance, audittrail en bewijsvoering te borgen binnen de Nederlandse publieke sector.
Strategische governance, compliance en stakeholdermanagement
App Protection Policies (APP) vormen de kern van het Nederlandse mobiele beveiligingsbeleid omdat zij direct bepalen welke gegevens een app mag cachen, hoe authenticatie verloopt en welke acties worden toegestaan tussen zakelijke en privéomgevingen. Bestuurders moeten expliciet besluiten dat mobiele applicaties dezelfde bescherming eisen als werkplekken en dat APP’s leidend zijn wanneer gebruikers persoonlijke apparaten inzetten. Dat betekent dat strategische documenten zoals het informatiebeveiligingsplan, het privacybeleid en de CIO-routekaart een hoofdstuk bevatten over mobiele datasegmentatie, waarin staat dat alleen beheerste containers toegang hebben tot Rijks- of gemeentelijke gegevens en dat alle uitzonderingen via een formele risicoafweging lopen.
Complianceperspectief: toezichthouders toetsen steeds vaker op concrete instellingen in plaats van op beleidsintenties. BIO-paragrafen 9.2 en 9.3 vragen om controle over mobiele toegang, terwijl AVG-artikel 32 eist dat persoonsgegevens zowel technisch als organisatorisch worden beschermd. Daarom moet de CISO-staf per APP vastleggen welke encryptie, pinlengte, biometrie en offline toegangsduur zijn toegestaan en hoe deze waarden aansluiten op DPIA’s. Documenteer eveneens hoe APP’s bijdragen aan sectorale richtlijnen zoals de IBD-adviezen voor gemeenten, de Baseline Informatiebeveiliging Waterschappen of defensiespecifieke voorschriften. Zo kan het auditteam eenvoudig aantonen dat APP-configuraties onderdeel zijn van de controlecatalogus en niet slechts een IT-beheerderskeuze.
Stakeholdermanagement draait om transparante afspraken met ondernemingsraden, privacy officers, leveranciers en ketenpartners. App Protection Policies verzamelen beperkte apparaatmetadata, maar die verzameling moet wel worden uitgelegd in gebruikersvoorwaarden, onboardingpakketten en leverancierscontracten. Betrek bijvoorbeeld HR en juridische teams om vast te leggen dat alleen zakelijke gegevens worden gewist bij een select wipe en dat foto’s of privéberichten ongemoeid blijven. Bij gedeelde apparaten of ketenprojecten moet duidelijk zijn welk bestuursorgaan eindverantwoordelijk is voor de naleving van APP’s, wie gebruikers instrueert en wie betaalt voor licenties en support wanneer aanvullende beveiligingsmaatregelen, zoals Defender voor Endpoint op mobiele toestellen, verplicht worden gesteld.
Tot slot vraagt strategische sturing om meetbare succescriteria. Definieer KPI’s zoals “percentage gebruikers met een actuele APP”, “aantal uitzonderingen met formele risicodocumentatie” en “gemiddelde tijd tot remote wipe bij incidenten”. Deze indicatoren worden opgenomen in de kwartaalrapportages richting bestuurders en in de voortgangsbesprekingen met auditdiensten. Door KPI’s rechtstreeks te koppelen aan de output van het PowerShell-script ontstaat een automatische escalatie wanneer een instelling afwijkt of een beleidsprofiel ontbreekt. Zo blijft het gesprek over mobiele beveiliging niet steken in losse casussen, maar wordt het onderdeel van de reguliere governancecyclus met duidelijke eigenaarschap en budgettering.
Architectuur, configuratie en automatisering van App Protection Policies
Gebruik PowerShell-script app-protection-policies.ps1 (functie Invoke-AppProtectionAssessment) – Maakt via Microsoft Graph een momentopname van alle iOS-, Android-, Windows- en macOS-app protection policies, controleert verplichte instellingen en schrijft optioneel een referentieconfiguratie weg..
Een moderne APP-architectuur bestaat uit drie lagen. De eerste laag definieert globale instellingen zoals minimale OS-versies, versleuteling, biometrische verplichtingen en tijdslimieten voor offline toegang. De tweede laag bouwt per platform specifieke eisen in, bijvoorbeeld een aangepast kopieerbeleid voor Android Work Profile of aanvullende jailbreakdetectie voor iOS. De derde laag richt zich op scenario’s en apps: productiviteitssuites zoals Outlook en Teams krijgen strengere copy/paste-regels dan een interne meldingenapp, terwijl defensie- of crisisomgevingen het downloaden van bijlagen in privéopslag volledig blokkeren. Documenteer de interactie tussen APP’s en device compliance policies, zodat duidelijk is wanneer een apparaat wordt geweigerd vanwege een app-instelling en wanneer Conditional Access de toegang blokkeert.
Configuratiestandaarden moeten concreet zijn. Beschrijf per profiel welke instellingen hard zijn (“must”), welke adaptief worden toegepast (“should”) en welke experimenteel zijn. Denk aan pinlengte (minimaal zes cijfers), verplicht gebruik van moderne authenticatie, encryptie van alle lokale caches, blokkade van printen en open-in naar niet-beheerde apps, en een maximale offline-toegang van twaalf uur voor hoogrisicoprocessen. Leg vast hoe APP’s worden gekoppeld aan app-registraties in Intune, hoe optreden bij gedeelde apparaten werkt en hoe beleid wordt geversioneerd zodat incidentanalisten altijd weten welke instelling actief was tijdens een gebeurtenis.
Automatisering is essentieel vanwege het grote aantal combinaties van gebruikersgroepen, apps en platforms. Het PowerShell-script haalt instellingen op via Microsoft Graph, vergelijkt ze met een referentieconfiguratie en signaleert ontbrekende waarden of afwijkingen in sleutelparameters zoals encryptie, biometrie, gegevensoverdracht en logboekinstellingen. Beheerders gebruiken het script om nieuwe profielen te controleren voordat ze worden gepubliceerd, om scenario’s vanuit pilots door te voeren naar productie en om scripts in Azure Automation, GitHub Actions of Intune-remediation scripts te integreren. Zo ontstaat een DevSecOps-achtige aanpak waarin wijzigingen geautomatiseerd, gedocumenteerd en gecontroleerd worden uitgerold.
Vergeet de integratie met aanpalende diensten niet. Defender voor Endpoint levert signaaldata over risicovolle apps of jailbreaks die moeten worden vertaald naar APP-acties, terwijl Microsoft Purview eDiscovery eist dat app-logs beschikbaar zijn wanneer onderzoek plaatsvindt. Leg in architectuurdocumentatie vast hoe APP’s samenwerken met Mobile Threat Defense, Secure Private Access of third-party identiteitsbrokers, en hoe fallback-scenario’s werken als Graph tijdelijk niet beschikbaar is. Door architectuur, configuratie en automatisering in één beheermodel te verenigen, minimaliseert u inconsistenties tussen omgevingen en blijft de audittrail herleidbaar.
Operationele borging, rapportage en continue verbetering
Gebruik PowerShell-script app-protection-policies.ps1 (functie Invoke-AppProtectionMonitoring) – Combineert actuele meetgegevens met de referentieconfiguratie, genereert rapporten voor audits en ondersteunt DebugMode voor lokale tests die binnen vijftien seconden draaien..
Operationele borging begint bij duidelijke processen: Intune-beheerders beheren APP’s, het SOC analyseert afwijkingen, privacy officers beoordelen uitzonderingen en het change- of CAB-proces valideert nieuwe profielen. Iedere wijziging krijgt een ticketnummer, waardoor naleving eenvoudig kan worden aangetoond. Het PowerShell-script schrijft resultaten weg naar JSON-rapporten die worden opgeslagen in een centrale repository en gelinkt aan change-records. Hierdoor ontstaat een ononderbroken keten van besluit tot implementatie en bewijs, iets waar auditors uitdrukkelijk om vragen sinds de toename van remote work en BYOD-initiatieven.
Monitoring moet dagelijks inzicht geven in de gezondheid van alle APP’s. Het script controleert of verplichte profielen bestaan, of kopieerregimes en versleutelingsinstellingen niet zijn versoepeld en of risicoparameters overeenkomen met het vastgestelde baselinebestand. DebugMode maakt het mogelijk om scripts lokaal te testen zonder productiegegevens, zodat ontwikkelteams en auditors nieuwe controles kunnen simuleren. De maximale testduur van vijftien seconden wordt geborgd door het gebruik van geëmuleerde datasets en het beperken van externe afhankelijkheden tijdens debugruns.
Rapportages moeten aansluiten bij bestuur en toezicht. Gebruik maandelijkse dashboards om trends in uitzonderingen, remote wipes en incidenten te bespreken met CIO, CISO en privacy officers. Voeg context toe uit Microsoft Sentinel of andere SIEM-oplossingen, zodat koppelingen tussen mobiele incidenten en bredere dreigingspatronen zichtbaar worden. Door rapportages te koppelen aan KPI’s kunnen bestuurders direct zien welke investeringen in training, licenties of procesoptimalisatie nodig zijn om het gewenste volwassenheidsniveau te behouden.
Continue verbetering vereist een cyclische aanpak waarin lessons learned uit audits, pentests, incidentrespons en gebruikersfeedback worden geanalyseerd. Organiseer bijvoorbeeld elk kwartaal een review waarin security-architecten, privacy officers en servicedeskleads de scriptuitvoer vergelijken met nieuwe NCSC-adviezen of wijzigingen in iOS en Android. Bespreek hoe leveranciers omgaan met APP-eisen, hoe uitzonderingen worden gedocumenteerd en hoe snel herstelacties plaatsvinden wanneer policy-distributie mislukt. Door verbetermaatregelen direct te koppelen aan het configuratiebestand en de rapportages ontstaat een aantoonbare PDCA-cyclus die zowel toezichthouders als interne governance overtuigt.
Compliance & Frameworks
BIO: 4.1, 9.2, 9.3 - BIO-paragrafen over toegangsbeheer en beveiliging van mobiele apparaten vragen om afdwingbare beleidsregels rond gegevensscheiding en incidentrespons.
ISO 27001:2022: A.5.15, A.8.16, A.8.28 - ISO/IEC 27001:2022 stelt eisen aan mobiele apparaatbeheer, gegevensbeveiliging en monitoring die direct van toepassing zijn op Intune App Protection Policies.
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
Controleert en monitort Intune App Protection Policies voor Microsoft 365.
.DESCRIPTION
Het script leest via Microsoft Graph alle app protection policies (MAM) uit,
controleert kerninstellingen zoals versleuteling, PIN-eisen en gegevensdeling,
publiceert optioneel een referentieconfiguratie en genereert assessment- of
monitoringrapportages. DebugMode levert realistische testdata waarmee lokale
controles binnen vijftien seconden kunnen worden uitgevoerd.
.NOTES
Filename: app-protection-policies.ps1
Author: Nederlandse Baseline voor Veilige Cloud
Created: 2025-11-27
Version: 1.0
Gerelateerd JSON: content/m365/mobile/app-protection-policies.json
Workload: m365
Category: mobile
.EXAMPLE
.\app-protection-policies.ps1 -Assessment -ReportPath .\rapporten\app-protection.json
Voert een beoordeling uit en schrijft het resultaat naar het opgegeven pad.
.EXAMPLE
.\app-protection-policies.ps1 -PublishBaseline
Publiceert een referentieconfiguratiebestand in dezelfde map als het script.
.EXAMPLE
.\app-protection-policies.ps1 -Monitoring -ReportPath .\rapporten\app-protection-monitoring.json
Combineert actuele gegevens met de baseline en genereert een monitoringrapport.
#>
#Requires -Version 5.1
[CmdletBinding()]
param(
[switch]$Assessment,
[switch]$PublishBaseline,
[switch]$Monitoring,
[string]$ReportPath,
[switch]$DebugMode,
[switch]$WhatIf
)
$ErrorActionPreference = 'Stop'
$VerbosePreference = 'Continue'
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host "Intune App Protection Toolkit" -ForegroundColor Cyan
Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan
Write-Host "========================================`n" -ForegroundColor Cyan
functionGet-AppProtectionConfigPath {
[CmdletBinding()]
param()
$scriptDir = Split-Path -Parent $PSCommandPathreturn (Join-Path -Path $scriptDir -ChildPath "app-protection-policies.config.json")
}
functionTest-RequiredModules {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string[]]$ModuleNames
)
foreach ($moduleName in $ModuleNames) {
if (-not (Get-Module -ListAvailable -Name $moduleName -ErrorAction SilentlyContinue)) {
throw "Vereiste module '$moduleName' is niet gevonden. Installeer de module en voer het script opnieuw uit."
}
}
}
function Ensure-GraphConnection {
[CmdletBinding()]
param()
Test-RequiredModules -ModuleNames @('Microsoft.Graph.Authentication')
Import-Module Microsoft.Graph.Authentication -ErrorAction Stop | Out-Null
$requiredScopes = @(
'DeviceManagementApps.Read.All',
'DeviceManagementConfiguration.Read.All'
)
$context = Get-MgContext -ErrorAction SilentlyContinue
$needsConnect = $trueif ($context) {
$scopeDifference = Compare-Object -ReferenceObject $requiredScopes -DifferenceObject $context.Scopes
if ($scopeDifference.Count -eq 0 -and $context.ExpirationTime -gt (Get-Date)) {
$needsConnect = $false
}
}
if ($needsConnect) {
Write-Verbose "Verbinding maken met Microsoft Graph..."Connect-MgGraph -Scopes $requiredScopes -NoWelcome | Out-Null
}
try {
Select-MgProfile -Name beta
}
catch {
throw "Het Microsoft Graph-profiel 'beta' kan niet worden geselecteerd. Update de Microsoft.Graph modules."
}
}
function Invoke-GraphPagedRequest {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]$Uri
)
$results = @()
$nextLink = $Uriwhile ($nextLink) {
$response = Invoke-MgGraphRequest -Method GET -Uri $nextLink -OutputType PSObject
if ($response.value) {
$results += $response.value
}
$nextLink = $response.'@odata.nextLink'
}
return$results
}
function Convert-IsoDurationToHours {
[CmdletBinding()]
param(
[string]$Duration
)
if (-not $Duration) {
return$null
}
try {
return [Math]::Round(([System.Xml.XmlConvert]::ToTimeSpan($Duration)).TotalHours, 2)
}
catch {
return$Duration
}
}
functionGet-AppProtectionSnapshot {
[CmdletBinding()]
param(
[switch]$DebugMode
)
if ($DebugMode) {
return @(
[PSCustomObject]@{
PolicyId = 'debug-ios'
Name = 'APP - iOS Rijksbreed'
Platform = 'iOS/iPadOS'
MinPinLength = 6
PinResetDays = 30
OfflineHours = 8
CopyPasteLevel = 'managedApps'
EncryptData = $true
BlockJailBroken = $true
DataTransfer = 'policyManagedApps'
AssignedApps = @('Microsoft Outlook', 'Microsoft Teams', 'Edge')
LastModified = (Get-Date).AddDays(-2)
},
[PSCustomObject]@{
PolicyId = 'debug-android'
Name = 'APP - Android Werkprofiel'
Platform = 'Android'
MinPinLength = 6
PinResetDays = 60
OfflineHours = 6
CopyPasteLevel = 'policyManagedWithPasteIn'
EncryptData = $true
BlockJailBroken = $true
DataTransfer = 'policyManagedApps'
AssignedApps = @('Microsoft Outlook', 'Power Apps')
LastModified = (Get-Date).AddDays(-1)
},
[PSCustomObject]@{
PolicyId = 'debug-windows'
Name = 'APP - Windows 11 multi-user'
Platform = 'Windows'
MinPinLength = 6
PinResetDays = 45
OfflineHours = 12
CopyPasteLevel = 'managedApps'
EncryptData = $true
BlockJailBroken = $true
DataTransfer = 'policyManagedApps'
AssignedApps = @('Microsoft Edge')
LastModified = (Get-Date).AddDays(-5)
}
)
}
Ensure-GraphConnection
$uri = "https://graph.microsoft.com/beta/deviceAppManagement/managedAppPolicies?`$expand=assignments"
$policies = Invoke-GraphPagedRequest -Uri $uri$snapshots = @()
foreach ($policy in $policies) {
$odataType = $policy.'@odata.type'
if ($odataType -notmatch 'managedAppProtection') {
continue
}
$platform = switch ($odataType) {
'#microsoft.graph.iosManagedAppProtection' { 'iOS/iPadOS' }
'#microsoft.graph.androidManagedAppProtection' { 'Android' }
'#microsoft.graph.windowsManagedAppProtection' { 'Windows' }
'#microsoft.graph.macosManagedAppProtection' { 'macOS' }
default { 'Onbekend' }
}
$assignments = @()
if ($policy.assignments) {
foreach ($assignment in $policy.assignments) {
if ($assignment.target -and $assignment.target.displayName) {
$assignments += $assignment.target.displayName
}
}
}
$snapshots += [PSCustomObject]@{
PolicyId = $policy.id
Name = $policy.displayName
Platform = $platform
MinPinLength = $policy.minimumPinLength
PinResetDays = $policy.pinRequiredDays
OfflineHours = Convert-IsoDurationToHours -Duration $policy.periodOfflineBeforeAccessCheck
CopyPasteLevel = $policy.allowedOutboundClipboardSharingLevel
EncryptData = ($policy.appDataEncryptionType -and $policy.appDataEncryptionType -ne 'whenDeviceLocked')
BlockJailBroken = [bool]$policy.deviceComplianceRequired
DataTransfer = $policy.allowedOutboundDataTransferDestinations
AssignedApps = $assignments
LastModified = $policy.lastModifiedDateTime
}
}
return$snapshots
}
function Invoke-AppProtectionAssessment {
[CmdletBinding()]
param(
[switch]$DebugMode
)
$snapshot = Get-AppProtectionSnapshot -DebugMode:$DebugMode$issues = [System.Collections.Generic.List[string]]::new()
if (-not $snapshot -or $snapshot.Count -lt 2) {
$issues.Add("Er zijn onvoldoende app protection policies gevonden om alle platformen te dekken.")
}
else {
foreach ($policy in $snapshot) {
if ([int]$policy.MinPinLength -lt 6) {
$issues.Add("Policy '$($policy.Name)' hanteert een pinlengte korter dan 6.") | Out-Null
}
if (-not $policy.EncryptData) {
$issues.Add("Policy '$($policy.Name)' versleutelt applicatiegegevens niet volledig.") | Out-Null
}
if ($policy.CopyPasteLevel -notin @('managedApps', 'policyManagedWithPasteIn')) {
$issues.Add("Policy '$($policy.Name)' staat onbeveiligd kopiëren toe.") | Out-Null
}
if ($policy.OfflineHours -is [double] -and $policy.OfflineHours -gt 12) {
$issues.Add("Policy '$($policy.Name)' laat langere offline toegang toe dan 12 uur.") | Out-Null
}
if ($policy.DataTransfer -and $policy.DataTransfer -notmatch 'managed') {
$issues.Add("Policy '$($policy.Name)' staat overdracht naar onbeheerde apps toe.") | Out-Null
}
if (-not $policy.BlockJailBroken) {
$issues.Add("Policy '$($policy.Name)' blokkeert jailbreak/rooting niet.") | Out-Null
}
if (-not $policy.AssignedApps -or $policy.AssignedApps.Count -eq 0) {
$issues.Add("Policy '$($policy.Name)' heeft geen toegewezen apps.") | Out-Null
}
}
}
return [PSCustomObject]@{
Script = 'app-protection-policies.ps1'
Timestamp = Get-Date
Policies = $snapshot
Issues = $issues
IsHealthy = ($issues.Count -eq 0)
}
}
function Publish-AppProtectionBaseline {
[CmdletBinding()]
param(
[switch]$DebugMode
)
$assessment = Invoke-AppProtectionAssessment -DebugMode:$DebugMode$baselinePath = Get-AppProtectionConfigPath$baseline = [ordered]@{
version = "1.0"
lastUpdated = (Get-Date).ToString("yyyy-MM-dd")
requiredSettings = @{
MinPinLength = 6
CopyPasteLevel = @('managedApps', 'policyManagedWithPasteIn')
MaxOfflineHours = 12
DataTransferTargets = 'policyManagedApps'
}
policies = @()
}
foreach ($policy in $assessment.Policies) {
$baseline.policies += [ordered]@{
PolicyId = $policy.PolicyId
Name = $policy.Name
Platform = $policy.Platform
MinPinLength = $policy.MinPinLength
OfflineHours = $policy.OfflineHours
EncryptData = $policy.EncryptData
CopyPasteLevel = $policy.CopyPasteLevel
DataTransfer = $policy.DataTransfer
BlockJailBroken = $policy.BlockJailBroken
}
}
if ($WhatIf) {
Write-Warning "WhatIf actief: baseline wordt niet opgeslagen."
return$baseline
}
$baseline | ConvertTo-Json -Depth 6 | Out-File -FilePath $baselinePath -Encoding utf8
Write-Host "Baseline opgeslagen op $baselinePath" -ForegroundColor Green
return$baseline
}
function Invoke-AppProtectionMonitoring {
[CmdletBinding()]
param(
[switch]$DebugMode
)
$assessment = Invoke-AppProtectionAssessment -DebugMode:$DebugMode$baselinePath = Get-AppProtectionConfigPathif (-not (Test-Path$baselinePath)) {
throw "Baselinebestand '$baselinePath' bestaat niet. Voer -PublishBaseline eerst uit."
}
$baseline = Get-Content -Path $baselinePath -Raw | ConvertFrom-Json
$drift = @()
foreach ($policy in $baseline.policies) {
$match = $assessment.Policies | Where-Object { $_.PolicyId -eq $policy.PolicyId }
if (-not $match) {
$drift += [PSCustomObject]@{
PolicyId = $policy.PolicyId
Issue = "Policy ontbreekt in de huidige tenant."
}
continue
}
foreach ($property in @('MinPinLength','EncryptData','CopyPasteLevel','DataTransfer','BlockJailBroken')) {
if ($match.$property -ne $policy.$property) {
$drift += [PSCustomObject]@{
PolicyId = $policy.PolicyId
Issue = "Afwijking voor '$property' (Baseline: $($policy.$property) / Huidig: $($match.$property))."
}
}
}
if ($match.OfflineHours -is [double] -and $policy.OfflineHours -is [double]) {
if ([math]::Round($match.OfflineHours,2) -ne [math]::Round($policy.OfflineHours,2)) {
$drift += [PSCustomObject]@{
PolicyId = $policy.PolicyId
Issue = "Offline toegangsduur wijkt af (Baseline: $($policy.OfflineHours) uur / Huidig: $($match.OfflineHours) uur)."
}
}
}
}
return [PSCustomObject]@{
Script = 'app-protection-policies.ps1'
Timestamp = Get-Date
Issues = $assessment.Issues
BaselineDrift = $drift
Policies = $assessment.Policies
IsHealthy = ($assessment.Issues.Count -eq 0 -and $drift.Count -eq 0)
}
}
function Write-Report {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
$Data,
[string]$Path
)
if (-not $Path) {
return$Data
}
$directory = Split-Path -Parent $Pathif ($directory -and -not (Test-Path$directory)) {
New-Item -ItemType Directory -Path $directory -Force | Out-Null
}
$Data | ConvertTo-Json -Depth 8 | Out-File -FilePath $Path -Encoding utf8
Write-Host "Rapport opgeslagen op $Path" -ForegroundColor Green
}
try {
if ($Assessment) {
$result = Invoke-AppProtectionAssessment -DebugMode:$DebugMode
Write-Report -Data $result -Path $ReportPath
}
elseif ($PublishBaseline) {
$result = Publish-AppProtectionBaseline -DebugMode:$DebugMode
Write-Report -Data $result -Path $ReportPath
}
elseif ($Monitoring) {
$result = Invoke-AppProtectionMonitoring -DebugMode:$DebugMode
Write-Report -Data $result -Path $ReportPath
}
else {
Write-Warning "Geen actie opgegeven. Gebruik -Assessment, -PublishBaseline of -Monitoring."
}
}
catch {
Write-Error$_
throw
}
Risico zonder implementatie
Risico zonder implementatie
High: Wanneer App Protection Policies ontbreken of verouderd zijn, verliest de organisatie controle over mobiele data en kan zij geen aantoonbare compliance leveren richting BIO, AVG en NIS2-auditors.
Management Samenvatting
Veranker App Protection Policies als strategisch instrument, standaardiseer configuraties via het PowerShell-script en gebruik monitoringrapporten om incidentrespons en audits te versnellen.