Microsoft 365: Risicogestuurde Conditional Access Policies

💼 Management Samenvatting

Risicogestuurde Conditional Access policies bepalen niet alleen of een gebruiker kan inloggen, maar wegen voor elke sessie dynamisch af of de context veilig genoeg is om toegang te verlenen. Door signalen te combineren uit Entra ID Protection, Intune en Defender ontstaat een adaptieve laag die automatisch strengere voorwaarden oplegt zodra het risico stijgt.

Aanbeveling
IMPLEMENT
Risico zonder
Hoog
Risk Score
9/10
Implementatie
180u (tech: 120u)
Van toepassing op:
M365
Entra ID
Azure AD

Nederlandse overheidsorganisaties worden geconfronteerd met dreigingsactoren die voortdurend credentials stelen, beheerdersaccounts aanvallen en misbruik maken van thuiswerkplekken. Klassieke policies met vaste uitzonderingen voldoen niet meer aan de BIO, NIS2 en Rijksbrede Zero Trust-programma's omdat zij geen directe relatie leggen tussen dreigingssignalen en toegangsbeslissingen. Zonder risicogestuurde policies kan een aanvaller met een onderschepte sessie alsnog toegang krijgen tot kritieke workloads, terwijl bestuurders geen aantoonbaar bewijs hebben dat verhoogde risico's automatisch leiden tot zwaardere controles. Het gevolg is een auditspoor vol handmatige uitzonderingen, hogere verzekeringspremies en een structureel verhoogde kans op datalekken die maatschappelijke dienstverlening verstoren.

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

Implementatie

Dit artikel beschrijft hoe u een samenhangende set risicogestuurde Conditional Access policies opbouwt voor Microsoft Entra ID. We behandelen de opbouw van trustprofielen, de wijze waarop sign-in en user risk scores worden vertaald naar verplicht passwordless authenticatie of blokkades, de koppeling met device compliance en session controls, en de governance die nodig is om uitzonderingen tijdelijk en controleerbaar te houden. U krijgt concrete richtlijnen voor architectuur, implementatie, monitoring en remediatie, inclusief een PowerShell-script dat continu verifieert of policies actief blijven voldoen aan de Nederlandse Baseline voor Veilige Cloud.

Strategische Context en Risicoprofielen

Risicogestuurde Conditional Access vormt de schakel tussen abstract veiligheidsbeleid en concrete controles in Microsoft 365. Bestuurders verwachten dat Zero Trust niet langer een poster is, maar een meetbaar mechanisme waarbij elke aanmelding wordt beoordeeld op actuele dreiging, gevoeligheid van de gevraagde applicatie en gedrag van de gebruiker. Door een risicoprofiel per gebruikersgroep te definiëren – denk aan bestuurders, beheerders, ketenpartners en uitzendkrachten – kan de organisatie duidelijk aantonen welke authenticatiesterkte, apparaatstatus en sessiebeperkingen horen bij elk profiel. Dit maakt het mogelijk om tijdens audits exact te laten zien dat medewerkers met toegang tot staatsgeheime documenten bij een verhoogd sign-in risico automatisch naar passwordless authenticatie worden gedwongen, terwijl een functioneel beheerder die vanaf een onbekende locatie werkt alleen web-only toegang krijgt tot Teams totdat het apparaat is gevalideerd. De combinatie van gebruikersrisico, aanmeldingsrisico en resourcegevoeligheid wordt zo een bestuursinstrument dat laat zien dat de Nederlandse Baseline voor Veilige Cloud daadwerkelijk is verankerd in de digitale werkplek.

