Azure Identity: Veilige Remote Access Configuratie En Beheer

💼 Management Samenvatting

Veilige remote access vormt de ruggengraat van moderne hybride werkmodellen waarbij medewerkers veilig moeten kunnen verbinden met organisatieresources vanaf elke locatie, op elk apparaat en op elk moment. Voor Nederlandse overheidsorganisaties vereist veilige remote access een Zero Trust-benadering waarbij elke toegangspoging wordt geverifieerd, geautoriseerd en gecontroleerd op basis van gebruikersidentiteit, apparaatstatus, netwerklocatie en risicoprofiel. Een goed geconfigureerd remote access-raamwerk combineert Azure AD Conditional Access Policies, VPN-verbindingen met meervoudige authenticatie, Azure Bastion voor veilig serverbeheer, en uitgebreide monitoring en logging om te voldoen aan de Baseline Informatiebeveiliging Overheid (BIO), de NIS2-richtlijn en internationale standaarden zoals ISO 27001.

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

Zonder een adequaat geconfigureerd remote access-raamwerk lopen organisaties aanzienlijke beveiligingsrisico's waarbij onbevoegde gebruikers toegang kunnen krijgen tot gevoelige resources, onbeveiligde verbindingen kunnen worden onderschept, en kwaadwillende actoren kunnen profiteren van zwakke authenticatie- en autorisatiemechanismen. Traditionele VPN-implementaties die alleen afhankelijk zijn van gebruikersnaam en wachtwoord bieden onvoldoende beveiliging in moderne omgevingen waar geavanceerde aanvallen zoals credential stuffing, man-in-the-middle attacks en session hijacking veel voorkomen. Bovendien ontbreekt vaak de contextuele beveiliging die nodig is om te bepalen of een toegangspoging legitiem is of verdacht, zoals het controleren van apparaatcompliance, netwerklocatie en gebruiksgedrag. Remote access zonder meervoudige authenticatie creëert een kritiek beveiligingsgat waarbij gestolen credentials direct kunnen worden misbruikt zonder extra verificatie. Een onvoldoende beveiligd remote access-raamwerk leidt tot niet-naleving van compliance-vereisten zoals BIO 08.03 die expliciet vereist dat organisaties passende authenticatiemethoden implementeren voor toegang tot systemen en gegevens, en NIS2 Artikel 21 die vereist dat organisaties passende maatregelen treffen voor toegangsbeheer en authenticatie.

PowerShell Modules Vereist
Primary API: Microsoft Graph API en Azure Resource Manager API
Connection: Connect-MgGraph en Connect-AzAccount
Required Modules: Microsoft.Graph.Identity.SignIns, Az.Network, Az.Compute

Implementatie

Deze control implementeert een volledig geconfigureerd en gelaagd remote access-beveiligingsraamwerk dat verschillende beveiligingsmechanismen combineert om veilige toegang te waarborgen vanuit elke locatie. De configuratie omvat Azure AD Conditional Access Policies die meervoudige authenticatie vereisen voor alle remote access-pogingen, toegang blokkeren vanaf niet-vertrouwde locaties of risicovolle netwerken, en apparaatcompliance vereisen voor toegang tot gevoelige resources. Voor VPN-verbindingen wordt Point-to-Site (P2S) of Site-to-Site (S2S) VPN geconfigureerd met Azure AD-gebaseerde authenticatie die gebruik maakt van certificaten en meervoudige authenticatie, in plaats van traditionele gedeelde sleutels of gebruikersnaam-wachtwoordcombinaties. Azure Bastion wordt geconfigureerd voor veilig RDP- en SSH-beheer van virtuele machines zonder dat publieke IP-adressen nodig zijn op de VM's, wat het aanvalsoppervlak aanzienlijk verkleint. Voor webgebaseerde toegang worden applicaties gepubliceerd via Azure AD Application Proxy met Conditional Access-beveiliging. Alle remote access-activiteiten worden uitgebreid gelogd en gemonitord via Azure Monitor, Azure Sentinel en Microsoft Defender for Cloud om verdachte activiteiten vroegtijdig te detecteren en te reageren. Het raamwerk wordt regelmatig geëvalueerd en bijgewerkt om te voldoen aan de nieuwste beveiligingsstandaarden en dreigingsbeelden.

Vereisten

