Distribuzioni di tenant con il file Bicep

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.

Risorse di formazione

Se si preferisce ottenere informazioni sugli ambiti di distribuzione tramite istruzioni dettagliate, vedere Distribuire risorse in sottoscrizioni, gruppi di gestione e tenant usando Bicep.

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.

Ambito set

Per impostare l'ambito sul tenant, usare:

targetScope = 'tenant'

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-file main.bicep

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 file denominato main.bicep crea un nome di distribuzione predefinito principale.

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 del file Bicep vengono applicate al tenant.

targetScope = 'tenant'

// create resource at tenant
resource mgName_resource 'Microsoft.Management/managementGroups@2021-04-01' = {
  ...
}

Ambito del gruppo di gestione

Per specificare come destinazione un gruppo di gestione all'interno del tenant, aggiungere un modulo. Utilizzare la funzione managementGroup per impostarne la scope proprietà. Specificare il nome del gruppo di gestione.

targetScope = 'tenant'

param managementGroupName string

// create resources at management group level
module  'module.bicep' = {
  name: 'deployToMG'
  scope: managementGroup(managementGroupName)
}

Ambito della sottoscrizione

Per specificare come destinazione una sottoscrizione all'interno del tenant, aggiungere un modulo. Usare la funzione di sottoscrizione per impostarne la scope proprietà. Specificare l'ID sottoscrizione.

targetScope = 'tenant'

param subscriptionID string

// create resources at subscription level
module  'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(subscriptionID)
}

Ambito del gruppo di risorse

Per specificare come destinazione un gruppo di risorse all'interno del tenant, aggiungere un modulo. Usare la funzione resourceGroup per impostarne la scope proprietà. Specificare l'ID sottoscrizione e il nome del gruppo di risorse.

targetScope = 'tenant'

param resourceGroupName string
param subscriptionID string

// create resources at resource group level
module  'module.bicep' = {
  name: 'deployToRG'
  scope: resourceGroup(subscriptionID, resourceGroupName)
}

Creare un gruppo di gestione

Il modello seguente crea un gruppo di gestione.

targetScope = 'tenant'
param mgName string = 'mg-${uniqueString(newGuid())}'

resource mgName_resource 'Microsoft.Management/managementGroups@2021-04-01' = {
  name: 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.

targetScope = 'tenant'

@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string

@description('roleDefinition for the assignment - default is owner')
param roleDefinitionId string = '8e3af657-a8ff-443c-a75c-2fe8c4bcb635'

var roleAssignmentName = guid(principalId, roleDefinitionId)

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: roleAssignmentName
  properties: {
    roleDefinitionId: tenantResourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
    principalId: principalId
  }
}

Passaggi successivi

Per altre informazioni sugli altri ambiti, vedere: