Distribuzioni di tenant con modelli di Resource Manager

Quando l'organizzazione si matura, potrebbe essere necessario definire e assegnare criteri o il controllo degli accessi in base al ruolo di Azure nel tenant di Azure AD. 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 di Resource Manager e la sintassi è più semplice da usare. Per altre informazioni, vedere Distribuzioni del 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 nei gruppi di gestione, nelle sottoscrizioni o nei gruppi di risorse, usare:

Per la creazione di gruppi di gestione, usare:

Per la creazione di sottoscrizioni, usare:

Per gestire i costi, usare:

Per configurare il portale, usare:

Le definizioni dei 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 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.

L'amministratore globale di Azure Active Directory non dispone automaticamente dell'autorizzazione per assegnare 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. Le distribuzioni di sottoscrizioni e gruppi di gestione richiedono anche una posizione. Per le distribuzioni di gruppi di risorse , la posizione del gruppo di risorse viene usata 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 tenant con il nome deployment1 in centralus, non è possibile creare un'altra distribuzione con il nome deployment1 ma una posizione 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 distribuisce in un tenant, è possibile distribuire le risorse in:

  • tenant
  • gruppi di gestione all'interno del tenant
  • subscriptions
  • gruppi di risorse

Una risorsa di estensione può essere con ambito 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 diversi ambiti in un singolo modello.

Ambito del tenant

Le risorse definite nella sezione risorse 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 indirizzare 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": "2021-04-01",
      "name": "nestedMG",
      "scope": "[variables('mgId')]",
      "location": "eastus",
      "properties": {
        "mode": "Incremental",
        "template": {
          management-group-resources
        }
      }
    }
  ],
  "outputs": {}
}

Ambito della sottoscrizione

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

Per indirizzare 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 indirizzare i gruppi di risorse all'interno del tenant. L'utente che distribuisce il modello deve avere accesso all'ambito specificato.

Per indirizzare 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