Voor het succesvol implementeren van een volledig geconfigureerd remote access-beveiligingsraamwerk 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 remote access nodig hebben. Deze licenties zijn essentieel voor het gebruik van Conditional Access-functionaliteit binnen Microsoft Entra ID, die het mogelijk maakt om contextuele toegangsbeslissingen te nemen op basis van gebruikersidentiteit, apparaatstatus, locatie en risicoprofiel. Voor Azure Bastion zijn specifieke Azure-resources nodig, waaronder een Azure Virtual Network met subnet-configuratie en een Azure Bastion-host. Voor VPN-verbindingen zijn Azure VPN Gateway-resources nodig met geschikte SKU's die geschikt zijn voor de verwachte gebruikersaantallen en bandbreedtevereisten. Zonder deze licenties en resources 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 die remote access nodig hebben. Deze inventarisatie moet alle gebruikers omvatten die regelmatig of incidenteel werken vanuit externe locaties, inclusief thuiswerkers, field workers, externe consultants en beheerders die servers moeten beheren. Daarnaast moeten alle applicaties en systemen worden geïnventariseerd die via remote access beschikbaar moeten zijn, inclusief webapplicaties, bureaubladapplicaties, serverbeheertools en databases. Voor apparaten moet een complete lijst worden opgesteld van alle apparaten die remote access zullen gebruiken, inclusief beheerde apparaten via Microsoft Intune, hybride joined apparaten, en persoonlijke apparaten die worden gebruikt voor BYOD-scenario's. Het is belangrijk om te realiseren dat zonder een complete en nauwkeurige inventarisatie het risico bestaat dat bepaalde gebruikers 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 het remote access-beveiligingsraamwerk. Meervoudige authenticatie moet worden geactiveerd en geconfigureerd voor alle gebruikers voordat remote access kan worden geïmplementeerd, met name voor gebruikers die toegang hebben tot gevoelige resources of beheerfuncties. Dit omvat het registreren van gebruikers voor MFA met ten minste twee verificatiemethoden, zoals de Microsoft Authenticator-app, SMS, telefoongesprek, hardware-tokens of FIDO2-security keys. Voor beheerders en gebruikers met toegang tot zeer gevoelige systemen 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 voor remote access, gebruikers kunnen blokkeren van toegang tot applicaties en systemen, wat kan leiden tot operationele verstoringen en gebruikersontevredenheid. Bovendien moet MFA worden geconfigureerd voor VPN-verbindingen, waarbij organisaties moeten kiezen voor Azure AD-gebaseerde authenticatie in plaats van RADIUS-gebaseerde authenticatie wanneer mogelijk, omdat dit betere integratie biedt met Conditional Access Policies en uitgebreidere logging en monitoring mogelijk maakt.

Een vastgesteld en duidelijk gedocumenteerd beveiligingsbeleid is eveneens cruciaal voor het succes van het proces en moet zorgvuldig worden afgestemd op de specifieke behoeften en risicoprofiel van de organisatie. Het beleid moet expliciet maken welke remote access-methoden worden toegestaan, welke gebruikers en applicaties remote access nodig hebben, welke beveiligingscontroles worden geïmplementeerd, welke uitzonderingen worden gemaakt en waarom, en hoe remote access-activiteiten worden gemonitord en geauditeerd. Het beleid moet ook voorzien in een duidelijk proces voor het afhandelen van toegangsverzoeken die worden geblokkeerd door Conditional Access Policies of andere beveiligingscontroles, 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 beleid moet duidelijk worden gecommuniceerd naar alle betrokken partijen, inclusief IT-personeel, eindgebruikers en beveiligingsteams, en moet worden vastgelegd in het formele beveiligingsbeleid van de organisatie om consistentie en naleving te waarborgen. Bovendien moet het beleid regelmatig worden herzien en bijgewerkt om te voldoen aan nieuwe dreigingsbeelden, compliance-vereisten en technologische ontwikkelingen.

Ten slotte moet een duidelijk gedefinieerd en gedocumenteerd proces worden opgesteld voor het testen, valideren en monitoren van het remote access-beveiligingsraamwerk. Dit proces moet in detail specificeren hoe remote access-configuraties worden getest in een testomgeving voordat zij worden geïmplementeerd in productie, hoe de impact wordt geëvalueerd op gebruikers en applicaties, hoe uitzonderingen worden geïdentificeerd en geconfigureerd, en hoe het raamwerk geleidelijk wordt gerold naar productie. Het proces moet ook voorzien in uitgebreide monitoring en alerting voor wanneer remote access-verbindingen worden geblokkeerd, wanneer verdachte activiteiten worden gedetecteerd, wanneer gebruikers problemen ervaren met toegang, en wanneer beveiligingsincidenten optreden. Monitoring moet real-time inzicht bieden in alle remote access-activiteiten, inclusief wie verbinding maakt, vanaf welke locatie en welk apparaat, naar welke resources wordt toegang verkregen, en of beveiligingscontroles correct functioneren. Alerting moet worden geconfigureerd voor kritieke gebeurtenissen zoals mislukte authenticatiepogingen, toegang vanaf onbekende locaties, toegang tot gevoelige resources buiten normale werkuren, en detectie van verdachte activiteiten die kunnen wijzen op een gecompromitteerd account of een beveiligingsincident.

Implementatie

