Azure AD App Registrations: Beheer En Beveiliging

💼 Management Samenvatting

Azure AD App Registrations vormen de basis voor moderne authenticatie en autorisatie in cloudomgevingen, maar vereisen zorgvuldig beheer om beveiligingsrisico's te voorkomen. Effectief beheer van app-registraties is essentieel voor het behouden van controle over welke applicaties toegang hebben tot organisatiegegevens en welke machtigingen deze applicaties hebben.

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

Ongecontroleerde app-registraties vormen een significant beveiligingsrisico voor organisaties. Wanneer app-registraties niet adequaat worden beheerd, kunnen kwaadwillende applicaties toegang krijgen tot gevoelige organisatiegegevens zoals e-mails, bestanden en gebruikersprofielen. Verweesde applicaties met actieve credentials blijven bestaan nadat projecten zijn beëindigd of medewerkers de organisatie hebben verlaten, wat resulteert in onbeheerde toegangspunten die kunnen worden misbruikt. Excessive permissions worden vaak toegekend aan applicaties zonder adequate beveiligingsbeoordeling, waardoor apps meer toegang krijgen dan strikt noodzakelijk is voor hun functionaliteit. Shadow IT ontstaat wanneer ontwikkelteams zonder governance eigen apps registreren, wat leidt tot een gebrek aan zichtbaarheid en controle over welke applicaties toegang hebben tot organisatiegegevens. Het ontbreken van centrale governance maakt het onmogelijk om te garanderen dat alle app-registraties voldoen aan organisatorische beveiligingsstandaarden en compliance-vereisten. Privilege escalation wordt mogelijk wanneer applicaties met hogere machtigingen worden geregistreerd dan de gebruiker die ze heeft aangemaakt, waardoor indirecte toegang tot verboden resources ontstaat. Credential theft vormt een risico wanneer applicatiegeheimen en certificaten niet veilig worden opgeslagen of regelmatig worden geroteerd. Compliance-problemen ontstaan wanneer organisaties niet kunnen aantonen welke applicaties toegang hebben tot persoonsgegevens, wat kan leiden tot schending van de AVG en andere privacyregelgeving. Effectief beheer van app-registraties lost deze problemen op door centrale governance af te dwingen waarbij elke app-registratie wordt beoordeeld en goedgekeurd, beveiligingsbeoordeling plaatsvindt voordat apps worden geregistreerd, app lifecycle management wordt afgedwongen met gedocumenteerde eigenaren en vervaldatums, excessive machtigingen worden voorkomen door beveiligingsbeoordeling, en een centraal applicatie-inventaris wordt onderhouden van alle geregistreerde apps. Deze governance is essentieel voor compliance met ISO 27001 controle A.14.2.5 voor secure system engineering principles, CIS Azure Foundations Benchmark controle 1.1.14, en BIO norm 09.01 voor toegangscontrole.

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

Implementatie

Dit artikel beschrijft een complete aanpak voor het beheren en beveiligen van Azure AD App Registrations binnen Nederlandse overheidsorganisaties. We behandelen de governance en kaders voor app-registratiebeheer, het proces voor het aanvragen en goedkeuren van nieuwe app-registraties, de beveiligingsbeoordeling van gevraagde machtigingen, het lifecycle management inclusief regelmatige reviews en opruiming van verweesde applicaties, en de monitoring en auditing van app-registraties. Daarnaast laten we zien hoe u met geautomatiseerde controles kunt borgen dat app-registraties voldoen aan beveiligingsstandaarden, dat credentials veilig worden beheerd, en dat alle apps worden gedocumenteerd in een centraal register. De implementatie omvat het opzetten van een app-registratieaanvraagproces, het configureren van tenant-instellingen voor app-registratiebeperkingen, het implementeren van regelmatige security reviews, en het automatiseren van monitoring en reporting. Deze maatregel is must-have voor alle enterprise Azure AD-tenants en voldoet aan CIS Azure Foundations controle 1.1.14 Level 1, BIO norm 09.01, en ISO 27001 controle A.14.2.5.

Governance en Kaders voor App Registratiebeheer

