Blog Azure Security & Compliance

Wat zijn Resource Locks in Azure?

De snelheid van Azure is ongeëvenaard, maar het kan snel misgaan als iemand per ongeluk met één klik een productieworkload verwijdert.

Azure Resource Locks zijn je gordel tegen dat risico.

In dit artikel bekijken we hoe Azure Resource Locks je cloud resources beschermt tegen onbedoelde verwijdering of wijziging en laten we zien hoe je ze kunt implementeren met Azure Bicep templates.

Niels Kroeze

Auteur

Niels Kroeze

Leestijd 10 minuten Gepubliceerd: 23 oktober 2025

BELANGRIJKE PUNTEN:

  • Azure Resource Locks voorkomen dat resources per ongeluk worden verwijderd of aangepast.
  • De belangrijkste typen zijn CanNotDelete en ReadOnly.
  • Locks kunnen worden toegepast op subscriptie-, resource groep- of resource niveau.
  • Locks zijn niet waterdicht en kunnen normale werking beïnvloeden.

 

Wat zijn Azure Resource Locks?

Azure Resource Locks zijn een ingebouwde functie in Azure die voorkomt dat cloud resources binnen een Azure tenant worden gewijzigd of verwijderd.

Een lock beschermt resources in Azure tegen onbedoelde verwijderingen of wijzigingen.

Locks hebben voorrang op adminsrechten. Hier is een voorbeeld:

  • Stel, je implementeert een applicatie via automatisering, bijvoorbeeld met een DevOps-pipeline (ook al raden we ClickOps niet aan, Locks werken in beide gevallen even goed).
  • De app bevat bijvoorbeeld een database met klantgegevens.
  • Er gaat iets mis, en je moet opnieuw deployen. Het automatiseringsproces verwijdert en maakt dan mogelijk alle resources opnieuw aan – inclusief de database.
  • Of een beheerder typt per ongeluk de verkeerde resource group-naam en verwijdert productieresources in plaats van testresources.

In beide situaties is er hopelijk een back-up. Maar met locks kun je dit soort fouten voorkomen. De actie van de automatisering of beheerder zal mislukken vanwege de lock.

Azure Security Ebook (1)

Security E-book

Leer hoe je je Azure omgeving kunt beveiligen met verschillende technologieën, tools en best practices die we dagelijks toepassen bij onze softwaregedreven klanten.

Download nu!

Soorten Resource Locks

Er zijn twee typen resource locks die je kunt toepassen: CanNotDelete en ReadOnly.

1.CanNotDelete

Voorbeeld van een resource lock in het Azure-portal.

  • Een geautoriseerde gebruiker kan de resource lezen en aanpassen.
  • De resource kan niet verwijderd worden totdat de lock wordt opgeheven.
  • Wordt vaak gebruikt in productieomgevingen.

Voorbeeld: Je kunt de opslagcapaciteit van een resource aanpassen, maar je kunt het opslagaccount zelf niet verwijderen.

 

2.ReadOnly

Screenshot van het toevoegen van een ReadOnly resource lock in een Azure-subscription

  • Een geautoriseerde gebruiker kan de resource alleen bekijken en lezen.
  • De resource kan niet verwijderd of aangepast worden, waardoor het een “kijk maar raak niet” object wordt.
  • Beperkt alle geautoriseerde gebruikers tot de rechten van de Reader-rol.
  • Beperkt of voorkomt POST-methodes naar de ARM API.
Let op:

Niet alle services kunnen goed omgaan met ReadOnly. Het kan bijvoorbeeld monitoringagents of automatiseringsscripts verstoren.

Azure Resource Locks
Type lock Beschermt tegen configuratiewijzigingen  
ReadOnly Ja Ja
CanNotDelete Nee Ja

*Alle bescherming in deze tabel geldt voor managementacties op het control plane. Locks beperken geen data-operaties binnen de resource (data plane).

Let op:

Een resource lock is niet hetzelfde als een RBAC-rol. RBAC bepaalt wie welke acties mag uitvoeren, terwijl locks bepalen welke acties toegestaan zijn. Locks gelden voor alle rollen. Zelfs een Owner kan een resource niet aanpassen als er een ReadOnly-lock is toegepast.

Een Owner of Contributor kan de lock echter mogelijk verwijderen, mits zij vergelijkbare of gelijkwaardige rechten hebben op de locatie waar de lock is ingesteld.

Hoe werken Azure Resource Locks?

Azure Resource Locks gelden alleen voor het beheer van resources via het control plane – de interface voor het aanmaken, bijwerken of verwijderen van resources – en niet voor het data plane, waar daadwerkelijke data-operaties plaatsvinden binnen de resource.

In Azure-termen:

  • Het control plane (soms management layer genoemd) beheert resources, zoals deployen, configureren of verwijderen, via tools zoals Azure Portal, ARM-templates, Bicep, CLI of PowerShell.
  • Het data plane is waar je daadwerkelijk interactie hebt met de data of service van een resource (bijvoorbeeld lezen/schrijven van blobs in een storage account of query’s uitvoeren op een database).

