Azure DevOps Access Governance En Toegangsbeheer

💼 Management Samenvatting

Azure DevOps Access Governance implementeert gestructureerd toegangsbeheer voor repositories, pipelines, werkitems en andere DevOps-resources door het principe van minimale privileges toe te passen, regelmatige toegangsbeoordelingen uit te voeren en alle toegangswijzigingen te auditen. Voor Nederlandse overheidsorganisaties is effectief toegangsbeheer essentieel voor het beschermen van broncode, gevoelige configuraties en CI/CD-pipelines tegen ongeautoriseerde toegang of wijzigingen.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
7/10
Implementatie
40u (tech: 24u)
Van toepassing op:
Azure DevOps
Azure Repos
Azure Pipelines
Azure Boards

Zonder gestructureerd toegangsbeheer in Azure DevOps ontstaan er aanzienlijke beveiligingsrisico's die kunnen leiden tot datalekken, ongeautoriseerde code-wijzigingen, of compromittering van CI/CD-pipelines. Wanneer ontwikkelaars, contractors of externe partijen toegang krijgen tot repositories zonder duidelijke governance, kunnen zij per ongeluk of opzettelijk gevoelige informatie zoals API-keys, wachtwoorden of configuratiegegevens in broncode committen. Deze informatie kan vervolgens worden blootgesteld wanneer repositories publiek worden gemaakt of wanneer toegang wordt verleend aan onbevoegde personen. Bovendien kunnen personen met te veel rechten wijzigingen aanbrengen aan kritieke pipelines die productiesystemen deployen, wat kan leiden tot service-onderbrekingen of beveiligingsincidenten. Zonder regelmatige toegangsbeoordelingen blijven oude accounts actief die niet langer nodig zijn, waardoor het aanvalsoppervlak groeit naarmate teams veranderen en projecten worden afgerond. Het ontbreken van auditlogging maakt het onmogelijk om te achterhalen wie toegang heeft verleend, wanneer dit is gebeurd, of wie wijzigingen heeft aangebracht aan kritieke resources. Dit vormt een kritiek probleem voor organisaties die moeten voldoen aan compliance-vereisten zoals de BIO-normen, ISO 27001 of de NIS2-richtlijn, die allemaal expliciete vereisten stellen voor toegangsbeheer en auditing.

PowerShell Modules Vereist
Primary API: Azure DevOps REST API
Connection: Connect-AzAccount, az devops login
Required Modules: Az.Accounts, Az.DevOps

Implementatie

Azure DevOps Access Governance omvat het implementeren van een gestructureerd toegangsbeheermodel dat is gebaseerd op het principe van minimale privileges, waarbij gebruikers alleen de rechten krijgen die zij nodig hebben om hun werk uit te voeren. Dit begint met het definiëren van duidelijke rollen en verantwoordelijkheden voor verschillende typen gebruikers, zoals ontwikkelaars, testers, release managers en beheerders. Voor elke rol moeten specifieke toegangsrechten worden gedefinieerd die zijn afgestemd op hun verantwoordelijkheden. Ontwikkelaars hebben bijvoorbeeld typisch lees- en schrijfrechten op repositories maar geen rechten om pipelines te wijzigen of te verwijderen. Release managers hebben rechten om releases te beheren maar geen directe toegang tot broncode. Beheerders hebben uitgebreide rechten maar moeten worden beperkt tot een kleine groep vertrouwde personen. Het toegangsbeheermodel moet worden geïmplementeerd op verschillende niveaus binnen Azure DevOps, inclusief organisatieniveau, projectniveau, repository-niveau en pipeline-niveau. Op organisatieniveau worden algemene instellingen en beheerdersrollen geconfigureerd. Op projectniveau worden teamrollen en project-specifieke rechten toegewezen. Op repository-niveau worden branch policies, pull request vereisten en directe push-rechten geconfigureerd. Op pipeline-niveau worden rechten voor het uitvoeren, wijzigen en verwijderen van pipelines beheerd. Regelmatige toegangsbeoordelingen moeten worden uitgevoerd om te verifiëren dat alle toegang nog steeds gerechtvaardigd is en dat oude accounts worden verwijderd. Auditlogging moet worden ingeschakeld om alle toegangswijzigingen, code-commits en pipeline-uitvoeringen vast te leggen voor compliance en forensische doeleinden.

