Zamknutí prostředků, aby se zabránilo neočekávaným změnám

Jako správce můžete uzamknout předplatné, skupinu prostředků nebo prostředek, abyste ostatním uživatelům v organizaci zabránili v náhodném odstranění nebo úpravě důležitých prostředků. Zámek přepíše všechna oprávnění, která uživatel případně má.

Zámek můžete nastavit na úroveň CanNotDelete nebo ReadOnly. Na portálu se tyto zámky nazývají Odstranění a Jen pro čtení.

  • CanNotDelete znamená, že autorizovaní uživatelé mohou prostředek stále číst a upravovat, ale nemůže prostředek odstranit.
  • ReadOnly znamená, že autorizovaní uživatelé mohou prostředek číst, ale nesmět ho odstranit ani aktualizovat. Použití tohoto zámku je podobné jako omezení oprávnění udělených rolí Čtenář všem autorizovaným uživatelům.

Na rozdíl od řízení přístupu na základě role slouží zámky správy k nastavení daného omezení u všech uživatelů a rolí. Další informace o nastavení oprávnění pro uživatele a role najdete v tématu Řízení přístupu na základě role v Azure (Azure RBAC).

Dědičnost zámku

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

Principy rozsahu zámků

Poznámka

Je důležité vědět, že zámky se nevztahují na všechny typy operací. Operace Azure je možné rozdělit do dvou kategorií – řídicí rovina a rovina dat. Zámky se vztahují pouze na operace řídicí roviny.

Operace řídicí roviny jsou operace odesílané do https://management.azure.com nástroje . Operace roviny dat jsou operace odesílané do vaší instance služby, například https://myaccount.blob.core.windows.net/ . Další informace najdete v tématu Řídicí rovina Azure a rovina dat. Pokud chcete zjistit, které operace používají adresu URL řídicí roviny, podívejte se na web Azure REST API.

Tento rozdíl znamená, že zámky brání změnám prostředku, ale neomezují způsob, jakým prostředky provádějí své vlastní funkce. Například zámek Jen pro čtení na SQL Database serveru vám zabrání v odstranění nebo úpravě serveru. Nezabrání vám ve vytváření, aktualizaci nebo odstraňování dat v databázích na tomto serveru. Datové transakce jsou povolené, protože tyto operace se neodesílají na https://management.azure.com.

Další příklady rozdílů mezi operacemi řízení a roviny dat jsou popsány v další části.

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, protože některé operace, u kterých se zdá, že prostředek neupravují, ve skutečnosti vyžadují akce blokované zámkem. Zámky zabrání žádným operacím, které vyžadují požadavek POST na Azure Resource Manager API. Mezi běžné příklady operací blokovaných zámky patří:

  • Zámek účtu úložiště jen pro čtení brání uživatelům v výpisu klíčů účtu. Operace Azure Storage seznamu klíčů se zpracovává prostřednictvím požadavku POST na ochranu přístupu ke klíčům účtu, které poskytují úplný přístup k datům v účtu úložiště. Pokud je pro účet úložiště nakonfigurovaný zámek jen pro čtení, uživatelé, kteří nemají klíče účtu, musí pro přístup k datům objektů blob nebo front používat přihlašovací údaje Azure AD. Zámek jen pro čtení také brání přiřazení rolí Azure RBAC, které jsou vymezené na účet úložiště nebo na kontejner dat (kontejner objektů blob nebo frontu).

  • Zámek účtu úložiště, který nelze odstranit, nezabrání odstranění nebo rání dat v rámci tohoto účtu. Tento typ zámku chrání jenom samotný účet úložiště před odstraněním. Pokud požadavek používá operace roviny dat,zámek účtu úložiště nebude chránit data objektů blob, front, tabulek nebo souborů v rámci tohoto účtu úložiště. Pokud ale 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í se zamítá. Pokud požadavek používá operaci Odstranit sdílenousložku , což je operace roviny dat, odstranění proběhne úspěšně. Doporučujeme používat operace řídicí roviny.

  • Zámek účtu úložiště jen pro čtení nezabrání odstranění nebo rání dat v rámci tohoto účtu. Tento typ zámku chrání jenom samotný účet úložiště před odstraněním nebo úpravami a v rámci tohoto účtu úložiště chrání data objektů blob, front, tabulek nebo souborů.

  • Zámek jen pro čtení u prostředku App Service brání Visual Studio Průzkumník serveru zobrazování souborů pro prostředek, protože tato interakce vyžaduje oprávnění k zápisu.

  • Zámek jen pro čtení u skupiny prostředků, která obsahuje plán App Service, vám brání v horizontálním navýšení nebo navýš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 ve spuštění nebo restartování virtuálního počítače. Tyto operace vyžadují požadavek POST.

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

  • Zámek skupiny prostředků nelze odstranit, brání Azure Resource Manager v automatickém odstraňování nasazení v historii. Pokud v historii dosáhnete 800 nasazení, vaše nasazení selžou.

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

  • Zámek u skupiny prostředků není možné odstranit, Azure Machine Learning automatické škálování Azure Machine Learning výpočetních clusterů k odebrání nepoužívaných uzlů.

  • Zámek jen pro čtení u předplatného brání Azure Advisor správné funkce. Advisor nemůže ukládat výsledky svých dotazů.

  • Zámek jen pro čtení na Application Gateway brání v získání stavu back-endu aplikační brány. Tato operace používá funkci POST,která je blokovaná zámkem jen pro čtení.

  • Zámek jen pro čtení v clusteru AKS brání všem uživatelům v přístupu k prostředkům clusteru z části Prostředky Kubernetes v levém okně clusteru AKS na Azure Portal. Tyto operace vyžadují k ověření požadavek POST.

