Uzamčení prostředků za účelem zajištění ochrany infrastruktury

Jako správce můžete uzamknout předplatné Azure, skupinu prostředků nebo prostředek, abyste je ochránili před náhodným odstraněním a úpravami uživatelů. Zámek má přednost před všemi uživatelskými oprávněními.

Můžete nastavit zámky, které zabrání odstranění nebo úpravám. Na portálu se tyto zámky nazývají Odstranit a Jen pro čtení. V příkazovém řádku se tyto zámky nazývají CanNotDelete a ReadOnly.

  • CanNotDelete znamená, že autorizovaní uživatelé můžou prostředek číst a upravovat, ale nemůžou ho odstranit.
  • ReadOnly znamená, že autorizovaní uživatelé můžou prostředek číst, ale nemůžou ho odstranit ani aktualizovat. Použití tohoto zámku je podobné omezení všech autorizovaných uživatelů na oprávnění, která role Čtenář poskytuje.

Na rozdíl od řízení přístupu na základě role (RBAC) použijete zámky správy k použití omezení pro všechny uživatele a role. Další informace o nastavení oprávnění pro uživatele a role najdete v tématu Azure RBAC.

Uzamčení dědičnosti

Když zámek použijete u nadřazeného oboru, všechny prostředky v daném oboru dědí stejný zámek. Dokonce i prostředky, které přidáte později, dědí stejný nadřazený zámek. Nejvíce omezující zámek v dědičnosti má přednost.

Rozšiřující prostředky dědí zámky z prostředku, na který se použijí. Například Microsoft. Přehledy/diagnostice Nastavení je typ prostředku rozšíření. Pokud u objektu blob úložiště použijete nastavení diagnostiky a uzamknete účet úložiště, nemůžete nastavení diagnostiky odstranit. Tato dědičnost dává smysl, protože úplné ID prostředku nastavení diagnostiky je:

/subscriptions/{sub-id}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-name}/blobServices/default/providers/microsoft.insights/diagnosticSettings/{setting-name}"

Odpovídá rozsahu ID prostředku prostředku, který je uzamčen:

/subscriptions/{sub-id}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-name}

Pokud u prostředku máte zámek Odstranit a pokusíte se odstranit jeho skupinu prostředků, funkce zablokuje celou operaci odstranění. I když je skupina prostředků nebo jiné prostředky ve skupině prostředků odemknuté, odstranění se nestane. Nikdy nemáte částečné odstranění.

Když zrušíte předplatné Azure:

  • Zámek prostředku neblokuje zrušení předplatného.
  • Azure vaše prostředky zachová tak, že je místo okamžitého odstranění deaktivuje.
  • Azure vaše prostředky trvale odstraní jenom po čekací době.

Principy rozsahu zámků

Poznámka:

Zámky se vztahují pouze na operace Azure řídicí roviny, nikoli na operace roviny dat.

Operace řídicí roviny Azure přejdou na https://management.azure.com. Operace roviny dat Azure se přecházejí do vaší instance služby, například https://myaccount.blob.core.windows.net/. Viz řídicí rovina Azure a rovina dat. Pokud chcete zjistit, které operace používají adresu URL řídicí roviny, podívejte se na rozhraní Azure REST API.

Rozdíl znamená, že uzamkne prostředek před změnami, ale neomezí způsob, jakým prostředek provádí své funkce. Zámek ReadOnly, například na logickém serveru služby SQL Database, ho chrání před odstraněním nebo úpravami. Umožňuje vytvářet, aktualizovat nebo odstraňovat data v serverové databázi. Operace roviny dat umožňují datové transakce. Tyto požadavky nejdou na https://management.azure.com.

Důležité informace před použitím zámků

