SharePoint En OneDrive: Gelaagde Policies Voor Extern Delen

💼 Management Samenvatting

Een organisatie kan alleen verantwoord extern samenwerken in Microsoft 365 wanneer het beleid voor delen van SharePoint- en OneDrive-inhoud net zo fijnmazig is als de gevoeligheid van de informatie zelf. Een goed ontworpen set extern-delen-policies combineert tenantinstellingen, siteclassificaties, labelgestuurde beperkingen en procesafspraken zodat ieder bestand, elke site en elk gastaccount automatisch onder de juiste waarborgen valt.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
140u (tech: 60u)
Van toepassing op:
M365
SharePoint
OneDrive
Teams

Zonder gelaagd beleid ontstaat een mozaïek van uitzonderingen: projectteams zetten tijdelijk de meest toegankelijke variant van extern delen aan, gastgebruikers blijven onbeperkt actief en anonieme links circuleren buiten zicht van beheerders. Dit leidt niet alleen tot directe risico's op datalekken, maar ondermijnt ook de audittrail die toezichthouders zoals de Autoriteit Persoonsgegevens of de Algemene Rekenkamer verlangen. Bovendien verplicht de BIO dat organisaties aantoonbaar afwegingskaders hanteren voor gegevensuitwisseling met derden. Door externe sharing-policies centraal te modelleren, krijgen CISO's grip op deze afwegingen: er is één bron van waarheid voor toegestane scenario's, herleidbare goedkeuringen per site en een duidelijk pad voor escalaties wanneer uitzonderingen worden gevraagd.

PowerShell Modules Vereist
Primary API: SharePoint Online PowerShell en Microsoft Graph
Connection: Connect-SPOService en Connect-MgGraph met least privilege-account
Required Modules: Microsoft.Online.SharePoint.PowerShell, Microsoft.Graph

Implementatie

Dit artikel beschrijft hoe Nederlandse publieke organisaties een volledige policy-architectuur voor extern delen opbouwen, beheren en toetsen. Het behandelt de noodzakelijke uitgangspunten, de governance met dataclassificatiemodellen, de technische implementatie in SharePoint Online en de monitoring waarmee bestuurders realtime inzicht krijgen in afwijkingen. Daarnaast bevat het bijbehorende PowerShell-script een praktische manier om configuraties te inventariseren, resultaten te rapporteren en een basisprofiel voor remediatie vast te leggen. Het eindresultaat is een aantoonbaar gecontroleerde samenwerking met ketenpartners, leveranciers en burgers, zonder dat innovatie of dienstverlening stilvalt.

Strategische uitgangspunten voor extern delen

Een gelaagd beleid voor extern delen begint met een strategische keuze: welke typen informatie mogen de digitale grenzen van de organisatie verlaten, onder welke voorwaarden en met welke rolverdeling tussen business en IT. Veel overheidsorganisaties hebben wel een informatieclassificatiemodel in documenten vastgelegd, maar koppelen dit nog niet consequent aan Microsoft 365. Daardoor ontstaan situaties waarin vertrouwelijke vergaderstukken toch via anonieme links worden gedeeld of waarin gastgebruikers structureel meer rechten houden dan de BIO toelaat. Door het classificatiemodel te vertalen naar concrete niveaus voor extern delen – zoals 'niet delen', 'alleen bekende gasten', 'tijdelijk samenwerken met logging' en 'openbaar, maar geregistreerd' – ontstaat een gemeenschappelijke taal tussen beleidsmakers, juristen en beheerders. Deze niveaus worden vervolgens geankerd in tenantinstellingen en site policies, zodat een hogere gevoeligheidsklasse automatisch strengere beperkingen activeert. Zo wordt informatiebeveiliging geen losse controle, maar een inherent onderdeel van samenwerken.