Vereisten

Voordat Azure DevOps Access Governance kan worden geïmplementeerd, moeten organisaties verschillende essentiële vereisten vervullen om een succesvolle implementatie te garanderen. De eerste en meest kritieke vereiste is het documenteren van een duidelijk toegangsbeheerbeleid dat expliciet definieert welke rollen en verantwoordelijkheden bestaan binnen de organisatie, welke rechten elke rol nodig heeft, en hoe toegang wordt verleend, gewijzigd en ingetrokken. Dit beleid moet worden ontwikkeld in samenwerking met verschillende stakeholders, waaronder security officers, compliance managers, development leads en projectmanagers. Het beleid moet duidelijk maken wie verantwoordelijk is voor het verlenen van toegang, wie toegang kan goedkeuren, en hoe uitzonderingen worden afgehandeld. Zonder een gedocumenteerd beleid bestaat het risico dat toegang willekeurig wordt verleend, wat kan leiden tot over-privileged accounts, inconsistente toegangsrechten, of gemiste beveiligingsvereisten.

Een volledige inventarisatie van alle bestaande Azure DevOps-organisaties, projecten, repositories en gebruikersaccounts is essentieel voordat het nieuwe toegangsbeheermodel wordt geïmplementeerd. Deze inventarisatie moet alle actieve gebruikers documenteren, welke rollen en rechten zij momenteel hebben, wanneer deze toegang is verleend, en wie de toegang heeft goedgekeurd. Voor repositories moet worden vastgelegd welke branches bestaan, welke branch policies zijn geconfigureerd, en wie rechten heeft om code te committen of te mergen. Voor pipelines moet worden gedocumenteerd welke pipelines bestaan, wie deze kan uitvoeren, en wie wijzigingen kan aanbrengen. Deze inventarisatie vormt de basis voor het bepalen welke toegang moet worden behouden, welke moet worden aangepast, en welke moet worden verwijderd als onderdeel van het nieuwe toegangsbeheermodel.

Azure DevOps-organisaties moeten worden gekoppeld aan Azure Active Directory voor geïntegreerd identiteitsbeheer en single sign-on. Dit maakt het mogelijk om gebruikers te beheren via Azure AD in plaats van lokale accounts, wat consistentie biedt met andere Microsoft 365-services en betere beveiliging door het gebruik van conditional access policies en meervoudige authenticatie. Voor organisaties die nog gebruik maken van Microsoft Accounts of lokale accounts, moet een migratieplan worden ontwikkeld om deze accounts te migreren naar Azure AD. Deze migratie moet zorgvuldig worden uitgevoerd om te voorkomen dat gebruikers toegang verliezen of dat bestaande configuraties worden verstoord.

Een goedkeuringsworkflow moet worden gedefinieerd en geïmplementeerd voor het verlenen van toegang. Deze workflow moet duidelijk maken wie toegang kan aanvragen, wie deze kan goedkeuren, en hoe het proces wordt gedocumenteerd. Voor standaard rollen zoals ontwikkelaar of tester kan een vereenvoudigde workflow worden gebruikt waarbij directe managers toegang kunnen goedkeuren. Voor rollen met uitgebreide rechten, zoals projectbeheerders of pipeline-beheerders, moet een meer formele goedkeuringsworkflow worden gevolgd waarbij security officers of senior management betrokken zijn. De workflow moet worden geautomatiseerd waar mogelijk, bijvoorbeeld door gebruik te maken van Azure AD access reviews of door workflows te configureren in Azure DevOps zelf.

Auditlogging moet worden ingeschakeld en geconfigureerd voordat het nieuwe toegangsbeheermodel wordt geïmplementeerd. Azure DevOps biedt uitgebreide auditlogging die alle belangrijke gebeurtenissen vastlegt, zoals toegangswijzigingen, code-commits, pipeline-uitvoeringen, en configuratiewijzigingen. Deze logs moeten worden geconfigureerd om te worden doorgestuurd naar een centraal logging-systeem, zoals Azure Log Analytics, waar zij kunnen worden opgeslagen, geanalyseerd en geraadpleegd voor compliance en forensische doeleinden. De retentietijd voor auditlogs moet worden bepaald op basis van compliance-vereisten, waarbij typisch minimaal één jaar retentie wordt aanbevolen, maar voor sommige organisaties kan een langere retentietijd vereist zijn.

Implementatie

Gebruik PowerShell-script access-governance.ps1 (functie Invoke-Remediation) – Configureert Azure DevOps Access Governance volgens best practices.

De implementatie van Azure DevOps Access Governance begint met het configureren van organisatie-niveau instellingen die de basis vormen voor het gehele toegangsbeheermodel. Navigeer naar de Azure DevOps-organisatie instellingen en schakel Azure Active Directory-integratie in als deze nog niet is geactiveerd. Dit maakt het mogelijk om gebruikers te beheren via Azure AD en om conditional access policies toe te passen. Configureer organisatie-niveau beheerdersrollen door een beperkte groep vertrouwde personen aan te wijzen als organisatiebeheerders. Deze personen hebben volledige controle over de organisatie en moeten daarom zorgvuldig worden geselecteerd. Overweeg het gebruik van privileged identity management voor deze rollen om just-in-time toegang te implementeren in plaats van permanente beheerdersrechten.

Op projectniveau moeten duidelijke rollen worden gedefinieerd en toegewezen aan gebruikers op basis van hun verantwoordelijkheden. De standaard rollen in Azure DevOps zijn Project Administrators, die volledige controle hebben over een project, Contributors, die kunnen werken met werkitems en code, Readers, die alleen-lezen toegang hebben, en Build Administrators en Release Administrators, die respectievelijk pipelines en releases kunnen beheren. Voor elke rol moeten de specifieke rechten worden geconfigureerd die passen bij de verantwoordelijkheden van die rol. Project Administrators moeten worden beperkt tot een kleine groep personen die daadwerkelijk projectconfiguratie moeten beheren. Contributors moeten de standaard rol zijn voor ontwikkelaars en testers die actief werken aan projecten. Readers moeten worden gebruikt voor personen die alleen informatie moeten kunnen bekijken, zoals managers of auditors.

Voor repositories moeten branch policies worden geconfigureerd die voorkomen dat code direct wordt gecommit naar belangrijke branches zoals main of develop zonder code review. Configureer branch policies die vereisen dat alle wijzigingen via pull requests worden aangebracht, dat minimaal één of twee reviewers de code moeten goedkeuren voordat deze wordt gemerged, en dat build validaties moeten slagen voordat code wordt gemerged. Voor zeer kritieke branches kan worden geconfigureerd dat alleen specifieke personen of groepen code kunnen mergen, zelfs na goedkeuring door reviewers. Dit voorkomt dat onbevoegde personen wijzigingen kunnen aanbrengen aan productiecode, zelfs wanneer zij toegang hebben tot de repository. Configureer ook policies die voorkomen dat force pushes worden uitgevoerd naar belangrijke branches, omdat deze de geschiedenis kunnen wijzigen en bestaande commits kunnen verwijderen.

Pipeline-toegang moet zorgvuldig worden beheerd omdat pipelines vaak toegang hebben tot gevoelige resources zoals productieomgevingen, secrets of service connections. Configureer pipeline permissions zodat alleen geautoriseerde personen pipelines kunnen uitvoeren, wijzigen of verwijderen. Voor productie-pipelines moet worden overwogen om alleen specifieke personen of groepen rechten te geven om pipelines handmatig uit te voeren, terwijl automatische triggers kunnen worden beperkt tot specifieke branches of gebeurtenissen. Configureer service connections met minimale rechten en gebruik managed identities waar mogelijk in plaats van service principal credentials. Review regelmatig welke service connections bestaan en welke rechten deze hebben, en verwijder ongebruikte service connections om het aanvalsoppervlak te minimaliseren.

Secrets en gevoelige informatie moeten worden beheerd via Azure Key Vault of Azure DevOps Library Variable Groups in plaats van hardcoded in broncode of configuratiebestanden. Configureer pipelines om secrets te lezen uit Key Vault tijdens runtime in plaats van deze op te slaan in repository-configuraties. Dit voorkomt dat secrets per ongeluk worden gecommit naar repositories en blootgesteld worden. Gebruik Azure DevOps Library Variable Groups voor niet-gevoelige configuratie die wel moet worden gedeeld tussen pipelines, maar zorg ervoor dat gevoelige variabelen worden gemarkeerd als secrets zodat zij niet worden weergegeven in logs of UI's.