Voorbeelden:

  • ReadOnly lock: Als deze lock op een Azure SQL-database wordt toegepast, kunnen applicaties nog steeds data lezen en schrijven (data plane). De lock voorkomt alleen aanpassingen aan de database-resource via het control plane, zoals verwijderen of herconfigureren.
  • CanNotDelete lock: Deze lock op een file share voorkomt dat de file share wordt verwijderd via Azure management (control plane), maar blokkeert niet het verwijderen van bestanden binnen de share (data plane).

Belangrijk punt: Locks beschermen het beheer van resources via het control plane, niet de interne functionaliteit van de resource in het data plane.

 

Scope en overerving

  • Locks kunnen worden toegepast op een subscription, resource group of individuele resource.
  • Wanneer een lock wordt toegepast op een subscription of resource group, erven alle resources binnen die scope de lock, inclusief nieuwe resources die later worden aangemaakt.
  • Als meerdere locks bestaan op een resource (bijvoorbeeld een Delete-lock op een subscription en een ReadOnly-lock op een resource group), geldt de meest restrictieve lock.
  • Je kunt een resource group niet verwijderen als een resource binnen de groep een lock heeft. Alle locks moeten eerst worden verwijderd. Gedeeltelijk verwijderen is niet toegestaan.
Let op:

Als je een subscriptie met vergrendelde resources opzegt, houdt de lock de opzegging niet tegen. Azure deactiveert en verwijdert uiteindelijk resources in een opgezegd subscriptie, ongeacht locks. 

Use cases van Azure Resource Locks

De tabel hieronder laat enkele voorbeelden zien van welke locks worden aanbevolen voor specifieke resource-types:

Resource Type Aanbevolen Lock Reden
Resource Groups (Productie) CanNotDelete Voorkomt per ongeluk verwijderen van meerdere kritieke resources tegelijk.
Azure VMs CanNotDelete Voorkomt dat kritieke VMs per ongeluk verwijderd of opnieuw aangemaakt worden.
Storage Accounts CanNotDelete Voorkomt per ongeluk verwijderen van het storage account.
Key Vault ReadOnly Voorkomt per ongeluk wijzigingen in de configuratie.
Azure Firewall / NSG's ReadOnly Voorkomt per ongeluk verwijderen van regels.
Logic Apps / Functions CanNotDelete Voorkomt per ongeluk verwijderen van automatiseringsworkflows of serverless functies.
SQL Databases / Managed Instances CanNotDelete Beschermt kritieke databases tegen verwijderen.
App Service / Web Apps ReadOnly Voorkomt per ongeluk wijzigingen in de app-configuratie.
Azure Security Workshop

Wil je leren hoe je je Azure cloud kunt beveiligen?

Bekijk dan onze Azure Security On-demand voor praktische tips, best practices en demo's over het beveiligen van je Azure omgeving. 

Bekijk het nu!

Aandachtspunten bij Azure Resource Locks

Azure Resource Locks zijn sterk aanbevolen voor het beschermen van live-omgevingen, maar het is belangrijk om de mogelijke bijwerkingen te begrijpen. Locks kunnen soms onverwachte effecten hebben, vooral als je niet goed weet hoe ze interageren met Azure managementacties.

Belangrijke punten om rekening mee te houden:

  • Locks werken op het control plane: Ze beperken of voorkomen bepaalde managementacties via de Azure API. Bijvoorbeeld:
    • Een ReadOnly-lock op een VM voorkomt dat je deze aan- of uitzet via het Azure-portaal of API (control plane), maar beïnvloedt de draaiende status of data binnen de VM niet (data plane).
    • Een ReadOnly-lock op een Network Security Group blokkeert het aanmaken van NSG flow logs (control plane).
  • CanNotDelete-locks laten wijzigingen toe, sommige acties blijven dus mogelijk.
  • ReadOnly-locks kunnen normale Azure managementacties verstoren en sommige acties laten mislukken als zo’n lock is toegepast.
Belangrijk: 

Azure Resource Locks zijn geen vervanging voor sterke toegangscontrole of RBAC. Gebruik altijd RBAC om ervoor te zorgen dat alleen bevoegde gebruikers de juiste rechten hebben, en gebruik locks als een extra beschermingslaag tegen toevallige wijzigingen of verwijderingen.

Bekijk altijd eerst Microsoft’s officiële richtlijnen voordat je resource locks toepast, zodat je begrijpt wat de gevolgen zijn voor je specifieke workloads.

Tip

Locks handmatig toepassen schaalt niet goed in grote of multi-subscriptieomgevingen. Gebruik in plaats daarvan Azure Policy om locks automatisch af te dwingen op resource groups of op basis van tags.

Voorbeeld: Je kunt een CanNotDelete-lock toepassen op alle resources in resource groups met de tag Environment = Production.