Regelgeving is de tweede pijler van dit strategische kader. De AVG vereist bijvoorbeeld dat persoonsgegevens alleen met derden worden gedeeld wanneer een passende grondslag én verwerkingsovereenkomst aanwezig is. De BIO gaat nog verder en vraagt om gedocumenteerde maatregelen tegen ongeoorloofd delen van staats- of gemeenteniveau gegevens. Dit betekent dat een policy-architectuur niet alleen technische instellingen beschrijft, maar ook de juridische en organisatorische randvoorwaarden voor elke variant van extern delen. In de praktijk wordt daarom per classificatieniveau vastgelegd welke type derde partijen toegang mogen krijgen, welke contractuele documenten moeten worden vastgelegd, welke logging- en bewaartermijnen gelden en welke escalatielijnen worden gebruikt bij incidenten. Deze afspraken worden opgenomen in de CISO-handboeken en in de portalen die lijnmanagers gebruiken om nieuwe samenwerkingen aan te vragen. Op die manier is voor iedereen duidelijk dat het activeren van extern delen geen technische knop is, maar een gecontroleerd proces met getrapte autorisatie.

De derde strategische component is gebruikerservaring. Een beleid dat uitsluitend bestaat uit verboden zal massaal worden omzeild met Shadow IT. Daarom verdient het aanbeveling om per scenario duidelijke, door IT beheerde alternatieven aan te bieden. Denk aan gestandaardiseerde projectteamsites met vooraf ingestelde gastgroepen, het gebruik van Azure AD B2B voor ketenpartners en sjablonen voor tijdelijke dossiers die na afloop automatisch worden afgesloten. Door deze scenario's op te nemen in adoptieprogramma's, trainingen en onboarding van projectleiders, ontstaat draagvlak en voorspelbaarheid. Medewerkers weten dat er een veilige standaard bestaat voor bijvoorbeeld samenwerking met een adviesbureau en hoeven daardoor niet zelf instellingen te zoeken of te gokken. Zo blijft het beleid gebruiksvriendelijk terwijl de organisatie de controle behoudt. Strategische uitgangspunten verbinden dus beleid, regelgeving en gebruikersgemak in één raamwerk dat richting geeft aan elke technische instelling die later wordt geconfigureerd.

Governance, eigenaarschap en risicobeheersing

Effectieve governance begint met helder eigenaarschap. Voor SharePoint en OneDrive extern delen werkt een drieslag het best: de CISO bepaalt de beleidskaders en risicodrempels, de informatie-eigenaar beslist per site of dataset over het al dan niet inschakelen van externe toegang, en het technische beheerteam borgt dat de ingestelde beperkingen overeenkomen met de beleidsafspraken. Dit eigenaarschap wordt vastgelegd in Azure AD groepen en Power Platform-werkstromen zodat aanvragen en goedkeuringen automatisch worden geregistreerd. Wanneer een projectteam bijvoorbeeld extra rechten voor een ketenpartner nodig heeft, wordt de aanvraag gekoppeld aan het betrokken informatiesysteem in het verwerkingsregister. Hierdoor ontstaat een volledig spoor dat auditors kunnen volgen: wie heeft verzocht, wie heeft goedgekeurd, welke argumenten zijn gebruikt en wanneer verloopt de toestemming. Deze transparantie voorkomt dat instellingen na verloop van tijd onduidelijk worden of dat uitzonderingen blijven bestaan nadat een project is beëindigd.

Risicobeheersing vraagt daarnaast om continue evaluatie. Het is niet voldoende om eenmalig policies te definiëren; organisaties moeten een ritme ontwikkelen waarin ze de effectiviteit van externe gedeelde sites toetsen. Dat betekent dat SOC-analisten en functioneel beheerders samen dashboards bijhouden met indicatoren zoals het aantal actieve gastgebruikers, sites met overschreven tenantinstellingen, verlopen gasttoegang en gebruik van anonieme links. Deze indicatoren worden afgezet tegen drempelwaarden die in de risk appetite van het bestuur zijn vastgelegd. Zodra een drempel wordt overschreden – bijvoorbeeld meer dan 10 procent van de sites heeft 'Anyone'-links toegestaan – wordt automatisch een verbeteraanpak opgestart. Door deze governancecyclus expliciet te koppelen aan bestaande overlegstructuren zoals de security board of het CIO-beraad blijft extern delen een terugkerend agendapunt en worden prioriteiten afgestemd op de organisatiebrede risicobeoordeling.

