Microsoft Defender For Cloud: Defender For DevOps Inschakelen

💼 Management Samenvatting

Microsoft Defender for DevOps biedt geïntegreerde beveiligingsbescherming voor ontwikkelings- en CI/CD-omgevingen door geavanceerde kwetsbaarheidsscanning van source code, real-time detectie van beveiligingsproblemen in pipelines, en automatische beveiligingsaanbevelingen te combineren in één uitgebreide oplossing die specifiek is ontworpen voor de unieke uitdagingen van moderne DevOps-workflows.

Aanbeveling
IMPLEMENTEER VOOR DEVOPS SECURITY POSTURE
Risico zonder
Critical
Risk Score
9/10
Implementatie
7u (tech: 4u)
Van toepassing op:
Azure DevOps
GitHub
GitHub Enterprise Cloud
CI/CD Pipelines
DevOps Omgevingen

DevOps-omgevingen vormen een kritiek aanvalsoppervlak voor cybercriminelen omdat zij toegang bieden tot source code, build-artefacten, deployment-credentials en productie-infrastructuur. Aanvallers richten zich steeds vaker op ontwikkelingsomgevingen omdat deze vaak minder strikt beveiligd zijn dan productiesystemen, maar wel toegang bieden tot gevoelige broncode, API-keys, wachtwoorden en andere geheimen die kunnen worden gebruikt voor latere aanvallen. Supply chain-aanvallen waarbij kwaadaardige code wordt geïnjecteerd in open-source dependencies of build-processen vormen een groeiende bedreiging, zoals aangetoond door incidenten zoals de SolarWinds-aanval en de Codecov-compromittering. Kwetsbaarheden in source code die niet worden gedetecteerd tijdens de ontwikkelingsfase worden automatisch geïmplementeerd in productieomgevingen waar zij kunnen worden uitgebuit. Hardcoded credentials en geheimen die per ongeluk worden gecommit naar versiebeheersystemen kunnen worden ontdekt door aanvallers die publieke repositories scannen, wat kan leiden tot ongeautoriseerde toegang tot cloudresources, databases en andere kritieke systemen. Misconfiguraties in CI/CD-pipelines kunnen leiden tot privilege escalation waarbij build-processen meer machtigingen krijgen dan nodig, of tot ongeautoriseerde deployments waarbij code kan worden geïmplementeerd zonder juiste goedkeuring. Zonder gespecialiseerde DevOps-beveiliging blijven al deze bedreigingen onopgemerkt totdat zij daadwerkelijk worden uitgebuit, wat kan leiden tot datalekken, compromittering van productiesystemen en aanzienlijke reputatieschade voor organisaties.

PowerShell Modules Vereist
Primary API: Azure API
Connection: Connect-AzAccount
Required Modules: Az.Accounts, Az.Security

Implementatie

