Distribuzioni di tenant con modelli di Resource Manager

Con la maturità dell'organizzazione, potrebbe essere necessario definire e assegnare criteri o il controllo degli accessi in base al ruolo di Azure nel tenant di Microsoft Entra. Con i modelli a livello di tenant, è possibile applicare i criteri in modo dichiarativo e assegnare ruoli a livello globale.

Suggerimento

È consigliabile usare Bicep perché offre le stesse funzionalità dei modelli arm e la sintassi è più facile da usare. Per altre informazioni, vedere Distribuzioni di tenant.

Risorse supportate

Non tutti i tipi di risorse possono essere distribuiti a livello di tenant. Questa sezione elenca i tipi di risorse supportati.

Per il controllo degli accessi in base al ruolo di Azure, usare:

Per i modelli annidati che vengono distribuiti in gruppi di gestione, sottoscrizioni o gruppi di risorse, usare:

Per la creazione di gruppi di gestione, usare:

Per la creazione di sottoscrizioni, usare:

Per la gestione dei costi, usare:

Per configurare il portale, usare:

Le definizioni di criteri predefinite sono risorse a livello di tenant, ma non è possibile distribuire definizioni di criteri personalizzate nel tenant. Per un esempio di assegnazione di una definizione di criteri predefinita a una risorsa, vedere l'esempio tenantResourceId.

Schema

Lo schema usato per le distribuzioni a livello di tenant è diverso rispetto allo schema per le distribuzioni di gruppi di risorse.

Per i modelli, usare:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  ...
}

Lo schema per un file di parametri è lo stesso per tutti gli ambiti di distribuzione. Per i file di parametri, usare:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  ...
}

Accesso obbligatorio

