Resources vergrendelen om onverwachte wijzigingen te voorkomen

Als beheerder kunt u een ​​abonnement, resourcegroep of resource vergrendelen om te voorkomen dat andere gebruikers in uw organisatie per ongeluk kritieke resources verwijderen of wijzigen. De vergrendeling overschrijft alle machtigingen die de gebruiker mogelijk heeft.

U kunt de vergrendeling instellen op CanNotDelete of ReadOnly. In de portal heten de vergrendelingen respectievelijk Verwijderen en Alleen-lezen.

  • CanNotDelete betekent dat gemachtigde gebruikers een resource nog steeds kunnen lezen en wijzigen, maar dat ze de resource niet kunnen verwijderen.
  • ReadOnly betekent dat gemachtigde gebruikers een resource kunnen lezen, maar ze kunnen de resource niet verwijderen of bijwerken. Het toepassen van deze vergrendeling is vergelijkbaar met het beperken van alle geautoriseerde gebruikers tot de machtigingen die zijn verleend door de rol Lezer .

In tegenstelling tot op rollen gebaseerd toegangsbeheer wordt met beheervergrendelingen een beperking toegepast op alle gebruikers en rollen. Zie Op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) voor meer informatie over het instellen van machtigingen voor gebruikers en rollen.

Overname vergrendelen

Wanneer u een vergrendeling toepast op een bovenliggend bereik, nemen alle resources binnen dat bereik dezelfde vergrendeling over. Zelfs resources die u later toevoegt, nemen de vergrendeling van het bovenliggende item over. De meest beperkende vergrendeling in de overname heeft voorrang.

Als u een verwijderingsvergrendeling voor een resource hebt en de resourcegroep probeert te verwijderen, wordt de hele verwijderingsbewerking geblokkeerd. Zelfs als de resourcegroep of andere resources in de resourcegroep niet zijn vergrendeld, gebeurt het verwijderen niet. U hebt nooit een gedeeltelijke verwijdering.

Wanneer u een Azure-abonnement annuleert, worden de resources in eerste instantie gedeactiveerd, maar niet verwijderd. Een resourcevergrendeling blokkeert het annuleren van het abonnement niet. Na een wachttijd worden de resources definitief verwijderd. De resourcevergrendeling voorkomt niet dat de resources permanent worden verwijderd.

Bereik van vergrendelingen begrijpen

Notitie

Het is belangrijk om te begrijpen dat vergrendelingen niet van toepassing zijn op alle typen bewerkingen. Azure-bewerkingen kunnen worden onderverdeeld in twee categorieën: besturingsvlak en gegevensvlak. Vergrendelingen zijn alleen van toepassing op besturingsvlakbewerkingen.

Bewerkingen op het besturingsvlak zijn bewerkingen die worden verzonden naar https://management.azure.com. Gegevensvlakbewerkingen zijn bewerkingen die worden verzonden naar uw exemplaar van een service, zoals https://myaccount.blob.core.windows.net/. Zie het Azure-besturingsvlak en het gegevensvlak voor meer informatie. Zie de Azure REST API om te ontdekken welke bewerkingen gebruikmaken van de URL van het besturingsvlak.

Dit onderscheid betekent dat vergrendelingen wijzigingen in een resource voorkomen, maar ze beperken niet hoe resources hun eigen functies uitvoeren. Een ReadOnly-vergrendeling op een SQL Database logische server voorkomt bijvoorbeeld dat u de server verwijdert of wijzigt. Het voorkomt niet dat u gegevens in de databases op die server maakt, bijwerkt of verwijdert. Gegevenstransacties zijn toegestaan omdat deze bewerkingen niet naar https://management.azure.com worden verzonden.

Meer voorbeelden van de verschillen tussen besturings- en gegevensvlakbewerkingen worden beschreven in de volgende sectie.

Overwegingen voordat u vergrendelingen toepast