Deze best practice beschrijft het proces voor het inschakelen en configureren van Microsoft Defender for DevOps op Azure-abonnementen die DevOps-omgevingen hosten, inclusief Azure DevOps-organisaties en GitHub-repositories. Defender for DevOps biedt een uitgebreide set beveiligingsmogelijkheden die specifiek zijn ontworpen voor ontwikkelings- en CI/CD-omgevingen, beginnend met geavanceerde kwetsbaarheidsscanning van source code repositories die automatisch bekende Common Vulnerabilities and Exposures (CVE's) identificeert en classificeert op basis van hun ernst en impact. De oplossing detecteert hardcoded credentials en geheimen zoals API-keys, wachtwoorden, connection strings en certificaten die per ongeluk zijn gecommit naar versiebeheersystemen, en waarschuwt beveiligingsteams onmiddellijk wanneer dergelijke gevoelige informatie wordt gedetecteerd. CI/CD-pipeline-beveiliging monitort build- en deployment-processen op misconfiguraties, ongeautoriseerde toegang en verdacht gedrag, waarbij automatisch wordt gecontroleerd of pipelines voldoen aan beveiligingsbest practices zoals het gebruik van secure secrets management, het beperken van build-machtigingen en het implementeren van code signing. Dependency-scanning analyseert open-source packages en libraries die worden gebruikt in applicaties op bekende kwetsbaarheden en supply chain-risico's, waardoor ontwikkelaars proactief kunnen reageren op bedreigingen voordat code wordt geïmplementeerd. Infrastructure as Code (IaC) scanning evalueert ARM-templates, Terraform-configuraties en andere infrastructuurdefinities op beveiligingsmisconfiguraties die kunnen leiden tot onveilige cloudresources. De oplossing integreert naadloos met Microsoft Defender voor Cloud voor geïntegreerd beveiligingsbeheer en compliance-rapportage, waardoor organisaties een centraal overzicht krijgen van alle beveiligingsgebeurtenissen en aanbevelingen voor hun DevOps-omgevingen. De kosten voor Defender for DevOps zijn gebaseerd op het aantal actieve repositories en het aantal scans per maand, waarbij de eerste 500 repositories per maand gratis zijn en aanvullende repositories tegen betaling worden beveiligd.

Vereisten en Voorbereiding

Voor het succesvol inschakelen van Microsoft Defender for DevOps moeten organisaties voldoen aan een reeks technische, licentie- en organisatorische vereisten die essentieel zijn voor een soepele implementatie en optimale werking van de beveiligingsoplossing. Deze vereisten vormen de fundamentele basis waarop de DevOps-beveiligingsoplossing wordt gebouwd en zijn cruciaal om ervoor te zorgen dat de implementatie succesvol verloopt zonder onverwachte belemmeringen of configuratiefouten die kunnen leiden tot gedeeltelijke of onvolledige beveiligingsdekking.

De primaire licentievereiste betreft de DevOps-platformen waarop Defender for DevOps wordt geactiveerd. Voor Azure DevOps-organisaties moet de organisatie beschikken over een Azure DevOps-organisatie met ten minste Basic-licenties voor alle gebruikers die toegang hebben tot repositories die moeten worden beveiligd. Voor GitHub-repositories moet de organisatie beschikken over een GitHub-account met ten minste GitHub Free voor persoonlijke repositories of GitHub Team voor organisatie-repositories, waarbij GitHub Enterprise Cloud wordt aanbevolen voor grotere organisaties die geavanceerde beveiligingsfuncties en compliance-rapportage nodig hebben. Organisaties moeten beschikken over eigenaar- of beheerderrechten op de DevOps-organisatie of GitHub-organisatie om Defender for DevOps te kunnen activeren en configureren, omdat de activering wijzigingen vereist in beveiligingsinstellingen en integraties die alleen kunnen worden uitgevoerd met deze verhoogde rechten.

De technische omgeving vereist PowerShell versie 5.1 of hoger voor Windows-systemen, of PowerShell Core versie 7.0 of hoger voor cross-platform ondersteuning op Linux- en macOS-systemen. Deze versievereisten zijn belangrijk omdat de Azure PowerShell-modules moderne PowerShell-functies gebruiken die niet beschikbaar zijn in oudere versies, en omdat cross-platform ondersteuning essentieel is voor organisaties die geautomatiseerde scripts willen uitvoeren vanuit verschillende operating systems. De Azure PowerShell-modules moeten worden geïnstalleerd, met name de Az.Accounts-module voor authenticatie en sessiebeheer, en de Az.Security-module voor interactie met Azure Defender-services en het beheren van beveiligingsprijstiers. Deze modules kunnen eenvoudig worden geïnstalleerd via het PowerShell Gallery met behulp van de Install-Module-cmdlet, en regelmatige updates worden aanbevolen om toegang te hebben tot de nieuwste functionaliteit, beveiligingspatches en verbeteringen die Microsoft regelmatig uitbrengt.

Microsoft Defender voor Cloud moet reeds zijn ingeschakeld op het Azure-abonnement voordat Defender for DevOps kan worden geactiveerd, omdat Defender voor Cloud de basislaag vormt voor alle Defender-modules en de centrale beveiligingsconsole biedt waarbinnen alle beveiligingsmogelijkheden worden geïntegreerd. De activering van Defender voor Cloud is typisch een eenmalige actie op abonnementsniveau en vormt de eerste stap in het opzetten van een uitgebreide Azure-beveiligingsposture die alle aspecten van cloudbeveiliging omvat, van compute en netwerk tot data en identiteit. Zonder deze basislaag kunnen individuele Defender-modules zoals Defender for DevOps niet worden geactiveerd, omdat zij afhankelijk zijn van de centrale infrastructuur en services die door Defender voor Cloud worden geleverd. De gratis tier van Defender voor Cloud is voldoende als basis, maar voor volledige DevOps-beveiligingsfunctionaliteit moet het DevOps-prijsplan worden geactiveerd.

Voor effectieve DevOps-beveiliging is het belangrijk dat de DevOps-organisaties of GitHub-organisaties minstens één actieve repository bevatten met source code die regelmatig wordt bijgewerkt. Hoe meer repositories en hoe actiever de ontwikkelingsactiviteit, hoe beter Defender for DevOps patronen kan herkennen en hoe nauwkeuriger de aanbevelingen en risico-inschattingen worden. Voor kleinere pilots kunnen test-repositories worden gecreëerd zodat de eerste scans voldoende context leveren om direct waarde te tonen aan bestuurders en ontwikkelaars. Het is belangrijk om te documenteren welke repositories bewust buiten scope vallen en waarom, zodat beveiligingsrapportages altijd een eenduidige interpretatie hebben tijdens audits en compliance-beoordelingen.

Toegang tot de Azure Portal voor DevOps-beveiligingsdashboards en aanbevelingen is essentieel voor de dagelijkse samenwerking tussen security officers, ontwikkelaars en platform engineers. Configureer rolgebaseerde toegang, activeer meervoudige authenticatie en spreek af welk beveiligingsdashboard als bron van waarheid geldt. Zo kunnen bevindingen inclusief visuele code-scanresultaten tijdens stand-ups of security reviews worden besproken zonder dat men afhankelijk is van schermafbeeldingen of exportbestanden. Voorzie key-users van handleidingen, demo's en contactpersonen zodat inzichten uit de portal direct worden vertaald naar acties binnen ontwikkel- en beheerteams.

Financiële overwegingen zijn cruciaal bij de planning van de implementatie, omdat Defender for DevOps directe kosten met zich meebrengt die moeten worden begrepen en gepland voordat de service wordt geactiveerd. De service wordt gefactureerd tegen een tarief waarbij de eerste 500 repositories per maand gratis zijn, en aanvullende repositories tegen betaling worden beveiligd tegen een tarief van gemiddeld €2 tot €5 per repository per maand, afhankelijk van het aantal scans, de omvang van de repositories en het gebruik van specifieke functies zoals geavanceerde dependency-scanning en IaC-analyse. Voor organisaties met honderden of duizenden repositories kunnen deze kosten snel oplopen, maar de waarde die wordt geboden in termen van beveiligingsinzicht, supply chain-bescherming en risicovermindering rechtvaardigt deze investering. Het is raadzaam om een kostenanalyse uit te voeren voordat de service wordt geactiveerd om te begrijpen wat de maandelijkse kosten zullen zijn op basis van uw specifieke omgeving en om budgetgoedkeuring te verkrijgen van de juiste stakeholders.

Monitoring en Verificatie

Effectieve monitoring van de status van Microsoft Defender for DevOps is essentieel om te verzekeren dat de service continu actief blijft en continue beveiligingsbescherming biedt voor alle DevOps-repositories en CI/CD-pipelines binnen de organisatie. Regelmatige verificatie voorkomt dat de service onbedoeld wordt uitgeschakeld, wat zou kunnen gebeuren tijdens beveiligingswijzigingen, kostenbesparingsinitiatieven, herconfiguratie van DevOps-organisaties, of door menselijke fouten tijdens beheeractiviteiten. Zonder actieve monitoring bestaat het risico dat Defender for DevOps wordt gedeactiveerd zonder dat beveiligingsteams hiervan op de hoogte worden gesteld, waardoor ontwikkelingsomgevingen kwetsbaar worden voor aanvallen, supply chain-bedreigingen en beveiligingsincidenten die niet worden gedetecteerd of gereageerd.

De monitoring kan worden uitgevoerd via verschillende methoden, waaronder Azure PowerShell, Azure CLI, de Azure Resource Manager API, of de Azure Portal, afhankelijk van de voorkeur en automatiseringvereisten van de organisatie. De meest directe en geautomatiseerde methode is het gebruik van de Get-AzSecurityPricing-cmdlet uit de Az.Security-module, waarbij de parameter Name wordt ingesteld op 'DevOps' om de specifieke pricing tier voor Defender for DevOps op te halen voor een bepaald abonnement. Deze cmdlet retourneert belangrijke informatie, waaronder de huidige pricing tier (Standard of Free), de status van de service, het aantal beveiligde repositories, en eventuele gerelateerde configuratie-instellingen die van invloed zijn op de functionaliteit en dekking van de beveiligingsoplossing. De pricing tier moet ingesteld zijn op 'Standard' om volledige beveiligingsbescherming te krijgen, inclusief geavanceerde code-scanning, secrets-detectie, CI/CD-pipeline-beveiliging en alle geavanceerde beveiligingsmogelijkheden die Defender for DevOps biedt.

Naast het controleren van de pricing tier is het belangrijk om te verifiëren dat Defender for DevOps daadwerkelijk actief is en dat de code-scanning en pipeline-beveiliging correct functioneren. Dit kan worden geverifieerd via de Azure Portal door naar Microsoft Defender voor Cloud te navigeren, de DevOps-beveiligingssectie te selecteren, en de scanresultaten, aanbevelingen en waarschuwingen te controleren om te zien of de service actief is en of er eventuele configuratiewaarschuwingen of foutmeldingen zijn die aandacht vereisen. Automatische monitoring kan worden geïmplementeerd met behulp van Azure Monitor alertregels die worden geactiveerd wanneer de pricing tier wijzigt van Standard naar Free, wanneer de service wordt gedeactiveerd, wanneer nieuwe kwetsbaarheden worden gedetecteerd in kritieke repositories, of wanneer er problemen worden gedetecteerd met de code-scanning of pipeline-beveiliging. Deze alertregels kunnen worden geconfigureerd om beveiligingsteams te informeren via e-mail, SMS, push-notificaties, of integratie met incidentbeheersystemen zoals ServiceNow, Jira of Microsoft Teams, waardoor snelle respons wordt gegarandeerd wanneer problemen worden gedetecteerd.

Het monitoringproces dient regelmatig te worden uitgevoerd, bij voorkeur dagelijks of ten minste wekelijks, afhankelijk van het risicoprofiel van de organisatie, de kritikaliteit van de DevOps-workloads, en de compliance-vereisten die van toepassing zijn. Voor organisaties met hoge beveiligingsvereisten, kritieke ontwikkelingsomgevingen, of strikte compliance-verplichtingen zoals NIS2, BIO of ISO 27001, is dagelijkse monitoring aanbevolen om snel te kunnen reageren op eventuele wijzigingen in de serviceconfiguratie en om te verzekeren dat de beveiligingsbescherming continu actief blijft. Geautomatiseerde monitoring via Azure Automation runbooks, Logic Apps workflows, of Azure Functions kan de belasting op beheerders aanzienlijk verminderen terwijl continue controle wordt gegarandeerd, en kan worden gecombineerd met rapportage naar beveiligingsdashboards, SIEM-systemen, of compliance-rapportagetools, zodat de status van Defender for DevOps zichtbaar is voor alle belanghebbenden, inclusief beveiligingsteams, ontwikkelaars, compliance-officers, en bestuurders.

Gebruik PowerShell-script defender-for-devops.ps1 (functie Invoke-Monitoring) – Controleert de prijscategorie van Defender for DevOps met Get-AzSecurityPricing -Name 'DevOps' voor alle abonnementen.

Implementatie en Remediatie

Wanneer monitoring aantoont dat Microsoft Defender for DevOps niet actief is, niet op de juiste pricing tier is ingesteld, of niet correct functioneert op een of meer Azure-abonnementen, dient onmiddellijke remediatie te worden uitgevoerd om de beveiligingsbescherming te herstellen en te verzekeren dat alle DevOps-repositories en CI/CD-pipelines adequaat worden beschermd tegen bedreigingen en beveiligingsproblemen. De activering van Defender for DevOps is een relatief eenvoudig proces dat kan worden uitgevoerd via de Azure Portal, Azure PowerShell, Azure CLI, of Infrastructure as Code-templates zoals ARM-templates of Terraform, afhankelijk van de voorkeur en automatiseringvereisten van de organisatie.

De meest betrouwbare en geautomatiseerde methode voor implementatie is het gebruik van Azure PowerShell met de Set-AzSecurityPricing-cmdlet uit de Az.Security-module, waarbij de parameter Name wordt ingesteld op 'DevOps' en de parameter PricingTier wordt ingesteld op 'Standard' om volledige beveiligingsbescherming te activeren. Het remediatieproces begint met verificatie van de huidige abonnementsstatus en het bevestigen dat de benodigde rechten aanwezig zijn om wijzigingen aan te brengen op abonnementsniveau, wat essentieel is omdat de activering van Defender for DevOps wijzigingen vereist in de beveiligingsprijstiers die alleen kunnen worden uitgevoerd met eigenaar- of Security Admin-rechten. Beheerders dienen zich eerst aan te melden bij Azure met behulp van Connect-AzAccount, waarbij wordt gecontroleerd dat zij zijn aangemeld bij het juiste abonnement met behulp van Get-AzContext om te verzekeren dat wijzigingen worden aangebracht in het correcte abonnement en niet per ongeluk in een ander abonnement.

Nadat de context is geverifieerd, kan de Set-AzSecurityPricing-cmdlet worden uitgevoerd om Defender for DevOps te activeren door de pricing tier in te stellen op 'Standard', wat de service activeert op abonnementsniveau en automatisch Defender for DevOps implementeert voor alle gekoppelde DevOps-organisaties en GitHub-repositories binnen het abonnement. Na activering van de service duurt het enkele uren voordat Defender for DevOps volledig operationeel is, omdat gedurende deze periode de eerste code-scans worden uitgevoerd, de repositories worden geïndexeerd, en de eerste beveiligingsaanbevelingen worden gegenereerd. Het is belangrijk om na de activering te verifiëren dat de service daadwerkelijk actief is via de Azure Portal of door opnieuw de Get-AzSecurityPricing-cmdlet uit te voeren, en om te controleren of er geen foutmeldingen of waarschuwingen zijn die kunnen wijzen op problemen met de implementatie of configuratie.

Voor organisaties met meerdere Azure-abonnementen of meerdere DevOps-organisaties dient het remediatieproces te worden uitgevoerd op elk abonnement dat DevOps-workloads bevat, wat handmatig tijdrovend kan zijn en foutgevoelig is wanneer abonnementen worden gemist of wanneer configuratiewijzigingen niet consistent worden toegepast. Dit kan worden geautomatiseerd met behulp van PowerShell-scripts die itereren over alle abonnementen in een tenant, waarbij voor elk abonnement wordt gecontroleerd of DevOps-workloads aanwezig zijn en of Defender for DevOps actief is, en waarbij automatisch remediatie wordt uitgevoerd als de service niet actief is. Deze geautomatiseerde aanpak zorgt voor consistente beveiligingsdekking over de hele organisatie, vermindert het risico dat repositories onbeschermd blijven door menselijke fouten of gemiste abonnementen, en maakt het mogelijk om snel te reageren op wijzigingen in de omgeving, zoals nieuwe repositories of DevOps-organisaties die worden toegevoegd.

Het is belangrijk op te merken dat de activering van Defender for DevOps directe kosten met zich meebrengt op basis van het aantal repositories en het aantal scans per maand, en dat beheerders zich bewust moeten zijn van deze kosten en deze moeten monitoren na activering om te verzekeren dat de kosten binnen het budget blijven en om onverwachte kosten te voorkomen. Als kostenbesparingen nodig zijn, kan overleg worden gepleegd met de beveiligingsteams om te bepalen welke repositories de hoogste prioriteit hebben voor beveiligingsbescherming, hoewel volledige dekking wordt aanbevolen voor alle productie-repositories omdat partiële dekking gaten in de beveiliging kan creëren die kunnen worden uitgebuit door aanvallers. Organisaties kunnen ook overwegen om Azure Cost Management en Billing te gebruiken om de kosten van Defender for DevOps te monitoren en te analyseren, en om budgetwaarschuwingen in te stellen die worden geactiveerd wanneer de kosten een bepaalde drempel overschrijden.

Gebruik PowerShell-script defender-for-devops.ps1 (functie Invoke-Remediation) – Activeert Defender for DevOps met Set-AzSecurityPricing -Name 'DevOps' -PricingTier 'Standard' voor alle abonnementen.

Compliance en Auditing

Microsoft Defender for DevOps vormt een essentieel onderdeel van de compliance-positie van organisaties die DevOps-omgevingen gebruiken, omdat het voldoet aan meerdere beveiligingsstandaarden en compliance-frameworks die vereist zijn voor Nederlandse overheidsorganisaties, bedrijven in kritieke sectoren, en organisaties die moeten voldoen aan internationale beveiligingsstandaarden. De implementatie van Defender for DevOps is niet alleen een best practice voor DevOps-beveiliging, maar ook een expliciete vereiste volgens verschillende erkende beveiligingsstandaarden die worden gebruikt binnen de Nederlandse publieke sector en daarbuiten, en het niet implementeren van deze oplossing kan leiden tot niet-naleving van compliance-vereisten, audit-bevindingen, en potentiële boetes of handhavingsmaatregelen.

De CIS Azure Foundations Benchmark versie 3.0.0 specificeert in verschillende controles expliciet dat organisaties adequate beveiligingsmaatregelen moeten implementeren voor ontwikkelingsomgevingen en CI/CD-pipelines, waarbij Defender for DevOps een belangrijke rol speelt in het voldoen aan deze vereisten. Deze benchmark is een internationaal erkende standaard die wordt gebruikt door organisaties wereldwijd om hun Azure-beveiligingsposture te beoordelen en te verbeteren, en vormt een belangrijke basis voor cloudbeveiligingsbest practices. Het niet naleven van deze controles wordt beschouwd als een hoog risico, omdat het betekent dat DevOps-omgevingen niet adequaat worden beschermd tegen misconfiguraties en bedreigingen, wat kan leiden tot beveiligingsincidenten, datalekken, en service-onderbrekingen. Auditors die CIS-benchmark-assessments uitvoeren, zullen expliciet controleren of adequate DevOps-beveiliging is geïmplementeerd door de activeringsstatus te verifiëren en door te controleren of de service daadwerkelijk functioneert op alle relevante abonnementen, en het niet voldoen aan deze vereiste zal resulteren in een bevinding die moet worden gerepareerd voordat de audit kan worden afgerond.

Binnen de Baseline Informatiebeveiliging Overheid (BIO) sluit deze control aan op thema 11.01 over beleidsmatige borging en thema 12.06 over kwetsbaarheidsbeheer, waarbij specifiek aandacht wordt besteed aan de beveiliging van ontwikkelingsprocessen en supply chain-risico's. Door DevOps-beveiligingsscores per taakorganisatie te koppelen aan de risicodossiers ontstaat een integraal beeld van waar aanvullende maatregelen, zoals code review-processen of dependency-management, noodzakelijk zijn. Defender for DevOps helpt organisaties te voldoen aan deze BIO-vereisten door continue beveiligingsbeoordeling te bieden, kwetsbaarheden in source code te identificeren, secrets-detectie uit te voeren, en compliance-rapportage te genereren die kan worden gebruikt tijdens audits en beoordelingen. Vergeet niet de verantwoordingsplicht richting Algemene Rekenkamer te ondersteunen met dezelfde datasets, en documenteer eveneens hoe uitkomsten met ontwikkel- en beveiligingsteams worden gedeeld zodat risico's voor vitale processen zichtbaar blijven.

De ISO 27001-standaard voor informatiebeveiligingsmanagementsystemen vereist in controles A.14.2.1 en A.14.2.5 dat organisaties structurele evaluatie van ontwikkelingsprocessen en beveiligingscontroles uitvoeren. De dashboards van Defender for DevOps leveren hiervoor tijdgestempelde bewijzen, terwijl de ingebouwde workflowmodule toont welke maatregelen zijn opgevolgd en wie deze heeft goedgekeurd. Daarmee voldoet u zowel aan de documentatie-eisen als aan het principe van continue verbetering. Voeg de DevOps-beveiligingsbewijzen toe aan het Statement of Applicability en onderteken wijzigingen via het bestaande ISMS-proces. Beschrijf daarnaast hoe leveranciers en partners toegang krijgen tot relevante delen van de rapportages zonder vertrouwelijke informatie te zien.

De NIS2-richtlijn, die van toepassing is op organisaties in kritieke sectoren en digitale dienstverleners in de Europese Unie, vereist in artikel 21 dat organisaties passende en evenredige technische en organisatorische maatregelen nemen om de risico's voor de beveiliging van netwerk- en informatiesystemen te beheersen, inclusief het identificeren en beoordelen van risico's, het implementeren van beveiligingsmaatregelen, en het monitoren en detecteren van beveiligingsincidenten. Defender for DevOps helpt organisaties te voldoen aan artikel 21 door uitgebreide DevOps-beveiliging te bieden die kwetsbaarheden in source code identificeert, supply chain-bedreigingen detecteert, secrets-detectie uitvoert, beveiligingsincidenten monitort, en automatische aanbevelingen biedt voor het verbeteren van de beveiligingsposture. De code-scanning en pipeline-beveiliging vormen essentieel onderdeel van een robuuste cybersecurity-aanpak die vereist is onder NIS2, en Nederlandse organisaties die onder de NIS2-richtlijn vallen, dienen daarom Defender for DevOps te implementeren als onderdeel van hun verplichte cybersecurity-maatregelen om te voldoen aan de vereisten voor risicobeheer, incidentdetectie, en incidentrespons.

Voor auditing en compliance-doeleinden is het belangrijk om regelmatig bewijs te verzamelen dat aantoont dat Defender for DevOps actief is en correct functioneert, inclusief de activeringsstatus, scanresultaten, aanbevelingen, secrets-detectie-rapporten, en eventuele configuratiewaarschuwingen of aanbevelingen. Dit bewijs kan worden verkregen via de Azure Portal, Azure PowerShell-cmdlets, de Azure Resource Manager API, of geautomatiseerde scripts die regelmatig worden uitgevoerd om compliance-rapportages te genereren. Auditlogboeken moeten worden bewaard voor de vereiste retentietijd, typisch zeven jaar voor Nederlandse overheidsorganisaties volgens de Archiefwet, en moeten regelmatig worden beoordeeld om te verzekeren dat de service actief blijft en dat alle beveiligingsgebeurtenissen correct worden gelogd en opgeslagen. Documentatie van de activeringsstatus, scanresultaten, aanbevelingen en secrets-detectie-rapporten moeten worden onderhouden voor auditdoeleinden en kunnen worden gebruikt om te demonstreren aan auditors, toezichthouders, en bestuurders dat de organisatie voldoet aan de vereiste beveiligingsstandaarden en dat adequate maatregelen zijn genomen om DevOps-omgevingen te beveiligen.

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 Microsoft Defender for Cloud: Defender for DevOps Inschakelen .DESCRIPTION CIS Azure Foundations Benchmark - Control 2.1.24 BIO Baseline - Thema 11.01, 12.06 NIS2 Richtlijn - Artikel 21 Controleert of Microsoft Defender for DevOps is ingeschakeld. Biedt code-scanning, secrets-detectie, CI/CD-pipeline-beveiliging en supply chain-bescherming voor DevOps-omgevingen. .NOTES Filename: defender-for-devops.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Related JSON: content/azure/defender-cloud/defender-for-devops.json CIS Control: 2.1.24 BIO Controls: 11.01, 12.06 NIS2 Article: 21 #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.Security [CmdletBinding()] param( [Parameter()][switch]$WhatIf, [Parameter()][switch]$Monitoring, [Parameter()][switch]$Remediation, [Parameter()][switch]$Revert ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' $PolicyName = "Microsoft Defender for DevOps" function Connect-RequiredServices { try { if (-not (Get-AzContext)) { Connect-AzAccount | Out-Null } } catch { throw "Failed to connect to Azure: $_" } } function Test-Compliance { Write-Verbose "Testing compliance for: $PolicyName..." $result = [PSCustomObject]@{ ScriptName = "defender-for-devops" PolicyName = $PolicyName IsCompliant = $false TotalResources = 0 CompliantCount = 0 NonCompliantCount = 0 Details = @() Recommendations = @() } try { $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq 'Enabled' } $result.TotalResources = $subscriptions.Count foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id | Out-Null try { $pricing = Get-AzSecurityPricing -Name "DevOps" -ErrorAction Stop if ($pricing.PricingTier -eq 'Standard') { $result.CompliantCount++ $result.Details += "✓ Subscription '$($sub.Name)': Defender for DevOps enabled (Standard tier)" } else { $result.NonCompliantCount++ $result.Details += "✗ Subscription '$($sub.Name)': Defender for DevOps DISABLED (Current tier: $($pricing.PricingTier))" $result.Recommendations += "Enable Defender for DevOps op '$($sub.Name)' met Set-AzSecurityPricing -Name 'DevOps' -PricingTier 'Standard'" } } catch { if ($_.Exception.Message -like "*not found*" -or $_.Exception.Message -like "*does not exist*") { $result.NonCompliantCount++ $result.Details += "✗ Subscription '$($sub.Name)': Defender for DevOps NOT CONFIGURED" $result.Recommendations += "Enable Defender for DevOps op '$($sub.Name)'" } else { $result.NonCompliantCount++ $result.Details += "✗ Subscription '$($sub.Name)': Fout bij controleren - $($_.Exception.Message)" } } } $result.IsCompliant = ($result.NonCompliantCount -eq 0) } catch { $result.Details += "ERROR: $($_.Exception.Message)" } return $result } function Invoke-Remediation { Write-Host "`nStarting remediation for: $PolicyName..." -ForegroundColor Cyan try { $fixed = 0 $failed = 0 $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq 'Enabled' } foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id | Out-Null try { # Check current status $pricing = Get-AzSecurityPricing -Name "DevOps" -ErrorAction SilentlyContinue if ($pricing -and $pricing.PricingTier -eq 'Standard') { Write-Host " [OK] Already enabled for: $($sub.Name)" -ForegroundColor Green $fixed++ } else { # Enable Defender for DevOps Set-AzSecurityPricing -Name "DevOps" -PricingTier "Standard" -ErrorAction Stop | Out-Null Write-Host " [OK] Enabled for: $($sub.Name)" -ForegroundColor Green $fixed++ Write-Host " Note: Het kan enkele uren duren voordat de service volledig actief is" -ForegroundColor Gray Write-Host " Kosten: Eerste 500 repositories gratis, daarna €2-5 per repository per maand" -ForegroundColor Gray } } catch { Write-Host " ✗ Failed for $($sub.Name): $($_.Exception.Message)" -ForegroundColor Red $failed++ } } Write-Host "`n[OK] Configured: $fixed subscription(s)" -ForegroundColor Green if ($failed -gt 0) { Write-Host "⚠️ Failed: $failed subscription(s)" -ForegroundColor Yellow } Write-Host "`nImportant notes:" -ForegroundColor Cyan Write-Host " • Defender for DevOps is nu actief op alle abonnementen" -ForegroundColor Gray Write-Host " • Code-scans worden binnen enkele uren uitgevoerd" -ForegroundColor Gray Write-Host " • Controleer de status via: Azure Portal → Defender voor Cloud → DevOps Security" -ForegroundColor Gray Write-Host " • Monitor kosten via: Azure Portal → Cost Management + Billing" -ForegroundColor Gray } catch { Write-Error "Remediation failed: $_" } } function Invoke-Monitoring { $result = Test-Compliance Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$PolicyName" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "Subscriptions: $($result.TotalResources)" -ForegroundColor White Write-Host "Enabled: $($result.CompliantCount)" -ForegroundColor Green Write-Host "Disabled/Not Configured: $($result.NonCompliantCount)" -ForegroundColor $(if ($result.NonCompliantCount -gt 0) { 'Red' } else { 'Green' }) if ($result.Details) { Write-Host "`nDetails:" -ForegroundColor Yellow $result.Details | ForEach-Object { Write-Host " $_" -ForegroundColor Gray } } if ($result.Recommendations) { Write-Host "`nAanbevelingen:" -ForegroundColor Yellow $result.Recommendations | ForEach-Object { Write-Host " • $_" -ForegroundColor Gray } } Write-Host "`nCompliance Status: " -NoNewline -ForegroundColor White if ($result.IsCompliant) { Write-Host "[OK] COMPLIANT" -ForegroundColor Green Write-Host "`nAlle abonnementen hebben Defender for DevOps ingeschakeld." -ForegroundColor Green } else { Write-Host "[FAIL] NON-COMPLIANT" -ForegroundColor Red Write-Host "`n$($result.NonCompliantCount) abonnement(en) hebben Defender for DevOps niet ingeschakeld." -ForegroundColor Red Write-Host "Voer het script uit met -Remediation om dit op te lossen." -ForegroundColor Yellow } return $result } function Invoke-Revert { Write-Host "`n⚠️ WARNING: Defender for DevOps uitschakelen wordt NIET aanbevolen" -ForegroundColor Yellow Write-Host "Dit verhoogt het risico op ongedetecteerde kwetsbaarheden, secrets en supply chain-bedreigingen." -ForegroundColor Yellow Write-Host "`nAls u toch wilt uitschakelen, gebruik dan:" -ForegroundColor Gray Write-Host " Set-AzSecurityPricing -Name 'DevOps' -PricingTier 'Free'" -ForegroundColor Gray Write-Host "`nLET OP: Dit schakelt alle DevOps-beveiligingsfunctionaliteit uit!" -ForegroundColor Red } try { Connect-RequiredServices if ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { if ($WhatIf) { Write-Host "`n=== WHATIF MODE ===" -ForegroundColor Yellow $result = Test-Compliance Write-Host "Zou Defender for DevOps inschakelen voor $($result.NonCompliantCount) abonnement(en)" -ForegroundColor Yellow if ($result.NonCompliantCount -gt 0) { Write-Host "`nAbonnementen die zouden worden geactiveerd:" -ForegroundColor Yellow $result.Details | Where-Object { $_ -like "✗*" } | ForEach-Object { Write-Host " $_" -ForegroundColor Gray } } } else { Invoke-Remediation } } elseif ($Revert) { Invoke-Revert } else { $result = Test-Compliance Write-Host "`nCompliance Check: $PolicyName" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan if ($result.IsCompliant) { Write-Host "Status: [OK] COMPLIANT" -ForegroundColor Green Write-Host "`nAlle $($result.TotalResources) abonnement(en) hebben Defender for DevOps ingeschakeld." -ForegroundColor Green } else { Write-Host "Status: [FAIL] NON-COMPLIANT" -ForegroundColor Red Write-Host "`n$($result.NonCompliantCount) van $($result.TotalResources) abonnement(en) hebben Defender for DevOps niet ingeschakeld." -ForegroundColor Red } if ($result.Details) { Write-Host "`nDetails:" -ForegroundColor Yellow $result.Details | ForEach-Object { Write-Host " $_" -ForegroundColor Gray } } Write-Host "`nGebruik -Monitoring voor uitgebreide rapportage" -ForegroundColor Gray Write-Host "Gebruik -Remediation om Defender for DevOps in te schakelen" -ForegroundColor Gray } } catch { Write-Error $_ exit 1 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
Critical: Zonder Defender for DevOps blijft zicht op kwetsbaarheden in source code, hardcoded secrets en supply chain-risico's gefragmenteerd en zijn beveiligingsproblemen slechts na incidenten terug te reconstrueren. Gecombineerde risico's, zoals een kwetsbare dependency die wordt gebruikt in meerdere applicaties of een gecommit secret dat toegang geeft tot productie-infrastructuur, blijven onopgemerkt waardoor aanvallers langdurig kunnen rondkijken. Ook ontbreekt aantoonbare compliance richting CIS-benchmarks, BIO-thema 11 en NIS2 Artikel 21, waardoor bestuurders geen verdedigbaar verhaal hebben richting toezichthouders.

Management Samenvatting

Defender for DevOps levert geïntegreerde code-scanning, secrets-detectie, CI/CD-pipeline-beveiliging, dependency-scanning en compliance-rapportage. Activering via Defender voor Cloud → Pricing → DevOps Standard kost gemiddeld vier tot zeven uur aan voorbereiding en validatie, waarna scanresultaten, aanbevelingen en automatische waarschuwingen direct beschikbaar zijn. Kosten: eerste 500 repositories gratis, daarna €2-5 per repository per maand. Voor organisaties met actieve ontwikkelingsomgevingen is dit plan onmisbaar om supply chain-risico's te reduceren en audits te versnellen.