Implementeer regelmatige toegangsbeoordelingen door gebruik te maken van Azure AD access reviews of door handmatige reviews uit te voeren. Configureer access reviews om automatisch te worden uitgevoerd op regelmatige basis, bijvoorbeeld elk kwartaal, waarbij gebruikers of hun managers worden gevraagd om te bevestigen dat toegang nog steeds nodig is. Voor rollen met uitgebreide rechten, zoals Project Administrators of Build Administrators, moeten reviews vaker worden uitgevoerd, bijvoorbeeld maandelijks. Tijdens reviews moeten alle toegang worden gecontroleerd, inclusief directe gebruikersrechten, groepslidmaatschappen, en service principal rechten. Accounts die niet langer nodig zijn moeten worden verwijderd of gedeactiveerd, en rechten die niet langer gerechtvaardigd zijn moeten worden ingetrokken.

Compliance en Auditing

Azure DevOps Access Governance is essentieel voor naleving van verschillende compliance-vereisten die van toepassing zijn op Nederlandse organisaties, met name in de publieke sector. De Baseline Informatiebeveiliging Overheid (BIO) bevat in Thema 09.02 specifieke vereisten voor toegangsbeleid en toegangsbeheer. Dit thema vereist dat organisaties een duidelijk toegangsbeleid hebben dat definieert wie toegang heeft tot welke informatie en systemen, hoe toegang wordt verleend en ingetrokken, en hoe toegang wordt gecontroleerd. Azure DevOps Access Governance implementeert deze vereisten door gestructureerd toegangsbeheer te bieden met duidelijke rollen, regelmatige toegangsbeoordelingen en uitgebreide auditlogging. Voor overheidsorganisaties die moeten voldoen aan BIO-normen is documentatie van toegangsbeheerconfiguraties en toegangsbeoordelingen een essentieel onderdeel van audit-evidentie.

ISO 27001:2022 bevat in controle A.9.2.1 specifieke vereisten voor gebruikersregistratie en deregistratie, waarbij organisaties moeten zorgen dat gebruikers alleen toegang krijgen tot systemen en services waarvoor zij zijn geautoriseerd. Controle A.9.2.3 vereist dat organisaties gebruikersrechten regelmatig beoordelen en intrekken wanneer deze niet langer nodig zijn. Azure DevOps Access Governance implementeert beide controles door gestructureerd toegangsbeheer met goedkeuringsworkflows, regelmatige toegangsbeoordelingen en geautomatiseerde intrekking van toegang wanneer accounts worden gedeactiveerd. De auditlogs die worden gegenereerd door Azure DevOps kunnen worden gebruikt als audit-evidentie om aan te tonen dat organisaties proactief toegang beheren en monitoren.

De NIS2-richtlijn vereist in Artikel 21 dat organisaties passende maatregelen treffen voor toegangsbeheer en authenticatie. De richtlijn benadrukt het belang van het principe van minimale privileges, waarbij gebruikers alleen de rechten krijgen die zij nodig hebben om hun werk uit te voeren. Azure DevOps Access Governance implementeert dit principe door rollen te definiëren met specifieke rechten die zijn afgestemd op verantwoordelijkheden, en door regelmatig te controleren of toegang nog steeds gerechtvaardigd is. Voor organisaties die onder NIS2 vallen is het daarom niet alleen aanbevolen maar verplicht om gestructureerd toegangsbeheer te implementeren voor alle kritieke systemen, inclusief development en CI/CD-omgevingen.

De Algemene Verordening Gegevensbescherming (AVG) vereist in Artikel 32 dat organisaties passende technische en organisatorische maatregelen implementeren om persoonsgegevens te beschermen. Wanneer Azure DevOps wordt gebruikt om applicaties te ontwikkelen die persoonsgegevens verwerken, of wanneer repositories configuratiebestanden bevatten met persoonsgegevens, is het essentieel dat toegang tot deze resources wordt beheerd en gecontroleerd. Azure DevOps Access Governance zorgt ervoor dat alleen geautoriseerde personen toegang hebben tot repositories en configuraties die persoonsgegevens kunnen bevatten, en dat alle toegang wordt geauditeerd voor compliance-doeleinden.

