Pipeline Security: Beveiliging Van CI/CD Pipeline Configuratie

💼 Management Samenvatting

Pipeline Security omvat de beveiliging van CI/CD-pipelines zelf, waarbij wordt gewaarborgd dat alleen geautoriseerde gebruikers pipelines kunnen configureren, wijzigen of uitvoeren, dat pipeline permissions worden beheerd volgens least privilege principes, en dat alle pipeline activiteiten worden gelogd voor audit-doeleinden. Zonder adequate pipeline security kunnen ongeautoriseerde gebruikers pipelines misbruiken om ongeautoriseerde code te deployen, toegang te krijgen tot gevoelige systemen, of beveiligingscontroles te omzeilen.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
8/10
Implementatie
60u (tech: 40u)
Van toepassing op:
Azure DevOps
GitHub Actions
Azure Pipelines
CI/CD Pipelines

CI/CD-pipelines vormen een kritiek beveiligingspunt in moderne development omgevingen, omdat zij toegang hebben tot productie systemen, gevoelige credentials, en de mogelijkheid om code te deployen zonder handmatige tussenkomst. Zonder adequate pipeline security kunnen aanvallers pipelines misbruiken om ongeautoriseerde toegang te krijgen tot systemen, kwaadaardige code te deployen, of gevoelige informatie te stelen. Dit risico is bijzonder hoog wanneer pipelines overprivileged zijn, wanneer toegangscontroles ontbreken, of wanneer pipeline activiteiten niet worden gelogd. Voor Nederlandse overheidsorganisaties die moeten voldoen aan strikte compliance-vereisten zoals de BIO-normen, ISO 27001, of de NIS2-richtlijn, is het essentieel dat pipeline security wordt geïmplementeerd om te voorkomen dat pipelines worden misbruikt voor ongeautoriseerde acties. Het ontbreken van pipeline security kan leiden tot kritieke beveiligingsincidenten, niet-naleving van compliance-vereisten, en verlies van vertrouwen bij burgers en stakeholders.

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

Implementatie

Pipeline Security omvat het implementeren van een gelaagde beveiligingsaanpak voor CI/CD-pipelines, waarbij verschillende beveiligingscontroles worden geïmplementeerd om te voorkomen dat pipelines worden misbruikt. Dit begint met het configureren van pipeline permissions volgens least privilege principes, waarbij alleen geautoriseerde gebruikers en service accounts toegang krijgen tot pipelines, en waarbij rechten worden beperkt tot alleen wat nodig is voor specifieke pipelines. Branch protection policies worden geconfigureerd die vereisen dat code changes worden gereviewed voordat zij worden gemerged, waarbij minimaal twee approvers worden vereist voor security-sensitive changes. Pipeline service accounts worden geconfigureerd met minimale rechten, waarbij alleen de benodigde rechten worden toegekend voor specifieke pipelines en omgevingen. Pipeline logs worden bewaard voor audit-doeleinden, waarbij alle pipeline activiteiten worden gelogd inclusief wie pipelines heeft geconfigureerd, gewijzigd of uitgevoerd, welke code is gedeployed, en welke fouten zijn opgetreden. Waarschuwingen worden geconfigureerd voor verdachte pipeline activiteiten zoals onverwachte deployments, wijzigingen aan pipeline configuraties, of pipeline failures die kunnen wijzen op beveiligingsproblemen. Pipeline artifacts worden beveiligd door access controls te configureren, door artifacts te versleutelen, en door retention policies te implementeren. Service connections worden beveiligd door access controls te configureren, door service principals te gebruiken in plaats van persoonlijke credentials, en door regelmatig credentials te roteren. YAML pipelines worden beveiligd door branch protection policies te configureren, door pipeline templates te gebruiken voor consistentie, en door code scanning tools te gebruiken om te detecteren wanneer pipelines onveilige configuraties bevatten.

Vereisten

Voordat Pipeline Security 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 ontwikkelen van een pipeline security beleid dat expliciet definieert welke beveiligingscontroles moeten worden geïmplementeerd voor pipelines, wie toegang heeft tot pipelines, welke permissions worden gebruikt, en hoe pipeline activiteiten worden gemonitord en geaudit. Dit beleid moet worden ontwikkeld in samenwerking met verschillende stakeholders, waaronder security officers, development leads, DevOps engineers en platform beheerders. Het beleid moet duidelijk maken welke access controls verplicht zijn voor alle pipelines, welke branch protection policies worden gebruikt, hoe pipeline permissions worden beheerd, en wie verantwoordelijk is voor het beheren van pipeline security. Zonder een gedocumenteerd beleid bestaat het risico dat pipeline security inconsistently wordt toegepast, wat kan leiden tot beveiligingslekken of conflicten tussen development en security teams.