Použití zámků může vést k neočekávaným výsledkům. Některé operace, které zdánlivě neupravují prostředek, vyžadují blokované akce. Zamkne metodu POST v odesílání dat do rozhraní API Azure Resource Manageru (ARM). Mezi běžné příklady blokovaných operací patří:

  • Zámek jen pro čtení v účtu úložiště brání uživatelům v výpisu klíčů účtu. Požadavek POST zpracovává operaci klíče seznamu služby Azure Storage za účelem ochrany přístupu k klíčům účtu. Klíče účtu poskytují úplný přístup k datům v účtu úložiště. Pokud je zámek jen pro čtení nakonfigurovaný pro účet úložiště, uživatelé, kteří nemají klíče účtu, potřebují pro přístup k datům objektů blob nebo fronty používat přihlašovací údaje Microsoft Entra. Zámek jen pro čtení také zabraňuje přiřazení rolí Azure RBAC, které jsou vymezeny na účet úložiště nebo do kontejneru dat (kontejner objektů blob nebo fronta).

  • Zámek jen pro čtení v účtu úložiště chrání přiřazení RBAC vymezená pro účet úložiště nebo datový kontejner (kontejner objektů blob nebo fronta).

  • Zámek jen pro čtení v účtu úložiště brání vytvoření kontejneru objektů blob.

  • Zámek jen pro čtení nebo zámek , který nemůže odstranit v účtu úložiště, nezabrání jeho odstranění nebo úpravám dat. Také nechrání data v objektu blob, frontě, tabulce nebo souboru.

  • Rozhraní API účtu úložiště zveřejňuje operace roviny dat a řídicí roviny. Pokud požadavek používá operace roviny dat, zámek účtu úložiště nechrání data objektů blob, fronty, tabulky nebo souborů v rámci tohoto účtu úložiště. Pokud však požadavek používá operace řídicí roviny , zámek tyto prostředky chrání.

    Pokud například požadavek používá sdílené složky – Odstranit, což je operace řídicí roviny, odstranění selže. Pokud požadavek používá funkci Odstranit sdílenou složku, což je operace roviny dat, odstranění proběhne úspěšně. Doporučujeme použít operaci řídicí roviny.

  • Zámek jen pro čtení ve skupině zabezpečení sítě (NSG) brání vytvoření odpovídajícího protokolu toku NSG. Zámek nelze odstranit ve skupině zabezpečení sítě (NSG), nebrání vytvoření nebo úpravě odpovídajícího protokolu toku NSG.

  • Zámek jen pro čtení prostředku služby App Service brání Průzkumníku serveru sady Visual Studio v zobrazení souborů pro prostředek, protože tato interakce vyžaduje přístup k zápisu.

  • Zámek jen pro čtení u skupiny prostředků, která obsahuje plán služby App Service, brání vertikálnímu navýšení nebo snížení kapacity plánu.

  • Zámek jen pro čtení ve skupině prostředků, která obsahuje virtuální počítač , brání všem uživatelům v spuštění nebo restartování virtuálního počítače. Tyto operace vyžadují požadavek metody POST.

  • Zámek jen pro čtení ve skupině prostředků vám brání v přesunu existujících prostředků do nebo z této skupiny prostředků.

  • Zámek jen pro čtení ve skupině prostředků, která obsahuje účet Automation, brání spuštění všech runbooků. Tyto operace vyžadují požadavek metody POST.

  • Zámek nejde odstranit u prostředku nebo skupiny prostředků, aby se zabránilo odstranění přiřazení Azure RBAC.

  • Zámek nejde odstranit u skupiny prostředků, aby Azure Resource Manager automaticky odstranil nasazení v historii. Pokud v historii dosáhnete 800 nasazení, vaše nasazení se nezdaří.

  • Zámek nemůže odstranit skupinu prostředků vytvořenou službou Azure Backup, která způsobí selhání zálohování. Služba podporuje maximálně 18 bodů obnovení. Pokud je služba zálohování uzamčená, nemůže vyčistit body obnovení. Další informace najdete v tématu Nejčastější dotazy k zálohování virtuálních počítačů Azure.

  • Zámek nelze odstranit u skupiny prostředků, která obsahuje pracovní prostory azure machine Učení, brání správnému fungování automatického škálování výpočetních clusterů azure Učení. Díky zámku nemůže automatické škálování odebrat nepoužívané uzly. Vaše řešení spotřebovává více prostředků, než je potřeba pro úlohu.

  • Zámek jen pro čtení v pracovním prostoru služby Log Analytics brání povolení UEBA (User and Entity Behavior Analytics).

  • Zámek nejde odstranit v pracovním prostoru služby Log Analytics, ale nezabrání operacím vymazání dat. Místo toho odeberte roli vyprázdnění dat od uživatele.

  • Zámek jen pro čtení v předplatnémbrání službě Azure Advisor ve správném fungování. Advisor nemůže uložit výsledky svých dotazů.

  • Zámek jen pro čtení ve službě Application Gateway brání v získání stavu back-endu služby Application Gateway. Tato operace používá metodu POST, která blokuje zámek jen pro čtení.

  • Zámek jen pro čtení v clusteru Azure Kubernetes Service (AKS) omezuje přístup k prostředkům clusteru prostřednictvím portálu. Zámek jen pro čtení vám brání v použití oddílu prostředků Kubernetes clusteru AKS na webu Azure Portal k výběru prostředku clusteru. Tyto operace vyžadují požadavek metody POST na ověření.

  • Zámek nelze odstranit na virtuálním počítači , který je chráněný službou Site Recovery , brání správnému odebrání určitých propojení prostředků souvisejících s Site Recovery, když odeberete ochranu nebo zakážete replikaci. Pokud budete chtít virtuální počítač později znovu chránit, musíte zámek před zakázáním ochrany odebrat. Pokud zámek neodeberete, musíte před ochranou virtuálního počítače vyčistit zastaralé odkazy podle určitých kroků. Další informace najdete v tématu Řešení potíží s replikací virtuálních počítačů Azure.

