Bloccare le risorse per impedire modifiche imprevisteLock resources to prevent unexpected changes

L'amministratore può avere la necessità di bloccare una sottoscrizione, una risorsa o un gruppo di risorse per impedire che altri utenti nell'organizzazione modifichino o eliminino accidentalmente risorse strategiche.As an administrator, you may need to lock a subscription, resource group, or resource to prevent other users in your organization from accidentally deleting or modifying critical resources. È possibile impostare il livello di blocco CanNotDelete o ReadOnly.You can set the lock level to CanNotDelete or ReadOnly. Nel portale i blocchi sono definiti rispettivamente Elimina e Sola lettura.In the portal, the locks are called Delete and Read-only respectively.

  • CanNotDelete significa che gli utenti autorizzati possono leggere e modificare una risorsa, ma non eliminarla.CanNotDelete means authorized users can still read and modify a resource, but they can't delete the resource.
  • ReadOnly significa che gli utenti autorizzati possono leggere una risorsa, ma non eliminarla o aggiornarla.ReadOnly means authorized users can read a resource, but they can't delete or update the resource. L'applicazione di questo blocco è simile alla concessione a tutti gli utenti autorizzati solo le autorizzazioni concesse dal ruolo Lettore.Applying this lock is similar to restricting all authorized users to the permissions granted by the Reader role.

Come vengono applicati i blocchiHow locks are applied

Quando si applica un blocco in un ambito padre, tutte le risorse in tale ambito ereditano lo stesso blocco.When you apply a lock at a parent scope, all resources within that scope inherit the same lock. Anche le risorse aggiunte successivamente ereditano il blocco dal padre.Even resources you add later inherit the lock from the parent. Il blocco più restrittivo nell'ereditarietà ha la precedenza.The most restrictive lock in the inheritance takes precedence.

Diversamente dal controllo degli accessi in base al ruolo, i blocchi di gestione consentono di applicare una restrizione a tutti gli utenti e i ruoli.Unlike role-based access control, you use management locks to apply a restriction across all users and roles. Per informazioni sull'impostazione delle autorizzazioni per utenti e ruoli, vedere Controllo degli accessi in base al ruolo nel Portale di Azure.To learn about setting permissions for users and roles, see Azure Role-based Access Control.

I blocchi di Resource Manager si applicano solo alle operazioni che si verificano nel piano di gestione, costituito da operazioni inviate a https://management.azure.com.Resource Manager locks apply only to operations that happen in the management plane, which consists of operations sent to https://management.azure.com. I blocchi non limitano il modo in cui le risorse eseguono le proprie funzioni.The locks do not restrict how resources perform their own functions. Vengono limitate le modifiche alle risorse, ma non le operazioni delle risorse.Resource changes are restricted, but resource operations are not restricted. Un blocco di sola lettura in un database SQL impedisce ad esempio l'eliminazione o la modifica del database, ma non impedisce la creazione, l'aggiornamento o l'eliminazione dei dati nel database.For example, a ReadOnly lock on a SQL Database prevents you from deleting or modifying the database, but it does not prevent you from creating, updating, or deleting data in the database. Le transazioni di dati sono consentite in quanto tali operazioni non vengono inviate a https://management.azure.com.Data transactions are permitted because those operations are not sent to https://management.azure.com.

L'applicazione di ReadOnly può causare risultati imprevisti, perché alcune operazioni che sembrano operazioni di lettura richiedono in effetti azioni aggiuntive.Applying ReadOnly can lead to unexpected results because some operations that seem like read operations actually require additional actions. Ad esempio, l'inserimento di un blocco ReadOnly in un account di archiviazione impedisce a tutti gli utenti di ottenere un elenco delle chiavi.For example, placing a ReadOnly lock on a storage account prevents all users from listing the keys. L'operazione di elenco delle chiavi viene gestita tramite una richiesta POST, perché le chiavi restituite sono disponibili per operazioni di scrittura.The list keys operation is handled through a POST request because the returned keys are available for write operations. Per fare un altro esempio, l'inserimento di un blocco ReadOnly in una risorsa del servizio app impedisce a Esplora Server di Visual Studio di visualizzare i file relativi alla risorsa, perché tale interazione richiede l'accesso in scrittura.For another example, placing a ReadOnly lock on an App Service resource prevents Visual Studio Server Explorer from displaying files for the resource because that interaction requires write access.

Chi può creare o eliminare i blocchi nell'organizzazioneWho can create or delete locks in your organization