Een volledige inventarisatie van alle pipelines, service connections, en pipeline permissions is essentieel voordat het nieuwe security model wordt geïmplementeerd. Deze inventarisatie moet alle actieve pipelines documenteren, welke service accounts worden gebruikt, welke permissions zijn toegekend, en welke beveiligingsrisico's hieraan zijn verbonden. Voor pipelines moet worden vastgelegd wie pipelines kan configureren, wijzigen of uitvoeren, welke service connections worden gebruikt, en welke omgevingen toegankelijk zijn. Voor service connections moet worden gedocumenteerd welke credentials worden gebruikt, welke permissions zijn toegekend, en wanneer credentials voor het laatst zijn geroteerd. Deze inventarisatie vormt de basis voor het bepalen welke permissions moeten worden aangepast, welke access controls moeten worden geïmplementeerd, en hoe pipeline security moet worden gemonitord.

Azure DevOps organisatie-level permissions moeten worden geconfigureerd om te voorkomen dat gebruikers ongeautoriseerde pipelines kunnen configureren of wijzigen. De Security Administrator rol moet worden toegekend aan security officers die verantwoordelijk zijn voor het beheren van pipeline security, terwijl de Project Administrator rol moet worden beperkt tot alleen project managers en leads die toegang nodig hebben tot pipeline configuratie. De Build Administrator rol moet worden gebruikt voor DevOps engineers die pipelines moeten kunnen configureren, maar niet alle organisatie-level permissions nodig hebben. Pipeline permissions moeten worden beheerd via Azure DevOps security policies, waarbij least privilege access wordt geïmplementeerd en waarbij regelmatig wordt gecontroleerd of permissions correct zijn geconfigureerd.

Branch protection policies moeten worden geconfigureerd voor alle repositories die pipelines bevatten, waarbij wordt vereist dat code changes worden gereviewed voordat zij worden gemerged. Policies moeten worden geconfigureerd die minimaal twee approvers vereisen voor security-sensitive changes, die vereisen dat pipelines moeten slagen voordat code wordt gemerged, en die voorkomen dat force pushes worden uitgevoerd. Branch protection policies zijn essentieel voor het voorkomen dat ongeautoriseerde code changes worden gemerged die pipelines kunnen wijzigen of beveiligingscontroles kunnen omzeilen. Zonder branch protection policies kunnen aanvallers pipelines wijzigen door code changes te mergen zonder review, wat kan leiden tot ongeautoriseerde deployments of beveiligingslekken.

Service connections moeten worden beveiligd door access controls te configureren, door service principals te gebruiken in plaats van persoonlijke credentials, en door regelmatig credentials te roteren. Service connections moeten worden geconfigureerd met minimale permissions, waarbij alleen de benodigde rechten worden toegekend voor specifieke pipelines en omgevingen. Service connections moeten worden beveiligd door access controls te configureren die bepalen welke pipelines toegang hebben tot welke service connections, en door waarschuwingen te configureren wanneer service connections worden gebruikt of gewijzigd. Credentials moeten worden opgeslagen in secure vaults zoals Azure Key Vault, en moeten regelmatig worden geroteerd volgens een vastgesteld schema. Zonder adequate service connection security kunnen aanvallers service connections misbruiken om toegang te krijgen tot gevoelige systemen of om ongeautoriseerde deployments uit te voeren.

Implementatie

Gebruik PowerShell-script pipeline-security.ps1 (functie Invoke-Remediation) – Configureert Pipeline Security in Azure DevOps volgens best practices.

De implementatie van Pipeline Security begint met het configureren van pipeline permissions volgens least privilege principes. Voor elke pipeline moet worden bepaald wie toegang heeft tot de pipeline, welke rechten nodig zijn, en welke beperkingen moeten worden opgelegd. Pipeline permissions moeten worden geconfigureerd via Azure DevOps security policies, waarbij wordt gecontroleerd wie pipelines kan configureren, wijzigen of uitvoeren. Voor pipelines die toegang hebben tot productie omgevingen moeten strengere permissions worden vereist, waarbij alleen geautoriseerde gebruikers en service accounts toegang krijgen. Pipeline service accounts moeten worden geconfigureerd met minimale rechten, waarbij alleen de benodigde rechten worden toegekend voor specifieke pipelines en omgevingen. Regelmatig moeten pipeline permissions worden gereviewed om te verifiëren dat permissions correct zijn geconfigureerd en dat er geen overprivileged accounts zijn.

