Avvio rapido: Definire e assegnare un progetto Azure Blueprint con l'API REST

Importante

L’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:

In questa esercitazione viene descritto come usare Azure Blueprints per eseguire alcune della attività comuni di creazione, pubblicazione e assegnazione di un progetto all'interno dell'organizzazione. Questa competenza consente di definire modelli comuni per sviluppare configurazioni riutilizzabili e rapidamente distribuibili, basate su modelli, criteri e sicurezza di Azure Resource Manager (ARM).

Prerequisiti

Azure Cloud Shell

Azure Cloud Shell è un ambiente di shell interattivo ospitato in Azure e usato tramite il browser. È possibile usare Bash o PowerShell con Cloud Shell per usare i servizi di Azure. È possibile usare i comandi preinstallati di Cloud Shell per eseguire il codice contenuto in questo articolo senza dover installare strumenti nell'ambiente locale.

Per avviare Azure Cloud Shell:

Opzione Esempio/Collegamento
Selezionare Prova nell'angolo superiore destro di un blocco di codice o di comando. Quando si seleziona Prova, il codice o il comando non viene copiato automaticamente in Cloud Shell. Screenshot che mostra un esempio di Prova per Azure Cloud Shell.
Passare a https://shell.azure.com o selezionare il pulsante Avvia Cloud Shell per aprire Cloud Shell nel browser. Pulsante per avviare Azure Cloud Shell.
Selezionare il pulsante Cloud Shell nella barra dei menu nell'angolo in alto a destra del portale di Azure. Screenshot che mostra il pulsante Cloud Shell nel portale di Azure

Per usare Azure Cloud Shell:

  1. Avviare Cloud Shell.

  2. Selezionare il pulsante Copia in un blocco di codice (o in un blocco di comando) per copiare il codice o il comando.

  3. Incollare il codice o il comando nella sessione di Cloud Shell selezionando CTRL+MAIUSC+V in Windows e Linux o selezionando CMD+MAIUSC+V in macOS.

  4. Premere Invio per eseguire il codice o il comando.

Introduzione ad API REST

Se non si ha familiarità con l'API REST, iniziare esaminando il riferimento all'API REST di Azure, in particolare le sezioni relative all'URI della richiesta e al corpo della richiesta. Questo argomento di avvio rapido usa questi concetti per fornire indicazioni sull'uso di Azure Blueprint e ne presuppone una certa conoscenza. Strumenti come ARMClient possono gestire automaticamente l'autorizzazione e sono consigliati per gli utenti meno esperti.

Per le specifiche di Azure Blueprints, vedere API REST di Azure Blueprints.

API REST e PowerShell

Se non si ha già uno strumento per effettuare chiamate API REST, provare a usare PowerShell per queste istruzioni. Di seguito è riportata un'intestazione di esempio per l'autenticazione con Azure. Generare un'intestazione di autenticazione, talvolta denominata bearer tokene fornire l'URI dell'API REST cui connettersi con qualsiasi parametro o un Request Body:

# Log in first with Connect-AzAccount if not using Cloud Shell

$azContext = Get-AzContext
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile)
$token = $profileClient.AcquireAccessToken($azContext.Subscription.TenantId)
$authHeader = @{
    'Content-Type'='application/json'
    'Authorization'='Bearer ' + $token.AccessToken
}

# Invoke the REST API
$restUri = 'https://management.azure.com/subscriptions/{subscriptionId}?api-version=2020-01-01'
$response = Invoke-RestMethod -Uri $restUri -Method Get -Headers $authHeader

Sostituire {subscriptionId} nella variabile $restUri precedente per ottenere informazioni sulla sottoscrizione. La variabile $response contiene il risultato del cmdlet Invoke-RestMethod, che è possibile analizzare con i cmdlet come ConvertFrom-Json. Se l'endpoint del servizio API REST prevede un Request Body, fornire una variabile in formato JSON al parametro -Body di Invoke-RestMethod.

Creare un progetto

Il primo passaggio nella definizione di un modello standard per la conformità è la creazione di un progetto dalle risorse disponibili. Verrà creato un progetto denominato MyBlueprint per configurare le assegnazioni di ruolo e di criteri per la sottoscrizione. Vengono quindi aggiunti un gruppo di risorse, un modello di Resource Manager e un'assegnazione di ruolo nel gruppo di risorse.

Nota