Een effectief programma voor app-registratiebeheer begint bij een helder governancekader dat expliciet vastlegt wie verantwoordelijk is voor het beheren van app-registraties, welke processen moeten worden gevolgd, en welke beveiligingsstandaarden moeten worden gehanteerd. Voor Nederlandse overheidsorganisaties betekent dit dat de verantwoordelijkheid voor app-registratiebeheer niet alleen bij IT ligt, maar expliciet wordt belegd bij IT Security, compliance officers, en het hoger management. Het bestuur of de directie moet formeel vastleggen welke beveiligingsstandaarden gelden voor app-registraties, welke machtigingen als risicovol worden beschouwd, en welke goedkeuringsprocessen moeten worden gevolgd. Deze bestuurlijke keuzes vormen de basis voor het aanvraagproces, de beveiligingsbeoordeling, en de benodigde investeringen in zowel techniek als organisatie. Zonder expliciet eigenaarschap en bestuurlijke dekking verzanden app-registraties vaak in een ad-hoc activiteit zonder structurele governance. De Baseline Informatiebeveiliging Overheid (BIO) schrijft voor dat organisaties passende maatregelen moeten treffen voor toegangscontrole en authenticatie, wat direct van toepassing is op app-registraties die toegang hebben tot organisatiegegevens. BIO norm 09.01 vereist dat organisaties kunnen aantonen dat toegang tot systemen en gegevens wordt gecontroleerd en dat alleen geautoriseerde applicaties toegang hebben. Dit betekent in de praktijk dat er een gestructureerd proces moet zijn voor het beoordelen en goedkeuren van app-registraties, dat alle app-registraties worden gedocumenteerd, en dat regelmatig wordt gecontroleerd of apps nog actief worden gebruikt en of de toegekende machtigingen nog steeds passend zijn. Voor organisaties die moeten voldoen aan de AVG is het essentieel om te kunnen aantonen welke applicaties toegang hebben tot persoonsgegevens en hoe deze toegang wordt beheerd. Een volwassen governance-structuur omvat een stuurgroep of security committee dat het app-registratiebeleid goedkeurt, prioriteiten bepaalt voor beveiligingsbeoordelingen, en de resultaten van security reviews beoordeelt. Daaronder functioneren een app-registratiecoördinator of CISO, security officers die beveiligingsbeoordelingen uitvoeren, compliance officers die controleren op naleving van regelgeving, en IT-beheerders die de technische implementatie uitvoeren. Voor elke app-registratieaanvraag wordt een security review uitgevoerd waarbij wordt geëvalueerd of de gevraagde machtigingen passend zijn, of er al een bestaande app dezelfde functionaliteit biedt, of de app voldoet aan organisatorische beveiligingsstandaarden, en of het app lifecycle management is gedefinieerd met eigenaar en onderhoudsplan. Door deze governance vooraf te organiseren, voorkomt u onduidelijkheid tijdens het aanvraagproces en creëert u draagvlak voor de vaak tijdsintensieve beveiligingsbeoordelingen. Een cruciaal onderdeel van governance is de documentatie van beleid en kaders rond app-registratiebeheer. Organisaties leggen in een beleidsdocument vast welke machtigingen als risicovol worden beschouwd, hoe security reviews worden uitgevoerd, welke goedkeuringsprocessen moeten worden gevolgd, en hoe wordt omgegaan met verweesde applicaties. Daarnaast moet een centraal register worden bijgehouden van alle app-registraties, inclusief informatie over eigenaar, machtigingen, doel, onderhoudsplan, en laatste review-datum. Dit register vormt een belangrijk auditbewijs richting toezichthouders en accountants en maakt het mogelijk om trends te herkennen in terugkerende beveiligingsproblemen of structurele knelpunten in het app-registratiebeheer.

Aanvraag- en Goedkeuringsproces voor App Registraties

Een gestructureerd aanvraag- en goedkeuringsproces is essentieel voor het waarborgen dat alle app-registraties worden beoordeeld voordat ze worden goedgekeurd en geregistreerd. Het proces begint met een aanvraagformulier waarin ontwikkelaars of business owners kunnen aangeven welke applicatie zij willen registreren, wat het doel is, welke machtigingen nodig zijn, welke gegevens de app moet kunnen benaderen, en wie verantwoordelijk zal zijn voor het onderhoud van de app. Het aanvraagformulier moet voldoende detail bevatten om een grondige beveiligingsbeoordeling mogelijk te maken, maar moet ook gebruiksvriendelijk zijn om ontwikkelaars niet onnodig te belasten. Voor Nederlandse overheidsorganisaties is het belangrijk dat het aanvraagformulier ook informatie verzamelt over compliance-aspecten, zoals of de app toegang heeft tot persoonsgegevens en hoe wordt voldaan aan AVG-vereisten. Na het indienen van een aanvraag wordt deze toegewezen aan een security officer die een beveiligingsbeoordeling uitvoert. Tijdens deze beoordeling wordt geëvalueerd of de gevraagde machtigingen passend zijn voor het doel van de app, of er al een bestaande app is die dezelfde functionaliteit biedt, of de app voldoet aan organisatorische beveiligingsstandaarden, en of er een duidelijk plan is voor het beheer van de app lifecycle inclusief eigenaar en onderhoudsplan. De beveiligingsbeoordeling moet specifiek aandacht besteden aan tenant-level permissions, die vaak excessive toegang geven tot alle gegevens in de tenant, en aan permissions die toegang geven tot gevoelige gegevens zoals e-mails, bestanden, of gebruikersprofielen. Voor machtigingen die als risicovol worden beschouwd, moet aanvullende rechtvaardiging worden gevraagd en moet worden overwogen of alternatieve benaderingen mogelijk zijn die minder machtigingen vereisen. Voor apps die toegang hebben tot persoonsgegevens moet een Data Protection Impact Assessment (DPIA) worden uitgevoerd om te evalueren of de app voldoet aan AVG-vereisten. Dit omvat het beoordelen van welke persoonsgegevens worden verwerkt, hoe deze gegevens worden beveiligd, of gegevens worden gedeeld met derden, en hoe wordt voldaan aan de rechten van betrokkenen zoals het recht op inzage en verwijdering. De DPIA moet worden gedocumenteerd en moet worden bewaard voor audit-doeleinden. Voor apps die als hoog risico worden beoordeeld, kan aanvullende goedkeuring vereist zijn van een Data Protection Officer of het management. Na de beveiligingsbeoordeling wordt een beslissing genomen over de aanvraag. Goedgekeurde apps worden geregistreerd door een beheerder met de juiste rechten, waarbij least privilege machtigingen worden toegekend, credentials veilig worden opgeslagen in Azure Key Vault, en de app wordt toegevoegd aan het centrale applicatie-inventaris. Afgewezen aanvragen worden teruggekoppeld naar de aanvrager met een duidelijke uitleg van de redenen voor afwijzing en suggesties voor alternatieve benaderingen indien mogelijk. Het gehele proces moet worden gedocumenteerd voor audit-doeleinden, inclusief wie de beoordeling heeft uitgevoerd, welke beslissingen zijn genomen, en waarom bepaalde machtigingen zijn goedgekeurd of afgewezen.