Monitoring

Gebruik PowerShell-script access-governance.ps1 (functie Invoke-Monitoring) – Controleert de configuratie en status van Azure DevOps Access Governance.

Effectieve monitoring van Azure DevOps Access Governance is essentieel om te waarborgen dat het toegangsbeheermodel correct blijft functioneren en dat organisaties altijd beschikken over actuele informatie over wie toegang heeft tot welke resources. Monitoring omvat het continu volgen van toegangswijzigingen, het verifiëren dat rollen correct zijn geconfigureerd, het controleren van de effectiviteit van toegangscontroles, en het waarborgen dat alle beveiligingsvereisten worden nageleefd.

Het Azure DevOps audit log vormt het centrale punt voor monitoring van toegangsbeheer. Dit log bevat alle belangrijke gebeurtenissen, zoals wanneer gebruikers worden toegevoegd aan of verwijderd uit projecten, wanneer rollen worden gewijzigd, wanneer branch policies worden aangepast, en wanneer pipelines worden uitgevoerd of gewijzigd. Configureer het audit log om automatisch te worden geëxporteerd naar Azure Log Analytics, waar geavanceerde query's kunnen worden uitgevoerd om trends te identificeren, afwijkingen te detecteren, en compliance-rapporten te genereren. Stel waarschuwingen in voor verdachte activiteiten, zoals wanneer meerdere gebruikers in korte tijd worden toegevoegd, wanneer beheerdersrollen worden gewijzigd, of wanneer belangrijke branch policies worden aangepast.

Voer regelmatig toegangsreviews uit om te verifiëren dat alle toegang nog steeds gerechtvaardigd is. Deze reviews moeten worden uitgevoerd op minimaal kwartaalbasis, maar voor rollen met uitgebreide rechten zoals Project Administrators of Build Administrators moeten reviews vaker worden uitgevoerd, bijvoorbeeld maandelijks. Tijdens reviews moeten alle gebruikersaccounts worden gecontroleerd, inclusief directe gebruikersrechten, groepslidmaatschappen, en service principal rechten. Accounts die niet langer actief zijn, zoals van voormalige medewerkers of contractors, moeten onmiddellijk worden verwijderd. Rechten die niet langer nodig zijn moeten worden ingetrokken, zelfs wanneer accounts nog actief zijn.

Monitor regelmatig welke service connections en service principals toegang hebben tot Azure DevOps en welke rechten deze hebben. Service connections worden vaak gebruikt door pipelines om toegang te krijgen tot externe services zoals Azure-resources, maar kunnen ook worden misbruikt als zij te veel rechten hebben of niet goed worden beheerd. Review regelmatig welke service connections bestaan, welke rechten deze hebben, wanneer zij voor het laatst zijn gebruikt, en of zij nog steeds nodig zijn. Verwijder ongebruikte service connections om het aanvalsoppervlak te minimaliseren. Overweeg het gebruik van managed identities in plaats van service principal credentials waar mogelijk, omdat managed identities automatisch worden beheerd en niet handmatig hoeven te worden geroteerd.

Genereer maandelijks compliance-rapporten die een overzicht bieden van de toegangsbeheerstatus. Deze rapporten moeten informatie bevatten over het aantal actieve gebruikers per rol, het aantal toegangswijzigingen in de afgelopen maand, het aantal uitgevoerde toegangsbeoordelingen, en eventuele afwijkingen of problemen die zijn geïdentificeerd. Deze rapporten kunnen worden gebruikt voor management reporting, audit-doeleinden, en voor het identificeren van trends of verbeterpunten. Rapporten moeten worden gedistribueerd naar relevante stakeholders, zoals security officers, compliance managers, en projectmanagers.

Remediatie

Gebruik PowerShell-script access-governance.ps1 (functie Invoke-Remediation) – Herstelt toegangsbeheerconfiguraties naar de gewenste staat.

Wanneer tijdens monitoring wordt vastgesteld dat toegangsbeheer niet correct is geconfigureerd of dat onbevoegde toegang bestaat, moet direct actie worden ondernomen om de beveiliging te herstellen. Het remediatieproces begint met het identificeren van de specifieke problemen, zoals gebruikers met te veel rechten, ontbrekende branch policies, of onbeveiligde service connections. Prioriteer problemen op basis van risico en bedrijfskritiek, waarbij hoog-risico problemen zoals beheerdersaccounts met onbeperkte rechten of repositories zonder branch policies onmiddellijk moeten worden aangepakt.

