Azure Identity: Conditional Access Policies Configuratie En Beheer

💼 Management Samenvatting

Conditional Access Policies vormen de kern van moderne identity security en Zero Trust-architecturen door organisaties in staat te stellen contextuele toegangsbeslissingen te nemen op basis van gebruikersidentiteit, apparaatstatus, locatie, applicatie en risicoprofiel. Voor Nederlandse overheidsorganisaties is een goed geconfigureerd Conditional Access-raamwerk niet alleen een best practice, maar een kritieke beveiligingsmaatregel die direct bijdraagt aan compliance met de Baseline Informatiebeveiliging Overheid (BIO), de NIS2-richtlijn en internationale standaarden zoals ISO 27001 door het afdwingen van meervoudige authenticatie, het beperken van toegang tot compliant apparaten, en het blokkeren van risicovolle aanmeldpogingen.

Aanbeveling
IMPLEMENT
Risico zonder
Critical
Risk Score
10/10
Implementatie
24u (tech: 16u)
Van toepassing op:
Azure AD
Entra ID
Microsoft 365

Zonder Conditional Access Policies kunnen gebruikers toegang krijgen tot gevoelige organisatieresources vanaf onbeveiligde apparaten, onbekende locaties of met zwakke authenticatiemethoden. Dit creëert aanzienlijke beveiligingsrisico's waarbij gestolen credentials kunnen worden misbruikt, onbeheerde apparaten toegang krijgen tot bedrijfskritieke data, en kwaadwillende actoren kunnen inloggen vanaf verdachte locaties zonder extra verificatie. Traditionele perimeterbeveiliging faalt in moderne cloud-omgevingen waar gebruikers overal en vanaf elk apparaat werken. Conditional Access Policies lossen deze fundamentele problemen op door organisaties in staat te stellen dynamische toegangsbeslissingen te nemen die zijn gebaseerd op de context van elke aanmeldpoging. Door meervoudige authenticatie af te dwingen voor risicovolle scenario's, toegang te beperken tot compliant en beheerde apparaten, en legacy authenticatie te blokkeren, minimaliseren organisaties het aanvalsoppervlak en verhogen zij de beveiligingspostuur aanzienlijk.

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

Implementatie

Deze control implementeert een volledig geconfigureerd Conditional Access-raamwerk met een gelaagde set van beleidsregels die verschillende beveiligingsscenario's afdekken. De configuratie omvat baseline-beleidsregels zoals het vereisen van meervoudige authenticatie voor alle gebruikers, het blokkeren van legacy authenticatieprotocollen, het vereisen van compliant of hybride joined apparaten voor toegang tot gevoelige applicaties, het blokkeren van toegang vanaf niet-vertrouwde locaties, en het vereisen van goedgekeurde client-applicaties. Voor beheerders worden aanvullende strikte beleidsregels geconfigureerd die altijd meervoudige authenticatie vereisen, ongeacht andere omstandigheden. Risicogebaseerde beleidsregels worden geconfigureerd om aanmeldpogingen met hoge risicoscores te blokkeren of extra verificatie te vereisen. Sessiecontroles worden geconfigureerd om app-enforced restrictions af te dwingen en de levensduur van sessies te beperken. Alle beleidsregels worden geconfigureerd met uitzonderingen voor break-glass accounts en noodtoegang, en worden getest in report-only modus voordat zij worden geactiveerd om onbedoelde toegangsblokkades te voorkomen.

Vereisten

Voor het succesvol implementeren van een volledig geconfigureerd Conditional Access-raamwerk zijn verschillende technische en organisatorische vereisten noodzakelijk die zorgvuldig moeten worden overwogen voordat het proces wordt gestart. De belangrijkste technische vereiste is het beschikken over Azure AD Premium P1- of P2-licenties voor alle gebruikers die onder Conditional Access Policies vallen. Deze licenties zijn essentieel voor het gebruik van de Conditional Access-functionaliteit binnen Microsoft Entra ID, die het mogelijk maakt om contextuele toegangsbeslissingen te nemen op basis van gebruikers, apparaten, locaties en risicoprofielen. Zonder deze licenties zijn organisaties beperkt tot basisauthenticatie en kunnen zij geen geavanceerde beveiligingscontroles implementeren zoals meervoudige authenticatie-afdwinging, apparaatcompliance-vereisten of risicogebaseerde toegangscontrole.

