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 di modello e stack di distribuzione. Gli artefatti del progetto devono essere convertiti in modelli JSON ARM o in 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 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.

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 Regione Descrizione
Non bloccare * Non bloccata 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 Gruppo di risorse Impossibile modificare/eliminare Il gruppo di risorse è di sola lettura e tutte le relative proprietà, ad eccezione dei tag, non possono essere modificate. 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 Ad eccezione dei tag, la risorsa rimane invariata e non può essere eliminata o modificata.
Non eliminare * Eliminazione impossibile 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 protegge la coerenza del progetto definito e dell'ambiente creato dal progetto da eliminazioni o modifiche accidentali o programmatiche.

Assegnare al gruppo di gestione

L'unica opzione per impedire ai proprietari di sottoscrizioni 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 alla 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 principale 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 è 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 è archiviata l'assegnazione del progetto 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'azione di negazione delle assegnazioni di rifiuto del controllo degli accessi in base al ruolo di Azure viene applicata alle risorse degli artefatti 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 of the Access control (I A M) page and the Deny assignments tab for a resource group.

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

Modalità Permissions.Actions Permissions.NotActions Principals[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 definita dall'utente in excludedPrincipals 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 definita dall'utente in excludedPrincipals 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 di rifiuto

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 excludedPrincipals nella proprietà locks durante la creazione dell'assegnazione. La definizione di assegnazione seguente è un esempio di corpo della richiesta che include excludedPrincipals:

{
  "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à per un'assegnazione di rifiuto in un'assegnazionedi progetto, è possibile escludere operazioni specifiche del provider di risorse di Azure. All'interno del blocco properties.locks, nella stessa posizione in cui è esclusoPrincipals, è possibile aggiungere un elemento excludedActions:

"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 excludedPrincipals deve essere esplicito, le voci excludedActions possono usare * per la corrispondenza con caratteri jolly delle operazioni del provider di risorse.

Passaggi successivi