Gebruik PowerShell-script azure-ad-app-registrations.ps1 (functie Invoke-AppRegistrationRequest) – Ondersteunt het aanvraagproces door app-registratieaanvragen te valideren en te documenteren.

Lifecycle Management en Regelmatige Reviews

Effectief lifecycle management van app-registraties is essentieel om te voorkomen dat verweesde applicaties met actieve credentials blijven bestaan en om te garanderen dat apps regelmatig worden beoordeeld op hun voortdurende noodzaak en beveiligingsstatus. Lifecycle management begint bij de registratie van een app, waarbij een eigenaar wordt aangewezen die verantwoordelijk is voor het onderhoud en beheer van de app, en waarbij een onderhoudsplan wordt gedefinieerd dat beschrijft hoe vaak de app moet worden gereviewed, wanneer credentials moeten worden geroteerd, en wanneer de app mogelijk moet worden verwijderd. Deze informatie moet worden vastgelegd in het centrale applicatie-inventaris en moet regelmatig worden bijgewerkt. Regelmatige security reviews moeten worden uitgevoerd voor alle app-registraties, waarbij wordt geëvalueerd of de app nog actief wordt gebruikt, of de toegekende machtigingen nog steeds passend zijn, of de eigenaar nog steeds verantwoordelijk is, en of de app voldoet aan actuele beveiligingsstandaarden. Voor apps die als hoog risico worden beschouwd, zoals apps met tenant-level permissions of apps die toegang hebben tot gevoelige gegevens, moeten reviews vaker plaatsvinden, bijvoorbeeld elk kwartaal. Voor apps met lagere risico's kunnen reviews jaarlijks plaatsvinden. Tijdens een review wordt gecontroleerd of de app nog wordt gebruikt door te analyseren of er recente API-aanroepen zijn geweest, of de eigenaar nog actief is in de organisatie, en of er nog business justification is voor de app. Voor apps die niet meer worden gebruikt of waarvan de eigenaar de organisatie heeft verlaten, moet een proces worden gevolgd voor het opruimen van de app. Dit omvat het identificeren van alle credentials die bij de app horen, het verwijderen of uitschakelen van deze credentials, het evalueren van de impact van het verwijderen van de app op afhankelijke systemen, en het veilig verwijderen van de app-registratie. Voordat een app wordt verwijderd, moet worden gecontroleerd of er geen andere systemen of processen afhankelijk zijn van de app, en moet eventuele noodzakelijke migratie worden uitgevoerd. Het verwijderen van apps moet worden gedocumenteerd voor audit-doeleinden, inclusief de reden voor verwijdering en wie de verwijdering heeft geautoriseerd. Credential management is een kritiek onderdeel van lifecycle management. Applicatiegeheimen en certificaten moeten veilig worden opgeslagen in Azure Key Vault of een vergelijkbaar systeem, en moeten regelmatig worden geroteerd volgens een gedefinieerd schema. Voor geheimen die als hoog risico worden beschouwd, zoals geheimen met tenant-level permissions, moet rotatie vaker plaatsvinden, bijvoorbeeld elke 90 dagen. Voor geheimen met lagere risico's kan rotatie jaarlijks plaatsvinden. Het rotatieproces moet worden geautomatiseerd waar mogelijk om te voorkomen dat geheimen verouderen en om te garanderen dat rotatie consistent wordt uitgevoerd. Wanneer geheimen worden geroteerd, moeten oude geheimen onmiddellijk worden verwijderd of uitgeschakeld om te voorkomen dat ze kunnen worden misbruikt. Voor apps die worden gebruikt in productieomgevingen moet een disaster recovery plan worden gedefinieerd dat beschrijft hoe de app kan worden hersteld in geval van een incident, welke back-ups beschikbaar zijn, en wie verantwoordelijk is voor het uitvoeren van herstelprocedures. Dit plan moet regelmatig worden getest om te garanderen dat herstelprocedures effectief zijn en dat alle betrokken partijen weten wat er van hen wordt verwacht tijdens een incident. Voor kritieke apps die essentieel zijn voor bedrijfsprocessen, moet het disaster recovery plan worden geïntegreerd in het algemene business continuity plan van de organisatie.

Gebruik PowerShell-script azure-ad-app-registrations.ps1 (functie Invoke-AppRegistrationReview) – Voert regelmatige security reviews uit van app-registraties en identificeert verweesde applicaties.

Monitoring en Auditing van App Registraties

Gebruik PowerShell-script azure-ad-app-registrations.ps1 (functie Invoke-Monitoring) – Monitort app-registraties op beveiligingsrisico's en compliance-problemen.