Voor gebruikers met te veel rechten moet de toegang worden aangepast om te voldoen aan het principe van minimale privileges. Dit kan betekenen dat gebruikers worden verwijderd uit groepen met uitgebreide rechten, dat directe rechten worden ingetrokken, of dat gebruikers worden verplaatst naar rollen met beperktere rechten die beter passen bij hun verantwoordelijkheden. Wanneer toegang wordt aangepast, moet worden gecommuniceerd met de betrokken gebruikers om uit te leggen waarom de wijziging is doorgevoerd en wat de impact is op hun werkzaamheden. Dit voorkomt verrassingen en helpt gebruikers te begrijpen waarom bepaalde rechten nodig zijn voor hun werk.

Voor repositories zonder branch policies moeten deze policies worden geconfigureerd om te voorkomen dat code direct wordt gecommit zonder code review. Configureer policies die vereisen dat alle wijzigingen via pull requests worden aangebracht, dat minimaal één of twee reviewers de code moeten goedkeuren, en dat build validaties moeten slagen. Voor zeer kritieke branches kan worden geconfigureerd dat alleen specifieke personen of groepen code kunnen mergen. Wanneer branch policies worden toegevoegd aan bestaande repositories, moet worden gecommuniceerd met development teams om uit te leggen wat de nieuwe vereisten zijn en hoe zij hieraan kunnen voldoen.

Voor onbeveiligde service connections moeten deze worden beveiligd door het gebruik van managed identities waar mogelijk, of door service principal credentials te roteren en te beperken tot minimale rechten. Review alle service connections en verwijder ongebruikte connections. Voor service connections die nog nodig zijn, verifieer dat zij alleen de minimale rechten hebben die nodig zijn voor hun functie. Configureer service connections om automatisch te worden gedeactiveerd wanneer zij gedurende een bepaalde periode niet worden gebruikt, bijvoorbeeld na 90 dagen inactiviteit.