L'entità di sicurezza che distribuisce il modello deve avere le autorizzazioni per creare le risorse nell'ambito del tenant. L'entità deve disporre dell'autorizzazione per eseguire le azioni di distribuzione (Microsoft.Resources/deployments/*) e per creare le risorse definite nel modello. Per creare un gruppo di gestione, ad esempio, l'entità di sicurezza deve disporre dell'autorizzazione come collaboratore nell'ambito del tenant. Per creare assegnazioni di ruolo, l'entità di sicurezza deve disporre dell'autorizzazione come proprietario.

Global Amministrazione istrator per Microsoft Entra ID non dispone automaticamente dell'autorizzazione per assegnare i ruoli. Per abilitare le distribuzioni di modelli nell'ambito del tenant, l'amministratore globale deve seguire questa procedura:

  1. Elevare i privilegi di accesso dell'account in modo che l'amministratore globale possa assegnare ruoli. Per altre informazioni, vedere Elevare i privilegi di accesso per gestire tutte le sottoscrizioni e i gruppi di gestione di Azure.

  2. Assegnare un proprietario o un collaboratore all'entità di sicurezza che deve distribuire i modelli.

    New-AzRoleAssignment -SignInName "[userId]" -Scope "/" -RoleDefinitionName "Owner"
    
    az role assignment create --assignee "[userId]" --scope "/" --role "Owner"
    

L'entità di sicurezza ha ora le autorizzazioni necessarie per distribuire il modello.

Comandi di distribuzione

I comandi per le distribuzioni a livello di tenant sono diversi rispetto ai comandi per le distribuzioni di gruppi di risorse.

Per l'interfaccia della riga di comando di Azure usare az deployment tenant create:

az deployment tenant create \
  --name demoTenantDeployment \
  --location WestUS \
  --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/tenant-deployments/new-mg/azuredeploy.json"

Per informazioni più dettagliate sui comandi e sulle opzioni di distribuzione per la distribuzione di modelli di Resource Manager, vedere:

Percorso e nome della distribuzione

Per le distribuzioni a livello di tenant, è necessario specificare un percorso di distribuzione. Il percorso di distribuzione è separato dal percorso delle risorse distribuite e specifica dove archiviare i dati di distribuzione. Anche le distribuzioni di sottoscrizioni e gruppi di gestione richiedono un percorso. Per le distribuzioni di gruppi di risorse, il percorso del gruppo di risorse viene usato per archiviare i dati di distribuzione.

È possibile specificare un nome per la distribuzione oppure usare il nome predefinito. Il nome predefinito è il nome del file modello. Ad esempio, la distribuzione di un modello denominato azuredeploy.json crea un nome di distribuzione predefinito di azuredeploy.

Per ogni nome di distribuzione il percorso non è modificabile. Non è possibile creare una distribuzione in un percorso se esiste una distribuzione con lo stesso nome in un percorso diverso. Ad esempio, se si crea una distribuzione del tenant con il nome deployment1 in centralus, non è possibile creare un'altra distribuzione con il nome deployment1 ma una località di westus. Se viene visualizzato il codice di errore InvalidDeploymentLocation, utilizzare un nome diverso o lo stesso percorso come la distribuzione precedente per tale nome.

Ambiti di distribuzione

Quando si esegue la distribuzione in un tenant, è possibile distribuire le risorse in:

  • tenant
  • gruppi di gestione all'interno del tenant
  • sottoscrizioni
  • resource groups

È possibile definire l'ambito di una risorsa di estensione a una destinazione diversa dalla destinazione di distribuzione.

L'utente che distribuisce il modello deve avere accesso all'ambito specificato.

Questa sezione illustra come specificare ambiti diversi. È possibile combinare questi ambiti diversi in un singolo modello.

Ambito del tenant

Le risorse definite all'interno della sezione resources del modello vengono applicate al tenant.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    tenant-resources
  ],
  "outputs": {}
}

Ambito del gruppo di gestione

Per specificare come destinazione un gruppo di gestione all'interno del tenant, aggiungere una distribuzione annidata e specificare la scope proprietà .

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "mgName": {
      "type": "string"
    }
  },
  "variables": {
    "mgId": "[concat('Microsoft.Management/managementGroups/', parameters('mgName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2022-09-01",
      "name": "nestedMG",
      "scope": "[variables('mgId')]",
      "location": "eastus",
      "properties": {
        "mode": "Incremental",
        "template": {
          management-group-resources
        }
      }
    }
  ],
  "outputs": {}
}

Ambito della sottoscrizione

È anche possibile specificare come destinazione le sottoscrizioni all'interno del tenant. L'utente che distribuisce il modello deve avere accesso all'ambito specificato.

Per impostare come destinazione una sottoscrizione all'interno del tenant, usare una distribuzione annidata e la subscriptionId proprietà .

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedSub",
      "location": "westus2",
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              subscription-resources
            }
          ]
        }
      }
    }
  ]
}

Ambito del gruppo di risorse

È anche possibile specificare come destinazione i gruppi di risorse all'interno del tenant. L'utente che distribuisce il modello deve avere accesso all'ambito specificato.

Per specificare come destinazione un gruppo di risorse all'interno del tenant, usare una distribuzione annidata. Impostare le proprietà subscriptionId e resourceGroup. Non impostare una posizione per la distribuzione annidata perché viene distribuita nella posizione del gruppo di risorse.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedRGDeploy",
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "resourceGroup": "demoResourceGroup",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              resource-group-resources
            }
          ]
        }
      }
    }
  ]
}

Creare un gruppo di gestione

Il modello seguente crea un gruppo di gestione.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "mgName": {
        "type": "string",
        "defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
      }
    },
    "resources": [
      {
        "type": "Microsoft.Management/managementGroups",
        "apiVersion": "2020-02-01",
        "name": "[parameters('mgName')]",
        "properties": {
        }
      }
    ]
  }

Se l'account non dispone dell'autorizzazione per la distribuzione nel tenant, è comunque possibile creare gruppi di gestione distribuendo in un altro ambito. Per altre informazioni, vedere Gruppo di gestione.

Assegnare il ruolo

Il modello seguente assegna un ruolo nell'ambito del tenant.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.5.6.12127",
      "templateHash": "17107802581699825924"
    }
  },
  "parameters": {
    "principalId": {
      "type": "string",
      "metadata": {
        "description": "principalId if the user that will be given contributor access to the tenant"
      }
    },
    "roleDefinitionId": {
      "type": "string",
      "defaultValue": "8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
      "metadata": {
        "description": "roleDefinition for the assignment - default is owner"
      }
    }
  },
  "variables": {
    "roleAssignmentName": "[guid('/', parameters('principalId'), parameters('roleDefinitionId'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/roleAssignments",
      "apiVersion": "2020-03-01-preview",
      "name": "[variables('roleAssignmentName')]",
      "properties": {
        "roleDefinitionId": "[tenantResourceId('Microsoft.Authorization/roleDefinitions', parameters('roleDefinitionId'))]",
        "principalId": "[parameters('principalId')]"
      }
    }
  ]
}

Passaggi successivi