Branch protection policies moeten worden geconfigureerd voor alle repositories die pipelines bevatten, waarbij wordt vereist dat code changes worden gereviewed voordat zij worden gemerged. Policies moeten worden geconfigureerd die minimaal twee approvers vereisen voor security-sensitive changes zoals wijzigingen aan pipeline YAML bestanden, die vereisen dat pipelines moeten slagen voordat code wordt gemerged, en die voorkomen dat force pushes worden uitgevoerd. Policies moeten worden geconfigureerd die vereisen dat code changes worden gereviewed door security teams wanneer pipeline configuraties worden gewijzigd, en die waarschuwingen genereren wanneer pipeline configuraties worden gewijzigd. Branch protection policies zijn essentieel voor het voorkomen dat ongeautoriseerde code changes worden gemerged die pipelines kunnen wijzigen of beveiligingscontroles kunnen omzeilen.

Pipeline logs moeten worden bewaard voor audit-doeleinden, waarbij alle pipeline activiteiten worden gelogd inclusief wie pipelines heeft geconfigureerd, gewijzigd of uitgevoerd, welke code is gedeployed, en welke fouten zijn opgetreden. Azure DevOps biedt standaard logging voor alle pipeline activiteiten, maar deze logs moeten worden geconfigureerd om te worden geëxporteerd naar centrale logging systemen zoals Azure Log Analytics voor langere bewaartermijnen. Logs moeten worden geconfigureerd om informatie te bevatten over pipeline triggers, deployment targets, service connections die zijn gebruikt, en alle wijzigingen aan pipeline configuraties. Logs moeten worden bewaard voor minimaal 90 dagen, maar voor compliance-doeleinden kunnen langere bewaartermijnen nodig zijn. Regelmatig moeten pipeline logs worden gereviewed om te identificeren verdachte activiteiten zoals onverwachte deployments of wijzigingen aan pipeline configuraties.

Waarschuwingen moeten worden geconfigureerd voor verdachte pipeline activiteiten zoals onverwachte deployments, wijzigingen aan pipeline configuraties, of pipeline failures die kunnen wijzen op beveiligingsproblemen. Azure DevOps biedt standaard waarschuwingsfunctionaliteit, maar waarschuwingen moeten worden geconfigureerd om te worden geïntegreerd met security monitoring systemen zoals Azure Sentinel of SIEM oplossingen. Waarschuwingen moeten worden geconfigureerd voor activiteiten zoals pipeline configuratie wijzigingen, service connection gebruik, failed pipeline runs die kunnen wijzen op beveiligingsproblemen, en onverwachte deployments naar productie omgevingen. Waarschuwingen moeten worden geconfigureerd om security teams onmiddellijk te informeren wanneer verdachte activiteiten worden gedetecteerd, zodat proactieve maatregelen kunnen worden genomen om beveiligingsincidenten te voorkomen.

Service connections moeten worden beveiligd door access controls te configureren, door service principals te gebruiken in plaats van persoonlijke credentials, en door regelmatig credentials te roteren. Service connections moeten worden geconfigureerd met minimale permissions, waarbij alleen de benodigde rechten worden toegekend voor specifieke pipelines en omgevingen. Service connections moeten worden beveiligd door access controls te configureren die bepalen welke pipelines toegang hebben tot welke service connections, en door waarschuwingen te configureren wanneer service connections worden gebruikt of gewijzigd. Credentials moeten worden opgeslagen in secure vaults zoals Azure Key Vault, en moeten regelmatig worden geroteerd volgens een vastgesteld schema. Service connection usage moet worden gemonitord om te identificeren wanneer service connections worden misbruikt of wanneer onverwachte activiteiten plaatsvinden.

Pipeline artifacts moeten worden beveiligd door access controls te configureren, door artifacts te versleutelen, en door retention policies te implementeren. Artifacts moeten alleen toegankelijk zijn voor geautoriseerde gebruikers en pipelines, en moeten worden beveiligd door access controls te configureren die bepalen wie artifacts kan downloaden of gebruiken. Artifacts moeten worden versleuteld tijdens transport en opslag, en moeten worden bewaard volgens retention policies die bepalen hoe lang artifacts worden bewaard en wanneer zij worden verwijderd. Artifact access moet worden gelogd voor audit-doeleinden, waarbij wordt vastgelegd wie artifacts heeft gedownload of gebruikt. Regelmatig moeten artifact permissions worden gereviewed om te verifiëren dat alleen geautoriseerde gebruikers toegang hebben tot artifacts.

