Device Compliance Policies Afgedwongen Via Intune

💼 Management Samenvatting

Device compliance policies vormen de harde scheidslijn tussen beheerde en onbeheerde apparaten in Microsoft 365. Ze leggen vast welke beveiligingsmaatregelen op ieder endpoint actief moeten zijn voordat gebruikers toegang krijgen tot gevoelige cloud-applicaties, data en workloads. Door deze eisen te codificeren in Intune en te koppelen aan Conditional Access ontstaat een directe feedbacklus: wie niet voldoet aan de baseline, verliest automatisch toegang totdat de configuratie weer op orde is. Daarmee verschuift compliance van een papieren belofte naar een technisch afdwingbare controle die dagelijks aantoonbaar is richting CISO, CIO en toezichthouders.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
8/10
Implementatie
80u (tech: 48u)
Van toepassing op:
Microsoft 365 E3
Microsoft 365 E5
Microsoft Intune
Windows 10/11
Entra ID

Nederlandse overheidsorganisaties opereren onder strikte kaders van de BIO, AVG en de nieuwe NIS2-richtlijn. Deze regelgeving vraagt om aantoonbare beheersing van endpoints, inclusief versleuteling, meervoudige authenticatie, actuele antimalware en duidelijke lifecycle-processen. Zodra één van deze onderdelen ontbreekt op een apparaat, is de kans groot dat exact dat device de zwakste schakel vormt bij ransomware, credential theft of data-exfiltratie. In vrijwel elk forensisch onderzoek na een incident blijkt dat het compromis plaatsvond op een werkplek zonder BitLocker, zonder recente patches of buiten Intune-beheer. Zonder device compliance policies blijft het bij goed vertrouwen, spreadsheets en steekproeven. Met beleid dat hard afdwingt, ontstaat bewijs dat iedere laptop en ieder beheerdersaccount alleen toegang krijgt als de technische controles actief zijn en blijven. Dat bewijs vormt de basis voor audit- en bestuurstoezicht en is noodzakelijk om escalaties naar Tweede Kamer of toezichthouders inhoudelijk te kunnen beantwoorden.

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

Implementatie

Dit artikel beschrijft stap voor stap hoe een volwassen compliance-framework in Intune wordt ontworpen, ingericht, getest en beheerd. We starten met de governance- en architectuurpilaren: hoe borg je verantwoordelijkheden, welke normenkaders gelden en hoe veranker je uitzonderingsprocessen? Vervolgens beschrijven we de configuratie van policies voor Windows 10/11, inclusief regels voor schijfversleuteling, Secure Boot, TPM-status, Defender Antivirus, minimale OS-builds, gelicentieerd gebruik en integratie met device health-attestatie. Daarna behandelen we monitoring en rapportage met Microsoft Graph, zodat het SOC en de compliance officers realtime inzicht hebben in non-compliant en niet-synchroniserende apparaten. Tot slot werken we remediatie- en revertpaden uit, inclusief escalatie naar lijnmanagement, ITSM-workflows en tijdelijke uitzonderingsmechanismen die voldoen aan de eisen van de Nederlandse Baseline voor Veilige Cloud.

Strategische Basis en Governance

Een effectief compliancebeleid begint bij bestuurlijke verankering. Het CISO-office definieert samen met CIO, HR en lijnmanagement welke beveiligingsnormen overal gelden, hoe deze aansluiten op de BIO-paragrafen 12 en 16, en welke risicoklassen worden gehanteerd voor endpoints die staatsgeheimen, persoonsgegevens of operationele gegevens verwerken. Dit resulteert in een beleidsdocument waarin per devicecategorie (standaard werkplek, privileged access workstation, beheerserver, onderzoekslaptop, leveranciersdevice) het minimale controls-pakket is beschreven. Denk aan BitLocker met XTS-AES 256, TPM 2.0 actieve status, Secure Boot ingeschakeld, Microsoft Defender Antivirus realtime bescherming en een maximale patchachterstand van zeven dagen. Bij elke control wordt het doel, de meetmethode en de verantwoordelijke eigenaar benoemd. Cruciaal is dat bestuurders formeel vastleggen dat toegang tot kritieke informatie alleen wordt verleend via compliant apparaten, en dat afwijkingen automatisch leiden tot blokkade van dienstverlening richting gevoelige workloads zoals overheidsteamsites, financiële applicaties of de Rijksportalen.

