Compliant Apparaten Als Vereiste Voor Toegang (Conditional Access)

💼 Management Samenvatting

Met een compliant‑device vereiste in Conditional Access zorgt de organisatie ervoor dat alleen apparaten die aantoonbaar worden beheerd en voldoen aan het Intune‑compliancebeleid toegang krijgen tot Microsoft 365 en andere cloudapplicaties. Dit sluit onbeheerde thuis‑pc’s, verouderde laptops en niet‑gepatchte mobiele toestellen automatisch uit.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
8/10
Implementatie
40u (tech: 24u)
Van toepassing op:
M365
Entra ID

Zonder een strikt compliant‑device beleid ontstaat een structurele kloof tussen identiteitsbeheer en endpointbeveiliging. Gebruikers kunnen dan vanaf ieder willekeurig apparaat met alleen gebruikersnaam en wachtwoord – of zelfs met basis‑MFA – bij gevoelige gegevens komen, terwijl het apparaat zelf mogelijk geen diskversleuteling heeft, achterloopt met beveiligingsupdates of vol staat met niet‑goedgekeurde software. Voor Nederlandse overheidsorganisaties betekent dit dat een compromis van één persoonlijk apparaat direct kan doorwerken naar basisregistraties, documentmanagementsystemen of ketenportalen. Door Conditional Access te koppelen aan Intune‑compliance ontstaat een harde technische grens: alleen apparaten die voldoen aan de inrichtingseisen voor bijvoorbeeld BitLocker, antivirus, firewall, kwetsbaarhedenbeheer en schermvergrendeling krijgen toegang.

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

Implementatie

Deze maatregel richt zich op het afdwingen van compliant devices voor aanmelding op Microsoft 365 en andere bedrijfskritische SaaS‑toepassingen. Praktisch houdt dit in dat de organisatie (1) een set Intune‑compliancebeleiden definieert voor verschillende apparaattype, (2) apparaten structureel in Intune opneemt en beheert, en (3) Conditional Access‑beleiden configureert waarin als grant control ‘Require device to be marked as compliant’ of ‘Require hybrid Azure AD joined device’ is opgenomen. Voor uitzonderingen wordt een strikt beheerd break‑glass proces ingericht, zodat operationele continuïtiteit gewaarborgd blijft zonder de beveiligingsbasis te ondermijnen.

Vereisten

Voor het invoeren van een compliant‑device vereiste moet de organisatie een aantal randvoorwaarden borgen. Allereerst is een moderne identiteitslaag nodig in de vorm van Entra ID met ten minste de licentieniveaus die Conditional Access en Intune integratie ondersteunen (bijvoorbeeld Microsoft 365 E3/E5, Azure AD Premium P1 of vergelijkbare suites). Daarnaast moeten de belangrijkste werkplekken – Windows 10/11, macOS en mobiele apparaten – zijn aangesloten op een centraal endpointbeheersysteem, in de praktijk vrijwel altijd Microsoft Intune in combinatie met Configuration Manager of een andere beheertool. Zonder deze basis is het niet mogelijk om apparaatcompliance betrouwbaar vast te stellen en te handhaven.

Naast techniek vereist deze maatregel ook organisatorische voorbereiding. Er moet een gedragen set minimumeisen zijn voor beveiligde werkplekken, bijvoorbeeld gebaseerd op het BIO‑normenkader, het NCSC Werkplekbeveiligingsraamwerk en eigen beleidsdocumenten. Denk aan verplichte schijfversleuteling, actuele antivirusbescherming, automatische updates, schermvergrendeling met korte time‑out en verbod op lokale administratieve accounts. Deze eisen worden vertaald naar Intune‑compliancebeleiden per apparaattype en gebruikersgroep. Vervolgens wordt samen met HR, de CISO‑organisatie en de ondernemingsraad afgestemd hoe om te gaan met BYOD, externe leveranciers en uitzonderingssituaties, zodat het beleid uitvoerbaar is en niet onnodig frictie oplevert in de dienstverlening.

Tot slot zijn duidelijke communicatie en ondersteuning cruciaal. Gebruikers moeten tijdig weten dat toegang tot applicaties in de toekomst alleen nog mogelijk is vanaf beheerde, conforme apparaten, welke stappen zij moeten zetten om hun werkplek te laten registreren en waar zij terecht kunnen bij blokkades. Voor kritieke doelgroepen zoals bestuurders, piketdiensten en crisiscoördinatoren wordt vooraf gezorgd voor redundante, compliant werkplekken zodat het beleid juist in crisissituaties niet tot extra risico’s leidt.

Implementatie