Effectieve monitoring en auditing van app-registraties is essentieel om te garanderen dat beveiligingsrisico's tijdig worden gedetecteerd en dat compliance-vereisten worden nageleefd. Monitoring moet zowel proactief als reactief gebeuren om een volledig beeld te krijgen van de beveiligingsstatus van alle app-registraties in de tenant. Proactieve monitoring omvat het regelmatig controleren van alle app-registraties op beveiligingsproblemen zoals excessive permissions, verouderde credentials, of verweesde applicaties. Reactieve monitoring omvat het analyseren van audit logs om verdachte activiteiten te detecteren, zoals ongebruikelijke API-aanroepen of pogingen tot ongeautoriseerde toegang. De primaire monitoringactiviteit is het bijhouden van een centraal register of inventaris van alle app-registraties, inclusief informatie over eigenaar, machtigingen, doel, onderhoudsplan, en laatste review-datum. Deze inventaris moet regelmatig worden bijgewerkt en moet worden gebruikt om trends te identificeren in app-registraties, zoals welke machtigingen het meest worden aangevraagd, welke apps het vaakst worden verwijderd, en welke beveiligingsproblemen het meest voorkomen. De inventaris moet ook worden gebruikt om te controleren of alle app-registraties een gedocumenteerde eigenaar hebben, of reviews op tijd plaatsvinden, en of credentials regelmatig worden geroteerd. Het monitoren van app-registraties moet ook aandacht besteden aan de machtigingen die aan geregistreerde apps zijn verleend. Security teams moeten regelmatig controleren of apps excessive permissions hebben, of er apps zijn met tenant-level permissions die mogelijk niet nodig zijn, en of de toegekende machtigingen nog steeds overeenkomen met het oorspronkelijke doel van de app. Dit helpt om het principe van least privilege te handhaven en om te voorkomen dat apps meer toegang hebben dan strikt noodzakelijk. Voor apps met tenant-level permissions moet extra aandacht worden besteed aan monitoring omdat deze apps toegang hebben tot alle gegevens in de tenant. Azure AD Audit Logs bevatten waardevolle informatie over alle activiteiten in de tenant, inclusief app-registraties, machtigingstoekenningen, en API-aanroepen. Deze logs moeten regelmatig worden geanalyseerd om verdachte activiteiten te detecteren, zoals ongebruikelijke API-aanroepen, pogingen tot ongeautoriseerde toegang, of wijzigingen aan app-registraties buiten het normale aanvraagproces om. Voor geavanceerde monitoring kunnen organisaties gebruik maken van Azure Sentinel of andere Security Information and Event Management (SIEM) systemen om automatische waarschuwingen in te stellen voor verdachte activiteiten. Bijvoorbeeld, een waarschuwing kan worden geconfigureerd wanneer een nieuwe app wordt geregistreerd met zeer brede machtigingen, wanneer een app die al lange tijd inactief is plotseling begint met het maken van API-aanroepen, of wanneer er wijzigingen worden aangebracht aan app-registraties buiten het normale proces om. Het monitoren van credentials is bijzonder belangrijk omdat gestolen credentials kunnen worden gebruikt voor persistente toegang tot organisatiegegevens. Monitoring moet controleren of credentials regelmatig worden geroteerd, of oude credentials worden verwijderd na rotatie, en of er verdachte activiteiten zijn met betrekking tot credentials. Azure Key Vault biedt logging en monitoring mogelijkheden die kunnen worden gebruikt om te controleren wie toegang heeft tot geheimen, wanneer geheimen worden gebruikt, en of er verdachte activiteiten zijn. Deze logs moeten regelmatig worden geanalyseerd om potentiële beveiligingsincidenten tijdig te detecteren. Voor compliance en auditing doeleinden moeten alle monitoringactiviteiten worden gedocumenteerd en moeten er regelmatig rapporten worden gegenereerd die aantonen dat app-registraties correct worden beheerd en gemonitord. Deze rapporten moeten informatie bevatten over het aantal app-registraties, het aantal security reviews dat is uitgevoerd, het aantal apps dat is verwijderd, en eventuele beveiligingsproblemen die zijn geïdentificeerd. Voor organisaties die moeten voldoen aan normen zoals ISO 27001 of de BIO-normen, zijn deze rapporten vaak een vereiste voor certificering en moeten ze regelmatig worden aangeboden aan auditors en toezichthouders.

Compliance en Naleving voor App Registratiebeheer

Effectief beheer van app-registraties is essentieel voor het voldoen aan verschillende compliance-vereisten die relevant zijn voor Nederlandse overheidsorganisaties. De Baseline Informatiebeveiliging Overheid (BIO) norm 09.01 vereist dat organisaties passende maatregelen treffen voor toegangscontrole en authenticatie, wat direct van toepassing is op app-registraties die toegang hebben tot organisatiegegevens. Organisaties moeten kunnen aantonen dat toegang tot systemen en gegevens wordt gecontroleerd en dat alleen geautoriseerde applicaties toegang hebben. Dit betekent dat er een gestructureerd proces moet zijn voor het beoordelen en goedkeuren van app-registraties, dat alle app-registraties worden gedocumenteerd, en dat regelmatig wordt gecontroleerd of apps nog actief worden gebruikt en of de toegekende machtigingen nog steeds passend zijn. Voor organisaties die moeten voldoen aan de Algemene Verordening Gegevensbescherming (AVG) is het essentieel om te kunnen aantonen welke applicaties toegang hebben tot persoonsgegevens en hoe deze toegang wordt beheerd. Artikel 25 van de AVG vereist dat organisaties passende technische en organisatorische maatregelen implementeren om gegevensbescherming door ontwerp en door standaardinstellingen te waarborgen. Effectief beheer van app-registraties draagt direct bij aan deze vereiste door ervoor te zorgen dat alleen goedgekeurde en beveiligde applicaties toegang hebben tot persoonsgegevens, dat toegang wordt beperkt tot wat strikt noodzakelijk is, en dat toegang wordt gemonitord en gecontroleerd. Voor apps die toegang hebben tot persoonsgegevens moet een Data Protection Impact Assessment (DPIA) worden uitgevoerd en gedocumenteerd. De CIS Azure Foundations Benchmark controle 1.1.14 vereist dat app-registraties worden beperkt tot alleen beheerders, wat een fundamentele beveiligingsmaatregel is die door alle organisaties zou moeten worden geïmplementeerd. Deze controle is geclassificeerd als Level 1, wat betekent dat het een basisbeveiligingsmaatregel is. Door te voldoen aan deze controle, demonstreren organisaties dat zij een basisniveau van beveiligingscontrole hebben geïmplementeerd voor het beheer van applicatieregistraties. Naast het beperken van wie apps kan registreren, moet er ook een proces zijn voor het beoordelen en goedkeuren van app-registraties voordat ze worden geregistreerd. ISO 27001 controle A.14.2.5 vereist dat organisaties ervoor zorgen dat beveiligingsmaatregelen worden geïmplementeerd tijdens de ontwikkeling en implementatie van systemen, inclusief het beheer van applicaties die toegang hebben tot organisatiegegevens. Door app-registraties te beperken en een gestructureerd proces te hebben voor het beoordelen en goedkeuren van nieuwe applicaties, demonstreren organisaties dat zij deze principes volgen. De ISO 27001 standaard vereist ook dat organisaties regelmatig controleren of beveiligingsvereisten worden nageleefd, wat betekent dat regelmatige security reviews van app-registraties moeten worden uitgevoerd en gedocumenteerd. Voor auditing doeleinden is het belangrijk dat organisaties kunnen aantonen dat app-registraties correct worden beheerd en gemonitord. Dit betekent dat er documentatie moet zijn die aantoont dat er een gedefinieerd proces is voor het aanvragen en goedkeuren van app-registraties, dat er een centraal register is van alle geregistreerde applicaties, dat regelmatige security reviews worden uitgevoerd, en dat verweesde applicaties worden opgeruimd. Deze documentatie moet worden bewaard voor de vereiste bewaarperiode, die voor veel organisaties zeven jaar is. Auditlogs uit Azure AD kunnen worden gebruikt om te verifiëren dat alleen beheerders apps hebben geregistreerd, dat security reviews zijn uitgevoerd, en dat er geen ongeautoriseerde wijzigingen zijn aangebracht aan app-registraties.