Daarna volgt het governancekader voor uitzonderingen en lifecycle. Iedere afwijking (bijvoorbeeld door maatwerkapparatuur, OT-koppelingen of tijdelijke onderzoekssetups) wordt geregistreerd in een centraal register met risk owner, einddatum, compensatiemaatregelen en audit trail. Het register wordt gekoppeld aan het CAB-proces zodat wijzigingen via change management worden geborgd. Relevante stakeholders, inclusief privacy officers en FG, worden meegenomen wanneer compliancebeleid invloed heeft op gegevensverwerking of monitoring. Financiële en juridische afdelingen worden betrokken om licentie-eisen (bijvoorbeeld Intune Suite of Defender for Endpoint) tijdig veilig te stellen. Tot slot wordt afgesproken hoe compliance-eisen in inkoopcontracten en SLA’s met leveranciers worden opgenomen, zodat externe partijen dezelfde baseline hanteren.

Het governanceplan eindigt met een duidelijke koppeling naar andere control domains. Device compliance policies staan niet op zichzelf; ze voeden Conditional Access, Privileged Identity Management, vulnerability management en incidentrespons. Daarom is er een architectuurschema waarin staat hoe telemetry uit Intune, Defender for Endpoint en SIEM elkaar versterkt. Het schema beschrijft hoe compliance status invloed heeft op toegang tot Azure Virtual Desktop, hoe serviceaccounts zonder fysieke device context worden afgehandeld, en hoe de CMDB en HR-systemen worden gesynchroniseerd om dormant devices op te schonen. Door deze keten zichtbaar te maken kan een auditor exact volgen hoe beleid vanuit strategie doorwerkt tot aan het scherm van de individuele medewerker.

Ontwerp en Configuratie van Compliancebeleid

Gebruik PowerShell-script device-compliance-policies.ps1 (functie Invoke-ComplianceAssessment) – Haalt via Microsoft Graph alle compliancepolicies op, controleert toewijzingen en rapporteert governance-afwijkingen vóór livegang..

De configuratiefase start met het vertalen van de governance-eisen naar concrete Intune policies. Gebruik het Microsoft 365 Defender portal om de laatste onboardingpakketten en baseline-aanbevelingen op te halen en importeer deze in Intune. Bouw per risicoklasse een afzonderlijk policy-profiel (bijvoorbeeld 'NL-Overheid-Std', 'NL-Overheid-PAW' en 'NL-Overheid-High-Value'). In elk profiel activeer je controles zoals verplicht BitLocker, minimale OS-build, vereiste firewallstatus, Cloud-delivered protection, anti-malware handhaving en minimale wachtwoordlengtes voor lokale accounts. Stel een beschrijving op waarin het doel, het toepassingsgebied en de contactpersoon staan. Publiceer beleidswijzigingen pas na een CAB-goedkeuring en leg de JSON-export vast in een Git-repository zodat versiebeheer en rollback gegarandeerd zijn.

Vervolgens worden dynamische Entra ID-groepen ingericht om policies automatisch toe te wijzen. Gebruik filters op basis van deviceCategory, enrollmentProfileName of fysieke locatie om werkplekken te segmenteren. Zorg dat autopilot-profielen, build pipelines en leveranciersinrichtingen automatisch een compliance label meegeven, zodat apparaten vanaf het eerste moment in de juiste policy vallen. Koppel het policy-assignment aan de juiste groep en controleer via de Intune UI of er geen overlap ontstaat waardoor apparaten meerdere conflicterende policies ontvangen. Voor servers of nicheapparaten die niet via Intune worden beheerd, wordt een co-managementscenario ingericht waarin Configuration Manager de compliance-rapportage teruggeeft aan Intune of een aparte policy gebruikt met strengere handmatige review. Elk deploymentpad wordt gedocumenteerd in een runbook inclusief fallback-scenario’s en contactgegevens, zodat beheerteams exact weten welke stappen nodig zijn bij storingen.