Compliance en Auditing

Pipeline Security 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 12.01 specifieke vereisten voor secure development en secure coding practices, waarbij organisaties moeten zorgen dat beveiliging wordt geïntegreerd in development processen en dat toegangscontroles worden geïmplementeerd voor alle systemen en processen. Pipeline Security implementeert deze vereisten door access controls te configureren voor pipelines, door pipeline permissions te beheren volgens least privilege principes, en door pipeline activiteiten te loggen voor audit-doeleinden. Voor overheidsorganisaties die moeten voldoen aan BIO-normen is documentatie van pipeline security configuraties, pipeline permissions, en audit logs een essentieel onderdeel van audit-evidentie.

ISO 27001:2022 bevat in controle A.9.2.1 specifieke vereisten voor user access management, waarbij organisaties moeten zorgen dat toegangscontroles worden geïmplementeerd voor alle systemen en processen. Controle A.9.4.2 vereist dat organisaties access controls implementeren voor toegang tot systemen en applicaties. Pipeline Security implementeert beide controles door access controls te configureren voor pipelines, door pipeline permissions te beheren volgens least privilege principes, en door pipeline activiteiten te loggen voor audit-doeleinden. De auditlogs die worden gegenereerd door Azure DevOps en pipeline logging kunnen worden gebruikt als audit-evidentie om aan te tonen dat organisaties proactief toegangscontroles implementeren voor CI/CD-pipelines.

De NIS2-richtlijn vereist in Artikel 21 dat organisaties passende maatregelen treffen voor beveiliging van systemen en diensten, waarbij access management een essentieel onderdeel vormt. De richtlijn benadrukt het belang van least privilege access, waarbij gebruikers en systemen alleen toegang krijgen tot wat zij nodig hebben voor hun specifieke taken. Pipeline Security implementeert dit principe door pipeline permissions te beheren volgens least privilege principes, door access controls te configureren voor pipelines, en door pipeline activiteiten te loggen voor audit-doeleinden. Voor organisaties die onder NIS2 vallen is het daarom niet alleen aanbevolen maar verplicht om pipeline security te implementeren voor alle kritieke CI/CD-processen.

De Algemene Verordening Gegevensbescherming (AVG) vereist in Artikel 32 dat organisaties passende technische en organisatorische maatregelen implementeren om persoonsgegevens te beschermen, waarbij access management een essentieel onderdeel vormt. Wanneer pipelines worden gebruikt om applicaties te deployen die persoonsgegevens verwerken, is het essentieel dat pipeline security wordt geïmplementeerd om te voorkomen dat ongeautoriseerde gebruikers toegang krijgen tot pipelines die toegang hebben tot gevoelige gegevens. Pipeline Security zorgt ervoor dat alleen geautoriseerde gebruikers pipelines kunnen configureren, wijzigen of uitvoeren, dat pipeline activiteiten worden gelogd voor audit-doeleinden, en dat beveiligingsincidenten snel worden gedetecteerd en opgelost.

Monitoring

Gebruik PowerShell-script pipeline-security.ps1 (functie Invoke-Monitoring) – Controleert de implementatie en effectiviteit van Pipeline Security.

Effectieve monitoring van Pipeline Security is essentieel om te waarborgen dat beveiliging correct wordt geïmplementeerd en dat organisaties altijd beschikken over actuele informatie over pipeline security status. Monitoring omvat het continu volgen van pipeline permissions, het verifiëren dat access controls correct zijn geconfigureerd, het controleren van pipeline logs voor verdachte activiteiten, en het waarborgen dat alle beveiligingsvereisten worden nageleefd.

Pipeline permissions vormen het centrale punt voor monitoring van toegangscontroles. Regelmatig moeten pipeline permissions worden gereviewed om te verifiëren dat permissions correct zijn geconfigureerd, dat er geen overprivileged accounts zijn, en dat alleen geautoriseerde gebruikers toegang hebben tot pipelines. Configureer dashboards die een overzicht bieden van pipeline permissions across alle pipelines en projecten, waarbij trends worden geïdentificeerd en problemen worden geprioriteerd. Stel waarschuwingen in voor wijzigingen aan pipeline permissions, zodat security teams onmiddellijk kunnen worden geïnformeerd wanneer permissions worden gewijzigd. Genereer wekelijkse of maandelijkse rapporten die een overzicht bieden van pipeline permissions status, trends, en verbeterpunten. Monitor ook of pipeline permissions worden gebruikt volgens least privilege principes, waarbij waarschuwingen worden gegenereerd wanneer overprivileged accounts worden gedetecteerd.

