Bring Your Own Device-programma’s zijn in de Nederlandse publieke sector inmiddels onmisbaar voor flexibele inzet van medewerkers, ketenpartners en tijdelijke projectteams. Zonder strak beleid rond registratie, data-afscherming en monitoring lopen organisaties een groot risico dat persoonsgegevens en staatsgevoelige informatie via privéapparaten uitlekt. Dit artikel biedt een volledig raamwerk waarmee CISO’s, Intune-beheerders en privacy officers het BYOD-beleid kunnen professionaliseren en aantonen dat technische en organisatorische maatregelen aantoonbaar werken.
Aanbeveling
PLAN_EN_IMPLEMENTEER
Risico zonder
High
Risk Score
7/10
Implementatie
160u (tech: 90u)
Van toepassing op:
✓ Microsoft 365 E5 ✓ Microsoft Intune ✓ Microsoft Defender voor Endpoint ✓ BYOD-programma's
De toegenomen druk vanuit BIO, AVG en NIS2 verplicht overheidsorganisaties om ook persoonlijke hardware centraal te beheren, zelfs wanneer apparaten slechts incidenteel toegang krijgen tot Microsoft 365. Auditdiensten stellen inmiddels standaard vragen over Mobile Application Management, scheiding van zakelijke en privédata, en crisismaatregelen wanneer een apparaat zoekraakt of wordt gecompromitteerd. Een incompleet BYOD-beleid maakt het onmogelijk om naleving te tonen en leidt tot directe bevindingen bij departementale auditdiensten en de Algemene Rekenkamer.
PowerShell Modules Vereist
Primary API: Microsoft Intune admin center, Microsoft 365 Defender portal Connection:Browser voor beleidsconfiguratie en PowerShell (Microsoft Graph) voor geautomatiseerde controles, export en hergebruik Required Modules: Microsoft.Graph.Authentication
Implementatie
Dit artikel beschrijft hoe u beleidskaders opstelt, welke technische configuraties in Intune en Conditional Access vereist zijn, en hoe u met het PowerShell-script byod-policies.ps1 periodiek bewijs verzamelt. De nadruk ligt op Nederlandse wet- en regelgeving, afspraken met vakbonden en ondernemingsraden en de behoefte om samenwerking met leveranciers te versnellen zonder controle te verliezen. Door de koppeling te leggen tussen beleid, architectuur en meetbare KPI’s krijgt u een compleet verhaal richting bestuurders, auditors en gebruikersraden.
Strategische sturing, juridische borging en stakeholdermanagement
Een volwassen BYOD-programma begint bij strategische keuzes: waarom staat de organisatie persoonlijk eigendom toe, welke processen profiteren daarvan en welke risico’s worden geaccepteerd? Nederlandse overheidsorganisaties gebruiken BYOD vooral om inspecteurs, zorgprofessionals, beleidsadviseurs en crisisteams soepel te laten werken, ook wanneer zij buiten kantooruren optreden. Tegelijkertijd eisen parlement, toezichthouders en burgers dat persoonsgegevens en staatsgevoelige analyses niet op onbeveiligde telefoons of tablets terechtkomen. Strategische sturing betekent dat het hoogste management expliciet de voorwaarden benoemt waaronder BYOD is toegestaan, inclusief registratieplicht, beperking van offline toegang en afspraken over verwijdering van zakelijke data bij vertrek. Door deze keuzes vast te leggen in security-charters en convenanten met ondernemingsraden ontstaat een mandaat om strenge maatregelen te handhaven zonder het vertrouwen van medewerkers te verliezen.
Juridische borging draait om het vertalen van AVG, BIO en Rijksbrede afspraken naar concrete contracten en gebruikersvoorwaarden. Het beleid moet duidelijk maken dat de organisatie zakelijke data logisch scheidt via Intune Mobile Application Management, dat alleen minimale metadata over het apparaat wordt verzameld en dat privéfoto’s of berichten nooit worden ingezien. Tegelijkertijd moet het beleid vastleggen dat een apparaat mag worden geblokkeerd of dat zakelijke apps onmiddellijk worden gewist wanneer een incident plaatsvindt. Dit vraagt om nauw overleg tussen CISO, Chief Privacy Officer, HR, ondernemingsraad en leveranciers. Voor het Nederlandse publieke domein is het essentieel dat privacy impact assessments (PIA’s) en Data Protection Impact Assessments (DPIA’s) expliciet worden bijgewerkt zodra BYOD wordt uitgebreid naar nieuwe groepen zoals wethouders, raadsleden of externe programmamanagers. Door deze documenten te koppelen aan het BYOD-beleid kan de organisatie aantonen dat juridische toetsing structureel plaatsvindt.
Stakeholdermanagement gaat verder dan communicatie: het is een doorlopende dialoog met gebruikersraden, vakbonden, leveranciers en ketenpartners over de balans tussen gebruiksgemak en beveiliging. Medewerkers accepteren strikte maatregelen eerder wanneer zij inzicht krijgen in het dreigingsbeeld en wanneer de organisatie alternatieven biedt, zoals een moderne managed device of een tijdelijke leen-laptop voor hoogrisicoscenario’s. Leveranciers moeten contractueel worden verplicht om alleen apps aan te bieden die voldoen aan het MAM-beleid en die moderne authenticatiestandaarden ondersteunen. Door regelmatig scenario’s door te lopen – bijvoorbeeld een verloren telefoon tijdens een diplomatieke missie of een journalistieke Wob-aanvraag naar BYOD-incidenten – blijft de organisatie scherp op reputatierisico’s. Strategische sturing betekent dus dat BYOD niet wordt gezien als een technische configuratie, maar als een integraal onderdeel van organisatiecultuur en governance.
Tot slot vereist BYOD een volwassen risicofinanciering. Apparaten die eigendom zijn van medewerkers worden niet automatisch gedekt door reguliere verzekeringen of compensatieregelingen bij schade. Het beleid moet duidelijk maken wie aansprakelijk is voor stroomverbruik, data-abonnementen en hardware-vervanging wanneer zakelijke apps extra eisen stellen aan opslag of beveiliging. Daarnaast moeten budgetten beschikbaar zijn voor licenties (zoals Intune Suite), training van servicedesks en communicatiecampagnes. Door deze kosten direct te koppelen aan de strategische voordelen – snellere gebruikers onboarding, minder wachtlijsten bij device-uitgifte, hogere medewerkerstevredenheid – ontstaat draagvlak om BYOD structureel te financieren en niet als tijdelijk experiment te beschouwen. Het artikel levert argumenten en rekenvoorbeelden waarmee bestuurders kunnen beslissen of BYOD binnen hun organisatie verantwoord kan worden opgeschaald.
Architectuur, technische beleidskaders en automatisering
Gebruik PowerShell-script byod-policies.ps1 (functie Invoke-ByodPolicyAssessment) – Controleert via Microsoft Graph of BYOD-compliancebeleid, mobiele applicatiebeveiliging en Conditional Access-drempels aanwezig zijn en genereert direct een lijst met hiaten en aanbevelingen..
Een robuuste architectuur voor BYOD combineert drie lagen: Mobile Application Management (MAM) voor het isoleren van data in apps, device compliancebeleid om minimale beveiligingseisen af te dwingen en Conditional Access als beslislaag voor toegang tot Microsoft 365. Elk persoonlijk apparaat moet minimaal een MAM-profiel hebben waarin versleuteling, PIN-eisen, jailbreak-detectie en het blokkeren van copy/paste naar privé-apps zijn geconfigureerd. Daarnaast moet Conditional Access controleren of het apparaat een goedgekeurde app gebruikt, een compliant risico-profiel heeft en afkomstig is van een vertrouwd netwerk of via meervoudige authenticatie is aangemeld. Deze architectuur zorgt ervoor dat zelfs wanneer een apparaat buiten beheer valt, de zakelijke data binnen een beveiligde container blijven en dat toegang onmiddellijk kan worden ingetrokken.
Technische beleidskaders richten zich op concrete instellingen. Voor iOS en Android betekent dit bijvoorbeeld dat Intune Managed Apps altijd gegevens versleutelen, dat biometrie naast een sterke pincode vereist is en dat offline toegang wordt beperkt tot maximaal 12 uur voor hoogrisicoprocessen. Voor Windows- of macOS-apparaten die incidenteel als BYOD worden gebruikt, gelden aanvullende eisen zoals BitLocker of FileVault, automatische patches en Defender voor Endpoint-sensoren. Het beleid beschrijft eveneens hoe bedrijfsapps worden gesigneerd, hoe certificaten worden uitgerold en hoe applicaties worden getest voordat zij beschikbaar komen in het bedrijfsportaal. Door een configuratiebibliotheek te onderhouden waarin per platform de vereiste instellingen zijn opgenomen, kunnen teams sneller wijzigingen doorvoeren en aantonen dat iedere aanpassing traceerbaar is.
Automatisering maakt het verschil tussen beleid op papier en daadwerkelijke naleving. Het meegeleverde PowerShell-script leest via Microsoft Graph de status van app protection policies, device compliance policies en Conditional Access regels uit en vergelijkt die met de vastgelegde drempelwaarden. Hierdoor detecteert u binnen enkele minuten of een nieuw aangemaakte gebruikersgroep nog geen BYOD-profiel heeft, of dat een app protection policy per ongeluk is gedeactiveerd. De gegevens worden opgeslagen in een configuratiebestand dat als waarheidsbron dient tijdens audits. Bovendien kunt u resultaten integreren met Azure Monitor of Microsoft Sentinel, zodat beleidswijzigingen automatisch alerts genereren. Deze continue monitoring maakt het mogelijk om beleid aan te passen zodra nieuwe dreigingen, OS-versies of toestemmingsvereisten zich aandienen.
Architectuurdocumentatie moet tot slot nauw aansluiten op contracten met leveranciers en ketenpartners. Wanneer externe ontwikkelaars apps aanbieden die toegang hebben tot Rijksdata, moeten zij aantonen dat hun apps Intune MAM-SDK’s ondersteunen en dat logging voldoet aan de eisen van de Wet open overheid en archiefwetgeving. Het beleid moet beschrijven hoe certificaten worden beheerd, hoe apps worden verwijderd wanneer leveranciersrelaties eindigen en hoe versies gefaseerd worden uitgerold via ringgebaseerde distributie. Door architectuur, contracten en technische implementatie in samenhang te beschrijven, voorkomt u dat BYOD een verzameling losse instellingen wordt en borgt u dat elke stakeholder exact weet welke verplichtingen gelden.
Operationele uitvoering, rapportage en continue verbetering
Gebruik PowerShell-script byod-policies.ps1 (functie Invoke-ByodMonitoring) – Combineert actuele BYOD-metingen met het referentieconfiguratiebestand en schrijft automatisch rapportages weg voor audits, bestuurders en privacy officers..
Operationele verantwoording begint bij een duidelijke rolverdeling. Het CISO-office stelt de kaders vast, Intune-beheerders implementeren policies, het SOC bewaakt afwijkingen en privacy officers beoordelen DPIA’s en incidentmeldingen. Iedere wijziging wordt geregistreerd via change management zodat duidelijk is wie welke instelling heeft aangepast en waarom. Het rapportageproces moet minimaal maandelijks inzicht geven in het aantal actieve BYOD-apparaten, het percentage gebruikers dat voldoet aan MAM-eisen, het aantal geblokkeerde registraties en de doorlooptijd van herstelacties. Door deze data te visualiseren in Power BI of dashboards binnen Microsoft Defender, kunnen bestuurders tijdig bijsturen en budget vrijmaken wanneer trends verslechteren.
Het PowerShell-script fungeert als ruggengraat voor deze rapportages. Via de DebugMode kunnen teams lokaal testen of runbooks correct zijn voordat ze productiegegevens analyseren, waarmee wordt voldaan aan de eis dat scripts veilig en binnen vijftien seconden getest moeten kunnen worden. Tijdens productieruns verzamelt het script bewijsstukken zoals het aantal gepubliceerde app protection policies, de ingestelde eisen voor copy/paste, minimale OS-versies en Conditional Access combinaties met apparaatfilters. Het script schrijft de resultaten naar JSON-rapporten die eenvoudig kunnen worden gekoppeld aan archiveringssystemen, audits of GRC-tools. Daardoor hoeft de servicedesk geen screenshots meer te verzamelen om een auditverzoek te beantwoorden; een actuele rapportage volstaat.
Continue verbetering vraagt om een feedbacklus waarin lessons learned uit incidenten, pentests en gebruikersenquêtes worden verwerkt. Het BYOD-stuurgroepoverleg bespreekt bijvoorbeeld elk kwartaal of de offline toegestane periode nog aansluit op het werkproces van buitendienstteams, of dat strengere eisen nodig zijn na nieuwe dreigingsinformatie van het NCSC. Ook wordt geëvalueerd of communicatie richting medewerkers duidelijk genoeg is, bijvoorbeeld via microlearning of pushnotificaties bij beleidswijzigingen. Het artikel adviseert om KPI’s te definiëren zoals “percentages apparaten met actuele app protection policy” of “aantal blokkades dat binnen twee uur is afgehandeld” en deze te koppelen aan prestatie-indicatoren van dienstverlenende teams.
Ten slotte moet de organisatie transparant zijn richting gebruikers en partners. Documenteer hoe en wanneer zakelijke gegevens worden verwijderd van een privéapparaat, welke logs worden bewaard en hoe een medewerker bezwaar kan maken. Communiceer deze afspraken via intranet, onboardingprogramma’s en leveranciersportalen. Tijdens audits kan vervolgens worden aangetoond dat medewerkers op de hoogte zijn gebracht en dat procedures daadwerkelijk worden gevolgd. Door operationele verantwoording zo expliciet te maken, wordt BYOD geen noodzakelijk kwaad maar een gecontroleerde bouwsteen van de digitale strategie.
Compliance & Frameworks
BIO: 4.1, 9.2, 12.2 - BIO-paragrafen over toegangsbeveiliging, apparaatgebruik en continu toezicht vereisen dat persoonlijke apparaten dezelfde beschermingsmaatregelen krijgen als werkplekken.
ISO 27001:2022: A.5.15, A.6.3, A.8.28 - ISO/IEC 27001:2022 benadrukt beheersmaatregelen voor organisatie-eigendommen, mobiele apparatuur en beveiligde uitwijkvoorzieningen die rechtstreeks van toepassing zijn op BYOD.
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
BYOD-beleid beoordelen, borgen en rapporteren voor Microsoft 365 en Intune.
.DESCRIPTION
Voert een controle uit op app protection policies, compliancebeleid en Conditional Access
regels rond Bring Your Own Device (BYOD). Het script kan een referentieconfiguratie
genereren, monitoringrapporten schrijven en ondersteunt DebugMode voor lokale tests.
.NOTES
Filename: byod-policies.ps1
Author: Nederlandse Baseline voor Veilige Cloud
Created: 2025-11-27
Version: 1.0
Gerelateerd JSON: content/m365/mobile/byod-policies.json
Workload: m365
Category: mobile
.EXAMPLE
.\byod-policies.ps1 -Assessment -ReportPath .\rapporten\byod-check.json
Voert een BYOD-beoordeling uit en slaat het resultaat op.
.EXAMPLE
.\byod-policies.ps1 -PublishBaseline
Genereert of actualiseert het BYOD-referentieconfiguratiebestand.
.EXAMPLE
.\byod-policies.ps1 -Monitoring -ReportPath .\rapporten\byod-monitoring.json
Combineert een actuele meting met de configuratie voor auditgebruik.
#>
#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 "BYOD Policy Toolkit" -ForegroundColor Cyan
Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan
Write-Host "========================================`n" -ForegroundColor Cyan
functionGet-ByodConfigPath {
[CmdletBinding()]
param()
$scriptDir = Split-Path -Parent $PSCommandPathreturn (Join-Path -Path $scriptDir -ChildPath "byod-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',
'Policy.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-Host "Verbinding maken met Microsoft Graph..." -ForegroundColor Gray
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
}
functionGet-ByodAppProtectionSnapshot {
[CmdletBinding()]
param(
[switch]$DebugMode
)
if ($DebugMode) {
return @(
[PSCustomObject]@{
PolicyId = 'debug-ios'
Name = 'iOS BYOD-beleid'
Platform = 'iOS/iPadOS'
MinPinLength = 6
EncryptionRequired = $true
OfflineHours = 8
CopyPasteLevel = 'managedApps'
Assignments = @('Raad van State', 'Inspecties')
},
[PSCustomObject]@{
PolicyId = 'debug-android'
Name = 'Android BYOD-beleid'
Platform = 'Android'
MinPinLength = 6
EncryptionRequired = $true
OfflineHours = 6
CopyPasteLevel = 'policyManagedWithPasteIn'
Assignments = @('Gemeenten', 'Rijksbreed BYOD')
}
)
}
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' }
default { 'Onbekend' }
}
$assignments = @()
if ($policy.assignments) {
foreach ($assignment in $policy.assignments) {
if ($assignment.target -and $assignment.target.displayName) {
$assignments += $assignment.target.displayName
}
elseif ($assignment.target -and $assignment.target.'@odata.type') {
$assignments += $assignment.target.'@odata.type'
}
}
}
$snapshots += [PSCustomObject]@{
PolicyId = $policy.id
Name = $policy.displayName
Platform = $platform
MinPinLength = $policy.minimumPinLength
EncryptionRequired = ($policy.appDataEncryptionType -and $policy.appDataEncryptionType -ne 'whenDeviceLocked')
OfflineHours = $policy.periodOfflineBeforeAccessCheck
CopyPasteLevel = $policy.allowedOutboundClipboardSharingLevel
Assignments = $assignments
}
}
return$snapshots
}
functionGet-ByodComplianceSnapshot {
[CmdletBinding()]
param(
[switch]$DebugMode
)
if ($DebugMode) {
return @(
[PSCustomObject]@{
PolicyId = 'cmp-ios'
Platform = 'iOS/iPadOS'
RequireEncryption = $true
RequireJailbreak = $true
MinOSVersion = '17.0'
DeviceOwnership = 'personal'
},
[PSCustomObject]@{
PolicyId = 'cmp-android'
Platform = 'Android'
RequireEncryption = $true
RequireJailbreak = $true
MinOSVersion = '14'
DeviceOwnership = 'personal'
}
)
}
Ensure-GraphConnection
$uri = "https://graph.microsoft.com/beta/deviceManagement/deviceCompliancePolicies?`$select=id,displayName,platformType,deviceThreatProtectionEnabled,minOsVersion,roleScopeTagIds,passwordRequired"
$policies = Invoke-GraphPagedRequest -Uri $uri$snapshots = @()
foreach ($policy in $policies) {
$platform = switch ($policy.platformType) {
'androidForWork' { 'Android' }
'android' { 'Android' }
'iOS' { 'iOS/iPadOS' }
'macOS' { 'macOS' }
default { $policy.platformType }
}
$deviceOwnership = if ($policy.roleScopeTagIds -and ($policy.roleScopeTagIds -contains 'Personal')) { 'personal' } else { 'universal' }
$snapshots += [PSCustomObject]@{
PolicyId = $policy.id
Name = $policy.displayName
Platform = $platform
RequireEncryption = [bool]$policy.passwordRequired
RequireJailbreak = [bool]$policy.deviceThreatProtectionEnabled
MinOSVersion = $policy.minOsVersion
DeviceOwnership = $deviceOwnership
}
}
return$snapshots
}
functionGet-ByodConditionalAccessSnapshot {
[CmdletBinding()]
param(
[switch]$DebugMode
)
if ($DebugMode) {
return @(
[PSCustomObject]@{
PolicyId = 'ca-mobile'
Name = 'CA - mobiele toegang'
State = 'enabled'
RequiresCompliantDevice = $true
RequiresApprovedApps = $true
DeviceFilter = 'device.trustType -eq "Personal"'
}
)
}
Ensure-GraphConnection
$uri = "https://graph.microsoft.com/beta/identity/conditionalAccess/policies?`$select=id,displayName,state,conditions,grantControls"
$policies = Invoke-GraphPagedRequest -Uri $uri$snapshots = @()
foreach ($policy in $policies) {
$grantControls = $policy.grantControls
$requiresCompliantDevice = $false$requiresApprovedApps = $falseif ($grantControls -and $grantControls.builtInControls) {
$requiresCompliantDevice = $grantControls.builtInControls -contains 'compliantDevice'
$requiresApprovedApps = $grantControls.builtInControls -contains 'approvedApplication'
}
$deviceFilter = $nullif ($policy.conditions -and $policy.conditions.devices -and $policy.conditions.devices.deviceFilter) {
$deviceFilter = $policy.conditions.devices.deviceFilter.rule
}
$snapshots += [PSCustomObject]@{
PolicyId = $policy.id
Name = $policy.displayName
State = $policy.state
RequiresCompliantDevice = $requiresCompliantDevice
RequiresApprovedApps = $requiresApprovedApps
DeviceFilter = $deviceFilter
}
}
return$snapshots
}
function Invoke-ByodPolicyAssessment {
[CmdletBinding()]
param(
[switch]$DebugMode
)
$appProtection = Get-ByodAppProtectionSnapshot -DebugMode:$DebugMode$compliance = Get-ByodComplianceSnapshot -DebugMode:$DebugMode$conditional = Get-ByodConditionalAccessSnapshot -DebugMode:$DebugMode$issues = [System.Collections.Generic.List[string]]::new()
if (-not $appProtection -or $appProtection.Count -lt 2) {
$issues.Add("Er zijn minder dan twee app protection policies gevonden. Configureer minimaal iOS en Android.")
}
else {
foreach ($policy in $appProtection) {
if (-not $policy.EncryptionRequired) {
$issues.Add("Policy '$($policy.Name)' vereist geen volledige versleuteling voor $($policy.Platform).")
}
if ($policy.MinPinLength -lt 6) {
$issues.Add("Policy '$($policy.Name)' hanteert een te korte pinlengte. Verhoog naar minimaal 6 cijfers.")
}
if ($policy.OfflineHours -gt 12) {
$issues.Add("Policy '$($policy.Name)' staat offline toegang langer dan 12 uur toe. Beperk dit voor BYOD.")
}
if ($policy.CopyPasteLevel -notin @('managedApps', 'policyManagedWithPasteIn')) {
$issues.Add("Policy '$($policy.Name)' blokkeert gegevenskopiëren niet voldoende.")
}
}
}
if (-not $compliance -or $compliance.Count -eq 0) {
$issues.Add("Er zijn geen compliance policies voor BYOD gevonden.")
}
else {
foreach ($policy in $compliance) {
if ($policy.DeviceOwnership -ne 'personal') {
$issues.Add("Policy '$($policy.Name)' is niet specifiek toegewezen aan persoonlijke apparaten.")
}
if (-not $policy.RequireEncryption) {
$issues.Add("Policy '$($policy.Name)' vereist geen versleuteling.")
}
if (-not $policy.RequireJailbreak) {
$issues.Add("Policy '$($policy.Name)' controleert jailbreak of rooting niet.")
}
if ([string]::IsNullOrWhiteSpace($policy.MinOSVersion)) {
$issues.Add("Policy '$($policy.Name)' kent geen minimale OS-versie.")
}
}
}
$caPolicy = $conditional | Where-Object { $_.RequiresCompliantDevice -and $_.RequiresApprovedApps }
if (-not $caPolicy) {
$issues.Add("Er is geen Conditional Access-beleid gevonden dat zowel compliant devices als goedgekeurde apps vereist.")
}
$assessment = [PSCustomObject]@{
Script = 'byod-policies.ps1'
Timestamp = Get-Date
AppProtection = $appProtection
Compliance = $compliance
ConditionalAccess = $conditional
Issues = $issues
IsHealthy = ($issues.Count -eq 0)
}
return$assessment
}
function Initialize-ByodConfig {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
$Assessment
)
$config = [ordered]@{
version = "1.0"
lastUpdated = (Get-Date).ToString("yyyy-MM-dd")
owner = "BYOD-stuurgroep"
governance = @(
"Dwing copy/paste-beperkingen af via Intune MAM voor alle mobiele platforms.",
"Combineer BYOD-beleid altijd met Conditional Access regels met device filters.",
"Actualiseer DPIA en communicatiepakketten bij iedere beleidswijziging."
)
appProtection = @()
compliance = @()
conditionalAccess = @()
}
if ($Assessment.AppProtection) {
foreach ($policy in $Assessment.AppProtection) {
$config.appProtection += [ordered]@{
id = $policy.PolicyId
name = $policy.Name
platform = $policy.Platform
minPinLength = $policy.MinPinLength
encryption = $policy.EncryptionRequired
offlineHours = $policy.OfflineHours
}
}
}
if ($Assessment.Compliance) {
foreach ($policy in $Assessment.Compliance) {
$config.compliance += [ordered]@{
id = $policy.PolicyId
platform = $policy.Platform
minOsVersion = $policy.MinOSVersion
requireEncryption = $policy.RequireEncryption
requireJailbreak = $policy.RequireJailbreak
}
}
}
if ($Assessment.ConditionalAccess) {
foreach ($policy in $Assessment.ConditionalAccess) {
$config.conditionalAccess += [ordered]@{
id = $policy.PolicyId
name = $policy.Name
requiresCompliantDevice = $policy.RequiresCompliantDevice
requiresApprovedApps = $policy.RequiresApprovedApps
deviceFilter = $policy.DeviceFilter
}
}
}
return$config
}
function Invoke-ByodBaselinePublish {
[CmdletBinding()]
param(
[switch]$DebugMode
)
$assessment = Invoke-ByodPolicyAssessment -DebugMode:$DebugMode$config = Initialize-ByodConfig -Assessment $assessment$configPath = Get-ByodConfigPathif ($WhatIf) {
Write-Host "[WhatIf] Configuratie zou worden opgeslagen op $configPath" -ForegroundColor Yellow
}
else {
$config | ConvertTo-Json -Depth 6 | Out-File -FilePath $configPath -Encoding UTF8 -Force
Write-Host "[OK] BYOD-configuratie opgeslagen: $configPath" -ForegroundColor Green
}
return$config
}
function Invoke-ByodMonitoring {
[CmdletBinding()]
param(
[switch]$DebugMode
)
$assessment = Invoke-ByodPolicyAssessment -DebugMode:$DebugMode$configPath = Get-ByodConfigPath$config = $nullif (Test-Path -Path $configPath) {
$config = Get-Content -Path $configPath -Raw | ConvertFrom-Json
}
else {
Write-Host "[WARN] Geen BYOD-configuratiebestand gevonden (verwacht: $configPath)." -ForegroundColor Yellow
}
$monitoring = [PSCustomObject]@{
Script = 'byod-policies.ps1'
Timestamp = Get-Date
ConfigPath = $configPath
ConfigDetected = [bool]$config
ConfigVersion = if ($config) { $config.version } else { "not-found" }
LastConfigUpdate = if ($config) { $config.lastUpdated } else { $null }
Assessment = $assessment
}
return$monitoring
}
function Write-ByodReport {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
$Payload,
[Parameter(Mandatory = $true)]
[string]$Path
)
if (-not $Path) {
return
}
$directory = Split-Path -Parent $Pathif ($directory -and -not (Test-Path -Path $directory)) {
New-Item -ItemType Directory -Path $directory -Force | Out-Null
}
$Payload | ConvertTo-Json -Depth 6 | Out-File -FilePath $Path -Encoding UTF8 -Force
Write-Host "[OK] Rapport geschreven naar $Path" -ForegroundColor Green
}
$executed = $falseif ($PublishBaseline) {
$config = Invoke-ByodBaselinePublish -DebugMode:$DebugModeif ($ReportPath) {
Write-ByodReport -Payload $config -Path $ReportPath
}
$executed = $true$config
}
if ($Assessment) {
$result = Invoke-ByodPolicyAssessment -DebugMode:$DebugModeif ($ReportPath) {
Write-ByodReport -Payload $result -Path $ReportPath
}
$executed = $true$result
}
if ($Monitoring) {
$monitoringResult = Invoke-ByodMonitoring -DebugMode:$DebugModeif ($ReportPath) {
Write-ByodReport -Payload $monitoringResult -Path $ReportPath
}
$executed = $true$monitoringResult
}
if (-not $executed) {
Write-Host "Geen modus opgegeven. Gebruik ten minste een van de volgende opties:" -ForegroundColor Yellow
Write-Host " -Assessment Voer een BYOD-gezondheidsscan uit." -ForegroundColor Yellow
Write-Host " -PublishBaseline Genereer of vernieuw het configuratiebestand." -ForegroundColor Yellow
Write-Host " -Monitoring Combineer assessmentgegevens met het configuratiebestand." -ForegroundColor Yellow
Write-Host "Optioneel: -DebugMode voor lokale tests, -ReportPath voor JSON-rapportage." -ForegroundColor Yellow
}
Write-Host "`n========================================`n" -ForegroundColor Cyan
Risico zonder implementatie
Risico zonder implementatie
High: Zonder afdwingbaar BYOD-beleid blijven privacyrisico’s en toegang tot Microsoft 365 onzichtbaar, waardoor incidenten nauwelijks te beheersen zijn en bestuurders geen aantoonbaarheid hebben richting toezichthouders.
Management Samenvatting
Richt BYOD in als volwaardig programma: combineer Intune MAM, device compliance en Conditional Access, onderhoud bewijs via het bijgeleverde script en leg afspraken vast met medewerkers, leveranciers en auditors.