Comprendere il blocco risorse di Azure Blueprint

Importante

Il 11 luglio 2026, Blueprints (anteprima) sarà deprecato. Eseguire la migrazione delle definizioni e delle assegnazioni di progetto esistenti a Specifiche modello e stack di distribuzione. Gli artefatti del progetto devono essere convertiti in modelli JSON arm o file Bicep usati per definire gli stack di distribuzione. Per informazioni su come creare un artefatto come risorsa arm, vedere:

La creazione di ambienti coerenti su larga scala è davvero efficace solo se esiste un meccanismo che mantenga tale coerenza. Questo articolo spiega il funzionamento del blocco risorse di Azure Blueprint. Per visualizzare un esempio di blocco delle risorse e applicazione di assegnazioni di rifiuto, vedere l'esercitazione sulla protezione delle nuove risorse .

Nota

I blocchi delle risorse distribuiti da Azure Blueprints vengono applicati solo alle risorse non di estensione distribuite dall'assegnazione del progetto. Le risorse esistenti, ad esempio quelle nei gruppi di risorse già esistenti, non dispongono di blocchi aggiunti a loro.

Modalità di blocco e stati

La modalità di blocco si applica all'assegnazione del progetto e include tre opzioni: Non bloccare, Sola lettura o Non eliminare. La modalità di blocco viene configurata durante la distribuzione degli artefatti nel corso dell'assegnazione di un progetto. È possibile impostare una modalità di blocco diversa aggiornando l'assegnazione del progetto. Le modalità di blocco, tuttavia, non possono essere modificate all'esterno di Azure Blueprints.

Le risorse create dagli artefatti in un'assegnazione di progetto hanno quattro stati: Non bloccato, Sola lettura, Non è possibile modificare/eliminare o non è possibile eliminare. Ciascun tipo di artefatto può essere in stato Non bloccato. La tabella seguente può essere usata per determinare lo stato di una risorsa:

Modalità Tipo di risorsa artefatto State Descrizione
Non bloccare * Non bloccato Le risorse non sono protette da Azure Blueprints. Questo stato viene usato anche per le risorse aggiunte a un artefatto del gruppo di risorse Sola lettura o Non eliminare all'esterno dell'assegnazione di un progetto.
Sola lettura Resource group Impossibile modificare/eliminare Il gruppo di risorse è di sola lettura e i relativi tag non possono essere modificati. Le risorse con stato Non bloccato possono essere aggiunte, spostate, modificate o eliminate da questo gruppo.
Sola lettura Diverso da gruppo di risorse Sola lettura La risorsa non può essere modificata in alcun modo. Nessuna modifica e non può essere eliminata.
Non eliminare * Impossibile eliminare Le risorse possono essere modificate, ma non possono essere eliminate. Le risorse con stato Non bloccato possono essere aggiunte, spostate, modificate o eliminate da questo gruppo.

Sostituzione degli stati di blocco

In genere è possibile che un utente con il controllo degli accessi in base al ruolo di Azure appropriato nella sottoscrizione, ad esempio il ruolo "Proprietario", possa modificare o eliminare qualsiasi risorsa. Questo accesso non è il caso in cui Azure Blueprints applica il blocco come parte di un'assegnazione distribuita. Se l'assegnazione è stata impostata con l'opzione Sola lettura o Non eliminare, nemmeno il proprietario della sottoscrizione può eseguire l'azione bloccata sulla risorsa protetta.

Questa misura di sicurezza salvaguarda la coerenza del progetto definito e l'ambiente che è stato progettato per creare a partire da eliminazioni accidentali o programmatiche.

Assegnare al gruppo di gestione

L'unica opzione per impedire ai proprietari della sottoscrizione di rimuovere un'assegnazione di progetto consiste nell'assegnare il progetto a un gruppo di gestione. In questo scenario, solo i proprietari del gruppo di gestione dispongono delle autorizzazioni necessarie per rimuovere l'assegnazione del progetto.

Per assegnare il progetto a un gruppo di gestione anziché a una sottoscrizione, la chiamata API REST cambia in modo che sia simile al seguente:

PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{assignmentMG}/providers/Microsoft.Blueprint/blueprintAssignments/{assignmentName}?api-version=2018-11-01-preview

Il gruppo di gestione definito da {assignmentMG} deve essere all'interno della gerarchia del gruppo di gestione o essere lo stesso gruppo di gestione in cui viene salvata la definizione del progetto.

Il corpo della richiesta dell'assegnazione del progetto è simile al seguente:

{
    "identity": {
        "type": "SystemAssigned"
    },
    "location": "eastus",
    "properties": {
        "description": "enforce pre-defined simpleBlueprint to this XXXXXXXX subscription.",
        "blueprintId": "/providers/Microsoft.Management/managementGroups/{blueprintMG}/providers/Microsoft.Blueprint/blueprints/simpleBlueprint",
        "scope": "/subscriptions/{targetSubscriptionId}",
        "parameters": {
            "storageAccountType": {
                "value": "Standard_LRS"
            },
            "costCenter": {
                "value": "Contoso/Online/Shopping/Production"
            },
            "owners": {
                "value": [
                    "johnDoe@contoso.com",
                    "johnsteam@contoso.com"
                ]
            }
        },
        "resourceGroups": {
            "storageRG": {
                "name": "defaultRG",
                "location": "eastus"
            }
        }
    }
}