Remediatie en Verbetering van App Registratiebeheer

Gebruik PowerShell-script azure-ad-app-registrations.ps1 (functie Invoke-Remediation) – Identificeert en adresseert beveiligingsproblemen in app-registraties.

Wanneer tijdens monitoring of auditing wordt vastgesteld dat app-registraties niet correct worden beheerd of dat er beveiligingsproblemen zijn geïdentificeerd, moet onmiddellijk actie worden ondernomen om deze problemen te verhelpen. Remediatie is het proces waarbij beveiligingsproblemen worden geïdentificeerd, geëvalueerd, en opgelost om te garanderen dat app-registraties voldoen aan beveiligingsstandaarden en compliance-vereisten. Voor app-registraties met excessive permissions moet een beoordeling worden uitgevoerd om te bepalen of alle toegekende machtigingen nog steeds nodig zijn. Als bepaalde machtigingen niet meer nodig zijn, moeten deze worden verwijderd om het principe van least privilege te handhaven. Als alle machtigingen nog steeds nodig zijn, moet worden geëvalueerd of er alternatieve benaderingen mogelijk zijn die minder machtigingen vereisen, of of de app moet worden herzien om te garanderen dat excessive permissions worden gerechtvaardigd door business requirements. Voor verweesde applicaties zonder gedocumenteerde eigenaar moet een proces worden gevolgd om de eigenaar te identificeren of een nieuwe eigenaar aan te wijzen. Als geen eigenaar kan worden geïdentificeerd en de app niet meer wordt gebruikt, moet de app worden verwijderd of uitgeschakeld om te voorkomen dat deze wordt misbruikt. Voordat een app wordt verwijderd, moet worden gecontroleerd of er geen andere systemen of processen afhankelijk zijn van de app, en moet eventuele noodzakelijke migratie worden uitgevoerd. Voor apps met verouderde credentials moeten credentials onmiddellijk worden geroteerd en moeten oude credentials worden verwijderd of uitgeschakeld. Het rotatieproces moet worden gedocumenteerd en moet worden gevolgd door verificatie dat de nieuwe credentials correct functioneren. Voor apps met credentials die mogelijk zijn gecompromitteerd, moet onmiddellijk actie worden ondernomen om de credentials te verwijderen en te vervangen, en moet worden onderzocht of er mogelijk ongeautoriseerde toegang heeft plaatsgevonden. Voor apps die niet voldoen aan beveiligingsstandaarden moet een beoordeling worden uitgevoerd om te bepalen welke maatregelen nodig zijn om de app te laten voldoen. Dit kan betekenen dat de app moet worden aangepast, dat aanvullende beveiligingsmaatregelen moeten worden geïmplementeerd, of dat de app moet worden vervangen door een alternatief dat wel voldoet aan de standaarden. Als de app niet kan worden aangepast om te voldoen aan de standaarden, moet worden overwogen of de app moet worden verwijderd of uitgeschakeld. Na het voltooien van remediatie moet een rapport worden opgesteld dat documenteert welke problemen zijn geïdentificeerd, hoe ze zijn opgelost, en welke maatregelen zijn genomen om te voorkomen dat de problemen opnieuw optreden. Dit rapport moet worden gedeeld met de relevante stakeholders, inclusief IT Security, compliance officers, en management, en moet worden bewaard voor audit doeleinden. Om te voorkomen dat problemen opnieuw optreden, moeten preventieve maatregelen worden geïmplementeerd, zoals het verbeteren van het aanvraagproces, het versterken van security reviews, of het automatiseren van monitoring en reporting.

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 Azure AD App Registrations: Beheer en Beveiliging .DESCRIPTION Ondersteunt het beheer en beveiliging van Azure AD App Registrations door monitoring, security reviews, en lifecycle management te faciliteren. .NOTES Filename: azure-ad-app-registrations.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Related JSON: content/azure/identity-access/azure-ad-app-registrations.json #> #Requires -Version 5.1 #Requires -Modules Microsoft.Graph.Applications, Microsoft.Graph.Identity.SignIns [CmdletBinding()] param( [Parameter()][switch]$Monitoring, [Parameter()][switch]$Remediation, [Parameter()][switch]$Implementation, [Parameter()][switch]$DebugMode ) $ErrorActionPreference = 'Stop' function Connect-RequiredServices { try { $context = Get-MgContext -ErrorAction SilentlyContinue if (-not $context) { Connect-MgGraph -Scopes "Application.Read.All", "Application.ReadWrite.All", "Directory.Read.All", "AuditLog.Read.All" -ErrorAction Stop | Out-Null } } catch { Write-Warning "Microsoft Graph verbinding niet beschikbaar: $_" throw } } function Get-AppRegistrations { <# .SYNOPSIS Haalt alle app-registraties op uit Azure AD #> try { if ($DebugMode) { Write-Host "DebugMode: Simuleert app-registraties ophalen" -ForegroundColor Yellow return @( [PSCustomObject]@{ Id = "00000000-0000-0000-0000-000000000001" DisplayName = "Test App 1" AppId = "11111111-1111-1111-1111-111111111111" CreatedDateTime = (Get-Date).AddDays(-365) Owners = @("user1@example.com") } ) } $apps = Get-MgApplication -All -ErrorAction Stop return $apps } catch { Write-Warning "Fout bij ophalen app-registraties: $_" return @() } } function Test-AppRegistrationSecurity { <# .SYNOPSIS Test of app-registraties voldoen aan beveiligingsstandaarden #> param( [Parameter(Mandatory=$true)] $AppRegistration ) $results = @{ HasOwner = $false HasExcessivePermissions = $false HasExpiredCredentials = $false IsOrphaned = $false Details = @() } try { # Controleer of app een eigenaar heeft $owners = Get-MgApplicationOwner -ApplicationId $AppRegistration.Id -ErrorAction SilentlyContinue $results.HasOwner = ($owners.Count -gt 0) # Controleer op excessive permissions (tenant-level permissions) $requiredResourceAccess = $AppRegistration.RequiredResourceAccess if ($requiredResourceAccess) { foreach ($resource in $requiredResourceAccess) { $resourceApp = Get-MgApplication -Filter "AppId eq '$($resource.ResourceAppId)'" -ErrorAction SilentlyContinue if ($resourceApp) { # Controleer op tenant-level permissions foreach ($access in $resource.ResourceAccess) { if ($access.Type -eq "Role" -and $access.Id -ne $null) { $results.HasExcessivePermissions = $true break } } } } } # Controleer op verouderde app (ouder dan 2 jaar zonder recente activiteit) $ageInDays = ((Get-Date) - $AppRegistration.CreatedDateTime).Days if ($ageInDays -gt 730) { $results.IsOrphaned = $true } $results.Details = @( [PSCustomObject]@{ Component = "Eigenaar"; Status = if ($results.HasOwner) { "Aanwezig" } else { "Ontbrekend" } } [PSCustomObject]@{ Component = "Excessive Permissions"; Status = if ($results.HasExcessivePermissions) { "Gevonden" } else { "Geen" } } [PSCustomObject]@{ Component = "Verweesde App"; Status = if ($results.IsOrphaned) { "Ja" } else { "Nee" } } ) } catch { Write-Warning "Fout bij beveiligingscontrole app-registratie: $_" } return $results } function Invoke-AppRegistrationRequest { <# .SYNOPSIS Ondersteunt het aanvraagproces door app-registratieaanvragen te valideren #> [CmdletBinding()] param( [Parameter(Mandatory=$false)] [string]$AppName, [Parameter(Mandatory=$false)] [string]$Purpose, [Parameter(Mandatory=$false)] [string[]]$RequestedPermissions ) Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "APP REGISTRATIE AANVRAAG VALIDATIE" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "" try { if (-not $DebugMode) { Connect-RequiredServices } Write-Host "[INFO] App-registratieaanvraag validatie vereist handmatige beoordeling" -ForegroundColor Yellow Write-Host "" Write-Host "De volgende stappen zijn vereist voor een app-registratieaanvraag:" -ForegroundColor Cyan Write-Host "" Write-Host "1. AANVRAAGFORMULIER" -ForegroundColor Yellow Write-Host " - App naam: $AppName" -ForegroundColor Gray Write-Host " - Doel: $Purpose" -ForegroundColor Gray Write-Host " - Gevraagde machtigingen: $($RequestedPermissions -join ', ')" -ForegroundColor Gray Write-Host "" Write-Host "2. BEVEILIGINGSBEORDELING" -ForegroundColor Yellow Write-Host " - Evalueer of machtigingen passend zijn voor het doel" -ForegroundColor Gray Write-Host " - Controleer of er al een bestaande app dezelfde functionaliteit biedt" -ForegroundColor Gray Write-Host " - Beoordeel of de app voldoet aan beveiligingsstandaarden" -ForegroundColor Gray Write-Host "" Write-Host "3. DPIA (indien van toepassing)" -ForegroundColor Yellow Write-Host " - Voer DPIA uit voor apps met toegang tot persoonsgegevens" -ForegroundColor Gray Write-Host " - Documenteer gegevensverwerking en beveiligingsmaatregelen" -ForegroundColor Gray Write-Host "" Write-Host "4. GOEDKEURING EN REGISTRATIE" -ForegroundColor Yellow Write-Host " - Registreer app met least privilege machtigingen" -ForegroundColor Gray Write-Host " - Sla credentials veilig op in Azure Key Vault" -ForegroundColor Gray Write-Host " - Voeg app toe aan centraal applicatie-inventaris" -ForegroundColor Gray Write-Host "" Write-Host "Zie het artikel voor gedetailleerde instructies." -ForegroundColor Cyan } catch { Write-Error "Fout bij aanvraag validatie: $_" exit 1 } } function Invoke-AppRegistrationReview { <# .SYNOPSIS Voert regelmatige security reviews uit van app-registraties #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "APP REGISTRATIE SECURITY REVIEW" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "" try { if (-not $DebugMode) { Connect-RequiredServices } $apps = Get-AppRegistrations $totalApps = $apps.Count $appsWithIssues = 0 $orphanedApps = 0 $appsWithoutOwner = 0 Write-Host "Totaal aantal app-registraties: $totalApps" -ForegroundColor Cyan Write-Host "" foreach ($app in $apps) { $securityCheck = Test-AppRegistrationSecurity -AppRegistration $app if (-not $securityCheck.HasOwner) { $appsWithoutOwner++ Write-Host "WAARSCHUWING: $($app.DisplayName) heeft geen eigenaar" -ForegroundColor Yellow } if ($securityCheck.HasExcessivePermissions) { $appsWithIssues++ Write-Host "WAARSCHUWING: $($app.DisplayName) heeft excessive permissions" -ForegroundColor Yellow } if ($securityCheck.IsOrphaned) { $orphanedApps++ Write-Host "WAARSCHUWING: $($app.DisplayName) is mogelijk verweesd (ouder dan 2 jaar)" -ForegroundColor Yellow } } Write-Host "" Write-Host "SAMENVATTING:" -ForegroundColor Cyan Write-Host " Apps zonder eigenaar: $appsWithoutOwner" -ForegroundColor $(if ($appsWithoutOwner -gt 0) { "Yellow" } else { "Green" }) Write-Host " Apps met excessive permissions: $appsWithIssues" -ForegroundColor $(if ($appsWithIssues -gt 0) { "Yellow" } else { "Green" }) Write-Host " Mogelijk verweesde apps: $orphanedApps" -ForegroundColor $(if ($orphanedApps -gt 0) { "Yellow" } else { "Green" }) Write-Host "" if ($appsWithoutOwner -eq 0 -and $appsWithIssues -eq 0 -and $orphanedApps -eq 0) { Write-Host "STATUS: OK - Alle app-registraties voldoen aan beveiligingsstandaarden" -ForegroundColor Green exit 0 } else { Write-Host "STATUS: WAARSCHUWING - Sommige app-registraties vereisen aandacht" -ForegroundColor Yellow exit 1 } } catch { Write-Error "Fout bij security review: $_" exit 1 } } function Invoke-Implementation { <# .SYNOPSIS Implementeert app-registratiebeheer processen #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "APP REGISTRATIEBEHEER IMPLEMENTATIE" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "" try { if (-not $DebugMode) { Connect-RequiredServices } Write-Host "[INFO] App-registratiebeheer implementatie vereist handmatige configuratie" -ForegroundColor Yellow Write-Host "" Write-Host "De volgende stappen zijn vereist voor volledige implementatie:" -ForegroundColor Cyan Write-Host "" Write-Host "1. GOVERNANCE OPZETTEN" -ForegroundColor Yellow Write-Host " - Definieer app-registratiebeleid en -processen" -ForegroundColor Gray Write-Host " - Wijs verantwoordelijkheden toe (CISO, security officers, etc.)" -ForegroundColor Gray Write-Host " - Stel security committee of stuurgroep op" -ForegroundColor Gray Write-Host "" Write-Host "2. AANVRAAGPROCES ONTWIKKELEN" -ForegroundColor Yellow Write-Host " - Maak aanvraagformulier voor app-registraties" -ForegroundColor Gray Write-Host " - Definieer security review criteria" -ForegroundColor Gray Write-Host " - Stel goedkeuringsworkflow op" -ForegroundColor Gray Write-Host "" Write-Host "3. TENANT-INSTELLINGEN CONFIGUREREN" -ForegroundColor Yellow Write-Host " - Beperk app-registraties tot alleen beheerders" -ForegroundColor Gray Write-Host " - Configureer Azure Key Vault voor credential opslag" -ForegroundColor Gray Write-Host " - Stel monitoring en alerting in" -ForegroundColor Gray Write-Host "" Write-Host "4. CENTRAAL REGISTER OPZETTEN" -ForegroundColor Yellow Write-Host " - Maak applicatie-inventaris met alle app-registraties" -ForegroundColor Gray Write-Host " - Documenteer eigenaren, machtigingen en onderhoudsplannen" -ForegroundColor Gray Write-Host " - Stel review-schema op" -ForegroundColor Gray Write-Host "" Write-Host "5. MONITORING EN AUDITING" -ForegroundColor Yellow Write-Host " - Configureer Azure AD Audit Log monitoring" -ForegroundColor Gray Write-Host " - Stel automatische waarschuwingen in voor verdachte activiteiten" -ForegroundColor Gray Write-Host " - Plan regelmatige security reviews" -ForegroundColor Gray Write-Host "" Write-Host "Zie het artikel voor gedetailleerde implementatie-instructies." -ForegroundColor Cyan } catch { Write-Error "Fout bij implementatie: $_" exit 1 } } function Invoke-Monitoring { <# .SYNOPSIS Monitort app-registraties op beveiligingsrisico's en compliance-problemen #> [CmdletBinding()] param() try { if (-not $DebugMode) { Connect-RequiredServices } Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "APP REGISTRATIE MONITORING" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "" $apps = Get-AppRegistrations $totalApps = $apps.Count Write-Host "TOTAAL AANTAL APP-REGISTRATIES: $totalApps" -ForegroundColor Cyan Write-Host "" $issues = @() foreach ($app in $apps) { $securityCheck = Test-AppRegistrationSecurity -AppRegistration $app if (-not $securityCheck.HasOwner) { $issues += [PSCustomObject]@{ AppName = $app.DisplayName Issue = "Geen eigenaar" Severity = "High" } } if ($securityCheck.HasExcessivePermissions) { $issues += [PSCustomObject]@{ AppName = $app.DisplayName Issue = "Excessive permissions" Severity = "High" } } if ($securityCheck.IsOrphaned) { $issues += [PSCustomObject]@{ AppName = $app.DisplayName Issue = "Mogelijk verweesd" Severity = "Medium" } } } if ($issues.Count -eq 0) { Write-Host "STATUS: OK - Geen beveiligingsproblemen gedetecteerd" -ForegroundColor Green Write-Host "" Write-Host "Alle app-registraties hebben een eigenaar en voldoen aan beveiligingsstandaarden." -ForegroundColor Green } else { Write-Host "STATUS: WAARSCHUWING - $($issues.Count) beveiligingsproblemen gedetecteerd" -ForegroundColor Yellow Write-Host "" Write-Host "GEDETECTEERDE PROBLEMEN:" -ForegroundColor Yellow foreach ($issue in $issues) { $color = if ($issue.Severity -eq "High") { "Red" } else { "Yellow" } Write-Host " [$($issue.Severity)] $($issue.AppName): $($issue.Issue)" -ForegroundColor $color } Write-Host "" Write-Host "Voer remediatie uit om deze problemen op te lossen." -ForegroundColor Cyan } Write-Host "" Write-Host "========================================" -ForegroundColor Cyan if ($issues.Count -eq 0) { exit 0 } else { exit 1 } } catch { Write-Error "Fout bij monitoring: $_" exit 1 } } function Invoke-Remediation { <# .SYNOPSIS Identificeert en adresseert beveiligingsproblemen in app-registraties #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "APP REGISTRATIE REMEDIATIE" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "" try { if (-not $DebugMode) { Connect-RequiredServices } $apps = Get-AppRegistrations $remediationActions = @() foreach ($app in $apps) { $securityCheck = Test-AppRegistrationSecurity -AppRegistration $app if (-not $securityCheck.HasOwner) { $remediationActions += [PSCustomObject]@{ AppName = $app.DisplayName Action = "Wijs een eigenaar toe aan deze app" Priority = "High" } } if ($securityCheck.HasExcessivePermissions) { $remediationActions += [PSCustomObject]@{ AppName = $app.DisplayName Action = "Review en reduceer excessive permissions" Priority = "High" } } if ($securityCheck.IsOrphaned) { $remediationActions += [PSCustomObject]@{ AppName = $app.DisplayName Action = "Evalueer of app nog nodig is, verwijder indien niet meer gebruikt" Priority = "Medium" } } } if ($remediationActions.Count -eq 0) { Write-Host "Geen remediatie-acties vereist. Alle app-registraties voldoen aan beveiligingsstandaarden." -ForegroundColor Green } else { Write-Host "REMEDIATIE-ACTIES:" -ForegroundColor Yellow Write-Host "" foreach ($action in $remediationActions) { $color = if ($action.Priority -eq "High") { "Red" } else { "Yellow" } Write-Host " [$($action.Priority)] $($action.AppName)" -ForegroundColor $color Write-Host " → $($action.Action)" -ForegroundColor Gray Write-Host "" } Write-Host "Zie het artikel voor gedetailleerde remediatie-instructies." -ForegroundColor Cyan } } catch { Write-Error "Fout bij remediatie: $_" exit 1 } } # ================================================================================ # MAIN EXECUTION # ================================================================================ try { if ($Implementation) { Invoke-Implementation } elseif ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { Invoke-Remediation } else { # Default: Monitoring Invoke-Monitoring } } catch { Write-Error $_ exit 1 }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder effectief beheer van app-registraties kunnen kwaadwillende applicaties toegang krijgen tot gevoelige organisatiegegevens, kunnen verweesde applicaties met actieve credentials blijven bestaan, en kunnen excessive permissions worden toegekend zonder adequate beveiligingsbeoordeling. Dit resulteert in onbeheerde toegangspunten die kunnen worden misbruikt, gebrek aan zichtbaarheid en controle over welke applicaties toegang hebben tot organisatiegegevens, en compliance-problemen wanneer organisaties niet kunnen aantonen welke applicaties toegang hebben tot persoonsgegevens. Compliance-frameworks zoals ISO 27001, de BIO-normen en CIS vereisen expliciet dat organisaties kunnen aantonen dat app-registraties correct worden beheerd en gemonitord.

Management Samenvatting

Effectief beheer van Azure AD App Registrations omvat governance en kaders, een gestructureerd aanvraag- en goedkeuringsproces, beveiligingsbeoordeling van machtigingen, lifecycle management inclusief regelmatige reviews, en monitoring en auditing. Implementatie vereist ongeveer 24 uur voor het opzetten van processen, documentatie en training. Deze maatregel is essentieel voor organisaties die moeten voldoen aan compliance-vereisten zoals CIS, ISO 27001, BIO en AVG.