Kdo může vytvářet nebo odstraňovat zámky

K vytvoření nebo odstranění zámků správy musíte mít přístup k akcím Microsoft.Authorization/* nebo Microsoft.Authorization/locks/*. Uživatelé přiřazení k roli Vlastník a Uživatelský přístup Správa istrator mají požadovaný přístup. Tento přístup uděluje také některé specializované předdefinované role. Můžete vytvořit vlastní roli s požadovanými oprávněními.

Spravované aplikace a zámky

Některé služby Azure, jako je Azure Databricks, používají spravované aplikace k implementaci této služby. V takovém případě služba vytvoří dvě skupiny prostředků. Jedna je odemknutá skupina prostředků, která obsahuje přehled služby. Druhá je uzamčená skupina prostředků, která obsahuje infrastrukturu služeb.

Pokud se pokusíte odstranit skupinu prostředků infrastruktury, zobrazí se chyba oznamující, že je skupina prostředků uzamčená. Pokud se pokusíte odstranit zámek pro skupinu prostředků infrastruktury, zobrazí se chyba oznamující, že zámek nejde odstranit, protože ji vlastní systémová aplikace.

Místo toho odstraňte službu, která také odstraní skupinu prostředků infrastruktury.

U spravovaných aplikací zvolte službu, kterou jste nasadili.

Screenshot of the Azure portal with an instance of Azure Databricks selected.

Všimněte si, že služba obsahuje odkaz pro spravovanou skupinu prostředků. Tato skupina prostředků obsahuje infrastrukturu a je uzamčená. Můžete ho odstranit jenom nepřímo.

Screenshot displaying the Managed Resource Group link in the Azure portal.

Pokud chcete odstranit všechno pro službu, včetně skupiny prostředků uzamčené infrastruktury, zvolte Odstranit pro službu.

Screenshot of the Azure portal with the Delete option for the selected service.

Konfigurace zámků

Portál

Na levém navigačním panelu je název funkce uzamčení předplatného zámky prostředky, zatímco název funkce uzamčení skupiny prostředků je Zámky.

  1. V okně Nastavení pro prostředek, skupinu prostředků nebo předplatné, které chcete zamknout, vyberte Zámky.

    Select lock.

  2. Zámek přidáte výběrem tlačítka Přidat. Pokud chcete vytvořit zámek na nadřazené úrovni, vyberte nadřazený objekt. Aktuálně vybraný prostředek dědí zámek z nadřazeného objektu. Skupinu prostředků můžete například uzamknout, aby se zámek použil u všech jeho prostředků.

    Add lock.

  3. Pojmenujte zámek a úroveň zámku. Volitelně můžete přidat poznámky s jeho popisem.

    Set lock.

  4. Zámek odstraníte stisknutím tlačítka Odstranit.

    Delete lock.

Šablona

Při použití šablony ARM nebo souboru Bicep k nasazení zámku je dobré pochopit, jak obor nasazení a obor zámku spolupracují. Pokud chcete použít zámek v oboru nasazení, například uzamčení skupiny prostředků nebo předplatného, ponechte vlastnost oboru nenasazenou. Při uzamčení prostředku v rámci oboru nasazení nastavte vlastnost oboru zámku.

Následující šablona aplikuje zámek na skupinu prostředků. Všimněte si, že u prostředku zámku není vlastnost oboru, protože obor zámku odpovídá oboru nasazení. Nasaďte tuto šablonu na úrovni skupiny prostředků.

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

Pokud chcete vytvořit skupinu prostředků a uzamknout ji, nasaďte následující šablonu na úrovni předplatného.

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

Při použití zámku na prostředek v rámci skupiny prostředků přidejte vlastnost oboru. Nastavte obor na název prostředku, který chcete uzamknout.

Následující příklad ukazuje šablonu, která vytvoří plán služby App Service, web a zámek na webu. Obor zámku je nastavený na web.

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

Prostředky nasazené pomocí Azure PowerShellu uzamknete pomocí příkazu New-AzResourceLock .

Pokud chcete prostředek uzamknout, zadejte název prostředku, jeho typ prostředku a název skupiny prostředků.

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

Pokud chcete skupinu prostředků uzamknout, zadejte název skupiny prostředků.

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

Informace o zámku získáte pomocí rutiny Get-AzResourceLock. Pokud chcete získat všechny zámky ve vašem předplatném, použijte:

Get-AzResourceLock

Pokud chcete získat všechny zámky pro prostředek, použijte:

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

Pokud chcete získat všechny zámky pro skupinu prostředků, použijte:

Get-AzResourceLock -ResourceGroupName exampleresourcegroup

Pokud chcete zámek prostředku odstranit, použijte:

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

Pokud chcete odstranit zámek pro skupinu prostředků, použijte:

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

Azure CLI

Prostředky nasazené pomocí Azure CLI uzamknete pomocí příkazu az lock create .

Pokud chcete prostředek uzamknout, zadejte název prostředku, jeho typ prostředku a název skupiny prostředků.

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

Pokud chcete skupinu prostředků uzamknout, zadejte název skupiny prostředků.

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

Pokud chcete získat informace o zámku, použijte příkaz az lock list. Pokud chcete získat všechny zámky ve vašem předplatném, použijte:

az lock list

Pokud chcete získat všechny zámky pro prostředek, použijte:

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

Pokud chcete získat všechny zámky pro skupinu prostředků, použijte:

az lock list --resource-group exampleresourcegroup

Pokud chcete zámek prostředku odstranit, použijte:

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

Pokud chcete odstranit zámek pro skupinu prostředků, použijte:

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

Python

Prostředky nasazené pomocí Pythonu uzamknete pomocí příkazu ManagementLockClient.management_locks.create_or_update_at_resource_group_level .

Pokud chcete prostředek uzamknout, zadejte název prostředku, jeho typ prostředku a název skupiny prostředků.

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

lock_client = ManagementLockClient(credential, subscription_id)

lock_result = lock_client.management_locks.create_or_update_at_resource_level(
    "exampleGroup",
    "Microsoft.Web",
    "",
    "sites",
    "examplesite",
    "lockSite",
    {
        "level": "CanNotDelete"
    }
)

Pokud chcete skupinu prostředků uzamknout, zadejte název skupiny prostředků.

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

lock_client = ManagementLockClient(credential, subscription_id)

lock_result = lock_client.management_locks.create_or_update_at_resource_group_level(
    "exampleGroup",
    "lockGroup",
    {
        "level": "CanNotDelete"
    }
)

Pokud chcete získat informace o všech zámkech ve vašem předplatném, použijte ManagementLockClient.management_locks.get. Pokud chcete získat všechny zámky ve vašem předplatném, použijte:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

lock_client = ManagementLockClient(credential, subscription_id)

lock_result = lock_client.management_locks.list_at_subscription_level()

for lock in lock_result:
    print(f"Lock name: {lock.name}")
    print(f"Lock level: {lock.level}")
    print(f"Lock notes: {lock.notes}")

Pokud chcete získat zámek pro prostředek, použijte:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

lock_client = ManagementLockClient(credential, subscription_id)

lock_result = lock_client.management_locks.get_at_resource_level(
    "exampleGroup",
    "Microsoft.Web",
    "",
    "sites",
    "examplesite",
    "lockSite"
)

print(f"Lock ID: {lock_result.id}")
print(f"Lock Name: {lock_result.name}")
print(f"Lock Level: {lock_result.level}")

Pokud chcete získat zámek pro skupinu prostředků, použijte:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

lock_client = ManagementLockClient(credential, subscription_id)

lock_result = lock_client.management_locks.get_at_resource_group_level(
    "exampleGroup",
    "lockGroup"
)

print(f"Lock ID: {lock_result.id}")
print(f"Lock Level: {lock_result.level}")

Pokud chcete zámek prostředku odstranit, použijte:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

lock_client = ManagementLockClient(credential, subscription_id)

lock_client.management_locks.delete_at_resource_level(
    "exampleGroup",
    "Microsoft.Web",
    "",
    "sites",
    "examplesite",
    "lockSite"
)

Pokud chcete odstranit zámek pro skupinu prostředků, použijte:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

lock_client = ManagementLockClient(credential, subscription_id)

lock_client.management_locks.delete_at_resource_group_level("exampleGroup", "lockGroup")

REST API

Nasazené prostředky můžete uzamknout pomocí rozhraní REST API pro zámky správy. Rozhraní REST API umožňuje vytvářet a odstraňovat zámky a načítat informace o existujících zámkech.

Zámek vytvoříte spuštěním příkazu:

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

Oborem může být předplatné, skupina prostředků nebo prostředek. Název zámku může být jakýkoliv, co chcete zavolat. Pro verzi rozhraní API použijte 2016-09-01.

Do požadavku zahrňte objekt JSON, který určuje vlastnosti zámku.

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

Další kroky