Quando si usa l'API REST, viene creato per primo l'oggetto progetto. Per ogni artefatto da aggiungere che include parametri, definire i parametri in anticipo nel progetto iniziale.

In ogni URI dell'API REST sostituire le variabili seguenti con i propri valori:

  • {YourMG}: sostituire con l'ID del gruppo di gestione.
  • {subscriptionId}: sostituire con l'ID sottoscrizione.

Nota

È anche possibile creare progetti a livello di sottoscrizione. Per altre informazioni, vedere Creare un progetto nell'esempio di sottoscrizione.

  1. Creare l'oggetto progetto iniziale. Il Request Body include proprietà relative al progetto, tutti i gruppi di risorse da creare e tutti i parametri a livello di progetto. I parametri vengono impostati durante l'assegnazione e vengono usati dagli artefatti aggiunti nei passaggi successivi.

    • URI DELL'API REST

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint?api-version=2018-11-01-preview
      
    • Corpo della richiesta

      {
          "properties": {
              "description": "This blueprint sets tag policy and role assignment on the subscription, creates a ResourceGroup, and deploys a resource template and role assignment to that ResourceGroup.",
              "targetScope": "subscription",
              "parameters": {
                  "storageAccountType": {
                      "type": "string",
                      "metadata": {
                          "displayName": "storage account type.",
                          "description": null
                      }
                  },
                  "tagName": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The name of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "tagValue": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The value of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "contributors": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Contributor role at the subscription"
                      }
                  },
                  "owners": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Owner role at the resource group"
                      }
                  }
              },
              "resourceGroups": {
                  "storageRG": {
                      "description": "Contains the resource template deployment and a role assignment."
                  }
              }
          }
      }
      
  2. Aggiungere un'assegnazione di ruolo alla sottoscrizione. Request Body definisce il tipo di artefatto, le proprietà vengono allineate all'identificatore della definizione del ruolo e le identità dell'entità vengono passate come matrice di valori. Nell'esempio seguente vengono configurate le identità delle entità cui è concesso il ruolo specificato in base a un parametro impostato durante l'assegnazione del progetto. Questo esempio usa il ruolo predefinito Contributor con GUID di b24988ac-6180-42a0-ab88-20f7382dd24c.

    • URI DELL'API REST

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/roleContributor?api-version=2018-11-01-preview
      
    • Corpo della richiesta

      {
          "kind": "roleAssignment",
          "properties": {
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
              "principalIds": "[parameters('contributors')]"
          }
      }
      
  3. Aggiungere un'assegnazione di criteri alla sottoscrizione. Request Body definisce il tipo di artefatto, le proprietà sono allineate a una definizione di criteri o iniziative e l'assegnazione dei criteri è configurata per l'uso dei parametri di progetto definiti durante l'assegnazione del progetto. In questo esempio vengono usati i criteri predefiniti Apply tag and its default value to resource groups, con un GUID di 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71.

    • URI DELL'API REST

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/policyTags?api-version=2018-11-01-preview
      
    • Corpo della richiesta

      {
          "kind": "policyAssignment",
          "properties": {
              "description": "Apply tag and its default value to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "[parameters('tagName')]"
                  },
                  "tagValue": {
                      "value": "[parameters('tagValue')]"
                  }
              }
          }
      }
      
  4. Aggiungere un'altra assegnazione di criteri per il tag di archiviazione (riutilizzando storageAccountType_ parameter) nella sottoscrizione. Questo elemento di assegnazione di criteri aggiuntivo indica che un parametro definito nel progetto può essere usato da più di un elemento. Nell'esempio si usa il storageAccountType per impostare un tag nel gruppo di risorse. Questo valore fornisce informazioni sull'account di archiviazione che viene creato nel passaggio successivo. In questo esempio vengono usati i criteri predefiniti Apply tag and its default value to resource groups, con un GUID di 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71.

    • URI DELL'API REST

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/policyStorageTags?api-version=2018-11-01-preview
      
    • Corpo della richiesta

      {
          "kind": "policyAssignment",
          "properties": {
              "description": "Apply storage tag and the parameter also used by the template to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "StorageType"
                  },
                  "tagValue": {
                      "value": "[parameters('storageAccountType')]"
                  }
              }
          }
      }
      
  5. Aggiungere un modello nel gruppo di risorse. Il Request Body per un modello di Resource Manager include il normale componente JSON del modello e definisce il gruppo di risorse di destinazione con properties.resourceGroup. Il modello riutilizza anche i parametri di progetto storageAccountType, tagName e tagValue passando ognuno al modello. I parametri del progetto sono disponibili nel modello definendo properties.parameters, e all'interno del modello JSON in cui viene usata questa coppia chiave/valore per inserire il valore. I nomi dei parametri di progetto e di modello possono essere identici, ma qui sono diversi per indicare come ciascuno viene passato dal progetto all'elemento del modello.

    • URI DELL'API REST

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/templateStorage?api-version=2018-11-01-preview
      
    • Corpo della richiesta

      {
          "kind": "template",
          "properties": {
              "template": {
                  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                  "contentVersion": "1.0.0.0",
                  "parameters": {
                      "storageAccountTypeFromBP": {
                          "type": "string",
                          "defaultValue": "Standard_LRS",
                          "allowedValues": [
                              "Standard_LRS",
                              "Standard_GRS",
                              "Standard_ZRS",
                              "Premium_LRS"
                          ],
                          "metadata": {
                              "description": "Storage Account type"
                          }
                      },
                      "tagNameFromBP": {
                          "type": "string",
                          "defaultValue": "NotSet",
                          "metadata": {
                              "description": "Tag name from blueprint"
                          }
                      },
                      "tagValueFromBP": {
                          "type": "string",
                          "defaultValue": "NotSet",
                          "metadata": {
                              "description": "Tag value from blueprint"
                          }
                      }
                  },
                  "variables": {
                      "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
                  },
                  "resources": [{
                      "type": "Microsoft.Storage/storageAccounts",
                      "name": "[variables('storageAccountName')]",
                      "apiVersion": "2016-01-01",
                      "tags": {
                         "[parameters('tagNameFromBP')]": "[parameters('tagValueFromBP')]"
                      },
                      "location": "[resourceGroups('storageRG').location]",
                      "sku": {
                          "name": "[parameters('storageAccountTypeFromBP')]"
                      },
                      "kind": "Storage",
                      "properties": {}
                  }],
                  "outputs": {
                      "storageAccountSku": {
                          "type": "string",
                          "value": "[variables('storageAccountName')]"
                      }
                  }
              },
              "resourceGroup": "storageRG",
              "parameters": {
                  "storageAccountTypeFromBP": {
                      "value": "[parameters('storageAccountType')]"
                  },
                  "tagNameFromBP": {
                      "value": "[parameters('tagName')]"
                  },
                  "tagValueFromBP": {
                      "value": "[parameters('tagValue')]"
                  }
              }
          }
      }
      
  6. Aggiungere un'assegnazione di ruolo nel gruppo di risorse. Analogamente all'immissione dell'assegnazione di ruolo precedente, l'esempio seguente usa l'identificatore della definizione per il ruolo Owner e fornisce un parametro diverso del progetto. Questo esempio usa il ruolo predefinito Owner con GUID di 8e3af657-a8ff-443c-a75c-2fe8c4bcb635.

    • URI DELL'API REST

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/roleOwner?api-version=2018-11-01-preview
      
    • Corpo della richiesta

      {
          "kind": "roleAssignment",
          "properties": {
              "resourceGroup": "storageRG",
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
              "principalIds": "[parameters('owners')]"
          }
      }
      