De maatschappelijke impact van een identiteitsincident is voor overheden groter dan een klassieke financiële schadepost. Een gerichte aanval op een gemeentelijk identiteitssysteem of een ministerie kan het vertrouwen van burgers ondermijnen en leidt tot politieke druk wanneer blijkt dat policies niet zijn aangescherpt ondanks duidelijke risicosignalen. Daarom moeten risicogestuurde policies een directe koppeling hebben met nationale dreigingsbeelden van het NCSC en sectorale rapportages. Wanneer het NCSC bijvoorbeeld een verhoogde dreigingsmelding afgeeft voor credential stuffing campagnes, overstappen de policies automatisch naar een strengere modus waarin alleen phishing-resistente methoden worden geaccepteerd en waarin downloads van gevoelige data tijdelijk worden geblokkeerd op niet-goedgekeurde apparaten. Deze automatische drempelverhoging laat aan toezichthouders zien dat beleid en uitvoering synchroon lopen met het actuele dreigingslandschap.

Een volwassen risicobeleid vereist ook dat uitzonderingen expliciet worden vastgelegd en automatisch verlopen. Veel organisaties geven tijdelijke vrijstellingen voor projectteams, aannemers of burgemeesters tijdens internationale missies. Zonder einddatum blijven deze uitzonderingen echter bestaan en ontstaan sluipwegen die aanvallers kunnen misbruiken. Door risicogestuurde policies te combineren met privileged access groups en Just-in-Time goedkeuring via Entra ID worden uitzonderingen gekoppeld aan concrete risico-analyses. Een burgemeester die buiten Europa reist kan bijvoorbeeld gedurende een vooraf bepaalde periode gebruikmaken van een noodpolicy die alleen passwordless authenticatie via FIDO2-keys toestaat en die elke sessie logt voor forensisch onderzoek. Na afloop wordt de uitzondering automatisch ingetrokken en wordt een rapport gedeeld met het CISO-office. Dit geeft bestuurders de zekerheid dat maatwerk mogelijk blijft zonder dat het fundament van Zero Trust wordt ondergraven.

Architectuur, Signalen en Technische Uitwerking

Een effectief risicobeleid begint bij consistente signalen. Microsoft Entra ID Protection levert realtime user risk en sign-in risk scores, maar deze krijgen pas waarde wanneer zij worden verrijkt met gegevens uit Intune, Defender for Endpoint, Defender for Cloud Apps en Microsoft Purview. In de referentiearchitectuur voor de Nederlandse Baseline voor Veilige Cloud wordt daarom per signaalbron vastgelegd hoe vaak data wordt ververst, welk betrouwbaarheidsniveau geldt en hoe uitzonderingen worden afgehandeld. Device compliance moet binnen vijf minuten na een wijziging beschikbaar zijn, Named Locations worden gevoed door het Rijksbrede IP-register en Defender waarschuwingen worden gecorreleerd met specifieke applicaties. Het resultaat is een datalaag waarin elke aanmelding wordt voorzien van herkomst, apparaatstatus, vertrouwensniveau en dataclassificatie, waardoor Conditional Access beslissingen context krijgen.

De technische uitwerking vertaalt deze signalen naar policies met duidelijke doelstellingen. Een basisset bestaat uit policies die gebruikers met hoog user risk onmiddellijk blokkeren, policies die bij medium sign-in risk passwordless authenticatie afdwingen, policies die voor gevoelige SaaS-applicaties een compliant of hybride gekoppeld apparaat vereisen, en policies die sesies verkorten of beperken tot web-only weergaven wanneer de dataclassificatie "Vertrouwelijk" of hoger is. In plaats van lange lijsten met uitzonderingen werken we met trust tiers die worden gekoppeld aan Entra ID groepen. Hierdoor kunnen policies worden beheerd via Infrastructure-as-Code en kunnen wijzigingen worden gecontroleerd via pull requests. Elke policy wordt daarnaast gekoppeld aan een Authentication Strength profiel zodat duidelijk is welke methoden minimaal zijn toegestaan. Door deze structuur kunnen CISO's aantonen dat phishing-resistente methoden altijd worden vereist zodra het risico stijgt, zonder dat gebruikers onnodige frictie ervaren tijdens reguliere omstandigheden.