Met policy definities kun je het gebruik van locks controleren of afdwingen. In combinatie met Management Groups kun je zo consistente bescherming toepassen over meerdere abonnementen heen.

Hoe pas je Resource Locks toe in Azure

Er zijn verschillende manieren om Azure Resource Locks te implementeren. Je kunt Azure PowerShell, Azure CLI, Python en andere tools gebruiken. De “makkelijkste” manier is via de Azure Portal.

Bij Intercept raden we echter aan om ClickOps in de Azure Portal te vermijden en in plaats daarvan IaC (Infrastructure as Code) te gebruiken.

Iac Whitepaper

Wil je meer weten over Infrastructure as Code (IaC) in Azure?

Lees onze nieuwste whitepaper over IaC in Azure, leer Azure Bicep, Azure Verified Modules (AVM) en meer!

Download de IaC whitepaper!

We laten je zien hoe je Resource Locks in Azure kunt implementeren met behulp van templates met Azure Bicep

 

Deploy Resource Locks in Azure Bicep 

Bij het deployen van een lock met behulp van een Bicep file is het belangrijk om te begrijpen hoe de deploy-scope en de lock-scope op elkaar inwerken. 

  • Om een lock toe te passen op het deployment scope (bijvoorbeeld op een resourcegroep of subscriptie), stel je de scope eigenschap niet in. 
  • Om een resource binnen het deployment scope te vergrendelen, stel je de scope eigenschap in op vergrendeling. 

In het onderstaande voorbeeld wordt een lock toegepast op een resource groep: 

Bicep

resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = { 
  name: 'rgLock' 
  properties: { 
    level: 'CanNotDelete' 
    notes: 'Resource group should not be deleted.' 
  }
}
Let op:

De lock-resource bevat geen scope eigenschap, omdat de scope  overeenkomt met de deployment scope. Implementeer deze template op resource groupniveau. 

Om een resource group aan te maken en een lock toe te passen, moet je de bovenstaande template op subscriptieniveau uitvoeren. In deze opzet maakt de main Bicep file de resource group aan en roept daarna een module aan om de lock toe te passen.

Bicep 

targetScope = 'subscription' 

param rgName string 
param rgLocation string 

resource createRg 'Microsoft.Resources/resourceGroups@2025-04-01 = { 
  name: rgName 
  location: rgLocation 
} 

module deployRgLock './lockRg.bicep' = { 
  name: 'lockDeployment' 
  scope: resourceGroup(createRg.name) 
}

De module gebruikt een apart Bicep-bestand, lockRg.bicep om de resource group-lock te creëren.

resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = { 
  name: 'rgLock' 
  properties: { 
    level: 'CanNotDelete' 
    notes: 'Resource group and its resources should not be deleted.' 
  }
}

Wanneer je een specifieke resource binnen de resource group wilt vergrendelen, gebruik je de scope eigenschap in de lockdefinitie. Stel in op de naam van de resource die je wilt beveiligen.

param hostingPlanName string 
param location string = resourceGroup().location 

var siteName = 'ExampleSite${uniqueString(resourceGroup().id)}'

Het onderstaande voorbeeld toont een template die een App Service Plan, een website en een lock op de website aanmaakt. De lock bevat de scope-eigenschap, ingesteld op de website, zodat alleen die specifieke resource wordt beschermd.

resource serverFarm 'Microsoft.Web/serverfarms@2024-11-01' = { 
  name: hostingPlanName 
  location: location 
  sku: {
    tier: 'Free' 
    name: 'f1' 
    capacity: 0 
  } 
  properties: { 
    targetWorkerCount: 1 
  }
}

resource webSite 'Microsoft.Web/sites@2024-11-01' = { 
  name: siteName 
  location: location 
  properties: { 
    serverFarmId: serverFarm.name 
  }
} 

resource siteLock 'Microsoft.Authorization/locks@2020-05-01' = { 
  name: 'siteLock' 
  scope: webSite 
  properties:{ 
    level: 'CanNotDelete' 
    notes: 'Site should not be deleted.'
  }
}

 

Conclusie

We hebben besproken hoe Azure Resource Locks een effectieve manier zijn om onbedoelde verwijderingen of wijzigingen van resources te voorkomen.

Onthoud dat locks niet waterdicht zijn; ze voorkomen fouten, maar kunnen opzettelijke acties van bevoegde (of onbevoegde) gebruikers niet stoppen. Denk altijd goed na over mogelijke effecten op normale operaties voordat je locks toepast.

Veelgestelde vragen over resource locks

Wat als je een resource met een lock moet verwijderen of wijzigen?

Wie kan locks aanmaken of verwijderen?

Working Jack

Neem contact met ons op!

Intercept kan je helpen je Azure cloud te beveiligen, zodat je je kunt concentreren op het leveren van waarde aan je klanten en het stimuleren van je bedrijf.