Per creare o eliminare i blocchi di gestione, è necessario avere accesso alle azioni Microsoft.Authorization/* o Microsoft.Authorization/locks/*.To create or delete management locks, you must have access to Microsoft.Authorization/* or Microsoft.Authorization/locks/* actions. Dei ruoli predefiniti, solo Proprietario e Amministratore Accesso utenti garantiscono tali azioni.Of the built-in roles, only Owner and User Access Administrator are granted those actions.

PortalePortal

  1. Nel pannello Impostazioni della risorsa, del gruppo di risorse o della sottoscrizione che si vuole bloccare selezionare Blocchi.In the Settings blade for the resource, resource group, or subscription that you wish to lock, select Locks.

    Selezionare un blocco

  2. Per aggiungere un blocco, selezionare Aggiungi.To add a lock, select Add. Se si desidera creare un blocco a livello padre, selezionare l'elemento padre.If you want to create a lock at a parent level, select the parent. La risorsa attualmente selezionata eredita il blocco dalla risorsa padre.The currently selected resource inherits the lock from the parent. Ad esempio, bloccando un gruppo di risorse si bloccano tutte le risorse in esso contenute.For example, you could lock the resource group to apply a lock to all its resources.

    Aggiungere un blocco

  3. Assegnare un nome e un livello al blocco.Give the lock a name and lock level. Facoltativamente è possibile aggiungere note che descrivono il blocco.Optionally, you can add notes that describe the lock.

    Impostare un blocco

  4. Per eliminare il blocco, selezionare i puntini di sospensione e quindi Elimina nelle opzioni disponibili.To delete the lock, select the ellipsis and Delete from the available options.

    Eliminare un blocco

ModelloTemplate

L'esempio seguente illustra un modello che crea un piano di servizio app, un sito Web e un blocco sul sito Web.The following example shows a template that creates an app service plan, a web site, and a lock on the web site. Il tipo di risorsa del blocco corrisponde al tipo di risorsa della risorsa da bloccare e a /providers/locks.The resource type of the lock is the resource type of the resource to lock and /providers/locks. Il nome del blocco viene creato concatenando il nome della risorsa con /Microsoft.Authorization/ e il nome del blocco stesso.The name of the lock is created by concatenating the resource name with /Microsoft.Authorization/ and the name of the lock.

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

Per distribuire questo modello di esempio con PowerShell, usare:To deploy this example template with PowerShell, use:

New-AzureRmResourceGroup -Name sitegroup -Location southcentralus
New-AzureRmResourceGroupDeployment -ResourceGroupName sitegroup -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/lock.json -hostingPlanName plan0103

Per distribuire questo modello di esempio con l'interfaccia della riga di comando di Azure, usare:To deploy this example template with Azure CLI, use:

az group create --name sitegroup --location southcentralus
az group deployment create --resource-group sitegroup --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/lock.json --parameters hostingPlanName=plan0103

PowerShellPowerShell

Per bloccare le risorse distribuite con Azure PowerShell, usare il comando New-AzureRmResourceLock.You lock deployed resources with Azure PowerShell by using the New-AzureRmResourceLock command.

Per bloccare una risorsa, specificare il nome, il tipo e il gruppo di risorse della risorsa.To lock a resource, provide the name of the resource, its resource type, and its resource group name.

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

Per bloccare un gruppo di risorse, specificare il nome del gruppo di risorse.To lock a resource group, provide the name of the resource group.

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

Per ottenere informazioni su un blocco, usare Get-AzureRmResourceLock.To get information about a lock, use Get-AzureRmResourceLock. Per ottenere tutti i blocchi nella sottoscrizione, usare:To get all the locks in your subscription, use:

Get-AzureRmResourceLock

Per ottenere tutti i blocchi per una risorsa, usare:To get all locks for a resource, use:

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

Per ottenere tutti i blocchi per un gruppo di risorse, usare:To get all locks for a resource group, use:

Get-AzureRmResourceLock -ResourceGroupName exampleresourcegroup

Per eliminare un blocco, usare:To delete a lock, use:

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

Interfaccia della riga di comando di AzureAzure CLI

Per bloccare le risorse distribuite con l'interfaccia della riga di comando di Azure, usare il comando az lock create.You lock deployed resources with Azure CLI by using the az lock create command.

Per bloccare una risorsa, specificare il nome, il tipo e il gruppo di risorse della risorsa.To lock a resource, provide the name of the resource, its resource type, and its resource group name.

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

Per bloccare un gruppo di risorse, specificare il nome del gruppo di risorse.To lock a resource group, provide the name of the resource group.

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

Per ottenere informazioni su un blocco, usare az lock list.To get information about a lock, use az lock list. Per ottenere tutti i blocchi nella sottoscrizione, usare:To get all the locks in your subscription, use:

az lock list

Per ottenere tutti i blocchi per una risorsa, usare:To get all locks for a resource, use:

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

Per ottenere tutti i blocchi per un gruppo di risorse, usare:To get all locks for a resource group, use:

az lock list --resource-group exampleresourcegroup

Per eliminare un blocco, usare:To delete a lock, use:

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

API RESTREST API

È possibile bloccare le risorse distribuite tramite l'API REST per i blocchi di gestione.You can lock deployed resources with the REST API for management locks. L'API REST consente di creare ed eliminare i blocchi e recuperare informazioni sui blocchi esistenti.The REST API enables you to create and delete locks, and retrieve information about existing locks.

Per creare un blocco, eseguire:To create a lock, run:

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

L'ambito può essere una sottoscrizione, un gruppo di risorse o una risorsa.The scope could be a subscription, resource group, or resource. Lock-name indica il nome che si desidera assegnare al blocco.The lock-name is whatever you want to call the lock. Per api-version, usare 2015-01-01.For api-version, use 2015-01-01.

Nella richiesta includere un oggetto JSON che specifica le proprietà per il blocco.In the request, include a JSON object that specifies the properties for the lock.

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

Passaggi successiviNext steps