Tot slot vormt logging de ruggengraat van het architectuurontwerp. Alle beslissingen, inclusief signaalwaarden en grants, worden doorgestuurd naar Microsoft Sentinel of een ander SIEM waar dashboards afwijkingen direct tonen. Wanneer een policy wordt gewijzigd of uitgeschakeld, genereert het systeem automatisch een change-melding in Azure DevOps zodat het vier-ogen-principe aantoonbaar is gevolgd. Forensische rapporten worden gekoppeld aan Purview audit logs om te bewijzen welke documenten zijn geraadpleegd tijdens een verhoogd risico-incident. Dankzij deze geïntegreerde logging kan de organisatie niet alleen aantonen dat policies bestaan, maar ook dat ze onder stress functioneren en dat elke afwijking onmiddellijk wordt aangepakt. Dat is essentieel voor toezichthouders die vragen hoe Zero Trust er in de praktijk uitziet.

Gefaseerde Implementatie en Adoptie

De implementatie van risicogestuurde Conditional Access verloopt in een reeks duidelijk afgebakende fasen. Tijdens de voorbereiding inventariseert het projectteam alle bestaande policies, uitzonderingen en high-value assets. Er wordt een heatmap opgesteld waarin kritieke applicaties worden gekoppeld aan gebruikersgroepen en dataclassificaties. Door deze analyse in workshops met security, compliance, HR en bedrijfsvoering te valideren ontstaat een gedeelde taal: iedereen weet welke risico-indicatoren leiden tot blokkeren, welke tot aanvullende verificatie en welke tot monitoring. Deze fase eindigt met een bestuurlijk besluit waarin de directie expliciet instemt met het principe dat risicosignalen altijd zwaarder wegen dan gebruiksgemak. Daarmee wordt voorkomen dat een latere discussie over gebruikerservaring de beveiligingsdoelen ondermijnt.

In de bouwfase richt het team een policybibliotheek in met herbruikbare componenten. Elk component beschrijft de condities, controles, scope, fallbackscenario's en logging. Ontwikkelaars implementeren de bibliotheek via het Microsoft Graph API-schema zodat policies versiebeheer krijgen en automatisch kunnen worden uitgerold naar test-, acceptatie- en productietenants. Parallel hieraan worden communicatiepakketten opgesteld voor bestuurders, medewerkers en externe partners. Deze pakketten leggen in duidelijke taal uit waarom gebruikers soms extra stappen moeten doorlopen en hoe de maatregelen aansluiten op wet- en regelgeving. Door adoptie vanaf het begin serieus te nemen worden weerstand en shadow IT geminimaliseerd. Een pilot met het SOC, identity engineers en een vertegenwoordiging van lijnorganisaties vormt het sluitstuk van deze fase; tijdens deze pilot worden metrics verzameld over aanmeldingsrisico's, afgedwongen authenticatiemethoden en gebruikerservaring. Bevindingen worden verwerkt voordat de organisatiebrede uitrol start.

De uitrolfase verloopt gefaseerd per organisatieonderdeel en is gekoppeld aan change-kalenders zodat kritieke periodes, zoals belastingcampagnes of verkiezingen, worden ontzien. Elk onderdeel krijgt duidelijke toegang tot een supportdesk die is uitgerust met runbooks voor veelvoorkomende situaties, bijvoorbeeld reizende bestuurders, leveranciers die nog niet over compliant apparaten beschikken of crisisteams die buiten kantooruren extra rechten nodig hebben. Na elke uitrolstap analyseert het team de signaleringsrapporten, gebruikersfeedback en auditlogs om te bepalen of verdere tuning nodig is. Zodra alle onderdelen live zijn, verschuift de focus naar borging: policywijzigingen lopen uitsluitend via change requests, uitzonderingen worden gekoppeld aan einddata en rapportages worden elk kwartaal gedeeld met het CIO-beraad en de CISO-community binnen het Rijk. Hierdoor blijft het programma levend en voorkomt de organisatie dat de maatregelen na enkele maanden verwateren.