Gebruik PowerShell-script secure-remote-access.ps1 (functie Invoke-Remediation) – Configureert veilige remote access volgens best practices.

De implementatie van een volledig geconfigureerd remote access-beveiligingsraamwerk begint met het configureren van Azure AD Conditional Access Policies die specifiek zijn gericht op remote access-scenario's. Deze beleidsregels vormen de fundament van het beveiligingsraamwerk en zorgen ervoor dat alle remote access-pogingen worden gecontroleerd en geautoriseerd op basis van gebruikersidentiteit, apparaatstatus, netwerklocatie en risicoprofiel. De eerste stap is 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 remote access-scenario's, waarbij elk beleid een specifieke configuratie vereist die is afgestemd op de unieke kenmerken en risicoprofiel van dat scenario.

Voor baseline-beveiliging wordt een eerste beleid aangemaakt dat meervoudige authenticatie vereist voor alle gebruikers bij remote access-pogingen vanaf externe netwerken. Dit beleid vormt de fundament van het remote access-beveiligingsraamwerk en zorgt ervoor dat alle gebruikers ten minste één extra verificatiefactor moeten gebruiken naast hun wachtwoord wanneer zij verbinding maken vanaf externe locaties. Het beleid wordt geconfigureerd met 'Alle gebruikers' als doelgroep, 'Alle cloud-applicaties' als scope, en 'Locatie' als voorwaarde waarbij 'Alle locaties' is geselecteerd met uitzondering van vertrouwde locaties zoals het hoofdkantoor. De toegangscontrole wordt ingesteld op 'Meervoudige authenticatie vereisen'. 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 VPN-verbindingen wordt Azure VPN Gateway geconfigureerd met Azure AD-gebaseerde authenticatie die gebruik maakt van certificaten en meervoudige authenticatie. De configuratie begint met het aanmaken van een Azure VPN Gateway in het Azure Portal, waarbij een geschikte SKU wordt geselecteerd op basis van de verwachte gebruikersaantallen en bandbreedtevereisten. Voor Point-to-Site (P2S) VPN worden gebruikerscertificaten gegenereerd en toegewezen aan gebruikers via Azure AD, waarbij Conditional Access Policies worden toegepast om meervoudige authenticatie af te dwingen. Voor Site-to-Site (S2S) VPN worden certificaten of gedeelde sleutels geconfigureerd tussen de Azure VPN Gateway en on-premises VPN-apparaten, met sterk aanbevolen gebruik van certificaten in plaats van gedeelde sleutels voor betere beveiliging. VPN-verbindingen worden geïntegreerd met Azure AD Conditional Access Policies om toegang te controleren op basis van gebruikersidentiteit, apparaatstatus en risicoprofiel. Bovendien worden VPN-verbindingen gemonitord via Azure Monitor en Azure Sentinel om verdachte activiteiten vroegtijdig te detecteren en te reageren.

Voor veilig serverbeheer wordt Azure Bastion geconfigureerd om RDP- en SSH-toegang te bieden tot virtuele machines zonder dat publieke IP-adressen nodig zijn op de VM's. Dit verkleint het aanvalsoppervlak aanzienlijk omdat VM's niet langer direct toegankelijk zijn vanaf het publieke internet, zelfs niet als er misconfiguraties zijn in netwerkbeveiligingsgroepen of firewallregels. Azure Bastion wordt geconfigureerd in het Azure Virtual Network waar de VM's zich bevinden, waarbij een toegewijd subnet wordt aangemaakt specifiek voor Azure Bastion. Gebruikers verbinden met Azure Bastion via de Azure Portal of via RDP/SSH-clients die Azure Bastion ondersteunen, waarbij authenticatie plaatsvindt via Azure AD met Conditional Access-beveiliging. Alle sessies worden gelogd en gemonitord via Azure Monitor, waarbij sessiedata wordt vastgelegd voor audit- en compliance-doeleinden. Azure Bastion ondersteunt ook just-in-time toegang via Azure Security Center, waarbij toegang alleen wordt verleend wanneer dit expliciet wordt aangevraagd en automatisch wordt ingetrokken na een vooraf gedefinieerde periode.

Voor webgebaseerde applicaties wordt Azure AD Application Proxy geconfigureerd om on-premises webapplicaties veilig te publiceren zonder dat VPN-verbindingen nodig zijn. Application Proxy biedt een veilige manier om toegang te verlenen tot interne applicaties via Azure AD, waarbij Conditional Access Policies worden toegepast om toegang te controleren op basis van gebruikersidentiteit, apparaatstatus en risicoprofiel. De configuratie begint met het installeren van Application Proxy-connectors op on-premises servers, waarbij meerdere connectors worden aanbevolen voor hoge beschikbaarheid. Vervolgens worden applicaties gepubliceerd via de Azure AD-portal, waarbij externe URL's worden geconfigureerd en interne URL's worden gespecificeerd. Conditional Access Policies worden toegepast om meervoudige authenticatie af te dwingen, apparaatcompliance te vereisen, en toegang te blokkeren vanaf niet-vertrouwde locaties of risicovolle netwerken. Alle toegangspogingen worden gelogd en gemonitord via Azure AD Sign-in logs en Azure Monitor, waarbij verdachte activiteiten worden gedetecteerd en gealert via Azure Sentinel.