Documenteer alle remediatie-activiteiten, inclusief welke problemen zijn geïdentificeerd, welke acties zijn ondernomen, wie verantwoordelijk was voor de remediatie, en wanneer de remediatie is voltooid. Deze documentatie is essentieel voor audit-doeleinden en voor het aantonen dat organisaties proactief omgaan met beveiligingsproblemen. Verifieer na remediatie dat de problemen daadwerkelijk zijn opgelost door de configuratie opnieuw te controleren en door te monitoren of er geen nieuwe problemen ontstaan.

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 DevOps Access Governance Monitoring en Remediatie .DESCRIPTION Monitort en beheert toegangsbeheer voor Azure DevOps organisaties, projecten, repositories en pipelines volgens best practices voor minimale privileges, regelmatige toegangsbeoordelingen en auditlogging. .NOTES Filename: access-governance.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.DevOps [CmdletBinding()] param( [Parameter()][switch]$Monitoring, [Parameter()][switch]$Remediation, [Parameter()][switch]$Revert, [switch]$WhatIf ) $ErrorActionPreference = 'Stop' Write-Host "`n========================================`nAzure DevOps Access Governance`n========================================`n" -ForegroundColor Cyan function Connect-RequiredServices { if (-not (Get-AzContext)) { Connect-AzAccount | Out-Null } if (-not (Get-AzDevOpsContext)) { $orgUrl = Read-Host "Voer Azure DevOps organisatie URL in (bijv. https://dev.azure.com/yourorg)" az devops login --organization $orgUrl } } function Test-AccessGovernance { param( [string]$OrganizationUrl, [string]$ProjectName ) $result = @{ isCompliant = $false issues = @() totalUsers = 0 overPrivilegedUsers = 0 inactiveUsers = 0 repositoriesWithoutBranchPolicies = 0 unsecuredServiceConnections = 0 } try { # Check organization administrators $orgAdmins = az devops security group membership list --id "[$OrganizationUrl]\Project Collection Administrators" --organization $OrganizationUrl | ConvertFrom-Json if ($orgAdmins.Count -gt 5) { $result.issues += "Te veel organisatiebeheerders: $($orgAdmins.Count) (aanbevolen: maximaal 5)" $result.overPrivilegedUsers += $orgAdmins.Count } # Check project-level permissions if ($ProjectName) { $projectUsers = az devops user list --organization $OrganizationUrl --project $ProjectName | ConvertFrom-Json $result.totalUsers = $projectUsers.Count # Check for Project Administrators $projectAdmins = az devops security group membership list --id "[$OrganizationUrl]\$ProjectName\Project Administrators" --organization $OrganizationUrl | ConvertFrom-Json if ($projectAdmins.Count -gt 3) { $result.issues += "Te veel projectbeheerders in $ProjectName : $($projectAdmins.Count) (aanbevolen: maximaal 3)" $result.overPrivilegedUsers += $projectAdmins.Count } # Check repositories for branch policies $repos = az repos list --organization $OrganizationUrl --project $ProjectName | ConvertFrom-Json foreach ($repo in $repos) { $branchPolicies = az repos policy list --organization $OrganizationUrl --project $ProjectName --repository-id $repo.id | ConvertFrom-Json if ($branchPolicies.Count -eq 0) { $result.issues += "Repository $($repo.name) heeft geen branch policies geconfigureerd" $result.repositoriesWithoutBranchPolicies++ } } } # Check service connections $serviceConnections = az devops service-endpoint list --organization $OrganizationUrl --project $ProjectName | ConvertFrom-Json foreach ($sc in $serviceConnections) { if ($sc.authorization.scheme -eq "UsernamePassword" -or $sc.authorization.scheme -eq "Token") { $result.issues += "Service connection $($sc.name) gebruikt onveilige authenticatiemethode: $($sc.authorization.scheme)" $result.unsecuredServiceConnections++ } } # Determine compliance if ($result.issues.Count -eq 0) { $result.isCompliant = $true } return $result } catch { Write-Host "Fout bij het controleren van toegangsbeheer: $_" -ForegroundColor Red throw } } function Invoke-Monitoring { try { Write-Host "Monitoring:" -ForegroundColor Yellow Connect-RequiredServices $orgUrl = Read-Host "Voer Azure DevOps organisatie URL in (bijv. https://dev.azure.com/yourorg)" $projectName = Read-Host "Voer project naam in (optioneel, druk Enter om over te slaan)" if ([string]::IsNullOrWhiteSpace($projectName)) { $projectName = $null } $result = Test-AccessGovernance -OrganizationUrl $orgUrl -ProjectName $projectName Write-Host "`nToegangsbeheer Status:" -ForegroundColor Cyan Write-Host " Totaal gebruikers: $($result.totalUsers)" -ForegroundColor White Write-Host " Gebruikers met te veel rechten: $($result.overPrivilegedUsers)" -ForegroundColor $(if ($result.overPrivilegedUsers -eq 0) { "Green" } else { "Yellow" }) Write-Host " Repositories zonder branch policies: $($result.repositoriesWithoutBranchPolicies)" -ForegroundColor $(if ($result.repositoriesWithoutBranchPolicies -eq 0) { "Green" } else { "Yellow" }) Write-Host " Onbeveiligde service connections: $($result.unsecuredServiceConnections)" -ForegroundColor $(if ($result.unsecuredServiceConnections -eq 0) { "Green" } else { "Yellow" }) if ($result.issues.Count -gt 0) { Write-Host "`nGeïdentificeerde problemen:" -ForegroundColor Yellow foreach ($issue in $result.issues) { Write-Host " - $issue" -ForegroundColor Yellow } } Write-Host "`n" -ForegroundColor Cyan if ($result.isCompliant) { Write-Host "COMPLIANT" -ForegroundColor Green exit 0 } else { Write-Host "NON-COMPLIANT" -ForegroundColor Red exit 1 } } catch { Write-Host "ERROR: $_" -ForegroundColor Red exit 2 } } function Invoke-Remediation { try { Write-Host "Remediatie:" -ForegroundColor Yellow Connect-RequiredServices $orgUrl = Read-Host "Voer Azure DevOps organisatie URL in (bijv. https://dev.azure.com/yourorg)" $projectName = Read-Host "Voer project naam in" $result = Test-AccessGovernance -OrganizationUrl $orgUrl -ProjectName $projectName if ($result.isCompliant) { Write-Host "Geen remediatie nodig - configuratie is compliant" -ForegroundColor Green exit 0 } Write-Host "`nRemediatie-acties:" -ForegroundColor Cyan # Remediate repositories without branch policies if ($result.repositoriesWithoutBranchPolicies -gt 0) { Write-Host " Configureren van branch policies voor repositories..." -ForegroundColor Yellow $repos = az repos list --organization $orgUrl --project $projectName | ConvertFrom-Json foreach ($repo in $repos) { $branchPolicies = az repos policy list --organization $orgUrl --project $projectName --repository-id $repo.id | ConvertFrom-Json if ($branchPolicies.Count -eq 0) { Write-Host " Configureren branch policy voor $($repo.name)..." -ForegroundColor White # Note: Branch policy configuration requires specific policy types # This is a simplified example - actual implementation would need specific policy configurations Write-Host " [INFO] Branch policies moeten handmatig worden geconfigureerd via Azure DevOps Portal" -ForegroundColor Yellow Write-Host " [INFO] Navigeer naar: Repos > $($repo.name) > Branches > main > Branch policies" -ForegroundColor Yellow } } } # Remediate service connections if ($result.unsecuredServiceConnections -gt 0) { Write-Host " Controleren service connections..." -ForegroundColor Yellow Write-Host " [INFO] Service connections moeten handmatig worden beoordeeld en bijgewerkt" -ForegroundColor Yellow Write-Host " [INFO] Overweeg het gebruik van Managed Identities waar mogelijk" -ForegroundColor Yellow } Write-Host "`nRemediatie voltooid. Voer monitoring opnieuw uit om te verifiëren." -ForegroundColor Green exit 0 } catch { Write-Host "ERROR: $_" -ForegroundColor Red exit 2 } } function Invoke-Revert { try { Write-Host "Revert:" -ForegroundColor Yellow Write-Host " [INFO] Revert functionaliteit is niet beschikbaar voor deze control" -ForegroundColor Yellow Write-Host " [INFO] Wijzigingen moeten handmatig worden teruggedraaid via Azure DevOps Portal" -ForegroundColor Yellow exit 0 } catch { Write-Host "ERROR: $_" -ForegroundColor Red exit 2 } } # ================================================================================ # Standaard Invoke-* Functions (Auto-generated) # ================================================================================ function Invoke-Implementation { <# .SYNOPSIS Implementeert de configuratie #> [CmdletBinding()] param() Invoke-Remediation } try { if ($Revert) { Invoke-Revert } elseif ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { Invoke-Remediation } else { Write-Host "Use: -Monitoring | -Remediation | -Revert" -ForegroundColor Yellow } } catch { throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder gestructureerd toegangsbeheer in Azure DevOps ontstaan er aanzienlijke beveiligingsrisico's die kunnen leiden tot datalekken, ongeautoriseerde code-wijzigingen, of compromittering van CI/CD-pipelines. Wanneer ontwikkelaars, contractors of externe partijen toegang krijgen tot repositories zonder duidelijke governance, kunnen zij per ongeluk of opzettelijk gevoelige informatie zoals API-keys, wachtwoorden of configuratiegegevens in broncode committen. Zonder regelmatige toegangsbeoordelingen blijven oude accounts actief die niet langer nodig zijn, waardoor het aanvalsoppervlak groeit. Het ontbreken van auditlogging maakt het onmogelijk om te achterhalen wie toegang heeft verleend of wie wijzigingen heeft aangebracht aan kritieke resources. Dit vormt een kritiek probleem voor organisaties die moeten voldoen aan compliance-vereisten zoals de BIO-normen, ISO 27001 of de NIS2-richtlijn.

Management Samenvatting

Azure DevOps Access Governance implementeert gestructureerd toegangsbeheer met rollen, branch policies, regelmatige toegangsbeoordelingen en auditlogging. Configureer organisatie- en projectniveau rollen, implementeer branch policies voor code reviews, beheer pipeline-toegang zorgvuldig, en voer regelmatige toegangsbeoordelingen uit. Implementatie: 40 uur. Essentieel voor compliance met BIO, ISO 27001 en NIS2.