Tot slot moet governance aandacht besteden aan ketenrisico's. Overheidsorganisaties werken vaak samen met leveranciers die zelf weer subcontractors inschakelen. Zonder aanvullende eisen kan een zorgvuldig ingesteld extern delebeleid alsnog leiden tot ongecontroleerde verspreiding wanneer een gast gebruiker content downloadt en doorstuurt. Daarom horen in de governance afspraken ook bepalingen over logging, watermarking en juridische clausules die ketenpartners verplichten om dezelfde standaard toe te passen. Technisch kan dit worden ondersteund met Microsoft Purview Data Loss Prevention, Sensitivity Labels en het blokkeren van downloadmogelijkheden voor gasten tenzij een vertrouwelijkheidsetiket dit toelaat. Door governance-afspraken, contractuele eisen en technische drempels te combineren ontstaat een sluitende ketenbescherming die verder gaat dan de SharePoint-tenantgrenzen.

Implementatiearchitectuur en technische inrichting

De implementatie van extern delen policies volgt een vaste volgorde: eerst tenantbrede beperkingen, daarna site-specifieke afwijkingen en tot slot automatische detectie van uitzonderingen. Op tenantniveau wordt bepaald welke SharingCapability is toegestaan. Voor de meeste overheidsorganisaties betekent dit 'ExistingExternalUserSharingOnly', omdat daarmee alleen vooraf geregistreerde gastgebruikers toegang krijgen. Vervolgens worden aanvullende eigenschappen ingesteld, zoals het afdwingen van 'Direct' links als standaard, het verplicht laten verlopen van anonieme links binnen maximaal tien dagen en het uitschakelen van herdeling door gasten. Deze instellingen zorgen ervoor dat zelfs wanneer een site-eigenaar hogere rechten toekent, het platform automatisch terugvalt op het strengste niveau. Het script dat bij dit artikel hoort, leest deze configuraties uit en vergelijkt ze met het gewenste profiel zodat afwijkingen direct zichtbaar worden.

Daarna volgt de inrichting op siteniveau. Beheerders creëren site policies gekoppeld aan classificaties of sensitivity labels. Wanneer een teamsite als 'Basis' wordt aangemerkt, mag de site collection admin tijdelijk externe toegang toestaan, maar vereist het beleid wel een automatische reviewdatum en logging van nieuwe gasten. Voor 'Hoog' geclassificeerde sites blokkeert het beleid extern delen volledig en wordt iedere poging tot wijziging gelogd via een Microsoft Entra ID access review. Bij 'Publiek' geclassificeerde sites kunnen anonieme links worden toegestaan, maar alleen wanneer Purview DLP bevestigt dat er geen persoons- of staatsgevoelige informatie aanwezig is. Deze automatisering vraagt om nauwe integratie tussen SharePoint, Purview en, waar nodig, Power Automate voor de goedkeuringsworkflow. Door deze workflow als sjabloon te publiceren, kunnen informatiemanagers zonder technische kennis toch aanvragen verwerken terwijl de configuratie consistent blijft.