Een tweede kritieke vereiste betreft het beschikken over een volledige en actuele inventarisatie van alle gebruikers, groepen, applicaties en apparaten binnen de organisatie die moeten worden afgedekt door Conditional Access Policies. Deze inventarisatie moet alle Microsoft 365-applicaties omvatten, inclusief Exchange Online, SharePoint Online, Teams, en alle zakelijke applicaties die zijn geïntegreerd met Azure AD. Daarnaast moeten alle gebruikersgroepen worden geïnventariseerd, inclusief beheerdersgroepen, reguliere gebruikersgroepen, en specifieke groepen voor verschillende rollen en verantwoordelijkheden. Voor apparaten moet een complete lijst worden opgesteld van alle beheerde apparaten, inclusief hybride joined apparaten, Azure AD joined apparaten, en compliant apparaten die zijn geregistreerd via Microsoft Intune. Zonder een complete en nauwkeurige inventarisatie bestaat het reële risico dat bepaalde gebruikers, applicaties of apparaten over het hoofd worden gezien tijdens de configuratie, waardoor het beoogde beveiligingsniveau niet wordt bereikt en potentiële beveiligingsrisico's blijven bestaan.

Het configureren van meervoudige authenticatie vormt een derde essentiële vereiste die cruciaal is voor de effectiviteit van Conditional Access Policies. Meervoudige authenticatie moet worden geactiveerd en geconfigureerd voor alle gebruikers voordat Conditional Access Policies kunnen worden geïmplementeerd die MFA vereisen. Dit omvat het registreren van gebruikers voor MFA met ten minste twee verificatiemethoden, zoals de Microsoft Authenticator-app, SMS, telefoongesprek, of hardware-tokens. Voor beheerders moeten ten minste drie verificatiemethoden worden geregistreerd om redundantie te waarborgen. Het is belangrijk om te realiseren dat zonder correct geconfigureerde MFA, Conditional Access Policies die MFA vereisen, gebruikers kunnen blokkeren van toegang tot applicaties, wat kan leiden tot operationele verstoringen en gebruikersontevredenheid.

Een vastgesteld en duidelijk gedocumenteerd beleidsraamwerk is eveneens cruciaal voor het succes van het proces en moet zorgvuldig worden afgestemd op de specifieke behoeften en risicoprofiel van de organisatie. Het beleidsraamwerk moet expliciet maken welke Conditional Access Policies worden geïmplementeerd, welke gebruikers en applicaties worden afgedekt, welke uitzonderingen worden gemaakt en waarom, en hoe beleidsregels worden getest voordat zij worden geactiveerd. Het raamwerk moet ook voorzien in een duidelijk proces voor het afhandelen van toegangsverzoeken die worden geblokkeerd door Conditional Access Policies, inclusief wie verantwoordelijk is voor het evalueren van verzoeken, hoe uitzonderingen worden goedgekeurd en gedocumenteerd, en hoe beleidsregels worden aangepast wanneer zakelijke vereisten wijzigen. Het schema moet duidelijk worden gecommuniceerd naar alle betrokken partijen en moet worden vastgelegd in het formele beveiligingsbeleid van de organisatie om consistentie en naleving te waarborgen.

Ten slotte moet een duidelijk gedefinieerd en gedocumenteerd proces worden opgesteld voor het testen en valideren van Conditional Access Policies voordat zij worden geactiveerd. Dit proces moet in detail specificeren hoe beleidsregels worden getest in report-only modus, hoe de impact wordt geëvalueerd op gebruikers en applicaties, hoe uitzonderingen worden geïdentificeerd en geconfigureerd, en hoe beleidsregels geleidelijk worden gerold naar productie. Het proces moet ook voorzien in monitoring en alerting voor wanneer Conditional Access Policies gebruikers blokkeren of extra verificatie vereisen, zodat beheerders snel kunnen reageren op problemen en gebruikers kunnen ondersteunen wanneer zij toegangsproblemen ervaren.

Implementatie

Gebruik PowerShell-script conditional-access-policies.ps1 (functie Invoke-Remediation) – Configureert Conditional Access Policies volgens best practices.

De implementatie van een volledig geconfigureerd Conditional Access-raamwerk begint met het navigeren naar de Microsoft Entra ID-portal en het selecteren van de Security-sectie, gevolgd door de Conditional Access-functionaliteit. Vanuit dit menu worden nieuwe beleidsregels aangemaakt voor verschillende beveiligingsscenario's, waarbij elk beleid een specifieke configuratie vereist die is afgestemd op de unieke kenmerken en risicoprofiel van dat scenario. De configuratiewizard leidt gebruikers stap voor stap door het volledige opzetten van het beleid, waarbij duidelijke instructies en contextuele hulp worden geboden om configuratiefouten te minimaliseren.

Voor baseline-beveiliging wordt een eerste beleid aangemaakt dat meervoudige authenticatie vereist voor alle gebruikers bij toegang tot alle cloud-applicaties. Dit beleid vormt de fundament van het Conditional Access-raamwerk en zorgt ervoor dat alle gebruikers ten minste één extra verificatiefactor moeten gebruiken naast hun wachtwoord. Het beleid wordt geconfigureerd met 'Alle gebruikers' als doelgroep, 'Alle cloud-applicaties' als scope, en 'Meervoudige authenticatie vereisen' als toegangscontrole. Uitzonderingen worden geconfigureerd voor break-glass accounts en noodtoegang om te voorkomen dat beheerders worden uitgesloten van kritieke systemen tijdens noodsituaties. Het beleid wordt eerst getest in report-only modus om de impact te evalueren voordat het wordt geactiveerd.