Monitoring, Scriptgestuurde Verificatie en Remediatie

Risicogestuurde policies hebben alleen waarde wanneer ze voortdurend worden gecontroleerd op aanwezigheid, configuratie en effectiviteit. Het SOC en het identity team richten daarom dashboards in die dagelijks weergeven hoeveel aanmeldingen zijn beoordeeld als laag, medium of hoog risico, hoeveel sessies passwordless authenticatie hebben afgedwongen en hoeveel downloads vanuit niet-compliant apparaten zijn geblokkeerd. Deze dashboards zijn gekoppeld aan servicemanagementprocessen zodat afwijkingen direct leiden tot incidenttickets met concrete herstelacties. Door monitoring te automatiseren ontstaat een cultuur waarin afwijkingen niet langer afhankelijk zijn van toevallige ontdekking, maar structureel worden opgevolgd binnen de afgesproken service levels.

Gebruik PowerShell-script conditional-access-risk-policies.ps1 (functie Invoke-Monitoring) – Valideert of er ingeschakelde Conditional Access policies zijn die user en sign-in risk verwerken, controleert of Authentication Strength en device compliance worden afgedwongen en rapporteert afwijkingen in leesbare samenvattingen..

De PowerShell-rapportage wordt minimaal dagelijks uitgevoerd in een gecontroleerde pipeline, maar kan ook ad hoc draaien tijdens audits of crisisoverleggen. Het script vergelijkt de policies met een set drempelwaarden, bijvoorbeeld het aantal policies dat sign-in risk gebruikt of het aantal policies dat phishing-resistente methoden vereist. Wanneer een waarde onder de norm zakt, genereert het script automatisch een aanbeveling om de policy te herstellen of om aanvullende controls toe te voegen. De resultaten worden opgeslagen in het compliance-dossier en vormen het bewijs dat de organisatie continu verifieert of de Nederlandse Baseline voor Veilige Cloud wordt nageleefd.

Gebruik PowerShell-script conditional-access-risk-policies.ps1 (functie Invoke-Remediation) – Geeft stap-voor-stap advies voor het herstellen van ontbrekende of uitgeschakelde risicopolicies, inclusief aanwijzingen voor Authentication Strength, device compliance en session controls..