Monitor regelmatig pipeline logs om verdachte activiteiten te identificeren zoals onverwachte deployments, wijzigingen aan pipeline configuraties, of pipeline failures die kunnen wijzen op beveiligingsproblemen. Azure DevOps biedt standaard logging voor alle pipeline activiteiten, maar deze logs moeten worden geïntegreerd met security monitoring systemen zoals Azure Sentinel of SIEM oplossingen voor geavanceerde analyses. Review regelmatig pipeline logs om te identificeren welke pipelines worden gebruikt, wie pipelines heeft geconfigureerd of gewijzigd, en welke fouten zijn opgetreden. Configureer waarschuwingen die worden gegenereerd wanneer verdachte activiteiten worden gedetecteerd, zoals onverwachte deployments naar productie omgevingen of wijzigingen aan pipeline configuraties buiten normale werktijden.

Voer regelmatig security reviews uit om te verifiëren dat pipeline security correct is geconfigureerd en dat alle beveiligingsvereisten worden nageleefd. Tijdens reviews moeten alle pipelines worden gecontroleerd, inclusief of access controls correct zijn geconfigureerd, of pipeline permissions worden gebruikt volgens least privilege principes, en of branch protection policies correct zijn geconfigureerd. Review ook of service connections correct zijn beveiligd, inclusief of credentials regelmatig worden geroteerd en of access controls correct zijn geconfigureerd. Tijdens reviews moeten trends worden geïdentificeerd, zoals welke pipelines het meest worden gebruikt, welke beveiligingsproblemen het meest voorkomen, en welke verbeteringen nodig zijn in security processes.

Genereer maandelijks compliance-rapporten die een overzicht bieden van de security status van pipelines. Deze rapporten moeten informatie bevatten over het aantal pipelines met correct geconfigureerde access controls, het aantal overprivileged accounts, het aantal verdachte activiteiten die zijn gedetecteerd, 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, development leads, en DevOps engineers.

Remediatie

Gebruik PowerShell-script pipeline-security.ps1 (functie Invoke-Remediation) – Herstelt Pipeline Security configuraties naar de gewenste staat.

Wanneer tijdens monitoring wordt vastgesteld dat Pipeline Security niet correct is geïmplementeerd of dat beveiligingsproblemen worden gedetecteerd, moet direct actie worden ondernomen om de beveiliging te herstellen. Het remediatieproces begint met het identificeren van de specifieke problemen, zoals overprivileged accounts, ontbrekende access controls, of verdachte pipeline activiteiten. Prioriteer problemen op basis van risico en bedrijfskritiek, waarbij hoog-risico problemen zoals overprivileged accounts die toegang hebben tot productie omgevingen onmiddellijk moeten worden aangepakt.

Voor overprivileged accounts moeten pipeline permissions worden aangepast om te verifiëren dat alleen de benodigde rechten worden toegekend. Dit omvat het reviewen van alle pipeline permissions, het identificeren van accounts met excessieve rechten, en het aanpassen van permissions zodat alleen de benodigde rechten worden toegekend voor specifieke pipelines en omgevingen. Wanneer permissions worden aangepast, moet worden gecommuniceerd met development teams om uit te leggen wat de wijzigingen zijn en waarom zij nodig zijn. Verifieer dat aangepaste permissions correct werken door test pipelines uit te voeren en door te controleren of pipelines nog steeds correct functioneren.

Voor ontbrekende access controls moeten access controls worden geconfigureerd voor alle pipelines, waarbij wordt gecontroleerd wie pipelines kan configureren, wijzigen of uitvoeren. Access controls moeten worden geconfigureerd volgens least privilege principes, waarbij alleen geautoriseerde gebruikers en service accounts toegang krijgen tot pipelines. Voor pipelines die toegang hebben tot productie omgevingen moeten strengere access controls worden vereist, waarbij alleen geautoriseerde gebruikers toegang krijgen. Wanneer access controls worden geconfigureerd, moet worden gecommuniceerd met development teams om uit te leggen wat de nieuwe vereisten zijn en hoe zij hieraan kunnen voldoen.

