Låsa resurser för att förhindra oväntade ändringar

Som administratör kan du låsa en prenumeration, resursgrupp eller resurs så att inga andra användare i organisationen tar bort eller ändrar viktiga resurser av misstag. Låset åsidosätter alla behörigheter som användaren kan ha.

Du kan ange låsnivån till CanNotDelete eller ReadOnly. I portalen kallas låsen Ta bort respektive Skrivskyddade.

  • CanNotDelete innebär att behöriga användare fortfarande kan läsa och ändra en resurs, men de kan inte ta bort resursen.
  • ReadOnly innebär att behöriga användare kan läsa en resurs, men de kan inte ta bort eller uppdatera resursen. Att tillämpa det här låset liknar att begränsa alla behöriga användare till de behörigheter som beviljas av rollen Läsare.

Till skillnad från rollbaserad åtkomstkontroll använder du hanteringslås för att tillämpa en begränsning för alla användare och roller. Mer information om hur du anger behörigheter för användare och roller finns i Rollbaserad åtkomstkontroll i Azure (Azure RBAC).

Lås arv

När du tillämpar ett lås på ett överordnat omfång ärver alla resurser inom det omfånget samma lås. Även resurser som du senare lägger till ärver låset från den överordnade. Det mest restriktiva låset i arvet har företräde.

Förstå låsomfång

Anteckning

Det är viktigt att förstå att lås inte gäller för alla typer av åtgärder. Azure-åtgärder kan delas in i två kategorier – kontrollplan och dataplan. Lås gäller endast för kontrollplansåtgärder.

Kontrollplansåtgärder är åtgärder som skickas till https://management.azure.com . Dataplansåtgärder är åtgärder som skickas till din instans av en tjänst, till exempel https://myaccount.blob.core.windows.net/ . Mer information finns i Azure-kontrollplanet och dataplanet. Information om vilka åtgärder som använder kontrollplanets URL finns i Azure REST API.

Den här skillnaden innebär att lås förhindrar ändringar i en resurs, men de begränsar inte hur resurser utför sina egna funktioner. Ett ReadOnly-lås på en logisk SQL Database hindrar dig från att ta bort eller ändra servern. Det hindrar dig inte från att skapa, uppdatera eller ta bort data i databaserna på den servern. Datatransaktioner tillåts eftersom dessa åtgärder inte skickas till https://management.azure.com.

Fler exempel på skillnaderna mellan kontroll- och dataplansåtgärder beskrivs i nästa avsnitt.

Att tänka på innan du använder lås