Governance sluit de monitoringcyclus af. Elke afwijking die via het script of het SOC-dashboard wordt gevonden, wordt gekoppeld aan een change request met een eigenaar, einddatum en gecontroleerde implementatie. Het CAB beoordeelt maandelijks of structurele verbeteringen nodig zijn, bijvoorbeeld het combineren van policies, het aanscherpen van logging of het uitbreiden van de trust tiers. Door deze governanceaanpak kan de organisatie aan de Algemene Rekenkamer, interne auditdiensten en sectorale toezichthouders aantonen dat risicogestuurde toegang geen eenmalig project is, maar een doorlopende beheerfunctie met heldere verantwoordelijkheden.

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 Controleert of risicogestuurde Conditional Access policies aanwezig en effectief zijn. .DESCRIPTION Dit script hoort bij het artikel 'conditional-access-risk-policies' van de Nederlandse Baseline voor Veilige Cloud. Het script inventariseert Conditional Access policies via Microsoft Graph en toetst of: 1. Sign-in risk en user risk condities actief worden gebruikt. 2. Authentication Strength of phishing-resistente methoden worden afgedwongen. 3. Device compliance of hybride join een harde eis is voor gevoelige workloads. 4. Session controls en named locations beschikbaar zijn voor risicobeperking. Gebruik -Monitoring voor rapportage, -Remediation voor hersteladvies en -DebugMode voor lokale tests zonder Graph-verbinding. .NOTES Filename: conditional-access-risk-policies.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-11-27 Last Modified: 2025-11-27 Version: 1.0 Related JSON: content/m365/identity/conditional-access-risk-policies.json .EXAMPLE .\conditional-access-risk-policies.ps1 -Monitoring -DebugMode Draait een lokale test met voorbeelddata. .EXAMPLE .\conditional-access-risk-policies.ps1 -Monitoring Voert een live controle uit en toont de nalevingsstatus. .EXAMPLE .\conditional-access-risk-policies.ps1 -Remediation -WhatIf Laat zien welke acties zouden worden genomen om ontbrekende policies te herstellen. #> #Requires -Version 5.1 [CmdletBinding()] param( [Parameter(HelpMessage = "Voer de monitoringcontrole uit en toon resultaten")] [switch]$Monitoring, [Parameter(HelpMessage = "Geef remediatieadvies om ontbreken de policies te herstellen")] [switch]$Remediation, [Parameter(HelpMessage = "Voer een veilige lokale test uit zonder Graph-verbinding")] [switch]$DebugMode, [Parameter(HelpMessage = "Toon welke acties zouden worden uitgevoerd zonder ze uit te voeren")] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' function Test-RequiredModules { param( [string[]]$ModuleNames ) $missing = @() foreach ($name in $ModuleNames) { if (-not (Get-Module -ListAvailable -Name $name)) { $missing += $name } } if ($missing.Count -gt 0) { throw "Ontbrekende modules: $($missing -join ', '). Installeer deze modules voordat u het script uitvoert." } } function Get-CaPolicies { [CmdletBinding()] param() $policies = @() $uri = "https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies?`$top=25" while ($uri) { $response = Invoke-MgGraphRequest -Method GET -Uri $uri -ErrorAction Stop if ($response.value) { $policies += $response.value } $uri = $response.'@odata.nextLink' } return $policies | Where-Object { $_.state -eq "enabled" } } function Invoke-Monitoring { [CmdletBinding()] param() Write-Host "" Write-Host "========================================" -ForegroundColor Cyan Write-Host "Risicogestuurde Conditional Access - Monitoring" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan if ($DebugMode) { $sample = [PSCustomObject]@{ PolicyCount = 6 RiskPolicies = 3 AuthStrengthPolicies = 2 DeviceContextPolicies = 4 SessionControlledPolicies = 3 NamedLocationCoverage = $true ComplianceStatus = "Compliant" Details = @( [PSCustomObject]@{ Name = "CA - Sign-in risk blokkeren" SignInRiskLevels = "medium, high" UserRiskLevels = "none" RequiresAuthStrength = $true RequiresCompliantDevice = $false RequiresHybridJoin = $false HasSessionControls = $true Notes = "Blokkeert sessies met hoge sign-in risk en forceert phishing-resistente methoden." }, [PSCustomObject]@{ Name = "CA - User risk block" SignInRiskLevels = "none" UserRiskLevels = "high" RequiresAuthStrength = $false RequiresCompliantDevice = $true RequiresHybridJoin = $true HasSessionControls = $false Notes = "Blokkeert accounts met hoog user risk totdat incidentonderzoek is afgerond." } ) } Write-Host "[DEBUG] Voorbeeldresultaat:" -ForegroundColor Yellow $sample | Format-List return $sample } try { Test-RequiredModules -ModuleNames @("Microsoft.Graph.Authentication", "Microsoft.Graph.Identity.SignIns") Connect-MgGraph -Scopes "Policy.Read.All","Directory.Read.All" -NoWelcome -ErrorAction Stop | Out-Null $policies = Get-CaPolicies if ($policies.Count -eq 0) { Write-Host "[WAARSCHUWING] Er zijn geen ingeschakelde Conditional Access policies gevonden." -ForegroundColor Yellow } $riskPolicies = @() $authStrengthCount = 0 $deviceContextCount = 0 $sessionCount = 0 $namedLocations = $false foreach ($policy in $policies) { $conditions = $policy.conditions $grantControls = $policy.grantControls $sessionControls = $policy.sessionControls $hasSignInRisk = $conditions.signInRiskLevels -and $conditions.signInRiskLevels.Count -gt 0 $hasUserRisk = $conditions.userRiskLevels -and $conditions.userRiskLevels.Count -gt 0 $requiresAuthStrength = $false $requiresCompliantDevice = $false $requiresHybridJoin = $false $hasSessionControls = $false if ($grantControls) { if ($grantControls.authenticationStrength -and $grantControls.authenticationStrength.displayName) { $requiresAuthStrength = $true $authStrengthCount++ } if ($grantControls.builtInControls) { if ($grantControls.builtInControls -contains "compliantDevice") { $requiresCompliantDevice = $true $deviceContextCount++ } if ($grantControls.builtInControls -contains "domainJoinedDevice") { $requiresHybridJoin = $true $deviceContextCount++ } } } if ($sessionControls) { if ($sessionControls.applicationEnforcedRestrictions -or $sessionControls.signInFrequency -or $sessionControls.persistentBrowser) { $hasSessionControls = $true $sessionCount++ } } if ($conditions.locations -and $conditions.locations.includeLocations) { if ($conditions.locations.includeLocations -notcontains "All") { $namedLocations = $true } } if ($hasSignInRisk -or $hasUserRisk) { $riskPolicies += [PSCustomObject]@{ Name = $policy.displayName SignInRiskLevels = ($conditions.signInRiskLevels -join ", ") UserRiskLevels = ($conditions.userRiskLevels -join ", ") RequiresAuthStrength = $requiresAuthStrength RequiresCompliantDevice = $requiresCompliantDevice RequiresHybridJoin = $requiresHybridJoin HasSessionControls = $hasSessionControls TargetsSensitiveApps = ($policy.conditions.applications.includeApplications -join ", ") } } } $requirements = [ordered]@{ RiskPoliciesPresent = $riskPolicies.Count -gt 0 AuthenticationStrengthUsed = $authStrengthCount -gt 0 DeviceContextRequired = $deviceContextCount -gt 0 SessionControlsApplied = $sessionCount -gt 0 NamedLocationCoverage = $namedLocations } $met = ($requirements.GetEnumerator() | Where-Object { $_.Value }).Count $complianceStatus = if ($met -ge 4) { "Compliant" } elseif ($met -ge 2) { "Partially Compliant" } else { "Non-Compliant" } Write-Host "" Write-Host "Resultaten:" -ForegroundColor Cyan foreach ($req in $requirements.GetEnumerator()) { $color = if ($req.Value) { 'Green' } else { 'Yellow' } Write-Host (" {0,-28}: {1}" -f $req.Key, $req.Value) -ForegroundColor $color } switch ($complianceStatus) { "Compliant" { Write-Host "[OK] Risicogestuurde policies zijn op orde." -ForegroundColor Green } "Partially Compliant" { Write-Host "[WAARSCHUWING] Niet alle risicocondities zijn geborgd." -ForegroundColor Yellow } default { Write-Host "[FAIL] Risicogestuurde policies ontbreken of zijn uitgeschakeld." -ForegroundColor Red } } if ($riskPolicies.Count -gt 0) { Write-Host "" Write-Host "Gevonden risicopolicies:" -ForegroundColor Cyan $riskPolicies | Select-Object Name,SignInRiskLevels,UserRiskLevels,RequiresAuthStrength,RequiresCompliantDevice,HasSessionControls | Format-Table | Out-String | Write-Host } return [PSCustomObject]@{ PolicyCount = $policies.Count RiskPolicies = $riskPolicies.Count AuthStrengthPolicies = $authStrengthCount DeviceContextPolicies = $deviceContextCount SessionControlledPolicies = $sessionCount NamedLocationCoverage = $namedLocations ComplianceStatus = $complianceStatus Details = $riskPolicies } } catch { Write-Error "Fout tijdens monitoring: $_" throw } finally { if (-not $DebugMode) { Disconnect-MgGraph -ErrorAction SilentlyContinue | Out-Null } } } function Invoke-Remediation { [CmdletBinding()] param() Write-Host "" Write-Host "========================================" -ForegroundColor Cyan Write-Host "Risicogestuurde Conditional Access - Remediatie" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan $result = Invoke-Monitoring if ($result.ComplianceStatus -eq "Compliant") { Write-Host "[INFO] Geen remediatie vereist. Alle eisen zijn aanwezig." -ForegroundColor Green return } Write-Host "" Write-Host "Aanbevolen acties:" -ForegroundColor Cyan if ($result.RiskPolicies -eq 0) { $message = "Maak policies aan die user risk (High) blokkeren en sign-in risk (Medium+) laten escaleren naar passwordless authenticatie." if ($WhatIf) { Write-Host " WhatIf: $message" -ForegroundColor Yellow } else { Write-Host " - $message" -ForegroundColor Yellow } } if ($result.AuthStrengthPolicies -eq 0) { $message = "Koppel Authentication Strength 'Phishing-resistant MFA' aan alle policies voor gevoelige workloads." if ($WhatIf) { Write-Host " WhatIf: $message" -ForegroundColor Yellow } else { Write-Host " - $message" -ForegroundColor Yellow } } if ($result.DeviceContextPolicies -eq 0) { $message = "Voeg 'Require compliant device' of 'Require hybrid Azure AD joined device' toe aan applicaties met vertrouwelijke data." if ($WhatIf) { Write-Host " WhatIf: $message" -ForegroundColor Yellow } else { Write-Host " - $message" -ForegroundColor Yellow } } if ($result.SessionControlledPolicies -eq 0) { $message = "Activeer session controls zoals sign-in frequency en application enforced restrictions voor browsertoegang." if ($WhatIf) { Write-Host " WhatIf: $message" -ForegroundColor Yellow } else { Write-Host " - $message" -ForegroundColor Yellow } } if (-not $result.NamedLocationCoverage) { $message = "Definieer Named Locations voor Rijksnetwerken en EU-cloudregio's en pas deze toe op risicopolicies." if ($WhatIf) { Write-Host " WhatIf: $message" -ForegroundColor Yellow } else { Write-Host " - $message" -ForegroundColor Yellow } } Write-Host "" Write-Host "Documenteer elke aanpassing via het changeproces en koppel bewijs aan het compliance-dossier." -ForegroundColor Cyan } try { if (-not $Monitoring -and -not $Remediation) { Write-Host "" Write-Host "Geen modus opgegeven. Gebruik -Monitoring of -Remediation (optioneel -DebugMode)." -ForegroundColor Yellow return } if ($Monitoring) { Invoke-Monitoring | Out-Null } if ($Remediation) { Invoke-Remediation } } catch { Write-Error "Fout in conditional-access-risk-policies.ps1: $_" throw } finally { Write-Host "" Write-Host "========================================" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
Hoog: Zonder risicogestuurde Conditional Access blijven identiteiten kwetsbaar voor geautomatiseerde aanvallen en kan de organisatie niet aantonen dat Zero Trust daadwerkelijk wordt toegepast. Een geslaagde aanval leidt rechtstreeks tot maatschappelijke ontwrichting en bestuurlijke aansprakelijkheid.

Management Samenvatting

Ontwerp en implementeer een bibliotheek van risicogestuurde Conditional Access policies die gebruikmaken van Entra ID Protection signalen, device compliance en Authentication Strength. Automatiseer monitoring met het bijbehorende PowerShell-script en borg governance zodat uitzonderingen tijdelijk en controleerbaar zijn. Dit vormt een kerneis van de Nederlandse Baseline voor Veilige Cloud.