Pubblicare un progetto

Dopo aver aggiunto gli artefatti al progetto, è possibile pubblicarlo. La pubblicazione rende disponibile il progetto per l'assegnazione a una sottoscrizione.

  • URI DELL'API REST

    PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/versions/{BlueprintVersion}?api-version=2018-11-01-preview
    

Il valore per {BlueprintVersion} è una stringa di lettere, numeri e trattini (senza spazi o altri caratteri speciali). La lunghezza massima è 20 caratteri. Usare un nome univoco e informativo, ad esempio v20180622-135541.

Assegnare un progetto

Dopo aver pubblicato un progetto usando l'API REST, è assegnabile a una sottoscrizione. Assegnare il progetto creato a una delle sottoscrizioni nella gerarchia dei gruppi di gestione. Se il progetto viene salvato in una sottoscrizione, può essere assegnato solo a tale sottoscrizione. Il Request Body specifica il progetto da assegnare e fornisce il nome e la posizione a tutti i gruppi di risorse nella definizione del progetto. Request Body fornisce anche tutti i parametri definiti nel progetto e usati da uno o più artefatti collegati.

In ogni URI dell'API REST sostituire le variabili seguenti con i propri valori:

  • {tenantId}: Sostituire con l’ID tenant.
  • {YourMG}: sostituire con l'ID del gruppo di gestione.
  • {subscriptionId}: sostituire con l'ID sottoscrizione.
  1. Fornire all'entità servizio di Azure Blueprints il ruolo Ownernella sottoscrizione di destinazione. Il AppId è statico (f71766dc-90d9-4b7d-bd9d-4499c4331c3f), ma l'ID dell'entità servizio varia in funzione del tenant. Usare l'API REST seguente per richiedere i dettagli per il tenant. Viene usata l'API Graph di Azure Active Directory, che ha autorizzazioni diverse.

    • URI DELL'API REST

      GET https://graph.windows.net/{tenantId}/servicePrincipals?api-version=1.6&$filter=appId eq 'f71766dc-90d9-4b7d-bd9d-4499c4331c3f'
      
  2. Eseguire la distribuzione del progetto assegnandolo a una sottoscrizione. Poiché ai parametri contributors e owners è necessaria una matrice di objectIds delle entità a cui concedere l'assegnazione di ruolo, usare l’API Graph di Azure Active Directory per raccogliere il objectIds da usare nel Request Body per i propri utenti, gruppi o entità servizio.

    • URI DELL'API REST

      PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Blueprint/blueprintAssignments/assignMyBlueprint?api-version=2018-11-01-preview
      
    • Corpo della richiesta

      {
          "properties": {
              "blueprintId": "/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint",
              "resourceGroups": {
                  "storageRG": {
                      "name": "StorageAccount",
                      "location": "eastus2"
                  }
              },
              "parameters": {
                  "storageAccountType": {
                      "value": "Standard_GRS"
                  },
                  "tagName": {
                      "value": "CostCenter"
                  },
                  "tagValue": {
                      "value": "ContosoIT"
                  },
                  "contributors": {
                      "value": [
                          "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
                          "38833b56-194d-420b-90ce-cff578296714"
                      ]
                  },
                  "owners": {
                      "value": [
                          "44254d2b-a0c7-405f-959c-f829ee31c2e7",
                          "316deb5f-7187-4512-9dd4-21e7798b0ef9"
                      ]
                  }
              }
          },
          "identity": {
              "type": "systemAssigned"
          },
          "location": "westus"
      }
      
    • Identità gestita assegnata dall'utente

      L'assegnazione di un progetto può anche usare un'identità gestita assegnata dall'utente. In questo caso, la parte identity del corpo della richiesta cambia come segue. Sostituire {yourRG} e {userIdentity} rispettivamente con il nome del gruppo di risorse e il nome dell'identità gestita assegnata dall'utente.

      "identity": {
          "type": "userAssigned",
          "tenantId": "{tenantId}",
          "userAssignedIdentities": {
              "/subscriptions/{subscriptionId}/resourceGroups/{yourRG}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{userIdentity}": {}
          }
      },
      

      L'identità gestita assegnata dall'utente può trovarsi in qualsiasi sottoscrizione e gruppo di risorse per cui l'utente che assegna il progetto abbia le autorizzazioni.

      Importante

      Azure Blueprints non gestisce l'identità gestita assegnata dall'utente. Gli utenti sono responsabili dell'assegnazione di ruoli e autorizzazioni sufficienti, altrimenti l'assegnazione del progetto non riesce.

Pulire le risorse

Annullare l'assegnazione di un progetto

È possibile rimuovere un progetto da una sottoscrizione. La rimozione viene spesso eseguita quando le risorse dell'elemento non sono più necessarie. Quando un progetto viene rimosso, gli elementi assegnati nell'ambito del progetto vengono mantenuti. Per rimuovere un'assegnazione del progetto, usare l'operazione API REST seguente:

  • URI DELL'API REST

    DELETE https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Blueprint/blueprintAssignments/assignMyBlueprint?api-version=2018-11-01-preview
    

Eliminare un progetto

Per rimuovere il progetto stesso, usare l'operazione API REST seguente:

  • URI DELL'API REST

    DELETE https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint?api-version=2018-11-01-preview
    

Passaggi successivi

In questa guida di avvio rapido si è creato, assegnato e rimosso un progetto con l'API REST. Per altre informazioni su Azure Blueprints, passare all'articolo relativo al ciclo di vita di un progetto.