Na het configureren van alle remote access-componenten is het essentieel om uitgebreide monitoring en logging te implementeren om te waarborgen dat het beveiligingsraamwerk correct blijft functioneren en dat verdachte activiteiten vroegtijdig worden gedetecteerd. Monitoring omvat het continu volgen van alle remote access-activiteiten via Azure Monitor, Azure Sentinel en Microsoft Defender for Cloud, waarbij real-time inzicht wordt geboden in wie verbinding maakt, vanaf welke locatie en welk apparaat, naar welke resources wordt toegang verkregen, en of beveiligingscontroles correct functioneren. Logging omvat het vastleggen van alle remote access-activiteiten in Azure AD Sign-in logs, Azure Activity Logs, VPN Gateway logs, en Azure Bastion logs, waarbij logs worden bewaard voor minimaal 90 dagen en voor gevoelige systemen tot 7 jaar conform compliance-vereisten. Alerting wordt geconfigureerd voor kritieke gebeurtenissen zoals mislukte authenticatiepogingen, toegang vanaf onbekende locaties, toegang tot gevoelige resources buiten normale werkuren, detectie van verdachte activiteiten, en wijzigingen in remote access-configuraties. Incident response-processen worden opgesteld om snel te kunnen reageren op beveiligingsincidenten, waarbij procedures worden gedefinieerd voor het isoleren van gecompromitteerde accounts, het blokkeren van verdachte toegangspogingen, en het herstellen van normale operaties na een incident.

Compliance en Auditing

Veilige remote access vormt 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 voor remote access, toegang te blokkeren vanaf niet-vertrouwde locaties, en apparaatcompliance te vereisen voor toegang tot gevoelige resources. 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 benadrukt sterk het belang van uitgebreide logging en monitoring van remote access-activiteiten, waarbij alle toegangspogingen moeten worden vastgelegd en geanalyseerd voor audit- en compliance-doeleinden.

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 voor toegang tot systemen en gegevens, inclusief meervoudige authenticatie voor remote access. BIO-controle 09.01 vereist dat organisaties toegangscontroles implementeren die zijn gebaseerd op de principes van minimale bevoegdheden en need-to-know, waarbij remote access alleen wordt verleend wanneer dit noodzakelijk is voor de uitvoering van werkzaamheden. BIO-controle 09.04 vereist dat organisaties remote access beveiligen door gebruik te maken van versleutelde verbindingen, sterke authenticatie, en uitgebreide logging en monitoring. De BIO benadrukt sterk het belang van volledig gedocumenteerde beveiligingsprocessen waarbij alle remote access-configuraties, uitzonderingen en toegangspogingen worden vastgelegd voor audit- en compliance-doeleinden.

De internationale standaard ISO 27001:2022 bevat in meerdere controles specifieke en gedetailleerde vereisten voor remote access en toegangscontrole. Controle A.5.17 vereist dat organisaties toegangsrechten beheren en controleren, inclusief het regelmatig beoordelen en intrekken van toegangsrechten voor remote access. Controle A.5.18 vereist dat organisaties authenticatiemechanismen implementeren die geschikt zijn voor het beoogde gebruik, waarbij meervoudige authenticatie wordt aanbevolen voor remote access. Controle A.8.3 vereist dat organisaties toegangscontroles implementeren die zijn gebaseerd op de principes van minimale bevoegdheden en need-to-know, waarbij remote access alleen wordt verleend wanneer dit noodzakelijk is. Controle A.8.9 vereist dat organisaties beveiligingscontroles implementeren voor remote access, inclusief versleutelde verbindingen, sterke authenticatie, en uitgebreide logging en monitoring. Implementatie van een volledig geconfigureerd remote access-beveiligingsraamwerk 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, waarbij remote access een belangrijk onderdeel vormt. De richtlijn vereist expliciet dat organisaties passende en effectieve maatregelen treffen voor toegangsbeheer, inclusief meervoudige authenticatie voor remote access tot kritieke systemen en gegevens. De richtlijn vereist ook dat organisaties uitgebreide logging en monitoring implementeren van alle toegangspogingen, waarbij logs worden bewaard voor minimaal 12 maanden en voor kritieke systemen langer. Voor Nederlandse organisaties die onder de reikwijdte van NIS2 vallen, is het implementeren van een volledig geconfigureerd remote access-beveiligingsraamwerk 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 secure-remote-access.ps1 (functie Invoke-Monitoring) – Controleert de configuratie en status van remote access-beveiligingsraamwerk.