Voor het blokkeren van legacy authenticatie wordt een tweede beleid aangemaakt dat alle legacy authenticatieprotocollen blokkeert, zoals SMTP, POP3, IMAP en oudere versies van Exchange ActiveSync. Legacy authenticatieprotocollen ondersteunen geen meervoudige authenticatie en vormen daarom een aanzienlijk beveiligingsrisico. Het beleid wordt geconfigureerd met 'Alle gebruikers' als doelgroep, 'Alle cloud-applicaties' als scope, en 'Legacy authenticatie' als client-apps conditie. De toegangscontrole wordt ingesteld op 'Toegang blokkeren' om alle legacy authenticatiepogingen te weigeren. Uitzonderingen worden geconfigureerd voor specifieke service accounts die legacy authenticatie nodig hebben voor legitieme zakelijke doeleinden, waarbij deze accounts worden beveiligd met andere maatregelen zoals IP-whitelisting en netwerkisolatie.

Voor apparaatcompliance wordt een derde beleid aangemaakt dat vereist dat apparaten compliant zijn of hybride joined zijn voordat gebruikers toegang krijgen tot gevoelige applicaties zoals SharePoint Online, Exchange Online en Teams. Dit beleid zorgt ervoor dat alleen beheerde en beveiligde apparaten toegang hebben tot bedrijfskritieke data. Het beleid wordt geconfigureerd met 'Alle gebruikers' als doelgroep, specifieke gevoelige applicaties als scope, en 'Apparaat vereisen dat compliant is of hybride Azure AD joined is' als toegangscontrole. Uitzonderingen worden geconfigureerd voor gebruikers die toegang nodig hebben vanaf niet-beheerde apparaten voor specifieke zakelijke scenario's, waarbij deze gebruikers worden beperkt tot alleen-lezen toegang of web-gebaseerde applicaties zonder de mogelijkheid om data te downloaden.

Voor beheerders worden aanvullende strikte beleidsregels geconfigureerd die altijd meervoudige authenticatie vereisen, ongeacht andere omstandigheden. Dit omvat een beleid dat specifiek is gericht op beheerdersrollen zoals Globale beheerder, Bevoorrechte rolbeheerder, Gebruikersbeheerder en Beveiligingsbeheerder. Het beleid wordt geconfigureerd met beheerdersrollen als doelgroep, 'Alle cloud-applicaties' als scope, en 'Meervoudige authenticatie vereisen' als toegangscontrole zonder uitzonderingen. Daarnaast wordt een beleid geconfigureerd dat beheerders blokkeert van toegang vanaf niet-vertrouwde locaties, waarbij alleen specifieke vertrouwde IP-adressen of locaties worden toegestaan voor beheerdersaanmeldingen.

Voor risicogebaseerde toegangscontrole worden beleidsregels geconfigureerd die gebruikmaken van Azure AD Identity Protection om aanmeldpogingen met hoge risicoscores te blokkeren of extra verificatie te vereisen. Dit omvat een beleid dat aanmeldpogingen met hoge gebruikersrisicoscores blokkeert, een beleid dat aanmeldpogingen met hoge aanmeldrisicoscores extra verificatie vereist, en een beleid dat aanmeldpogingen vanaf anonieme IP-adressen blokkeert. Deze beleidsregels worden geconfigureerd met 'Alle gebruikers' als doelgroep, 'Alle cloud-applicaties' als scope, en risicocondities als aanvullende voorwaarden. De toegangscontrole wordt ingesteld op 'Toegang blokkeren' voor hoge risico's en 'Meervoudige authenticatie vereisen' voor gemiddelde risico's.

Na het configureren van alle beleidsregels is het essentieel om de voortgang actief te monitoren en ervoor te zorgen dat alle beleidsregels correct functioneren zonder onbedoelde toegangsblokkades. Het systeem biedt uitgebreide dashboards en rapporten die real-time inzicht geven in de werking van alle Conditional Access Policies, inclusief hoeveel aanmeldpogingen worden geblokkeerd, hoeveel gebruikers extra verificatie moeten uitvoeren, welke beleidsregels het meest actief zijn, en welke gebruikers of applicaties het vaakst worden beïnvloed. Deze dashboards kunnen worden gebruikt om trends te identificeren, zoals of bepaalde locaties of apparaten consistent problemen veroorzaken, of of bepaalde gebruikersgroepen meer ondersteuning nodig hebben bij het configureren van MFA. Actieve monitoring helpt om problemen vroegtijdig te detecteren en zorgt ervoor dat het Conditional Access-raamwerk effectief blijft functioneren zonder onnodige gebruikersimpact.

Compliance en Auditing