Kdo vytvářet nebo odstraňovat zámky

Pokud chcete vytvořit nebo odstranit zámky správy, musíte mít přístup k Microsoft.Authorization/* akcím Microsoft.Authorization/locks/* nebo . Z předdefinovaných rolí má tyto akce povolené pouze vlastník a správce uživatelských přístupů.

Spravované aplikace a zámky

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

Pokud se pokusíte odstranit skupinu prostředků infrastruktury, zobrazí se chyba s oznámením, že je skupina prostředků uzamčená. Pokud se pokusíte odstranit zámek pro skupinu prostředků infrastruktury, zobrazí se chyba s oznámením, že zámek není možné odstranit, protože ho vlastní systémová aplikace.

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

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

Výběr služby

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

Zobrazení spravované skupiny

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

Odstranění služby

Konfigurace zámků

Portál

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

    Vyberte zamknout.

  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řazenou položku. Aktuálně vybraný prostředek dědí zámek z nadřazeného objektu. Můžete například uzamknout skupinu prostředků a použít zámek na všechny prostředky.

    Přidejte zámek.

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

    Nastavte zámek.

  4. Chcete-li zámek odstranit, vyberte tlačítko Odstranit .

    Odstranit zámek.

Template (Šablona)

Při použití Azure Resource Manager (šablona ARM) nebo souboru Bicep k nasazení zámku musíte znát rozsah zámku a rozsah nasazení. Pokud chcete zámek použít v oboru nasazení, jako je například zamykání skupiny prostředků nebo předplatného, nastavte vlastnost scope. Při uzamykání prostředku v rámci oboru nasazení nastavte vlastnost scope.

Následující šablona použije zámek pro skupinu prostředků, do které je nasazená. Všimněte si, že pro prostředek zámku není vlastnost scope, protože rozsah zámku odpovídá oboru nasazení. Tato šablona je nasazená 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 scope. Nastavte scope na název prostředku, který chcete zamknout.

Následující příklad ukazuje šablonu, která vytvoří plán služby App Service, web a zámek na webu. Rozsah 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

Nasazené prostředky můžete uzamknout Azure PowerShell pomocí příkazu New-AzResourceLock.

Pokud chcete prostředek uzamknout, zadejte název prostředku, jeho typ 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

Pokud chcete získat informace o zámku, použijte 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

Zámek prostředku odstraníte pomocí:

$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

Nasazené prostředky můžete uzamknout pomocí Azure CLI pomocí příkazu az lock create.

Pokud chcete prostředek uzamknout, zadejte název prostředku, jeho typ 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

Zámek prostředku odstraníte pomocí:

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

REST API

Nasazené prostředky můžete uzamknout pomocí 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 tohoto:

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. Lock-name je cokoli, co chcete zámek volat. Pro verzi api-version použijte 2016-09-01.

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

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

Další kroky