De implementatie van een compliant‑device vereiste start met een inventarisatie van de huidige situatie. Breng in kaart welke typen apparaten in gebruik zijn, hoe deze nu worden beheerd en welke gebruikersgroepen toegang hebben tot welke applicaties. Gebruik bestaande CMDB‑gegevens, Intune rapportages en sign‑in logs uit Entra ID om patronen te herkennen, zoals veelvuldig gebruik van niet‑beheerde thuis‑pc’s of legacy apparaten die nog via basisverificatie verbinding maken. Op basis van deze analyse formuleert u een transitiepad: welke apparaten worden eerst naar Intune overgezet, welke oude scenario’s worden uitgefaseerd en welke groepen krijgen tijdelijk een lichtere policy om de overstap behapbaar te maken.

Vervolgens definieert u per platform Intune‑compliancebeleiden die rechtstreeks aansluiten op uw beveiligingsbeleid. Voor Windows 10/11 gaat het bijvoorbeeld om BitLocker verplicht stellen, een minimale antivirusstatus afdwingen, kernpatchniveau controleren en basale endpointbeschermingsinstellingen toetsen. Voor mobiele apparaten kunnen eisen gelden rondom pincode, device‑encryptie, jailbreak/rootdetectie en blokkering van niet‑goedgekeurde appstores. Deze compliancebeleiden markeren apparaten automatisch als ‘compliant’ of ‘non‑compliant’. Door hier bewust drempels en grace periods in te bouwen voorkomt u dat gebruikers bij de eerste kleine afwijking direct worden buitengesloten, terwijl structurele afwijkingen wel zichtbaar worden voor de beheerorganisatie.

Pas in de volgende stap worden Conditional Access‑beleiden ingericht die daadwerkelijk het compliant‑device vereiste afdwingen. In de praktijk werkt dit het meest beheersbaar met een gefaseerde aanpak: eerst een ‘report‑only’ beleid dat alleen rapporteert welke sessies zouden worden geblokkeerd, daarna een beperkte pilotgroep waarin ‘require device to be marked as compliant’ wordt afgedwongen voor een subset van applicaties, en ten slotte uitrol naar brede productiegroepen. Het is aan te bevelen om hiervoor aparte policies te definiëren per risiconiveau, bijvoorbeeld striktere eisen voor beheerders en medewerkers met toegang tot persoonsgegevens, en een iets ruimere overgangsperiode voor generieke informatiekanalen zoals intranet. Gedurende de hele implementatie wordt intensief gemonitord op aanmeldblokkades, servicedeskmeldingen en afwijkende patronen in de sign‑in logs om het beleid bij te sturen zonder de dienstverlening te verstoren.

Monitoring

Gebruik PowerShell-script compliant-device-requirement.ps1 (functie Invoke-Monitoring) – Controleert Conditional Access-beleid op een compliant-device vereiste en geeft een samenvatting van de gevonden policies..

Remediatie

Gebruik PowerShell-script compliant-device-requirement.ps1 (functie Invoke-Remediation) – Biedt een basistemplate voor het aanmaken van een Conditional Access-beleid dat compliant apparaten vereist..

Compliance en Auditing

Het afdwingen van compliant apparaten via Conditional Access levert directe bewijslast op voor meerdere normenkaders die relevant zijn voor de Nederlandse publieke sector. Binnen de BIO raakt deze maatregel onder meer aan de beveiliging van werkplekken, toegangsbeveiliging en het principe van ‘need‑to‑know’: alleen geauthenticeerde gebruikers met een door de organisatie beheerd en beveiligd apparaat krijgen toegang tot gevoelige informatie. In het kader van de AVG draagt het bij aan passende technische en organisatorische maatregelen om persoonsgegevens te beschermen, omdat onbeheerde en mogelijk gecompromitteerde apparaten worden uitgesloten.