Tot slot wordt de architectuur aangevuld met detectie- en interventiemechanismen. Microsoft Defender for Cloud Apps (voorheen MCAS) en Microsoft 365 auditing leveren signalen over verdachte externe downloads, massale gastuitnodigingen of het aanmaken van anonieme links buiten kantooruren. Deze signalen worden gekoppeld aan het incident response-proces, zodat SOC-analisten binnen enkele minuten kunnen vaststellen of de gebeurtenis conform beleid is. Indien nodig grijpt het beheerteam geautomatiseerd in door de site tijdelijk in 'ReadOnly'-modus te plaatsen of door via het script de policyprofielen opnieuw te pushen. Door implementatie, detectie en respons te integreren ontstaat een architectuur waarin extern delen geen statische instelling is, maar een dynamische controlelus die continu wordt gevoed door actuele dreigingsinformatie.

Monitoring, rapportage en continue verbetering

Gebruik PowerShell-script external-sharing-policies.ps1 (functie Invoke-Monitoring) – Inventariseert tenant- en site-instellingen, vergelijkt deze met het gewenste profiel en kan optioneel een JSON-rapport exporteren voor auditors..

Monitoring draait om aantoonbaarheid. De organisatie definieert een klein aantal kernindicatoren, zoals het percentage sites dat geheel extern delen uitschakelt, het aantal actieve gasten dat langer dan negentig dagen geen aanmelding heeft gehad en het aantal openstaande uitzonderingsverzoeken. Het PowerShell-script leest de actuele configuraties uit, verrijkt deze met metadata uit het policyprofiel en produceert een rapport waarin elke indicator direct aan een beleidsdrempel is gekoppeld. Daardoor kan een security officer zonder aanvullende tooling zien welke onderdelen aandacht vereisen. Wanneer een indicator buiten de bandbreedte valt, genereert het script bovendien aanbevelingen, bijvoorbeeld het verlagen van het standaard linktype naar 'Specifieke personen' of het inkorten van de geldigheidsduur voor anonieme links. Deze aanpak versnelt het overleg met bestuurders omdat cijfers, context en verbeteractie in één bron beschikbaar zijn.