Voorafgaand aan brede uitrol wordt een technische validatie uitgevoerd. Het PowerShell-script `device-compliance-policies.ps1` controleert of policies bestaan, assignments hebben en automatische acties bevatten. Pilotgroepen testen de gebruikerservaring, inclusief notificaties, Conditional Access-blokkades en ITSM-escalatie. Tijdens deze fase worden meetpunten opgezet in Log Analytics: elke policy publiceert compliance- en non-compliancetrends, zodat ontwikkel- en acceptatieomgevingen inzicht geven in de verwachte belasting wanneer productie volgt. Pas na succesvolle afsluiting van de pilotfase en formele CAB-goedkeuring worden policies uitgerold naar alle productiegroepen, gefaseerd per organisatieonderdeel en met duidelijke communicatie naar gebruikers en servicedesk.

Monitoring, Telemetrie en Rapportage

Gebruik PowerShell-script device-compliance-policies.ps1 (functie Invoke-ComplianceMonitoring) – Controleert beleidstoewijzingen, signaleert apparaten zonder recente synchronisatie en levert exitcodes voor CI/CD of SOC-automatisering..

Monitoring bestaat uit drie lagen. De operationele laag gebruikt Intune-rapportages voor compliance, foutcodes en trendgrafieken. Deze dashboards worden minimaal dagelijks gecontroleerd door het endpointteam. Het script `Invoke-ComplianceMonitoring` draait elke nacht in Azure Automation en schrijft de resultaten naar Log Analytics en het SIEM. Daarin worden signalen gegenereerd wanneer een policy geen assignments meer heeft (bijvoorbeeld door een verwijderde groep), wanneer gratieperioden boven de afgesproken 72 uur uitkomen, of wanneer er meer dan 15 apparaten zonder recente sync zijn. De output bevat exitcodes zodat pipelines in DevOps of GitHub Actions deployments blokkeren zolang de baseline niet gehaald wordt.

De tactische laag koppelt compliancegegevens aan andere datastromen. Via Graph worden managedDevices opgehaald en verrijkt met CMDB-gegevens, Defender Vulnerability Management observaties en service status vanuit Endpoint Analytics. Hiermee ontstaat een volledig beeld van welke apparaten non-compliant zijn, welke businessunit verantwoordelijk is en welke kwetsbaarheden hierdoor ongedekt blijven. Advanced Hunting in Microsoft 365 Defender draait queries die apparaten zonder compliance en tegelijkertijd met verdachte processen markeren, zodat SOC-analisten gericht prioriteit geven. Door compliancegegevens elke dag naar Power BI of Fabric te sturen, kunnen CISO en CIO trends zien over kwartalen heen, inclusief welke afdelingen structureel achterlopen en hoeveel tijd remediatie kost.

De strategische laag richt zich op rapportage richting bestuur, audit en ketenpartners. Maandelijks ontvangt het CISO-beraad een rapport waarin compliancepercentages, topredenen voor non-compliance, uitzonderingsverzoeken en afgesloten remediaties staan. Dit rapport is gekoppeld aan NIS2-rapportage en de jaarlijkse BIO-audit. Bij incidenten kan binnen minuten een lijst worden geleverd van alle apparaten die op het moment van de aanval non-compliant waren, inclusief uitgevoerde compensatiemaatregelen. Zo ontstaat aantoonbare controle over endpoint-security en kunnen bestuurders met feiten reageren op vragen van toezichthouders, parlement of interne auditcommissies.

Remediatie, Escalatie en Uitzonderingen

Gebruik PowerShell-script device-compliance-policies.ps1 (functie Invoke-ComplianceRemediation) – Bevat gerichte herstelinstructies voor ontbrekende policies, non-compliant apparaten en documenteert tijdelijke uitzonderingspaden..

Remediatie start zodra monitoring aangeeft dat apparaten non-compliant zijn of dat policies ontbreken. Het endpointteam doorloopt eerst de technische checks: is het apparaat recent gesynchroniseerd, draait Defender Antivirus, is BitLocker actief en is de vereiste OS-build aanwezig? Het script biedt gefaseerde aanwijzingen om policies opnieuw toe te wijzen, een forced sync uit te voeren en ITSM-tickets te openen zodra apparaten langer dan 48 uur non-compliant blijven. Voor beheerwerkplekken en PAW’s wordt direct escalatie naar het privileged access team gestart, aangezien deze endpoints directe toegang hebben tot kritieke beheersystemen. Alle acties worden gelogd in het service management systeem inclusief screenshots, Graph-exports en communicatie naar gebruikers.