Voor NIS2 en sectorale kaders rond vitale processen is aantoonbaarheid cruciaal. Logboeken uit Intune, Entra ID en Conditional Access tonen welke apparaten compliant zijn, welke policies actief zijn en welke sessies zijn geblokkeerd omdat niet aan de eisen werd voldaan. Door deze gegevens periodiek te archiveren en te koppelen aan formele risicoanalyses en bestuurdersrapportages kan de organisatie richting toezichthouders laten zien dat de toegang tot cloudomgevingen niet alleen op identiteitsniveau, maar ook op endpointniveau wordt beschermd. Documenteer daarbij expliciet welke uitzonderingen tijdelijk zijn toegestaan, onder welke voorwaarden deze gelden en hoe regelmatig wordt herbeoordeeld of zij nog noodzakelijk zijn.

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 Compliant Device Requirement - Conditional Access .DESCRIPTION Controleert of er Conditional Access-beleid bestaat dat compliant of hybride joined apparaten vereist voor toegang tot Microsoft 365 en andere cloudtoepassingen, en biedt een basistemplate voor het aanmaken van zo'n beleid. .NOTES Filename: compliant-device-requirement.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 NBVC Debug: Gebruik de omgevingsvariabele NBVC_LOCAL_DEBUG=1 om lokaal te testen zonder verbinding te maken met Microsoft Graph. .EXAMPLE .\compliant-device-requirement.ps1 -Monitoring Controleert of er actieve Conditional Access-policies zijn die compliant apparaten vereisen. .EXAMPLE .\compliant-device-requirement.ps1 -Remediation -WhatIf Toont welke Conditional Access-policy zou worden aangemaakt zonder werkelijk wijzigingen door te voeren. #> #Requires -Version 5.1 #Requires -Modules Microsoft.Graph [CmdletBinding()] param( [Parameter(HelpMessage = "Controleert Conditional Access op een compliant-device vereiste")] [switch]$Monitoring, [Parameter(HelpMessage = "Geeft een basistemplate voor een nieuw compliant-device Conditional Access-beleid")] [switch]$Remediation, [Parameter(HelpMessage = "Experimentele revert-logica (geen productiegebruik)")] [switch]$Revert, [Parameter(HelpMessage = "Voert een proefrun uit zonder wijzigingen toe te passen waar van toepassing")] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Compliant Device Requirement (Conditional Access)" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Get-IsLocalDebug { [CmdletBinding()] param() return [bool]($env:NBVC_LOCAL_DEBUG -eq '1') } function Connect-NbvcGraph { <# .SYNOPSIS Maakt verbinding met Microsoft Graph tenzij NBVC_LOCAL_DEBUG is ingeschakeld. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string[]]$Scopes ) if (Get-IsLocalDebug) { Write-Verbose "NBVC_LOCAL_DEBUG is actief - verbinding met Microsoft Graph wordt overgeslagen." return } if (-not (Get-Module -ListAvailable -Name Microsoft.Graph)) { throw "Het PowerShell-module 'Microsoft.Graph' is niet beschikbaar. Installeer dit module voordat u het script in productie gebruikt." } try { Write-Host "Verbinding maken met Microsoft Graph..." -ForegroundColor Yellow Connect-MgGraph -Scopes $Scopes -ErrorAction Stop -NoWelcome } catch { throw "Kon niet verbinden met Microsoft Graph: $($_.Exception.Message)" } } function Invoke-Monitoring { <# .SYNOPSIS Controleert of er Conditional Access-policies zijn die compliant of hybride joined apparaten vereisen. #> [CmdletBinding()] param() if (Get-IsLocalDebug) { Write-Host "NBVC_LOCAL_DEBUG=1 - gesimuleerde output voor monitoring." -ForegroundColor Yellow $simulated = [PSCustomObject]@{ PolicyCount = 1 CompliantRequirement = $true Policies = @("SIMULATED - Require compliant or hybrid joined device") } $simulated | Format-List | Out-Host return } Connect-NbvcGraph -Scopes @( "Policy.Read.All" ) Write-Host "Conditional Access-policies ophalen..." -ForegroundColor Gray $uri = "https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies" $policies = Invoke-MgGraphRequest -Method GET -Uri $uri if (-not $policies.value) { Write-Host "Geen Conditional Access-beleid gevonden in deze tenant." -ForegroundColor Yellow return } $devicePolicies = @() foreach ($policy in $policies.value) { if ($policy.state -ne "enabled") { continue } $grantControls = $policy.grantControls if (-not $grantControls -or -not $grantControls.builtInControls) { continue } $requiresCompliant = $grantControls.builtInControls -contains "compliantDevice" $requiresHybrid = $grantControls.builtInControls -contains "domainJoinedDevice" if ($requiresCompliant -or $requiresHybrid) { $devicePolicies += [PSCustomObject]@{ DisplayName = $policy.displayName State = $policy.state RequiresCompliant = $requiresCompliant RequiresHybrid = $requiresHybrid } } } if (-not $devicePolicies) { Write-Host "`n⚠️ ER IS GEEN CONDITIONAL ACCESS-BELEID GEVONDEN DAT COMPLIANT OF HYBRID JOINED APPARATEN VEREIST." -ForegroundColor Yellow Write-Host "Advies: configureer ten minste één beleid dat 'Require device to be marked as compliant' afdwingt voor gevoelige applicaties." -ForegroundColor Cyan return } Write-Host "`nGevonden policies met een compliant/hybrid device-vereiste:" -ForegroundColor Green $devicePolicies | Format-Table DisplayName, RequiresCompliant, RequiresHybrid -AutoSize | Out-Host $summary = [PSCustomObject]@{ PolicyCount = $devicePolicies.Count CompliantRequirement = [bool]($devicePolicies | Where-Object { $_.RequiresCompliant }).Count HybridRequirement = [bool]($devicePolicies | Where-Object { $_.RequiresHybrid }).Count } Write-Host "`nSamenvatting:" -ForegroundColor Cyan $summary | Format-List | Out-Host } function Invoke-Remediation { <# .SYNOPSIS Geeft een basistemplate voor een nieuw Conditional Access-beleid dat compliant apparaten vereist. #> [CmdletBinding()] param() $policyBody = @{ displayName = "NBVC - Require compliant or hybrid joined device" state = "enabledForReportingButNotEnforced" conditions = @{ users = @{ includeUsers = @("All") excludeUsers = @() includeGroups = @() } applications = @{ includeApplications = @("All") excludeApplications = @() } clientAppTypes = @("all") platforms = @{ includePlatforms = @("all") excludePlatforms = @() } } grantControls = @{ operator = "OR" builtInControls = @("compliantDevice", "domainJoinedDevice") customAuthenticationFactors = @() } } if ($WhatIf) { Write-Host "`n[WhatIf] Onderstaande JSON zou als basis voor een nieuw Conditional Access-beleid gebruikt kunnen worden:" -ForegroundColor Yellow $policyBody | ConvertTo-Json -Depth 10 | Out-Host Write-Host "`nGebruik de Azure Portal of Microsoft Graph API om dit beleid handmatig aan te maken en te valideren." -ForegroundColor Cyan return } if (Get-IsLocalDebug) { Write-Host "NBVC_LOCAL_DEBUG=1 - er wordt geen echt Conditional Access-beleid aangemaakt." -ForegroundColor Yellow $policyBody | ConvertTo-Json -Depth 10 | Out-Host return } Connect-NbvcGraph -Scopes @( "Policy.ReadWrite.ConditionalAccess" ) Write-Host "Nieuw Conditional Access-beleid aanmaken in REPORT-ONLY modus..." -ForegroundColor Yellow $uri = "https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies" $newPolicy = Invoke-MgGraphRequest -Method POST -Uri $uri -Body ($policyBody | ConvertTo-Json -Depth 10) Write-Host "`n[OK] Conditional Access-beleid aangemaakt:" -ForegroundColor Green Write-Host "Naam: $($newPolicy.displayName)" -ForegroundColor Cyan Write-Host "Status: $($newPolicy.state)" -ForegroundColor Cyan Write-Host "`nLET OP: beoordeel en test dit beleid zorgvuldig voordat u het van report-only naar 'enabled' wijzigt." -ForegroundColor Yellow } function Invoke-Revert { <# .SYNOPSIS Placeholder voor toekomstige revert-logica. #> [CmdletBinding()] param() Write-Host "`nRevert-logica is nog niet geimplementeerd. Documenteer en verwijder policies handmatig indien nodig." -ForegroundColor Yellow } try { if ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { Invoke-Remediation } elseif ($Revert) { Invoke-Revert } else { Write-Host "Geen modus opgegeven. Gebruik een van de volgende parameters:" -ForegroundColor Yellow Write-Host " -Monitoring Controleert of er policies bestaan die compliant/hybrid joined apparaten vereisen." -ForegroundColor Yellow Write-Host " -Remediation Toont of maakt (afhankelijk van -WhatIf/NBVC_LOCAL_DEBUG) een basistemplate voor zo'n policy." -ForegroundColor Yellow Write-Host " -Revert Placeholder voor toekomstige revert-functionaliteit." -ForegroundColor Yellow } } catch { Write-Error "Fout in compliant-device-requirement.ps1: $($_.Exception.Message)" throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder compliant-device vereiste kunnen gebruikers vanaf onbeheerde en mogelijk gecompromitteerde apparaten toegang krijgen tot kritieke SaaS-diensten en gevoelige gegevens, wat het risico op ransomware, datalekken en misbruik van beheerdersaccounts aanzienlijk vergroot.

Management Samenvatting

Koppel Conditional Access aan Intune-compliance zodat alleen beheerde, conforme apparaten toegang krijgen tot Microsoft 365 en andere cloudapplicaties. Dit sluit onbeheerde thuis-pc’s uit, versterkt Zero Trust en levert harde auditbewijzen op voor BIO, AVG en NIS2.