Conditional Access Policies vormen een fundamentele en onmisbare vereiste binnen meerdere belangrijke beveiligings- en compliance-frameworks die wereldwijd worden erkend en toegepast. De CIS Microsoft 365 Benchmark versie 1.4.0 specificeert in meerdere controles expliciet dat organisaties Conditional Access Policies moeten implementeren om meervoudige authenticatie af te dwingen, legacy authenticatie te blokkeren, en toegang te beperken tot compliant apparaten. Deze controles vallen onder zowel niveau L1 als L2, wat betekent dat basisbeveiligingsmaatregelen door alle organisaties moeten worden geïmplementeerd, terwijl geavanceerde maatregelen worden aanbevolen voor organisaties met hogere beveiligingsvereisten. De CIS Benchmark biedt uitgebreide en specifieke richtlijnen voor de configuratie van Conditional Access Policies, waarbij wordt benadrukt dat het raamwerk gestructureerd, volledig gedocumenteerd en regelmatig geëvalueerd moet zijn om effectief te zijn.

Voor Nederlandse overheidsorganisaties is de Baseline Informatiebeveiliging Overheid (BIO) van bijzonder en kritiek belang, aangezien deze baseline specifiek is ontwikkeld voor de Nederlandse publieke sector en verplicht is voor alle overheidsorganisaties. BIO-controle 08.03 vereist expliciet en zonder uitzondering dat organisaties passende authenticatiemethoden implementeren, inclusief meervoudige authenticatie voor toegang tot gevoelige systemen en gegevens. BIO-controle 09.01 vereist dat organisaties toegangscontroles implementeren die zijn gebaseerd op de principes van minimale bevoegdheden en need-to-know. Conditional Access Policies maken een integraal onderdeel uit van deze controles door organisaties in staat te stellen contextuele toegangsbeslissingen te nemen die zijn gebaseerd op gebruikersidentiteit, apparaatstatus, locatie en risicoprofiel. De BIO benadrukt sterk het belang van volledig gedocumenteerde beveiligingsprocessen waarbij alle beleidsregels, uitzonderingen en configuraties worden vastgelegd voor audit- en compliance-doeleinden.

De internationale standaard ISO 27001:2022 bevat in meerdere controles specifieke en gedetailleerde vereisten voor toegangscontrole en authenticatie. Controle A.5.17 vereist dat organisaties toegangsrechten beheren en controleren, inclusief het regelmatig beoordelen en intrekken van toegangsrechten. Controle A.5.18 vereist dat organisaties authenticatiemechanismen implementeren die geschikt zijn voor het beoogde gebruik. Controle A.8.3 vereist dat organisaties toegangscontroles implementeren die zijn gebaseerd op de principes van minimale bevoegdheden en need-to-know. Conditional Access Policies maken een integraal onderdeel uit van deze controles door organisaties in staat te stellen dynamische toegangsbeslissingen te nemen die zijn gebaseerd op de context van elke aanmeldpoging. Implementatie van Conditional Access Policies helpt organisaties niet alleen te voldoen aan deze ISO-vereisten, maar draagt ook aanzienlijk bij aan het behalen en behouden van ISO 27001-certificering.

De Europese NIS2-richtlijn bevat in Artikel 21 specifieke en bindende vereisten voor toegangsbeheer en authenticatie. De richtlijn vereist expliciet dat organisaties passende en effectieve maatregelen treffen voor toegangsbeheer, inclusief meervoudige authenticatie voor toegang tot kritieke systemen en gegevens. Voor Nederlandse organisaties die onder de reikwijdte van NIS2 vallen, is het implementeren van Conditional Access Policies niet alleen een best practice of aanbeveling, maar een wettelijke verplichting die moet worden nageleefd. Niet-naleving van NIS2-vereisten kan leiden tot aanzienlijke financiële boetes, die kunnen oplopen tot miljoenen euro's, evenals ernstige reputatieschade en mogelijke gevolgen voor de continuïteit van bedrijfsvoering.

Monitoring

Gebruik PowerShell-script conditional-access-policies.ps1 (functie Invoke-Monitoring) – Controleert de configuratie en status van Conditional Access Policies.

Effectieve monitoring van Conditional Access Policies is essentieel om te waarborgen dat het beveiligingsraamwerk correct blijft functioneren en dat organisaties altijd beschikken over actuele en effectieve toegangscontroles. Monitoring omvat het continu volgen van de werking van alle actieve beleidsregels, het verifiëren dat beleidsregels gebruikers en applicaties correct afdekken, het controleren van de effectiviteit van toegangscontroles, en het waarborgen dat alle beveiligingsscenario's worden afgedekt door passende beleidsregels.