Het toepassen van vergrendelingen kan leiden tot onverwachte resultaten omdat sommige bewerkingen die de resource niet lijken te wijzigen, daadwerkelijk acties vereisen die door de vergrendeling worden geblokkeerd. Met vergrendelingen voorkomt u bewerkingen waarvoor een POST-aanvraag is vereist voor de Azure Resource Manager-API. Enkele veelvoorkomende voorbeelden van de bewerkingen die worden geblokkeerd door vergrendelingen zijn:

  • Een alleen-lezenvergrendeling voor een opslagaccount voorkomt dat gebruikers de accountsleutels vermelden. De bewerking Azure Storage Lijstsleutels wordt verwerkt via een POST-aanvraag om de toegang tot de accountsleutels te beveiligen, die volledige toegang bieden tot gegevens in het opslagaccount. Wanneer een alleen-lezenvergrendeling is geconfigureerd voor een opslagaccount, moeten gebruikers die niet over de accountsleutels beschikken, Azure AD-referenties gebruiken om toegang te krijgen tot blob- of wachtrijgegevens. Met een alleen-lezenvergrendeling wordt ook voorkomen dat Azure RBAC-rollen binnen het bereik van het opslagaccount of een gegevenscontainer (blobcontainer of wachtrij) worden toegewezen.

  • Een vergrendeling die niet kan worden verwijderd voor een opslagaccount , voorkomt niet dat gegevens in dat account worden verwijderd of gewijzigd. Dit type vergrendeling beveiligt alleen het opslagaccount zelf om te worden verwijderd. Als een aanvraag gebruikmaakt van gegevensvlakbewerkingen, beschermt de vergrendeling van het opslagaccount geen blob-, wachtrij-, tabel- of bestandsgegevens in dat opslagaccount. Als de aanvraag echter besturingsvlakbewerkingen gebruikt, beveiligt de vergrendeling deze resources.

    Als een aanvraag bijvoorbeeld bestandsshares gebruikt - Verwijderen, wat een besturingsvlakbewerking is, wordt de verwijdering geweigerd. Als in de aanvraag Delete Share wordt gebruikt, wat een gegevensvlakbewerking is, wordt de verwijdering voltooid. U wordt aangeraden de besturingsvlakbewerkingen te gebruiken.

  • Een alleen-lezenvergrendeling voor een opslagaccount voorkomt niet dat gegevens in dat account worden verwijderd of gewijzigd. Met dit type vergrendeling wordt alleen het opslagaccount zelf beschermd tegen verwijderen of wijzigen en worden blob-, wachtrij-, tabel- of bestandsgegevens in dat opslagaccount niet beschermd.

  • Een alleen-lezenvergrendeling op een App Service-resource voorkomt dat Visual Studio Server Explorer bestanden voor de resource weergeeft omdat voor die interactie schrijftoegang is vereist.

  • Een alleen-lezenvergrendeling voor een resourcegroep die een App Service plan bevat, voorkomt dat u het plan omhoog of omlaag kunt schalen.

  • Een alleen-lezenvergrendeling voor een resourcegroep die een virtuele machine bevat, voorkomt dat alle gebruikers de virtuele machine starten of opnieuw starten. Voor deze bewerkingen is een POST-aanvraag vereist.

  • Een alleen-lezenvergrendeling voor een resourcegroep die een Automation-account bevat, voorkomt dat alle runbooks worden gestart. Voor deze bewerkingen is een POST-aanvraag vereist.

  • Met een niet-verwijdervergrendeling voor een resourcegroep voorkomt u dat Azure Resource Manager automatisch implementaties in de geschiedenis verwijdert. Als u in de geschiedenis 800 implementaties hebt bereikt, mislukken uw implementaties.

  • Een vergrendeling die niet kan worden verwijderd voor de resourcegroep die door Azure Backup Service is gemaakt, zorgt ervoor dat back-ups mislukken. De service ondersteunt maximaal 18 herstelpunten. Wanneer de back-upservice is vergrendeld, kunnen herstelpunten niet worden opgeschoond. Zie Veelgestelde vragen over het maken van back-ups van Virtuele Azure-machines voor meer informatie.

  • Een vergrendeling die niet kan worden verwijderd voor een resourcegroep voorkomt dat Azure Machine Learning automatisch schalen Azure Machine Learning rekenclusters om ongebruikte knooppunten te verwijderen.

  • Een alleen-lezenvergrendeling voor een Log Analytics-werkruimte voorkomt dat UEBA (User and Entity Behavior Analytics) wordt ingeschakeld.

  • Een alleen-lezenvergrendeling voor een abonnement voorkomt dat Azure Advisor correct werkt. Advisor kan de resultaten van de query's niet opslaan.

  • Een alleen-lezenvergrendeling op een Application Gateway voorkomt dat u de back-endstatus van de toepassingsgateway krijgt. Deze bewerking maakt gebruik van POST, die wordt geblokkeerd door de alleen-lezenvergrendeling.

  • Een alleen-lezenvergrendeling op een AKS-cluster voorkomt dat alle gebruikers toegang hebben tot clusterbronnen vanuit de sectie Kubernetes-resources van het AKS-cluster aan de linkerkant van de Azure Portal. Voor deze bewerkingen is een POST-aanvraag voor verificatie vereist.