Effectieve monitoring van het remote access-beveiligingsraamwerk 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 alle remote access-activiteiten, het verifiëren dat Conditional Access Policies correct functioneren, het controleren van VPN-verbindingen en Azure Bastion-sessies, en het waarborgen dat verdachte activiteiten vroegtijdig worden gedetecteerd en aangepakt.

De basis van monitoring wordt gevormd door regelmatige verificatie van de status van alle Conditional Access Policies die gericht zijn op remote access 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. Bovendien moeten organisaties regelmatig verifiëren dat Conditional Access Policies effectief zijn door het analyseren van Sign-in logs om te zien hoeveel remote access-pogingen worden geblokkeerd, hoeveel gebruikers extra verificatie moeten uitvoeren, en welke gebruikers of applicaties het vaakst worden beïnvloed door beleidsregels.

Voor VPN-verbindingen moeten organisaties regelmatig monitoren of VPN Gateway-resources correct functioneren, of er geen prestatieproblemen zijn, en of verbindingen stabiel zijn. Monitoring omvat het controleren van VPN Gateway-status via Azure Monitor, het analyseren van VPN-verbindingslogs om verdachte activiteiten te detecteren, en het waarborgen dat bandbreedtevereisten worden voldaan. Alerting wordt geconfigureerd voor kritieke gebeurtenissen zoals VPN Gateway-failovers, hoge latency, verbindingsfouten, en detectie van verdachte verbindingspatronen. Voor Azure Bastion moeten organisaties monitoren of Bastion-hosts correct functioneren, of er geen prestatieproblemen zijn, en of sessies correct worden beëindigd. Monitoring omvat het controleren van Bastion-status via Azure Monitor, het analyseren van sessielogs om verdachte activiteiten te detecteren, en het waarborgen dat just-in-time toegangsverzoeken correct worden verwerkt.

Voor organisaties die risicogebaseerde Conditional Access Policies hebben geconfigureerd voor remote access, 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 remote access-pogingen 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. Bovendien moeten organisaties regelmatig evalueren of risicodrempels moeten worden aangepast op basis van nieuwe dreigingsbeelden, gebruikersfeedback en analyse van historische data.

Remediatie

Gebruik PowerShell-script secure-remote-access.ps1 (functie Invoke-Remediation) – Herstelt of configureert remote access-beveiligingsraamwerk wanneer componenten ontbreken of onjuist zijn geconfigureerd.

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

Wanneer Conditional Access Policies ontbreken voor remote access-scenario'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 zoals locatie of apparaatstatus, toegangscontroles zoals meervoudige authenticatie of apparaatcompliance, 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.

Voor VPN-verbindingen die ontbreken of onjuist zijn geconfigureerd, kunnen nieuwe VPN Gateway-resources worden aangemaakt via de Azure Portal door te navigeren naar de resourcegroep, Create a resource te selecteren, en VPN Gateway te zoeken. De configuratie wizard leidt gebruikers door het volledige opzetten van de VPN Gateway, waarbij alle benodigde instellingen worden geconfigureerd, inclusief naam, regio, gateway type, SKU, Virtual Network, en publiek IP-adres. Voor Point-to-Site VPN worden gebruikerscertificaten gegenereerd en toegewezen aan gebruikers via Azure AD, waarbij Conditional Access Policies worden toegepast. Voor bestaande VPN Gateways met configuratiefouten kunnen de instellingen worden bijgewerkt via de Azure Portal door te navigeren naar de specifieke VPN Gateway en de instellingen te bewerken. Het is belangrijk om te verifiëren dat alle wijzigingen correct zijn toegepast en dat de VPN Gateway correct blijft functioneren na de wijzigingen.