De basis van monitoring wordt gevormd door regelmatige verificatie van de status van alle actieve Conditional Access Policies via de Microsoft Entra ID-portal of via PowerShell met behulp van de Microsoft Graph API. Beheerders moeten wekelijks controleren of alle beleidsregels actief zijn, of er geen waarschuwingen of foutmeldingen zijn die kunnen wijzen op problemen met het beleidsraamwerk, en of beleidsregels gebruikers en applicaties correct afdekken. Deze verificatie kan worden geautomatiseerd via PowerShell-scripts die de status van alle beleidsregels controleren en waarschuwingen genereren wanneer problemen worden gedetecteerd.

Naast het controleren van de status van beleidsregels moeten organisaties regelmatig verifiëren dat Conditional Access Policies effectief zijn en dat toegangscontroles correct functioneren. Dit kan worden gedaan door de Conditional Access Insights and Reporting-dashboards te monitoren die real-time inzicht geven in hoeveel aanmeldpogingen worden geblokkeerd, hoeveel gebruikers extra verificatie moeten uitvoeren, welke beleidsregels het meest actief zijn, en welke gebruikers of applicaties het vaakst worden beïnvloed. Organisaties moeten processen implementeren voor het regelmatig uitvoeren van deze verificaties, waarbij wekelijks wordt gecontroleerd of beleidsregels effectief zijn en waarbij waarschuwingen worden gegenereerd wanneer onverwachte patronen worden gedetecteerd.

Voor organisaties die risicogebaseerde Conditional Access Policies hebben geconfigureerd, is het essentieel om te monitoren of deze functionaliteit correct functioneert en of risicodetecties accuraat zijn. Dit omvat het controleren of gebruikersrisico's en aanmeldrisico's correct worden gedetecteerd, of risicogebaseerde beleidsregels gebruikers correct blokkeren of extra verificatie vereisen, en of er geen valse positieven zijn die legitieme gebruikers onterecht blokkeren. Problemen met risicodetectie kunnen leiden tot situaties waarin kwaadwillende aanmeldpogingen niet worden gedetecteerd of waarin legitieme gebruikers onterecht worden geblokkeerd. Organisaties moeten processen implementeren voor het monitoren van risicogebaseerde Conditional Access Policies, waarbij dagelijks wordt gecontroleerd of risicodetecties correct zijn en waarbij waarschuwingen worden gegenereerd wanneer problemen worden gedetecteerd.

Remediatie

Gebruik PowerShell-script conditional-access-policies.ps1 (functie Invoke-Remediation) – Herstelt of configureert Conditional Access Policies wanneer deze ontbreken of onjuist zijn geconfigureerd.

Remediatie van Conditional Access Policies omvat het opzetten van nieuwe beleidsregels wanneer deze ontbreken, het corrigeren van configuratiefouten in bestaande beleidsregels, en het waarborgen dat alle beveiligingsscenario's worden afgedekt door passende beleidsregels. Het is belangrijk om te realiseren dat wanneer Conditional Access Policies niet zijn geconfigureerd, organisaties niet beschikken over een gestructureerd proces om contextuele toegangsbeslissingen te nemen, wat kan resulteren in onbeveiligde toegang tot gevoelige resources en niet-naleving van compliance-vereisten.

Wanneer Conditional Access Policies ontbreken voor specifieke beveiligingsscenario's, kunnen nieuwe beleidsregels worden aangemaakt via de Microsoft Entra ID-portal door te navigeren naar Security, Conditional Access, en vervolgens Nieuw beleid te selecteren. De configuratiewizard leidt gebruikers door het volledige opzetten van het beleid, waarbij alle benodigde instellingen worden geconfigureerd, inclusief naam, gebruikers en groepen, cloud-apps of acties, voorwaarden, toegangscontroles, en sessiecontroles. Na het voltooien van de configuratie wordt het beleid eerst getest in report-only modus om de impact te evalueren voordat het wordt geactiveerd.