La differenza chiave in questo corpo della richiesta e una assegnata a una sottoscrizione è la properties.scope proprietà . Questa proprietà obbligatoria deve essere impostata sulla sottoscrizione a cui si applica l'assegnazione del progetto. La sottoscrizione deve essere un figlio diretto della gerarchia del gruppo di gestione in cui viene archiviata l'assegnazione del progetto.

Nota

Un progetto assegnato all'ambito del gruppo di gestione funziona ancora come assegnazione di progetto a livello di sottoscrizione. L'unica differenza è la posizione in cui l'assegnazione del progetto viene archiviata per impedire ai proprietari della sottoscrizione di rimuovere l'assegnazione e i blocchi associati.

Eliminazione degli stati di blocco

Se si rende necessario modificare o eliminare una risorsa protetta da un'assegnazione, è possibile procedere in due modi.

  • Aggiornare l'assegnazione del progetto impostando Non bloccare come modalità di blocco
  • Eliminare l'assegnazione del progetto

Quando l'assegnazione viene rimossa, i blocchi creati da Azure Blueprints vengono rimossi. La risorsa viene tuttavia tralasciata e dovrà essere eliminati in modo normale.

Funzionamento dei blocchi progetto

Un controllo degli accessi in base al ruolo di Azure nega le assegnazioni viene applicato alle risorse dell'artefatto durante l'assegnazione di un progetto se l'assegnazione ha selezionato l'opzione Sola lettura o Non eliminare . L'azione di negazione viene aggiunta dall'identità gestita dell'assegnazione del progetto e può essere rimossa dalle risorse artefatto solo dalla stessa identità gestita. Questa misura di sicurezza applica il meccanismo di blocco e impedisce la rimozione del blocco del progetto all'esterno di Azure Blueprints.

Screenshot della pagina Controllo di accesso (I A M) e della scheda Nega assegnazioni per un gruppo di risorse.

Le proprietà di assegnazione negate di ogni modalità sono le seguenti:

Modalità Permissions.Actions Permissions.NotActions Entità[i]. Digitare ExcludePrincipals[i]. Id DoNotApplyToChildScopes
Sola lettura * */Leggere
Microsoft.Authorization/locks/delete
Microsoft.Network/virtualNetwork/subnets/join/action
SystemDefined (Tutti) assegnazione del progetto e definizione dell'utente in esclusiPrincipals Gruppo di risorse - true; Risorsa - false
Non eliminare */Elimina Microsoft.Authorization/locks/delete
Microsoft.Network/virtualNetwork/subnets/join/action
SystemDefined (Tutti) assegnazione del progetto e definizione dell'utente in esclusiPrincipals Gruppo di risorse - true; Risorsa - false

Importante

Azure Resource Manager memorizza nella cache i dettagli di assegnazione di ruolo per un massimo di 30 minuti. Di conseguenza, le azioni di negazione assegnazioni per le risorse del progetto potrebbero non essere completamente attive con effetto immediato. Durante questo periodo di tempo, potrebbe essere possibile eliminare una risorsa che deve essere protetta da blocchi di progetto.

Escludere un'entità da un'assegnazione negata

In alcuni scenari di progettazione o sicurezza, potrebbe essere necessario escludere un'entità dall'assegnazione negata creata dall'assegnazione del progetto. Questo passaggio viene eseguito nell'API REST aggiungendo fino a cinque valori alla matrice esclusiPrincipals nella proprietà locks durante la creazione dell'assegnazione. La definizione di assegnazione seguente è un esempio di corpo della richiesta che include esclusiPrincipal:

{
  "identity": {
    "type": "SystemAssigned"
  },
  "location": "eastus",
  "properties": {
    "description": "enforce pre-defined simpleBlueprint to this XXXXXXXX subscription.",
    "blueprintId": "/providers/Microsoft.Management/managementGroups/{mgId}/providers/Microsoft.Blueprint/blueprints/simpleBlueprint",
    "locks": {
        "mode": "AllResourcesDoNotDelete",
        "excludedPrincipals": [
            "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
            "38833b56-194d-420b-90ce-cff578296714"
        ]
    },
    "parameters": {
      "storageAccountType": {
        "value": "Standard_LRS"
      },
      "costCenter": {
        "value": "Contoso/Online/Shopping/Production"
      },
      "owners": {
        "value": [
          "johnDoe@contoso.com",
          "johnsteam@contoso.com"
        ]
      }
    },
    "resourceGroups": {
      "storageRG": {
        "name": "defaultRG",
        "location": "eastus"
      }
    }
  }
}

Escludere un'azione da un'assegnazione di rifiuto

Analogamente all'esclusione di un'entità in un'assegnazione negata in un'assegnazione di progetto, è possibile escludere operazioni specifiche del provider di risorse di Azure. All'interno del blocco properties.locks , nello stesso luogo in cui è esclusoPrincipals , è possibile aggiungere un'eccezioneActions :

"locks": {
    "mode": "AllResourcesDoNotDelete",
    "excludedPrincipals": [
        "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
        "38833b56-194d-420b-90ce-cff578296714"
    ],
    "excludedActions": [
        "Microsoft.ContainerRegistry/registries/push/write",
        "Microsoft.Authorization/*/read"
    ]
},

Anche se gli esclusiPrincipal devono essere espliciti, le voci esclusiAction possono usare * per la corrispondenza con caratteri jolly delle operazioni del provider di risorse.

Passaggi successivi