Voor Azure Bastion die ontbreekt of onjuist is geconfigureerd, kan een nieuwe Bastion-host worden aangemaakt via de Azure Portal door te navigeren naar het Virtual Network, Bastion te selecteren, en Create te klikken. De configuratie wizard leidt gebruikers door het volledige opzetten van de Bastion-host, waarbij alle benodigde instellingen worden geconfigureerd, inclusief naam, regio, Virtual Network, subnet, en publiek IP-adres. Voor bestaande Bastion-hosts met configuratiefouten kunnen de instellingen worden bijgewerkt via de Azure Portal door te navigeren naar de specifieke Bastion-host en de instellingen te bewerken. Het is belangrijk om te verifiëren dat alle wijzigingen correct zijn toegepast en dat de Bastion-host correct blijft functioneren na de wijzigingen, waarbij testverbindingen worden uitgevoerd om te waarborgen dat RDP- en SSH-toegang correct werken.

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 Secure Remote Access Configuration .DESCRIPTION CIS Microsoft 365 Benchmark - Controls 1.1.1, 1.1.2, 1.1.3, 1.2.1, 1.2.2, 4.1.1, 4.1.2 BIO - Controls 08.03, 09.01, 09.04 Controleert en configureert remote access-beveiligingsraamwerk inclusief Conditional Access Policies, VPN-configuraties, Azure Bastion en monitoring. .NOTES Filename: secure-remote-access.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, 4.1.1, 4.1.2 Requires: Azure AD Premium P1/P2, Microsoft.Graph.Identity.SignIns, Az.Network, Az.Compute #> #Requires -Version 5.1 #Requires -Modules Microsoft.Graph.Identity.SignIns, Az.Network, Az.Compute [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 "Secure Remote Access 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 en Azure Resource Manager #> try { $mgContext = Get-MgContext -ErrorAction SilentlyContinue if (-not $mgContext -or $mgContext.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 } $azContext = Get-AzContext -ErrorAction SilentlyContinue if (-not $azContext) { Write-Host "Connecting to Azure Resource Manager..." -ForegroundColor Gray Connect-AzAccount -ErrorAction Stop | Out-Null Write-Host " [OK] Connected to Azure Resource Manager" -ForegroundColor Green } else { Write-Host " [OK] Already connected to Azure Resource Manager" -ForegroundColor Green } } catch { Write-Host " [FAIL] Failed to connect to required services: $_" -ForegroundColor Red throw } } function Invoke-Monitoring { <# .SYNOPSIS Controleert de configuratie en status van remote access-beveiligingsraamwerk #> try { Connect-RequiredServices Write-Host "Checking Secure Remote Access configuration..." -ForegroundColor Gray $result = @{ conditionalAccessPolicies = @{ totalPolicies = 0 enabledPolicies = 0 remoteAccessPolicies = 0 mfaPolicies = 0 compliant = $false } vpnGateways = @{ totalGateways = 0 configuredGateways = 0 compliant = $false } bastionHosts = @{ totalHosts = 0 configuredHosts = 0 compliant = $false } overallCompliant = $false } # Controleer Conditional Access Policies voor remote access Write-Host "`n Checking Conditional Access Policies..." -ForegroundColor Cyan $policies = Get-MgIdentityConditionalAccessPolicy -ErrorAction Stop if ($policies) { $result.conditionalAccessPolicies.totalPolicies = $policies.Count foreach ($policy in $policies) { if ($policy.State -eq "enabled") { $result.conditionalAccessPolicies.enabledPolicies++ } # Controleer op remote access-gerelateerde policies $policyName = $policy.DisplayName.ToLower() $isRemoteAccessPolicy = $false # MFA policies if ($policy.GrantControls -and $policy.GrantControls.BuiltInControls -contains "mfa") { $result.conditionalAccessPolicies.mfaPolicies++ $isRemoteAccessPolicy = $true } # Location-based policies (remote access indicator) if ($policy.Conditions -and $policy.Conditions.Locations) { if ($policy.Conditions.Locations.IncludeLocations -and $policy.Conditions.Locations.IncludeLocations -ne "All") { $isRemoteAccessPolicy = $true } if ($policy.Conditions.Locations.ExcludeLocations) { $isRemoteAccessPolicy = $true } } if ($isRemoteAccessPolicy -and $policy.State -eq "enabled") { $result.conditionalAccessPolicies.remoteAccessPolicies++ Write-Host " [OK] Remote Access Policy: $($policy.DisplayName)" -ForegroundColor Green Write-Host " State: $($policy.State)" -ForegroundColor Cyan } } if ($result.conditionalAccessPolicies.enabledPolicies -gt 0 -and $result.conditionalAccessPolicies.mfaPolicies -gt 0 -and $result.conditionalAccessPolicies.remoteAccessPolicies -gt 0) { $result.conditionalAccessPolicies.compliant = $true Write-Host " [OK] Conditional Access Policies voor remote access zijn geconfigureerd" -ForegroundColor Green } else { Write-Host " [WARNING] Conditional Access Policies voor remote access ontbreken of zijn onvolledig" -ForegroundColor Yellow } } else { Write-Host " [WARNING] Geen Conditional Access Policies gevonden" -ForegroundColor Yellow } # Controleer VPN Gateways Write-Host "`n Checking VPN Gateways..." -ForegroundColor Cyan try { $vpnGateways = Get-AzVirtualNetworkGateway -ErrorAction SilentlyContinue if ($vpnGateways) { $result.vpnGateways.totalGateways = $vpnGateways.Count foreach ($gateway in $vpnGateways) { if ($gateway.VpnType -eq "RouteBased" -or $gateway.VpnType -eq "PolicyBased") { $result.vpnGateways.configuredGateways++ Write-Host " [OK] VPN Gateway: $($gateway.Name)" -ForegroundColor Green Write-Host " Type: $($gateway.VpnType), State: $($gateway.ProvisioningState)" -ForegroundColor Cyan } } if ($result.vpnGateways.configuredGateways -gt 0) { $result.vpnGateways.compliant = $true Write-Host " [OK] VPN Gateways zijn geconfigureerd" -ForegroundColor Green } } else { Write-Host " [INFO] Geen VPN Gateways gevonden (optioneel, afhankelijk van architectuur)" -ForegroundColor Gray $result.vpnGateways.compliant = $true # Optioneel component } } catch { Write-Host " [INFO] Kan VPN Gateways niet controleren: $_" -ForegroundColor Gray $result.vpnGateways.compliant = $true # Optioneel component } # Controleer Azure Bastion Write-Host "`n Checking Azure Bastion hosts..." -ForegroundColor Cyan try { $subscriptions = Get-AzSubscription -ErrorAction SilentlyContinue foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id -ErrorAction SilentlyContinue | Out-Null $bastionHosts = Get-AzBastion -ErrorAction SilentlyContinue if ($bastionHosts) { $result.bastionHosts.totalHosts += $bastionHosts.Count foreach ($bastion in $bastionHosts) { if ($bastion.ProvisioningState -eq "Succeeded") { $result.bastionHosts.configuredHosts++ Write-Host " [OK] Azure Bastion: $($bastion.Name)" -ForegroundColor Green Write-Host " Resource Group: $($bastion.ResourceGroupName)" -ForegroundColor Cyan } } } } if ($result.bastionHosts.configuredHosts -gt 0) { $result.bastionHosts.compliant = $true Write-Host " [OK] Azure Bastion hosts zijn geconfigureerd" -ForegroundColor Green } else { Write-Host " [INFO] Geen Azure Bastion hosts gevonden (optioneel, afhankelijk van architectuur)" -ForegroundColor Gray $result.bastionHosts.compliant = $true # Optioneel component } } catch { Write-Host " [INFO] Kan Azure Bastion hosts niet controleren: $_" -ForegroundColor Gray $result.bastionHosts.compliant = $true # Optioneel component } # Bepaal overall compliance Write-Host "`n Summary:" -ForegroundColor Cyan Write-Host " Conditional Access Policies:" -ForegroundColor White Write-Host " Total: $($result.conditionalAccessPolicies.totalPolicies)" -ForegroundColor Gray Write-Host " Enabled: $($result.conditionalAccessPolicies.enabledPolicies)" -ForegroundColor Gray Write-Host " Remote Access: $($result.conditionalAccessPolicies.remoteAccessPolicies)" -ForegroundColor Gray Write-Host " MFA: $($result.conditionalAccessPolicies.mfaPolicies)" -ForegroundColor Gray Write-Host " VPN Gateways: $($result.vpnGateways.configuredGateways)" -ForegroundColor White Write-Host " Azure Bastion: $($result.bastionHosts.configuredHosts)" -ForegroundColor White if ($result.conditionalAccessPolicies.compliant) { $result.overallCompliant = $true Write-Host "`n [OK] COMPLIANT" -ForegroundColor Green Write-Host " Secure Remote Access-beveiligingsraamwerk is geconfigureerd" -ForegroundColor Cyan exit 0 } else { Write-Host "`n [WARNING] PARTIALLY COMPLIANT" -ForegroundColor Yellow Write-Host " Aanbevolen: Configureer Conditional Access Policies voor remote access" -ForegroundColor Yellow Write-Host " - MFA vereisen voor alle remote access-pogingen" -ForegroundColor Gray Write-Host " - Toegang blokkeren vanaf niet-vertrouwde locaties" -ForegroundColor Gray Write-Host " - Apparaatcompliance vereisen voor gevoelige applicaties" -ForegroundColor Gray exit 1 } } catch { Write-Host "`n [FAIL] ERROR: $_" -ForegroundColor Red Write-Host " Error Details: $($_.Exception.Message)" -ForegroundColor Red Write-Host "`n Note: Secure Remote Access vereist Azure AD Premium P1 of P2 licenties" -ForegroundColor Yellow exit 2 } } function Invoke-Remediation { <# .SYNOPSIS Configureert remote access-beveiligingsraamwerk wanneer componenten ontbreken .DESCRIPTION Deze functie biedt richtlijnen voor het handmatig configureren van remote access- beveiligingscomponenten via de Azure-portalen, omdat geautomatiseerde configuratie complex is en specifieke zakelijke vereisten vereist. #> try { Connect-RequiredServices Write-Host "Secure Remote Access Configuration" -ForegroundColor Gray Write-Host "`n [INFO] Remote Access configuratie vereist handmatige stappen" -ForegroundColor Yellow Write-Host " via de Azure-portalen vanwege complexiteit en" -ForegroundColor Gray Write-Host " specifieke zakelijke vereisten.`n" -ForegroundColor Gray Write-Host " Configuratiestappen:" -ForegroundColor Cyan Write-Host "`n 1. Conditional Access Policies voor Remote Access:" -ForegroundColor Yellow Write-Host " a. Navigeer naar: https://entra.microsoft.com" -ForegroundColor White Write-Host " b. Ga naar: Security > Conditional Access" -ForegroundColor White Write-Host " c. Klik op: Nieuw beleid" -ForegroundColor White Write-Host "`n Aanbevolen configuraties:" -ForegroundColor Cyan Write-Host " - Naam: CA-Remote-001 - MFA voor externe locaties" -ForegroundColor Gray Write-Host " Gebruikers: Alle gebruikers (uitzondering: break-glass accounts)" -ForegroundColor Gray Write-Host " Locaties: Alle locaties (uitzondering: vertrouwde locaties)" -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 2. VPN Gateway configuratie (indien nodig):" -ForegroundColor Yellow Write-Host " a. Navigeer naar: https://portal.azure.com" -ForegroundColor White Write-Host " b. Ga naar: Create a resource > VPN Gateway" -ForegroundColor White Write-Host " c. Configureer:" -ForegroundColor White Write-Host " - Virtual Network selecteren" -ForegroundColor Gray Write-Host " - Publiek IP-adres aanmaken" -ForegroundColor Gray Write-Host " - Geschikte SKU selecteren (VpnGw1AZ, VpnGw2AZ, etc.)" -ForegroundColor Gray Write-Host " - Point-to-Site configureren met Azure AD-authenticatie" -ForegroundColor Gray Write-Host " - Conditional Access Policies toepassen" -ForegroundColor Gray Write-Host "`n 3. Azure Bastion configuratie (aanbevolen voor serverbeheer):" -ForegroundColor Yellow Write-Host " a. Navigeer naar: https://portal.azure.com" -ForegroundColor White Write-Host " b. Ga naar: Virtual Network > Bastion" -ForegroundColor White Write-Host " c. Klik op: Create" -ForegroundColor White Write-Host " d. Configureer:" -ForegroundColor White Write-Host " - Naam en Resource Group" -ForegroundColor Gray Write-Host " - Virtual Network en Subnet selecteren" -ForegroundColor Gray Write-Host " - Publiek IP-adres aanmaken" -ForegroundColor Gray Write-Host " - Integreer met Azure AD voor authenticatie" -ForegroundColor Gray Write-Host "`n 4. Monitoring en Logging:" -ForegroundColor Yellow Write-Host " a. Configureer Azure Monitor-alerts voor:" -ForegroundColor White Write-Host " - Mislukte authenticatiepogingen" -ForegroundColor Gray Write-Host " - Toegang vanaf onbekende locaties" -ForegroundColor Gray Write-Host " - VPN Gateway-status en -prestaties" -ForegroundColor Gray Write-Host " - Azure Bastion-sessies" -ForegroundColor Gray Write-Host " b. Schakel Azure Sentinel in voor SIEM-capaciteiten" -ForegroundColor White Write-Host " c. Configureer log retention voor minimaal 90 dagen" -ForegroundColor White Write-Host "`n [INFO] Na configuratie, voer -Monitoring uit om te verifiëren" -ForegroundColor Cyan Write-Host " [INFO] Test alle configuraties eerst in report-only modus waar mogelijk" -ForegroundColor Yellow Write-Host " [INFO] Monitor Azure AD Sign-in logs en Azure Monitor 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 remote access-configuraties (NIET AANBEVOLEN!) #> try { Write-Host "⚠️ WARNING: Verwijderen van remote access-beveiligingsraamwerk 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 remote access-configuraties 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 remote access-beveiligingsraamwerk 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 " .\secure-remote-access.ps1 -Monitoring" -ForegroundColor White } } catch { throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
Critical: Kritiek - Zonder adequaat geconfigureerd remote access-beveiligingsraamwerk lopen organisaties aanzienlijke beveiligingsrisico's waarbij onbevoegde gebruikers toegang kunnen krijgen tot gevoelige resources, onbeveiligde verbindingen kunnen worden onderschept, en kwaadwillende actoren kunnen profiteren van zwakke authenticatie- en autorisatiemechanismen. Dit leidt tot niet-naleving van compliance-vereisten zoals BIO 08.03, BIO 09.04, ISO 27001 A.8.9 en NIS2 Artikel 21.

Management Samenvatting

Configureer een volledig geconfigureerd remote access-beveiligingsraamwerk met Conditional Access Policies voor MFA en apparaatcompliance, VPN-verbindingen met Azure AD-authenticatie, Azure Bastion voor veilig serverbeheer, en uitgebreide monitoring en logging. Vereist Azure AD Premium P1/P2 en Azure-resources. Implementatietijd: 36 uur.