Voor bestaande beleidsregels met configuratiefouten kunnen de instellingen worden bijgewerkt via de Microsoft Entra ID-portal door te navigeren naar de specifieke beleidsregel en de instellingen te bewerken. Dit omvat het bijwerken van gebruikers en groepen wanneer deze niet langer geschikt zijn, het aanpassen van voorwaarden wanneer dit nodig is, en het corrigeren van toegangscontroles wanneer deze niet correct functioneren. Het is belangrijk om te verifiëren dat alle wijzigingen correct zijn toegepast en dat het beleid correct blijft functioneren na de wijzigingen, waarbij het beleid opnieuw wordt getest in report-only modus voordat het wordt geactiveerd.

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
<# ================================================================================ AZURE POWERSHELL SCRIPT - Nederlandse Baseline voor Veilige Cloud ================================================================================ .SYNOPSIS Conditional Access Policies Configuration .DESCRIPTION CIS Microsoft 365 Benchmark - Controls 1.1.1, 1.1.2, 1.1.3, 1.2.1, 1.2.2 Controleert en configureert Conditional Access Policies voor meervoudige authenticatie, legacy authenticatie blokkeren, apparaatcompliance en risicogebaseerde toegangscontrole. .NOTES Filename: conditional-access-policies.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 CIS Controls: 1.1.1, 1.1.2, 1.1.3, 1.2.1, 1.2.2 Requires: Azure AD Premium P1/P2, Microsoft.Graph.Identity.SignIns #> #Requires -Version 5.1 #Requires -Modules Microsoft.Graph.Identity.SignIns [CmdletBinding()] param( [Parameter(Mandatory = $false)] [switch]$Monitoring, [Parameter(Mandatory = $false)] [switch]$Remediation, [Parameter(Mandatory = $false)] [switch]$Revert, [Parameter(Mandatory = $false)] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Conditional Access Policies Configuration" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Connect-RequiredServices { <# .SYNOPSIS Maakt verbinding met Microsoft Graph #> try { $context = Get-MgContext -ErrorAction SilentlyContinue if (-not $context -or $context.Scopes -notcontains "Policy.ReadWrite.ConditionalAccess") { Write-Host "Connecting to Microsoft Graph..." -ForegroundColor Gray Connect-MgGraph -Scopes "Policy.ReadWrite.ConditionalAccess", "Directory.Read.All", "User.Read.All" -ErrorAction Stop -NoWelcome Write-Host " [OK] Connected to Microsoft Graph" -ForegroundColor Green } else { Write-Host " [OK] Already connected to Microsoft Graph" -ForegroundColor Green } } catch { Write-Host " [FAIL] Failed to connect to Microsoft Graph: $_" -ForegroundColor Red throw } } function Invoke-Monitoring { <# .SYNOPSIS Controleert de configuratie en status van Conditional Access Policies #> try { Connect-RequiredServices Write-Host "Checking Conditional Access Policies configuration..." -ForegroundColor Gray # Haal alle Conditional Access Policies op $policies = Get-MgIdentityConditionalAccessPolicy -ErrorAction Stop $result = @{ totalPolicies = 0 enabledPolicies = 0 reportOnlyPolicies = 0 disabledPolicies = 0 mfaPolicies = 0 legacyAuthBlockPolicies = 0 deviceCompliancePolicies = 0 adminPolicies = 0 riskBasedPolicies = 0 compliant = $false } if ($policies) { $result.totalPolicies = $policies.Count foreach ($policy in $policies) { # Categoriseer op basis van status switch ($policy.State) { "enabled" { $result.enabledPolicies++ } "enabledForReportingButNotEnforced" { $result.reportOnlyPolicies++ } "disabled" { $result.disabledPolicies++ } } # Analyseer beleidsregels op basis van naam en configuratie $policyName = $policy.DisplayName.ToLower() # MFA policies if ($policy.GrantControls -and $policy.GrantControls.BuiltInControls -contains "mfa") { $result.mfaPolicies++ Write-Host " [OK] MFA Policy: $($policy.DisplayName)" -ForegroundColor Green Write-Host " State: $($policy.State)" -ForegroundColor Cyan } # Legacy auth block policies if ($policy.Conditions -and $policy.Conditions.ClientAppTypes -contains "exchangeActiveSync" -or $policy.Conditions.ClientAppTypes -contains "other") { if ($policy.GrantControls -and $policy.GrantControls.BuiltInControls -contains "block") { $result.legacyAuthBlockPolicies++ Write-Host " [OK] Legacy Auth Block Policy: $($policy.DisplayName)" -ForegroundColor Green Write-Host " State: $($policy.State)" -ForegroundColor Cyan } } # Device compliance policies if ($policy.GrantControls -and ($policy.GrantControls.BuiltInControls -contains "compliantDevice" -or $policy.GrantControls.BuiltInControls -contains "domainJoinedDevice")) { $result.deviceCompliancePolicies++ Write-Host " [OK] Device Compliance Policy: $($policy.DisplayName)" -ForegroundColor Green Write-Host " State: $($policy.State)" -ForegroundColor Cyan } # Admin policies if ($policy.Conditions -and $policy.Conditions.Users -and $policy.Conditions.Users.IncludeRoles -and $policy.Conditions.Users.IncludeRoles.Count -gt 0) { $result.adminPolicies++ Write-Host " [OK] Admin Policy: $($policy.DisplayName)" -ForegroundColor Green Write-Host " State: $($policy.State)" -ForegroundColor Cyan } # Risk-based policies if ($policy.Conditions -and ($policy.Conditions.UserRiskLevels -or $policy.Conditions.SignInRiskLevels)) { $result.riskBasedPolicies++ Write-Host " [OK] Risk-Based Policy: $($policy.DisplayName)" -ForegroundColor Green Write-Host " State: $($policy.State)" -ForegroundColor Cyan } } } Write-Host "`n Summary:" -ForegroundColor Cyan Write-Host " Total Policies: $($result.totalPolicies)" -ForegroundColor White Write-Host " Enabled Policies: $($result.enabledPolicies)" -ForegroundColor White Write-Host " Report-Only Policies: $($result.reportOnlyPolicies)" -ForegroundColor White Write-Host " Disabled Policies: $($result.disabledPolicies)" -ForegroundColor White Write-Host " MFA Policies: $($result.mfaPolicies)" -ForegroundColor White Write-Host " Legacy Auth Block Policies: $($result.legacyAuthBlockPolicies)" -ForegroundColor White Write-Host " Device Compliance Policies: $($result.deviceCompliancePolicies)" -ForegroundColor White Write-Host " Admin Policies: $($result.adminPolicies)" -ForegroundColor White Write-Host " Risk-Based Policies: $($result.riskBasedPolicies)" -ForegroundColor White # Bepaal compliance status $hasMfaPolicy = $result.mfaPolicies -gt 0 $hasLegacyBlock = $result.legacyAuthBlockPolicies -gt 0 $hasDeviceCompliance = $result.deviceCompliancePolicies -gt 0 $hasAdminPolicy = $result.adminPolicies -gt 0 if ($hasMfaPolicy -and $hasLegacyBlock -and $hasDeviceCompliance -and $hasAdminPolicy) { $result.compliant = $true Write-Host "`n [OK] COMPLIANT" -ForegroundColor Green Write-Host " Conditional Access Policies zijn geconfigureerd voor kritieke beveiligingsscenario's" -ForegroundColor Cyan exit 0 } else { Write-Host "`n [WARNING] PARTIALLY COMPLIANT" -ForegroundColor Yellow Write-Host " Aanbevolen: Configureer Conditional Access Policies voor alle beveiligingsscenario's" -ForegroundColor Yellow if (-not $hasMfaPolicy) { Write-Host " - MFA vereisen voor alle gebruikers" -ForegroundColor Gray } if (-not $hasLegacyBlock) { Write-Host " - Legacy authenticatie blokkeren" -ForegroundColor Gray } if (-not $hasDeviceCompliance) { Write-Host " - Apparaatcompliance vereisen voor gevoelige applicaties" -ForegroundColor Gray } if (-not $hasAdminPolicy) { Write-Host " - Strikte beleidsregels voor beheerders" -ForegroundColor Gray } exit 1 } } catch { Write-Host "`n [FAIL] ERROR: $_" -ForegroundColor Red Write-Host " Error Details: $($_.Exception.Message)" -ForegroundColor Red Write-Host "`n Note: Conditional Access vereist Azure AD Premium P1 of P2 licenties" -ForegroundColor Yellow exit 2 } } function Invoke-Remediation { <# .SYNOPSIS Configureert Conditional Access Policies wanneer deze ontbreken .DESCRIPTION Deze functie biedt richtlijnen voor het handmatig configureren van Conditional Access Policies via de Microsoft Entra ID-portal, omdat geautomatiseerde configuratie complex is en specifieke zakelijke vereisten vereist. #> try { Connect-RequiredServices Write-Host "Conditional Access Policies Configuration" -ForegroundColor Gray Write-Host "`n [INFO] Conditional Access Policies configuratie vereist handmatige stappen" -ForegroundColor Yellow Write-Host " via de Microsoft Entra ID-portal vanwege complexiteit en" -ForegroundColor Gray Write-Host " specifieke zakelijke vereisten." -ForegroundColor Gray Write-Host "`n Configuratiestappen:" -ForegroundColor Cyan Write-Host " 1. Navigeer naar: https://entra.microsoft.com" -ForegroundColor White Write-Host " 2. Ga naar: Security > Conditional Access" -ForegroundColor White Write-Host " 3. Klik op: Nieuw beleid" -ForegroundColor White Write-Host "`n Aanbevolen configuraties:" -ForegroundColor Cyan Write-Host "`n Baseline MFA voor alle gebruikers:" -ForegroundColor Yellow Write-Host " - Naam: CA001 - MFA voor alle gebruikers" -ForegroundColor Gray Write-Host " - Gebruikers: Alle gebruikers (uitzondering: break-glass accounts)" -ForegroundColor Gray Write-Host " - Cloud-apps: Alle cloud-apps" -ForegroundColor Gray Write-Host " - Toegangscontrole: Meervoudige authenticatie vereisen" -ForegroundColor Gray Write-Host " - Status: Report-only (testen), daarna Enabled" -ForegroundColor Gray Write-Host "`n Legacy authenticatie blokkeren:" -ForegroundColor Yellow Write-Host " - Naam: CA002 - Blokkeer legacy authenticatie" -ForegroundColor Gray Write-Host " - Gebruikers: Alle gebruikers (uitzondering: service accounts indien nodig)" -ForegroundColor Gray Write-Host " - Cloud-apps: Alle cloud-apps" -ForegroundColor Gray Write-Host " - Client-apps: Exchange ActiveSync, andere clients" -ForegroundColor Gray Write-Host " - Toegangscontrole: Toegang blokkeren" -ForegroundColor Gray Write-Host " - Status: Report-only (testen), daarna Enabled" -ForegroundColor Gray Write-Host "`n Apparaatcompliance voor gevoelige apps:" -ForegroundColor Yellow Write-Host " - Naam: CA003 - Apparaatcompliance vereisen" -ForegroundColor Gray Write-Host " - Gebruikers: Alle gebruikers" -ForegroundColor Gray Write-Host " - Cloud-apps: SharePoint, Exchange, Teams" -ForegroundColor Gray Write-Host " - Toegangscontrole: Apparaat vereisen dat compliant is of hybride Azure AD joined is" -ForegroundColor Gray Write-Host " - Status: Report-only (testen), daarna Enabled" -ForegroundColor Gray Write-Host "`n Strikte beleidsregels voor beheerders:" -ForegroundColor Yellow Write-Host " - Naam: CA004 - MFA altijd voor beheerders" -ForegroundColor Gray Write-Host " - Gebruikers: Beheerdersrollen (Globale beheerder, etc.)" -ForegroundColor Gray Write-Host " - Cloud-apps: Alle cloud-apps" -ForegroundColor Gray Write-Host " - Toegangscontrole: Meervoudige authenticatie vereisen" -ForegroundColor Gray Write-Host " - Status: Enabled (geen report-only voor beheerders)" -ForegroundColor Gray Write-Host "`n Risicogebaseerde toegangscontrole:" -ForegroundColor Yellow Write-Host " - Naam: CA005 - Blokkeer hoge risico aanmeldingen" -ForegroundColor Gray Write-Host " - Gebruikers: Alle gebruikers" -ForegroundColor Gray Write-Host " - Cloud-apps: Alle cloud-apps" -ForegroundColor Gray Write-Host " - Gebruikersrisico: Hoog - Toegang blokkeren" -ForegroundColor Gray Write-Host " - Aanmeldrisico: Hoog - Toegang blokkeren, Gemiddeld - MFA vereisen" -ForegroundColor Gray Write-Host " - Status: Report-only (testen), daarna Enabled" -ForegroundColor Gray Write-Host "`n [INFO] Na configuratie, voer -Monitoring uit om te verifiëren" -ForegroundColor Cyan Write-Host " [INFO] Test alle beleidsregels eerst in report-only modus" -ForegroundColor Yellow Write-Host " [INFO] Monitor Conditional Access Insights voor impact" -ForegroundColor Yellow exit 0 } catch { Write-Host "`n [FAIL] ERROR: $_" -ForegroundColor Red Write-Host " Error Details: $($_.Exception.Message)" -ForegroundColor Red exit 2 } } function Invoke-Revert { <# .SYNOPSIS Verwijdert Conditional Access Policies (NIET AANBEVOLEN!) #> try { Write-Host "⚠️ WARNING: Verwijderen van Conditional Access Policies is een BEVEILIGINGSRISICO!" -ForegroundColor Red Write-Host "Dit verwijdert kritieke beveiligingscontroles en verhoogt het risico op" -ForegroundColor Red Write-Host "ongewenste toegang en niet-naleving van compliance-vereisten`n" -ForegroundColor Red if (-not $WhatIf) { Write-Host "Gebruik -WhatIf om te zien wat zou worden verwijderd" -ForegroundColor Yellow Write-Host "Verwijdering van Conditional Access Policies moet handmatig via de portal" -ForegroundColor Yellow Write-Host "worden uitgevoerd na zorgvuldige overweging en goedkeuring." -ForegroundColor Yellow } exit 0 } catch { Write-Host "ERROR: $_" -ForegroundColor Red exit 2 } } try { if ($Revert) { Invoke-Revert } elseif ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { Invoke-Remediation } else { Write-Host "Usage:" -ForegroundColor Yellow Write-Host " -Monitoring Controleer Conditional Access Policies configuratie" -ForegroundColor Gray Write-Host " -Remediation Toon configuratie-instructies" -ForegroundColor Gray Write-Host " -Revert Waarschuwing voor verwijdering (NIET AANBEVOLEN!)" -ForegroundColor Red Write-Host "`n Voorbeeld:" -ForegroundColor Cyan Write-Host " .\conditional-access-policies.ps1 -Monitoring" -ForegroundColor White } } catch { throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
Critical: Kritiek - Zonder Conditional Access Policies kunnen gebruikers toegang krijgen tot gevoelige resources vanaf onbeveiligde apparaten, onbekende locaties of met zwakke authenticatiemethoden. Dit creëert aanzienlijke beveiligingsrisico's en niet-naleving van compliance-vereisten zoals BIO 08.03, ISO 27001 A.5.18 en NIS2 Artikel 21.

Management Samenvatting

Configureer Conditional Access Policies voor meervoudige authenticatie (alle gebruikers), legacy authenticatie blokkeren, apparaatcompliance vereisen, en risicogebaseerde toegangscontrole. Vereist Azure AD Premium P1 of P2. Implementatietijd: 24 uur.