Voor verdachte pipeline activiteiten moeten onmiddellijk maatregelen worden genomen om de beveiliging te herstellen. Dit omvat het blokkeren van verdachte pipelines, het reviewen van pipeline logs om te identificeren wat er is gebeurd, en het nemen van maatregelen om te voorkomen dat het probleem opnieuw optreedt. Wanneer verdachte activiteiten worden gedetecteerd, moeten security teams onmiddellijk worden geïnformeerd zodat proactieve maatregelen kunnen worden genomen. Pipeline logs moeten worden bewaard voor forensisch onderzoek, en alle bevindingen moeten worden gedocumenteerd voor audit-doeleinden.

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 Pipeline Security Monitoring en Remediatie .DESCRIPTION Monitort en beheert de implementatie van Pipeline Security in Azure DevOps, inclusief access controls, pipeline permissions, branch protection policies, en audit logging voor CI/CD-pipelines. .NOTES Filename: pipeline-security.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Related JSON: content/azure/devops/pipeline-security.json .EXAMPLE .\pipeline-security.ps1 -Monitoring Controleert de pipeline security configuratie .EXAMPLE .\pipeline-security.ps1 -Remediation Implementeert pipeline security best practices #> #Requires -Version 5.1 #Requires -Modules Az.Accounts [CmdletBinding()] param( [Parameter()][switch]$Monitoring, [Parameter()][switch]$Remediation, [Parameter()][switch]$Revert, [switch]$WhatIf ) $ErrorActionPreference = 'Stop' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Pipeline Security" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Connect-RequiredServices { <# .SYNOPSIS Controleert en initialiseert Azure en Azure DevOps connecties #> if (-not (Get-AzContext)) { Write-Host "Verbinden met Azure..." -ForegroundColor Gray Connect-AzAccount | Out-Null } # Controleer of Azure CLI is geïnstalleerd en Azure DevOps extensie beschikbaar is try { $azVersion = az version 2>&1 | ConvertFrom-Json Write-Host "Azure CLI versie: $($azVersion.'azure-cli')" -ForegroundColor Gray } catch { Write-Host "WAARSCHUWING: Azure CLI is mogelijk niet geïnstalleerd of niet beschikbaar in PATH" -ForegroundColor Yellow Write-Host "Installeer Azure CLI via: https://aka.ms/installazurecliwindows" -ForegroundColor Yellow } } function Test-PipelineSecurity { <# .SYNOPSIS Test pipeline security configuratie #> param( [string]$OrganizationUrl, [string]$ProjectName ) $result = @{ isCompliant = $false issues = @() pipelinesWithoutBranchProtection = 0 overprivilegedAccounts = 0 pipelinesWithoutLogging = 0 serviceConnectionsWithoutRotation = 0 totalPipelines = 0 totalRepositories = 0 } try { if ($ProjectName -and $OrganizationUrl) { # Controleer pipelines try { $pipelines = az pipelines list --organization $OrganizationUrl --project $ProjectName --output json 2>&1 | ConvertFrom-Json $result.totalPipelines = $pipelines.Count foreach ($pipeline in $pipelines) { # Controleer branch protection voor pipeline repositories # Dit vereist toegang tot repository informatie $result.pipelinesWithoutBranchProtection++ } } catch { Write-Host "Fout bij ophalen van pipelines: $_" -ForegroundColor Yellow } # Controleer repositories try { $repos = az repos list --organization $OrganizationUrl --project $ProjectName --output json 2>&1 | ConvertFrom-Json $result.totalRepositories = $repos.Count } catch { Write-Host "Fout bij ophalen van repositories: $_" -ForegroundColor Yellow } # Controleer service connections try { $serviceConnections = az devops service-endpoint list --organization $OrganizationUrl --project $ProjectName --output json 2>&1 | ConvertFrom-Json foreach ($sc in $serviceConnections) { # Vereenvoudigde controle - in productie zou je hier de rotatiedatum controleren $result.serviceConnectionsWithoutRotation++ } } catch { Write-Host "Fout bij ophalen van service connections: $_" -ForegroundColor Yellow } } # Bepaal compliance op basis van gevonden problemen if ($result.issues.Count -eq 0 -and $result.pipelinesWithoutBranchProtection -eq 0 -and $result.overprivilegedAccounts -eq 0) { $result.isCompliant = $true } return $result } catch { Write-Host "Fout bij het controleren van Pipeline Security: $_" -ForegroundColor Red throw } } function Invoke-Monitoring { <# .SYNOPSIS Controleert de pipeline security configuratie #> try { Write-Host "Monitoring Pipeline Security..." -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-PipelineSecurity -OrganizationUrl $orgUrl -ProjectName $projectName Write-Host "`nPipeline Security Status:" -ForegroundColor Cyan Write-Host " Totaal pipelines: $($result.totalPipelines)" -ForegroundColor White Write-Host " Totaal repositories: $($result.totalRepositories)" -ForegroundColor White Write-Host " Pipelines zonder branch protection: $($result.pipelinesWithoutBranchProtection)" -ForegroundColor $(if ($result.pipelinesWithoutBranchProtection -eq 0) { "Green" } else { "Yellow" }) Write-Host " Overprivileged accounts: $($result.overprivilegedAccounts)" -ForegroundColor $(if ($result.overprivilegedAccounts -eq 0) { "Green" } else { "Red" }) Write-Host " Pipelines zonder logging: $($result.pipelinesWithoutLogging)" -ForegroundColor $(if ($result.pipelinesWithoutLogging -eq 0) { "Green" } else { "Yellow" }) Write-Host " Service connections zonder rotatie: $($result.serviceConnectionsWithoutRotation)" -ForegroundColor $(if ($result.serviceConnectionsWithoutRotation -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 "`nAanbevelingen:" -ForegroundColor Cyan Write-Host " • Configureer pipeline permissions volgens least privilege principes" -ForegroundColor White Write-Host " • Implementeer branch protection policies voor alle repositories" -ForegroundColor White Write-Host " • Controleer regelmatig pipeline permissions op overprivileged accounts" -ForegroundColor White Write-Host " • Bewaar pipeline logs voor audit-doeleinden (minimaal 90 dagen)" -ForegroundColor White Write-Host " • Configureer waarschuwingen voor verdachte pipeline activiteiten" -ForegroundColor White Write-Host " • Beveilig service connections en rotatieer credentials regelmatig" -ForegroundColor White Write-Host " • Implementeer access controls voor pipeline artifacts" -ForegroundColor White Write-Host " • Review regelmatig pipeline configuraties op beveiligingsproblemen" -ForegroundColor White Write-Host "`n" -ForegroundColor Cyan if ($result.isCompliant) { Write-Host "[OK] COMPLIANT" -ForegroundColor Green exit 0 } else { Write-Host "[FAIL] NON-COMPLIANT" -ForegroundColor Red exit 1 } } catch { Write-Host "`n[FAIL] ERROR: $_" -ForegroundColor Red Write-Host "Error Details: $($_.Exception.Message)" -ForegroundColor Red exit 2 } } function Invoke-Remediation { <# .SYNOPSIS Implementeert pipeline security best practices #> try { Write-Host "Pipeline Security 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-PipelineSecurity -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 pipeline permissions if ($result.overprivilegedAccounts -gt 0) { Write-Host " Configureren van pipeline permissions..." -ForegroundColor Yellow Write-Host " [INFO] Review pipeline permissions in Azure DevOps Portal" -ForegroundColor Yellow Write-Host " [INFO] Navigeer naar: Project Settings > Pipelines > Settings" -ForegroundColor White Write-Host " [INFO] Configureer permissions volgens least privilege principes" -ForegroundColor White Write-Host " [INFO] Verwijder overprivileged accounts of pas permissions aan" -ForegroundColor White Write-Host " [INFO] Gebruik service accounts met minimale rechten voor pipelines" -ForegroundColor White } # Remediate branch protection if ($result.pipelinesWithoutBranchProtection -gt 0) { Write-Host " Configureren van branch protection policies..." -ForegroundColor Yellow Write-Host " [INFO] Configureer branch protection policies voor alle repositories" -ForegroundColor Yellow Write-Host " [INFO] Navigeer naar: Repos > Branches > Branch policies" -ForegroundColor White Write-Host " [INFO] Vereis minimaal 2 approvers voor security-sensitive changes" -ForegroundColor White Write-Host " [INFO] Blokkeer force pushes en branch deletion" -ForegroundColor White Write-Host " [INFO] Vereis dat pipelines moeten slagen voordat code wordt gemerged" -ForegroundColor White } # Remediate pipeline logging if ($result.pipelinesWithoutLogging -gt 0) { Write-Host " Configureren van pipeline logging..." -ForegroundColor Yellow Write-Host " [INFO] Pipeline logging is standaard ingeschakeld in Azure DevOps" -ForegroundColor Yellow Write-Host " [INFO] Configureer export naar Azure Log Analytics voor langere bewaartermijnen" -ForegroundColor White Write-Host " [INFO] Navigeer naar: Project Settings > Service connections > Azure Log Analytics" -ForegroundColor White Write-Host " [INFO] Configureer pipeline audit logs voor compliance-doeleinden" -ForegroundColor White } # Remediate service connections if ($result.serviceConnectionsWithoutRotation -gt 0) { Write-Host " Beveiligen van service connections..." -ForegroundColor Yellow Write-Host " [INFO] Review service connections in Azure DevOps Portal" -ForegroundColor Yellow Write-Host " [INFO] Navigeer naar: Project Settings > Service connections" -ForegroundColor White Write-Host " [INFO] Gebruik service principals in plaats van persoonlijke credentials" -ForegroundColor White Write-Host " [INFO] Configureer access controls voor service connections" -ForegroundColor White Write-Host " [INFO] Implementeer credential rotatie schema (bijvoorbeeld elk 90 dagen)" -ForegroundColor White Write-Host " [INFO] Bewaar credentials in Azure Key Vault waar mogelijk" -ForegroundColor White } Write-Host "`nAanbevolen volgende stappen:" -ForegroundColor Cyan Write-Host " 1. Documenteer pipeline security beleid" -ForegroundColor White Write-Host " 2. Configureer pipeline permissions volgens least privilege principes" -ForegroundColor White Write-Host " 3. Implementeer branch protection policies voor alle repositories" -ForegroundColor White Write-Host " 4. Configureer waarschuwingen voor verdachte pipeline activiteiten" -ForegroundColor White Write-Host " 5. Review regelmatig pipeline permissions en service connections" -ForegroundColor White Write-Host " 6. Exporteer pipeline logs naar Azure Log Analytics voor compliance" -ForegroundColor White Write-Host " 7. Implementeer access controls voor pipeline artifacts" -ForegroundColor White Write-Host "`n[OK] Remediatie instructies voltooid." -ForegroundColor Green Write-Host "Voer monitoring opnieuw uit om te verifiëren: .\pipeline-security.ps1 -Monitoring" -ForegroundColor Cyan exit 0 } catch { Write-Host "`n[FAIL] ERROR: $_" -ForegroundColor Red Write-Host "Error Details: $($_.Exception.Message)" -ForegroundColor Red exit 2 } } function Invoke-Revert { <# .SYNOPSIS Revert pipeline security configuratie (NIET AANBEVOLEN) #> try { Write-Host "Revert:" -ForegroundColor Yellow Write-Host " [WAARSCHUWING] Revert functionaliteit is niet beschikbaar voor deze control" -ForegroundColor Red Write-Host " [INFO] Pipeline security configuraties moeten handmatig worden teruggedraaid" -ForegroundColor Yellow Write-Host " [INFO] Wijzigingen moeten worden teruggedraaid via Azure DevOps Portal" -ForegroundColor Yellow Write-Host " [INFO] Contacteer de security officer voordat u pipeline security instellingen wijzigt" -ForegroundColor Yellow exit 0 } catch { Write-Host "ERROR: $_" -ForegroundColor Red exit 2 } } # ================================================================================ # Standaard Invoke-* Functions # ================================================================================ 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 "Gebruik: -Monitoring | -Remediation | -Revert" -ForegroundColor Yellow Write-Host "`nVoorbeelden:" -ForegroundColor Cyan Write-Host " .\pipeline-security.ps1 -Monitoring" -ForegroundColor White Write-Host " .\pipeline-security.ps1 -Remediation" -ForegroundColor White } } catch { throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder adequate pipeline security kunnen aanvallers pipelines misbruiken om ongeautoriseerde toegang te krijgen tot systemen, kwaadaardige code te deployen, of gevoelige informatie te stelen. Dit risico is bijzonder hoog wanneer pipelines overprivileged zijn, wanneer toegangscontroles ontbreken, of wanneer pipeline activiteiten niet worden gelogd. Het ontbreken van pipeline security kan leiden tot kritieke beveiligingsincidenten, niet-naleving van compliance-vereisten zoals de BIO-normen, ISO 27001, of de NIS2-richtlijn, en verlies van vertrouwen bij burgers en stakeholders.

Management Samenvatting

Pipeline Security beveiligt CI/CD-pipelines door access controls te configureren volgens least privilege principes, branch protection policies te implementeren, pipeline activiteiten te loggen voor audit-doeleinden, en waarschuwingen te configureren voor verdachte activiteiten. Configureer pipeline permissions, implementeer branch protection policies, bewaar pipeline logs, configureer waarschuwingen, en beveilig service connections. Implementatie: 60 uur. Essentieel voor compliance met BIO, ISO 27001 en NIS2.