Wanneer remediatie op apparaatniveau niet lukt (bijvoorbeeld door hardwaredefecten, legacy-applicaties of leveringsproblemen) volgt een organisatorisch pad. De lijnmanager ontvangt een risicoverklaring waarin wordt uitgelegd waarom het apparaat wordt geblokkeerd en welke maatregelen nodig zijn om toch toegang te krijgen (bijvoorbeeld tijdelijke VDI of gedeelde werkplek). Het CAB beoordeelt of een tijdelijke uitzondering mogelijk is. Alleen wanneer de CISO, privacy officer en proceseigenaar akkoord geven, wordt een apparaat toegevoegd aan de tijdelijke uitzonderingsgroep die door Conditional Access wordt uitgesloten. Deze groep heeft een automatische vervaldatum, dagelijkse rapportage en verplichte compensatiemaatregelen zoals netwerksegmentatie, verhoogde logging en extra handmatige scans.

Tot slot wordt iedere remediatie geëvalueerd. Het post-mortemrapport beschrijft root causes (bijvoorbeeld ontbrekende Intune-licenties, verkeerde dynamic group query, verouderde image, leverancier die geen TPM levert) en de structurele maatregel die voorkomt dat hetzelfde scenario terugkomt. Denk aan aanvullende build-validaties, automatische Graph-checks in pipelines of strengere onboarding-eisen voor leveranciers. Deze verbeteracties worden toegevoegd aan de roadmap van het werkplekprogramma en meegenomen in de kwartaalreview van de Nederlandse Baseline voor Veilige Cloud, zodat er een aantoonbare cyclus van leren en verbeteren ontstaat.

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 Device Compliance Policies – Monitoring, Assessment en Remediatie .DESCRIPTION Controleert via Microsoft Graph of Intune device compliance policies voor Windows bestaan, correct zijn toegewezen en of endpoints daadwerkelijk als compliant rapporteren. Geeft daarnaast remediatie- en uitzonderingsrichtlijnen zodat organisaties de baseline kunnen afdwingen. .NOTES Filename: device-compliance-policies.ps1 Author : Nederlandse Baseline voor Veilige Cloud Created : 2025-11-27 Version : 1.0 Related JSON: content/m365/device-compliance/device-compliance-policies.json .LINK https://github.com/[org]/m365-tenant-best-practise .EXAMPLE .\device-compliance-policies.ps1 -Monitoring Voert alle controles uit en retourneert exitcode 0 wanneer de baseline is gehaald. .EXAMPLE .\device-compliance-policies.ps1 -Remediation Toont stap-voor-stap herstelacties voor ontbrekende policies en non-compliant apparaten. #> #Requires -Version 5.1 #Requires -Modules Microsoft.Graph.DeviceManagement [CmdletBinding()] param( [switch]$Monitoring, [switch]$Assessment, [switch]$Remediation, [switch]$Revert, [switch]$WhatIf ) $ErrorActionPreference = 'Stop' Write-Host "`n===============================================" -ForegroundColor Cyan Write-Host "Device Compliance Policies – Intune baseline" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "===============================================`n" -ForegroundColor Cyan function Connect-ComplianceGraph { <# .SYNOPSIS Zorgt voor een actieve Microsoft Graph-verbinding met het juiste profiel. #> if (-not (Get-MgContext)) { Write-Host "Verbinden met Microsoft Graph..." -ForegroundColor Yellow Connect-MgGraph -Scopes "DeviceManagementConfiguration.Read.All","DeviceManagementManagedDevices.Read.All" -ErrorAction Stop | Out-Null } try { Select-MgProfile -Name "beta" | Out-Null } catch { Write-Verbose "Kon beta-profiel niet instellen (mogelijk al actief): $_" } } function Get-GraphCollection { <# .SYNOPSIS Haalt alle pagina's van een Graph-collectie op. .PARAMETER Uri De volledige Graph-URI inclusief querystring. #> param( [Parameter(Mandatory)] [string]$Uri ) $results = @() $nextLink = $Uri while ($nextLink) { $response = Invoke-MgGraphRequest -Method GET -Uri $nextLink -ErrorAction Stop if ($response.value) { $results += $response.value } if ($response.'@odata.nextLink') { $nextLink = $response.'@odata.nextLink' } else { $nextLink = $null } } return $results } function Test-DeviceCompliancePolicies { <# .SYNOPSIS Controleert beleidsdekking en device compliance status. .OUTPUTS PSCustomObject met Issues, Warnings, PolicySummary en DeviceFindings. #> Connect-ComplianceGraph $result = [ordered]@{ PolicyTotal = 0 WindowsPolicies = @() Issues = @() Warnings = @() NonCompliantDevices = @() StaleDevices = @() } $policiesUri = "https://graph.microsoft.com/beta/deviceManagement/deviceCompliancePolicies?`$expand=assignments" $policies = Get-GraphCollection -Uri $policiesUri $result.PolicyTotal = $policies.Count $windowsPolicies = $policies | Where-Object { ($_.PSObject.Properties["@odata.type"] -and $_."@odata.type" -like "*windows10*") -or ($_.PSObject.Properties["platforms"] -and $_.platforms -match "windows") } if (-not $windowsPolicies) { $result.Issues += "Er zijn geen Windows device compliance policies aangetroffen in Intune." } else { foreach ($policy in $windowsPolicies) { $assignmentCount = if ($policy.assignments) { ($policy.assignments | Measure-Object).Count } else { 0 } $result.WindowsPolicies += [pscustomobject]@{ Name = $policy.displayName Assignments = $assignmentCount DescriptionSet = [bool]($policy.description) Id = $policy.id } if ($assignmentCount -eq 0) { $result.Issues += "Policy '$($policy.displayName)' heeft geen toewijzingen en beschermt dus geen apparaten." } if (-not $policy.description) { $result.Warnings += "Policy '$($policy.displayName)' heeft geen beschreven doelstelling – documenteer governance." } try { $scheduledUri = "https://graph.microsoft.com/beta/deviceManagement/deviceCompliancePolicies/$($policy.id)/scheduledActionsForRule" $actions = Get-GraphCollection -Uri $scheduledUri if (-not $actions) { $result.Warnings += "Policy '$($policy.displayName)' heeft geen automatische non-compliance acties (mail/markeren)." } else { $graceWindows = $actions | Where-Object { $_.gracePeriodHours -gt 72 } if ($graceWindows) { $result.Warnings += "Policy '$($policy.displayName)' hanteert een gratieperiode > 72 uur; verkort dit voor BIO-eisen." } } } catch { $result.Warnings += "Kon scheduled actions voor policy '$($policy.displayName)' niet ophalen: $($_.Exception.Message)" } } } $devicesUri = "https://graph.microsoft.com/beta/deviceManagement/managedDevices?`$select=deviceName,operatingSystem,complianceState,lastSyncDateTime,managementAgent&`$top=999" $devices = Get-GraphCollection -Uri $devicesUri $windowsDevices = $devices | Where-Object { $_.operatingSystem -like "Windows*" } $now = Get-Date $nonCompliant = $windowsDevices | Where-Object { $_.complianceState -ne "compliant" } $stale = $windowsDevices | Where-Object { -not $_.lastSyncDateTime -or (($now - [datetime]$_.lastSyncDateTime).TotalHours -gt 72) } $result.NonCompliantDevices = $nonCompliant | Select-Object deviceName, complianceState, managementAgent $result.StaleDevices = $stale | Select-Object deviceName, lastSyncDateTime, managementAgent return [pscustomobject]$result } function Invoke-ComplianceMonitoring { <# .SYNOPSIS Voert alle controles uit en rapporteert in één overzicht. #> try { $analysis = Test-DeviceCompliancePolicies Write-Host "Beleidsinventaris: $($analysis.PolicyTotal) policies totaal, $($analysis.WindowsPolicies.Count) Windows-specifiek." -ForegroundColor Cyan if ($analysis.WindowsPolicies.Count -gt 0) { Write-Host "`nWindows policies en assignments:" -ForegroundColor Cyan $analysis.WindowsPolicies | Select-Object Name, Assignments, DescriptionSet | Format-Table -AutoSize | Out-String | Write-Host } if ($analysis.Issues.Count -eq 0 -and $analysis.Warnings.Count -eq 0 -and $analysis.NonCompliantDevices.Count -eq 0 -and $analysis.StaleDevices.Count -eq 0) { Write-Host "`n✅ Alles compliant: policies toegewezen en apparaten rapporteren binnen 72 uur." -ForegroundColor Green exit 0 } if ($analysis.Issues.Count -gt 0) { Write-Host "`n🚨 Kritieke issues:" -ForegroundColor Red $analysis.Issues | ForEach-Object { Write-Host " - $_" -ForegroundColor Red } } if ($analysis.Warnings.Count -gt 0) { Write-Host "`n⚠️ Waarschuwingen / verbeterpunten:" -ForegroundColor Yellow $analysis.Warnings | ForEach-Object { Write-Host " - $_" -ForegroundColor Yellow } } if ($analysis.NonCompliantDevices.Count -gt 0) { Write-Host "`nApparaten met complianceState <> compliant:" -ForegroundColor Yellow $analysis.NonCompliantDevices | Format-Table -AutoSize | Out-String | Write-Host } if ($analysis.StaleDevices.Count -gt 0) { Write-Host "`nApparaten zonder recente sync (>72 uur):" -ForegroundColor Yellow $analysis.StaleDevices | Format-Table -AutoSize | Out-String | Write-Host } exit 1 } catch { Write-Host "`nOnverwachte fout tijdens monitoring: $_" -ForegroundColor Red exit 2 } } function Invoke-ComplianceAssessment { <# .SYNOPSIS Geeft een uitgebreid overzicht inclusief aanbevelingen. #> try { $analysis = Test-DeviceCompliancePolicies Write-Host "== Beleidsanalyse ==" -ForegroundColor Cyan Write-Host (" Totaal geregistreerde policies : {0}" -f $analysis.PolicyTotal) Write-Host (" Windows policies : {0}" -f $analysis.WindowsPolicies.Count) foreach ($policy in $analysis.WindowsPolicies) { Write-Host (" • {0} (assignments: {1}, omschrijving: {2})" -f $policy.Name, $policy.Assignments, $(if ($policy.DescriptionSet) { "ja" } else { "nee" })) -ForegroundColor White } Write-Host "`n== Aanwijzingen ==" -ForegroundColor Cyan if ($analysis.Issues.Count -eq 0 -and $analysis.Warnings.Count -eq 0) { Write-Host "Geen beleidsafwijkingen gevonden." -ForegroundColor Green } else { ($analysis.Issues + $analysis.Warnings) | ForEach-Object { Write-Host " - $_" -ForegroundColor Yellow } } Write-Host "`n== Device status ==" -ForegroundColor Cyan Write-Host (" Niet compliant : {0}" -f $analysis.NonCompliantDevices.Count) Write-Host (" Geen sync 72u : {0}" -f $analysis.StaleDevices.Count) Write-Host "`nGebruik -Monitoring voor exitcodes die CI/CD kunnen interpreteren." -ForegroundColor Yellow } catch { Write-Host "Assessment mislukt: $_" -ForegroundColor Red exit 2 } } function Invoke-ComplianceRemediation { <# .SYNOPSIS Biedt concrete herstelstappen voor policies en apparaten. #> try { Write-Host "Remediatie Device Compliance Policies" -ForegroundColor Yellow Write-Host "======================================" -ForegroundColor Yellow Write-Host "`n1. Intune-beleid controleren en herconfigureren:" -ForegroundColor Cyan Write-Host " - Endpoint Manager admin center → Apparaten → Compliance-beleid → Beleid maken." -ForegroundColor Gray Write-Host " - Gebruik Windows 10 en later als platform; activeer regels voor versleuteling, Secure Boot, TPM en anti-malware." -ForegroundColor Gray Write-Host " - Documenteer ieder beleid (titel, eigenaar, uitzonderingen) en publiceer in het security-handboek." -ForegroundColor Gray Write-Host "`n2. Toewijzingen afdwingen:" -ForegroundColor Cyan Write-Host " - Koppel policies aan dynamische Entra ID-groepen (per organisatieonderdeel of gevoeligheidsniveau)." -ForegroundColor Gray Write-Host " - Controleer via Intune-rapportages of iedere groep daadwerkelijk apparaten bevat." -ForegroundColor Gray Write-Host "`n3. Non-compliance acties instellen:" -ForegroundColor Cyan Write-Host " - Voeg per policy een scheduled action toe (binnen 24 uur e-mail naar eigenaar + markeer apparaat als niet-compatibel)." -ForegroundColor Gray Write-Host " - Zorg dat ITSM automatisch tickets aanmaakt voor apparaten die langer dan 48 uur non-compliant zijn." -ForegroundColor Gray Write-Host "`n4. Devices herstellen:" -ForegroundColor Cyan Write-Host " - Gebruik Intune → Apparaten → Monitor → Compliance om problematische endpoints te selecteren." -ForegroundColor Gray Write-Host " - Start een remote sync, controleer of realtime protection draait en voer indien nodig het remediatiescript van de workload uit." -ForegroundColor Gray Write-Host " - Escaleer naar lijnmanagement wanneer gebruikers structureel updates uitstellen." -ForegroundColor Gray if ($WhatIf) { Write-Host "`nWhatIf: alleen advies weergegeven, geen wijzigingen gedaan." -ForegroundColor Yellow } } catch { Write-Host "Remediatie-instructies konden niet worden weergegeven: $_" -ForegroundColor Red exit 2 } } function Invoke-ComplianceRevert { <# .SYNOPSIS Beschrijft hoe tijdelijke uitzonderingen gecontroleerd worden toegepast. #> try { Write-Host "Tijdelijke versoepeling / Revert-procedure" -ForegroundColor Yellow Write-Host "=========================================" -ForegroundColor Yellow Write-Host "Gebruik alleen na CISO-goedkeuring en documenteer het besluit in CAB-notulen." -ForegroundColor Red Write-Host "`nAanpak:" -ForegroundColor Cyan Write-Host " - Maak een aparte Entra ID-groep 'TEMP-Compliance-Exception' met automatische vervaldatum." -ForegroundColor Gray Write-Host " - Pas het compliancebeleid tijdelijk aan zodat deze groep wordt uitgesloten, met een expliciete einddatum." -ForegroundColor Gray Write-Host " - Leg compensatiemaatregelen vast (segmentatie, Just-In-Time toegang, verhoogde monitoring)." -ForegroundColor Gray Write-Host " - Rapporteer wekelijks over alle apparaten in de uitzonderingsgroep totdat de afwijking is opgeheven." -ForegroundColor Gray } catch { Write-Host "Kon revert-procedure niet tonen: $_" -ForegroundColor Red exit 2 } } try { if ($Monitoring) { Invoke-ComplianceMonitoring } elseif ($Assessment) { Invoke-ComplianceAssessment } elseif ($Remediation) { Invoke-ComplianceRemediation } elseif ($Revert) { Invoke-ComplianceRevert } else { Write-Host "Gebruik -Monitoring, -Assessment, -Remediation of -Revert (optioneel -WhatIf bij remediatie)." -ForegroundColor Yellow } } catch { Write-Error "Scriptfout: $_" exit 2 } finally { Write-Host "`n===============================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Apparaten zonder afdwingbare compliance-eisen blijven buiten zicht van het SOC. Bij een incident ontbreekt bewijs dat basale controles zoals BitLocker, Defender Antivirus en Secure Boot actief waren. Hierdoor stijgen herstelkosten, escaleren audits en voldoet de organisatie niet aan BIO, NIS2 en AVG-verplichtingen.

Management Samenvatting

Richt Intune device compliance policies in voor iedere endpointcategorie, koppel ze aan Conditional Access en automatiseer monitoring via Graph en het bijbehorende PowerShell-script. Documenteer uitzonderingen streng, rapporteer dagelijks en koppel remediatie aan ITSM. Zo ontstaat aantoonbare regie over endpoints en bewijs richting toezichthouders dat alleen compliant apparaten toegang hebben tot de Nederlandse Baseline voor Veilige Cloud-werkloads.