Continue verbetering wordt bereikt door monitoringresultaten te koppelen aan veranderportfolios en opleidingsprogramma's. Elke kwartaalreview sluit af met twee acties: technische verbeteringen (zoals het aanpassen van Set-SPOTenant-parameters) en organisatorische interventies (bijvoorbeeld extra training voor sitebeheerders die structureel van het beleid afwijken). Het script ondersteunt deze cyclus doordat het niet alleen deviations signaleert, maar ook een configuratiebestand bijhoudt waarin de gewenste instellingen staan beschreven. Tijdens een remediatie-run kan het script deze instellingen vergelijken met de werkelijkheid en – indien het bestuur toestemming geeft – automatisch afdwingen. Door test- en productieconfiguraties te scheiden via verschillende profielbestanden ontstaat bovendien een veilige manier om wijzigingen eerst in een sandboxes te valideren. Monitoring, rapportage en remediatie vormen zo een gesloten loop die het beleid levend houdt.

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 en borgt SharePoint/OneDrive extern-delenbeleid. .DESCRIPTION Leest het gewenste policyprofiel, vergelijkt tenant- en siteinstellingen en kan optioneel een basisprofiel schrijven of afdwingen. Het script is bedoeld voor gebruik binnen de Nederlandse Baseline voor Veilige Cloud en ondersteunt lokale debug-sessies via -WhatIf en een uitneembaar configuratiebestand. .NOTES Bestandsnaam : external-sharing-policies.ps1 Auteur : Nederlandse Baseline voor Veilige Cloud Versie : 1.0 Modules : Microsoft.Online.SharePoint.PowerShell #> #Requires -Version 5.1 #Requires -Modules Microsoft.Online.SharePoint.PowerShell [CmdletBinding(DefaultParameterSetName = 'Help')] param( [Parameter(ParameterSetName = 'Monitoring')] [switch]$Monitoring, [Parameter(ParameterSetName = 'Remediation')] [switch]$Remediation, [Parameter(ParameterSetName = 'Help')] [switch]$Help, [Parameter()] [switch]$WhatIf, [Parameter()] [switch]$Force, [Parameter()] [string]$TenantAdminUrl, [Parameter()] [string]$PolicyProfilePath = (Join-Path -Path $PSScriptRoot -ChildPath 'external-sharing-policies.config.json'), [Parameter(ParameterSetName = 'Monitoring')] [Parameter(ParameterSetName = 'Remediation')] [string]$ReportPath ) $ErrorActionPreference = 'Stop' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "External Sharing Policies (SharePoint/OneDrive)" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Resolve-TenantAdminUrl { param([string]$Override) if ($Override) { return $Override } if ($env:M365TenantAdminUrl) { return $env:M365TenantAdminUrl } if ($env:M365TenantName) { return "https://$($env:M365TenantName)-admin.sharepoint.com" } throw "Kon de Tenant Admin URL niet bepalen. Geef -TenantAdminUrl op of stel de omgevingsvariabele M365TenantAdminUrl in." } function Get-DefaultPolicyProfile { return [ordered]@{ version = '1.0' lastUpdated = (Get-Date).ToString('yyyy-MM-dd') owner = 'CISO / M365-beheer' tenantSettings = [ordered]@{ SharingCapability = 'ExistingExternalUserSharingOnly' DefaultSharingLinkType = 'Direct' DefaultLinkPermission = 'View' PreventExternalUsersFromResharing = $true RequireAnonymousLinksExpireInDays = 10 SharingAllowedDomainList = @() SharingBlockedDomainList = @('mailinator.com','example.org') ShowPeoplePickerSuggestionsForGuestUsers = $false } sitePolicies = @( [ordered]@{ name = 'Hoog - geen extern delen' description = 'Sites met classificatie HOOG blokkeren extern delen volledig.' criteria = @{ classification = 'HOOG' } settings = @{ SharingCapability = 'Disabled' DefaultSharingLinkType = 'Direct' DefaultLinkPermission = 'View' } }, [ordered]@{ name = 'Basis - alleen bekende gasten' description = 'TEAM/GROUP sites met classificatie BASIS delen uitsluitend met geregistreerde gasten.' criteria = @{ classification = 'BASIS' template = 'GROUP#0' } settings = @{ SharingCapability = 'ExistingExternalUserSharingOnly' DefaultSharingLinkType = 'Direct' DefaultLinkPermission = 'View' DefaultLinkToExistingAccess = $true } } ) } } function Get-PolicyProfile { param([string]$Path) if (-not (Test-Path -Path $Path)) { $profile = Get-DefaultPolicyProfile $profile | ConvertTo-Json -Depth 6 | Out-File -FilePath $Path -Encoding UTF8 Write-Host "[INFO] Nieuw policyprofiel aangemaakt op $Path. Pas dit bestand aan en voer het script opnieuw uit." -ForegroundColor Yellow return $profile } try { $raw = Get-Content -Path $Path -Raw return $raw | ConvertFrom-Json -AsHashtable } catch { throw "Kon het policyprofiel niet lezen: $($_.Exception.Message)" } } function Connect-SharePointAdmin { param([string]$AdminUrl) try { Get-SPOTenant -ErrorAction Stop | Out-Null } catch { Write-Host "[INFO] Verbinding maken met SharePoint Online Admin..." -ForegroundColor Cyan Connect-SPOService -Url $AdminUrl -ErrorAction Stop Write-Host "[OK] Verbonden met $AdminUrl" -ForegroundColor Green } } function Compare-TenantSettings { param( [hashtable]$Desired, [Microsoft.Online.SharePoint.PowerShell.SpoTenant]$Actual ) $results = foreach ($key in $Desired.Keys) { $target = $Desired[$key] $current = $Actual.$key [pscustomobject]@{ Setting = $key Desired = ($target -is [array]) ? ($target -join ',') : $target Actual = ($current -is [array]) ? ($current -join ',') : $current IsCompliant = [bool]($current -eq $target -or ( ($current -is [array]) -and ($target -is [array]) -and ($current | Sort-Object) -join ',' -eq ($target | Sort-Object) -join ',' )) } } return $results } function Get-SiteDeviation { param( [array]$SitePolicies, [array]$AllSites ) $deviations = @() foreach ($policy in $SitePolicies) { $criteria = $policy.criteria $settings = $policy.settings $matches = $AllSites | Where-Object { $classificationMatch = if ($criteria.classification) { $_.Classification -eq $criteria.classification } else { $true } $templateMatch = if ($criteria.template) { $_.Template -eq $criteria.template } else { $true } $urlMatch = if ($criteria.urlPattern) { $_.Url -like $criteria.urlPattern } else { $true } $classificationMatch -and $templateMatch -and $urlMatch } foreach ($site in $matches) { foreach ($settingKey in $settings.Keys) { $currentValue = $site.$settingKey if ($null -eq $currentValue) { continue } $desiredValue = $settings[$settingKey] if ($currentValue -ne $desiredValue) { $deviations += [pscustomobject]@{ Policy = $policy.name SiteUrl = $site.Url Setting = $settingKey Desired = $desiredValue Actual = $currentValue Classification= $site.Classification } } } } } return $deviations } function Invoke-Monitoring { param([string]$AdminUrl, [string]$ProfilePath, [string]$ExportPath) $profile = Get-PolicyProfile -Path $ProfilePath Connect-SharePointAdmin -AdminUrl $AdminUrl $tenant = Get-SPOTenant $tenantResults = Compare-TenantSettings -Desired $profile.tenantSettings -Actual $tenant Write-Host "Tenantinstellingen:" -ForegroundColor Cyan foreach ($row in $tenantResults) { $color = if ($row.IsCompliant) { 'Green' } else { 'Yellow' } Write-Host (" {0,-35} Actueel: {1,-20} Gewenst: {2}" -f $row.Setting, $row.Actual, $row.Desired) -ForegroundColor $color } $sites = Get-SPOSite -Limit All -Detailed $siteDeviations = Get-SiteDeviation -SitePolicies $profile.sitePolicies -AllSites $sites if ($siteDeviations.Count -eq 0) { Write-Host "`n[OK] Geen siteafwijkingen gevonden op basis van het profiel." -ForegroundColor Green } else { Write-Host "`n[WARN] Siteafwijkingen gevonden:" -ForegroundColor Yellow $siteDeviations | Select-Object SiteUrl, Classification, Policy, Setting, Actual, Desired | Format-Table -AutoSize } $report = [pscustomobject]@{ generatedOn = Get-Date tenantSettings = $tenantResults siteFindings = $siteDeviations } if ($ExportPath) { $directory = Split-Path -Path $ExportPath -Parent if ($directory -and -not (Test-Path -Path $directory)) { New-Item -ItemType Directory -Path $directory -Force | Out-Null } $report | ConvertTo-Json -Depth 6 | Out-File -FilePath $ExportPath -Encoding UTF8 Write-Host "`n[OK] Rapport geëxporteerd naar $ExportPath" -ForegroundColor Green } if ($tenantResults.IsCompliant -contains $false -or $siteDeviations.Count -gt 0) { exit 1 } else { exit 0 } } function Invoke-Remediation { param( [string]$AdminUrl, [string]$ProfilePath, [switch]$ApplyChanges ) $profile = Get-PolicyProfile -Path $ProfilePath Connect-SharePointAdmin -AdminUrl $AdminUrl Write-Host "[INFO] Tenantinstellingen voorbereiden..." -ForegroundColor Cyan foreach ($key in $profile.tenantSettings.Keys) { $value = $profile.tenantSettings[$key] Write-Host (" {0,-35} => {1}" -f $key, (($value -is [array]) ? ($value -join ',') : $value)) -ForegroundColor Gray } if ($ApplyChanges -and -not $WhatIf) { $tenantParams = @{} foreach ($key in $profile.tenantSettings.Keys) { $value = $profile.tenantSettings[$key] if ($value -is [System.Collections.IEnumerable] -and -not ($value -is [string]) -and -not ($value -is [bool]) -and -not ($value -is [hashtable])) { $tenantParams[$key] = @($value | ForEach-Object { $_ }) } else { $tenantParams[$key] = $value } } Set-SPOTenant @tenantParams -WarningAction SilentlyContinue Write-Host "[OK] Tenantinstellingen toegepast." -ForegroundColor Green } else { Write-Host "[DRY-RUN] Tenantinstellingen niet toegepast. Gebruik -Force voor daadwerkelijke wijzigingen." -ForegroundColor Yellow } Write-Host "`n[INFO] Site policies evalueren..." -ForegroundColor Cyan $sites = Get-SPOSite -Limit All -Detailed foreach ($policy in $profile.sitePolicies) { Write-Host " Policy: $($policy.name)" -ForegroundColor Cyan $matches = $sites | Where-Object { ($null -eq $policy.criteria.classification -or $_.Classification -eq $policy.criteria.classification) -and ($null -eq $policy.criteria.template -or $_.Template -eq $policy.criteria.template) -and ($null -eq $policy.criteria.urlPattern -or $_.Url -like $policy.criteria.urlPattern) } if ($matches.Count -eq 0) { Write-Host " Geen sites gevonden voor deze policy." -ForegroundColor DarkGray continue } foreach ($site in $matches) { Write-Host " Site: $($site.Url)" -ForegroundColor Gray if ($ApplyChanges -and -not $WhatIf) { $params = @{ Identity = $site.Url } foreach ($settingKey in $policy.settings.Keys) { $params[$settingKey] = $policy.settings[$settingKey] } Set-SPOSite @params } else { Write-Host " [DRY-RUN] Instellingen zouden worden toegepast: $($policy.settings | ConvertTo-Json -Compress)" -ForegroundColor Yellow } } } if ($ApplyChanges -and -not $WhatIf) { Write-Host "`n[OK] Remediatie voltooid." -ForegroundColor Green } else { Write-Host "`n[DRY-RUN] Geen wijzigingen toegepast. Gebruik -Force om instellingen af te dwingen." -ForegroundColor Yellow } } try { $adminUrl = $null if ($PSCmdlet.ParameterSetName -in @('Monitoring','Remediation')) { $adminUrl = Resolve-TenantAdminUrl -Override $TenantAdminUrl } switch ($PSCmdlet.ParameterSetName) { 'Monitoring' { Invoke-Monitoring -AdminUrl $adminUrl -ProfilePath $PolicyProfilePath -ExportPath $ReportPath } 'Remediation' { Invoke-Remediation -AdminUrl $adminUrl -ProfilePath $PolicyProfilePath -ApplyChanges:$Force } default { Write-Host "Gebruik optioneel:" -ForegroundColor Yellow Write-Host " -Monitoring [-ReportPath <pad>] [-PolicyProfilePath <pad>] [-TenantAdminUrl <url>]" -ForegroundColor Gray Write-Host " -Remediation [-Force] [-PolicyProfilePath <pad>] [-TenantAdminUrl <url>]" -ForegroundColor Gray Write-Host " -WhatIf combineerbaar met -Remediation voor lokale debug runs" -ForegroundColor Gray } } } catch { Write-Host "`n[FAIL] $($_.Exception.Message)" -ForegroundColor Red exit 2 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder gelaagd beleid blijven anonieme links, verlopen gastaccounts en ongecontroleerde sites buiten zicht. Een enkel incident kan leiden tot langdurige verstoring van dienstverlening en forse sancties vanwege onvoldoende aantoonbare maatregelen.

Management Samenvatting

Leg een organisatiebreed extern-delenbeleid vast, koppel het aan classificaties en automatiseer monitoring via het PowerShell-script zodat elke samenwerking met derden aantoonbaar onder controle blijft.