Wie kan vergrendelingen maken of verwijderen

Als u beheervergrendelingen wilt maken of verwijderen, moet u toegang hebben tot Microsoft.Authorization/* of Microsoft.Authorization/locks/* acties. Van de ingebouwde rollen worden deze acties alleen toegekend aan Eigenaar en Administrator voor gebruikerstoegang.

Beheerde toepassingen en vergrendelingen

Sommige Azure-services, zoals Azure Databricks, gebruiken beheerde toepassingen om de service te implementeren. In dat geval maakt de service twee resourcegroepen. Eén resourcegroep bevat een overzicht van de service en is niet vergrendeld. De andere resourcegroep bevat de infrastructuur voor de service en is vergrendeld.

Als u de infrastructuurresourcegroep probeert te verwijderen, krijgt u een foutmelding waarin wordt aangegeven dat de resourcegroep is vergrendeld. Als u de vergrendeling voor de infrastructuurresourcegroep probeert te verwijderen, krijgt u een foutmelding waarin wordt aangegeven dat de vergrendeling niet kan worden verwijderd omdat deze eigendom is van een systeemtoepassing.

Verwijder in plaats daarvan de service, waarmee ook de infrastructuurresourcegroep wordt verwijderd.

Selecteer voor beheerde toepassingen de service die u hebt geïmplementeerd.

Select service

U ziet dat de service een koppeling bevat voor een beheerde resourcegroep. Deze resourcegroep bevat de infrastructuur en is vergrendeld. Het kan niet rechtstreeks worden verwijderd.

Show managed group

Als u alles voor de service wilt verwijderen, inclusief de resourcegroep voor de vergrendelde infrastructuur, selecteert u Verwijderen voor de service.

Delete service

Vergrendelingen configureren

Portal

  1. Ga naar de blade Vergrendelingen voor de resource, de resourcegroep of het abonnement waarvoor u een vergrendeling wilt instellen en selecteer Vergrendelingen.

    Select lock.

  2. Als u een vergrendeling wilt toevoegen, selecteert u Toevoegen. Als u een vergrendeling op bovenliggend niveau wilt maken, selecteert u het bovenliggende niveau. De momenteel geselecteerde resource neemt de vergrendeling over van het bovenliggende item. U kunt bijvoorbeeld de resourcegroep vergrendelen om een vergrendeling toe te passen op alle bijbehorende resources.

    Add lock.

  3. Geef de vergrendeling een naam en vergrendelingsniveau. U kunt desgewenst ook notities toevoegen waarin de vergrendeling wordt beschreven.

    Set lock.

  4. Als u de vergrendeling wilt verwijderen, selecteert u de knop Verwijderen .

    Delete lock.

Sjabloon

Wanneer u een Arm-sjabloon (Azure Resource Manager) of Bicep-bestand gebruikt om een vergrendeling te implementeren, moet u rekening houden met het bereik van de vergrendeling en het bereik van de implementatie. Als u een vergrendeling wilt toepassen op het implementatiebereik, zoals het vergrendelen van een resourcegroep of abonnement, stelt u de bereikeigenschap niet in. Wanneer u een resource binnen het implementatiebereik vergrendelt, stelt u de bereikeigenschap in.

Met de volgende sjabloon wordt een vergrendeling toegepast op de resourcegroep waarnaar deze is geïmplementeerd. U ziet dat er geen bereikeigenschap is voor de vergrendelingsresource omdat het bereik van de vergrendeling overeenkomt met het implementatiebereik. Deze sjabloon wordt geïmplementeerd op het niveau van de resourcegroep.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/locks",
      "apiVersion": "2016-09-01",
      "name": "rgLock",
      "properties": {
        "level": "CanNotDelete",
        "notes": "Resource group should not be deleted."
      }
    }
  ]
}

Als u een resourcegroep wilt maken en deze wilt vergrendelen, implementeert u de volgende sjabloon op abonnementsniveau.

{
  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "rgName": {
      "type": "string"
    },
    "rgLocation": {
      "type": "string"
    }
  },
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Resources/resourceGroups",
      "apiVersion": "2021-04-01",
      "name": "[parameters('rgName')]",
      "location": "[parameters('rgLocation')]",
      "properties": {}
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "lockDeployment",
      "resourceGroup": "[parameters('rgName')]",
      "dependsOn": [
        "[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
      ],
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {},
          "variables": {},
          "resources": [
            {
              "type": "Microsoft.Authorization/locks",
              "apiVersion": "2016-09-01",
              "name": "rgLock",
              "properties": {
                "level": "CanNotDelete",
                "notes": "Resource group and its resources should not be deleted."
              }
            }
          ],
          "outputs": {}
        }
      }
    }
  ],
  "outputs": {}
}

Wanneer u een vergrendeling toepast op een resource in de resourcegroep, voegt u de bereikeigenschap toe. Stel het bereik in op de naam van de resource die moet worden vergrendeld.

In het volgende voorbeeld ziet u een sjabloon waarmee een App Service-plan, een website en een vergrendeling op de website wordt gemaakt. Het bereik van de vergrendeling is ingesteld op de website.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "hostingPlanName": {
      "type": "string"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "siteName": "[concat('ExampleSite', uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2020-12-01",
      "name": "[parameters('hostingPlanName')]",
      "location": "[parameters('location')]",
      "sku": {
        "tier": "Free",
        "name": "f1",
        "capacity": 0
      },
      "properties": {
        "targetWorkerCount": 1
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2020-12-01",
      "name": "[variables('siteName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
      ],
      "properties": {
        "serverFarmId": "[parameters('hostingPlanName')]"
      }
    },
    {
      "type": "Microsoft.Authorization/locks",
      "apiVersion": "2016-09-01",
      "name": "siteLock",
      "scope": "[concat('Microsoft.Web/sites/', variables('siteName'))]",
      "dependsOn": [
        "[resourceId('Microsoft.Web/sites', variables('siteName'))]"
      ],
      "properties": {
        "level": "CanNotDelete",
        "notes": "Site should not be deleted."
      }
    }
  ]
}

Azure PowerShell

U vergrendelt geïmplementeerde resources met Azure PowerShell met behulp van de opdracht New-AzResourceLock.

Als u een resource wilt vergrendelen, geeft u de naam op van de resource, het resourcetype en de naam van de resourcegroep.

New-AzResourceLock -LockLevel CanNotDelete -LockName LockSite -ResourceName examplesite -ResourceType Microsoft.Web/sites -ResourceGroupName exampleresourcegroup

Als u een resourcegroep wilt vergrendelen, geeft u de naam van de resourcegroep op.

New-AzResourceLock -LockName LockGroup -LockLevel CanNotDelete -ResourceGroupName exampleresourcegroup

Gebruik Get-AzResourceLock om informatie over een vergrendeling op te halen. Als u alle vergrendelingen in uw abonnement wilt ophalen, gebruikt u:

Get-AzResourceLock

Als u alle vergrendelingen voor een resource wilt ophalen, gebruikt u:

Get-AzResourceLock -ResourceName examplesite -ResourceType Microsoft.Web/sites -ResourceGroupName exampleresourcegroup

Als u alle vergrendelingen voor een resourcegroep wilt ophalen, gebruikt u:

Get-AzResourceLock -ResourceGroupName exampleresourcegroup

Als u een vergrendeling voor een resource wilt verwijderen, gebruikt u:

$lockId = (Get-AzResourceLock -ResourceGroupName exampleresourcegroup -ResourceName examplesite -ResourceType Microsoft.Web/sites).LockId
Remove-AzResourceLock -LockId $lockId

Als u een vergrendeling voor een resourcegroep wilt verwijderen, gebruikt u:

$lockId = (Get-AzResourceLock -ResourceGroupName exampleresourcegroup).LockId
Remove-AzResourceLock -LockId $lockId

Azure CLI

U vergrendelt geïmplementeerde resources met Azure CLI met behulp van de opdracht az lock create .

Als u een resource wilt vergrendelen, geeft u de naam op van de resource, het resourcetype en de naam van de resourcegroep.

az lock create --name LockSite --lock-type CanNotDelete --resource-group exampleresourcegroup --resource-name examplesite --resource-type Microsoft.Web/sites

Als u een resourcegroep wilt vergrendelen, geeft u de naam van de resourcegroep op.

az lock create --name LockGroup --lock-type CanNotDelete --resource-group exampleresourcegroup

Gebruik az lock list om informatie over een vergrendeling op te halen. Als u alle vergrendelingen in uw abonnement wilt ophalen, gebruikt u:

az lock list

Als u alle vergrendelingen voor een resource wilt ophalen, gebruikt u:

az lock list --resource-group exampleresourcegroup --resource-name examplesite --namespace Microsoft.Web --resource-type sites --parent ""

Als u alle vergrendelingen voor een resourcegroep wilt ophalen, gebruikt u:

az lock list --resource-group exampleresourcegroup

Als u een vergrendeling voor een resource wilt verwijderen, gebruikt u:

lockid=$(az lock show --name LockSite --resource-group exampleresourcegroup --resource-type Microsoft.Web/sites --resource-name examplesite --output tsv --query id)
az lock delete --ids $lockid

Als u een vergrendeling voor een resourcegroep wilt verwijderen, gebruikt u:

lockid=$(az lock show --name LockSite --resource-group exampleresourcegroup  --output tsv --query id)
az lock delete --ids $lockid

REST-API

U kunt geïmplementeerde resources vergrendelen met de REST API voor beheervergrendelingen. Met de REST API kunt u vergrendelingen maken en verwijderen en informatie ophalen over bestaande vergrendelingen.

Als u een vergrendeling wilt maken, voert u het volgende uit:

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/locks/{lock-name}?api-version={api-version}

Het bereik kan een abonnement, resourcegroep of resource zijn. De naam van de vergrendeling is wat u de vergrendeling wilt aanroepen. Gebruik voor api-versie 2016-09-01.

Neem in de aanvraag een JSON-object op waarmee de eigenschappen voor de vergrendeling worden opgegeven.

{
  "properties": {
  "level": "CanNotDelete",
  "notes": "Optional text notes."
  }
}

Volgende stappen