Att tillämpa lås kan leda till oväntade resultat eftersom vissa åtgärder som inte verkar ändra resursen faktiskt kräver åtgärder som blockeras av låset. Lås förhindrar åtgärder som kräver en POST-begäran till Azure Resource Manager API. Några vanliga exempel på åtgärder som blockeras av lås är:

  • Ett skrivskyddade lås för ett lagringskonto förhindrar att användare listar kontonycklarna. Åtgärden Azure Storage listnycklar hanteras via en POST-begäran för att skydda åtkomsten till kontonycklarna, som ger fullständig åtkomst till data i lagringskontot. När ett skrivskyddat lås har konfigurerats för ett lagringskonto måste användare som inte har kontonycklarna använda Azure AD-autentiseringsuppgifter för att få åtkomst till blob- eller ködata. Ett skrivskyddat lås förhindrar även tilldelning av Azure RBAC-roller som är begränsade till lagringskontot eller till en datacontainer (blobcontainer eller kö).

  • Ett lås för att inte ta bort på ett lagringskonto förhindrar inte att data i det kontot tas bort eller ändras. Den här typen av lås skyddar endast själva lagringskontot från att tas bort. Om en begäran använder dataplansåtgärderskyddar inte låset på lagringskontot blob-, kö-, tabell- eller fildata i lagringskontot. Men om begäran använder kontrollplansåtgärderskyddar låset dessa resurser.

    Om en begäran till exempel använder filresurser – Ta bort, som är en kontrollplansåtgärd, nekas borttagningen. Om begäran använder Ta bort resurs, vilket är en dataplansåtgärd, lyckas borttagningen. Vi rekommenderar att du använder kontrollplansåtgärder.

  • Ett skrivskyddat lås för ett lagringskonto förhindrar inte att data i det kontot tas bort eller ändras. Den här typen av lås skyddar endast själva lagringskontot från att tas bort eller ändras och skyddar inte blob-, kö-, tabell- eller fildata i det lagringskontot.

  • Ett skrivskyddade lås på en App Service hindrar Visual Studio Server Explorer att visa filer för resursen eftersom den interaktionen kräver skrivåtkomst.

  • Ett skrivskyddad lås på en resursgrupp som innehåller App Service plan förhindrar att du skalar upp eller ut planen.

  • Ett skrivskyddade lås på en resursgrupp som innehåller en virtuell dator hindrar alla användare från att starta eller starta om den virtuella datorn. Dessa åtgärder kräver en POST-begäran.

  • Ett lås för att inte ta bort en resursgrupp förhindrar Azure Resource Manager automatiskt tar bort distributioner i historiken. Om du når 800 distributioner i historiken misslyckas dina distributioner.

  • Säkerhetskopieringar misslyckas om det inte går att ta bort låset för Azure Backup service. Tjänsten stöder högst 18 återställningspunkter. När den är låst kan säkerhetskopieringstjänsten inte rensa återställningspunkter. Mer information finns i Vanliga frågor och svar – Back up Azure VMs (Bladet 2016 –2014– 2014– 2018– 2018

  • Ett lås för att inte ta bort en resursgrupp förhindrar Azure Machine Learning automatisk skalning Azure Machine Learning beräkningskluster för att ta bort noder som inte används.

  • Ett skrivskyddade lås för en prenumeration förhindrar Azure Advisor fungerar korrekt. Advisor kan inte lagra resultatet av sina frågor.

  • Ett skrivskyddat lås på en Application Gateway hindrar dig från att få programgatewayens backend-hälsa. Åtgärden använder POST, som blockeras av det skrivskyddade låset.

  • Ett skrivskyddad lås på ett AKS-kluster hindrar alla användare från att komma åt klusterresurser från avsnittet Kubernetes-resurser på AKS-klustrets vänstra blad på Azure Portal. Dessa åtgärder kräver en POST-begäran för autentisering.

Vem kan skapa eller ta bort lås

Om du vill skapa eller ta bort hanteringslås måste du ha åtkomst Microsoft.Authorization/* till eller Microsoft.Authorization/locks/* åtgärder. Av de inbyggda rollerna har endast Ägare och Administratör för användaråtkomst åtkomst till dessa åtgärder.

Hanterade program och lås

Vissa Azure-tjänster, till Azure Databricks, använder hanterade program för att implementera tjänsten. I så fall skapar tjänsten två resursgrupper. En resursgrupp innehåller en översikt över tjänsten och är inte låst. Den andra resursgruppen innehåller infrastrukturen för tjänsten och är låst.

Om du försöker ta bort infrastrukturresursgruppen visas ett felmeddelande om att resursgruppen är låst. Om du försöker ta bort låset för infrastrukturresursgruppen får du ett felmeddelande om att låset inte kan tas bort eftersom det ägs av ett systemprogram.

Ta i stället bort tjänsten, som även tar bort infrastrukturresursgruppen.

För hanterade program väljer du den tjänst som du har distribuerat.

Välj tjänst

Observera att tjänsten innehåller en länk för en hanterad resursgrupp. Resursgruppen innehåller infrastrukturen och är låst. Den kan inte tas bort direkt.

Visa hanterad grupp

Om du vill ta bort allt för tjänsten, inklusive resursgruppen för låst infrastruktur, väljer du Ta bort för tjänsten.

Ta bort tjänst

Konfigurera lås

Portalen

  1. På bladet Inställningar för den resurs, resursgrupp eller prenumeration som du vill låsa upp väljer du Lås.

    Välj Lås.

  2. Om du vill lägga till ett lås väljer du Lägg till. Om du vill skapa ett lås på en överordnad nivå väljer du det överordnade. Den markerade resursen ärver låset från den överordnade resursen. Du kan till exempel låsa resursgruppen för att tillämpa ett lås på alla dess resurser.

    Lägg till lås.

  3. Ge låset ett namn och en låsnivå. Om du vill kan du lägga till anteckningar som beskriver låset.

    Ställ in lås.

  4. Om du vill ta bort låset väljer du knappen Ta bort.

    Ta bort lås.

ARM-mall

När du använder en Azure Resource Manager mall (ARM-mall) för att distribuera ett lås måste du vara medveten om omfånget för låset och omfånget för distributionen. Om du vill tillämpa ett lås i distributionsomfånget, till exempel låsa en resursgrupp eller prenumeration, ska du inte ange omfångsegenskapen. När du låser en resurs i distributionsomfånget anger du omfångsegenskapen.

Följande mall tillämpar ett lås på resursgruppen som den distribueras till. Observera att det inte finns någon omfångsegenskap för låsresursen eftersom omfånget för låset matchar omfånget för distributionen. Den här mallen distribueras på resursgruppsnivå.

{
  "$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."
      }
    }
  ]
}

Om du vill skapa en resursgrupp och låsa den distribuerar du följande mall på prenumerationsnivå.

{
  "$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": "2020-10-01",
      "name": "[parameters('rgName')]",
      "location": "[parameters('rgLocation')]",
      "properties": {}
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-10-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": {}
}

När du använder ett lås för en resurs i resursgruppen lägger du till omfångsegenskapen. Ange omfånget till namnet på resursen som ska låsas.

I följande exempel visas en mall som skapar en App Service-plan, en webbplats och ett lås på webbplatsen. Låsets omfång är inställt på webbplatsen.

{
  "$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

Du låser distribuerade resurser med Azure PowerShell med hjälp av kommandot New-AzResourceLock.

Om du vill låsa en resurs anger du namnet på resursen, dess resurstyp och dess resursgruppsnamn.

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

Om du vill låsa en resursgrupp anger du namnet på resursgruppen.

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

Om du vill ha information om ett lås använder du Get-AzResourceLock. Om du vill hämta alla lås i din prenumeration använder du:

Get-AzResourceLock

Om du vill hämta alla lås för en resurs använder du:

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

Om du vill hämta alla lås för en resursgrupp använder du:

Get-AzResourceLock -ResourceGroupName exampleresourcegroup

Om du vill ta bort ett lås för en resurs använder du:

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

Om du vill ta bort ett lås för en resursgrupp använder du:

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

Azure CLI

Du låser distribuerade resurser med Azure CLI med hjälp av kommandot az lock create.

Om du vill låsa en resurs anger du namnet på resursen, dess resurstyp och dess resursgruppsnamn.

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

Om du vill låsa en resursgrupp anger du namnet på resursgruppen.

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

Om du vill ha information om ett lås använder du az lock list. Om du vill hämta alla lås i din prenumeration använder du:

az lock list

Om du vill hämta alla lås för en resurs använder du:

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

Om du vill hämta alla lås för en resursgrupp använder du:

az lock list --resource-group exampleresourcegroup

Om du vill ta bort ett lås för en resurs använder du:

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

Om du vill ta bort ett lås för en resursgrupp använder du:

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

REST-API

Du kan låsa distribuerade resurser med REST API för hanteringslås. Med REST API kan du skapa och ta bort lås och hämta information om befintliga lås.

Om du vill skapa ett lås kör du:

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

Omfånget kan vara en prenumeration, resursgrupp eller resurs. Låsnamnet är det du vill kalla låset. För API-version använder du 2016-09-01.

Ta med ett JSON-objekt som anger låsets egenskaper i begäran.

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

Nästa steg