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 Azure AD. 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 indicazioni 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 risorsa 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 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 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.

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

Per informazioni più dettagliate sui comandi di distribuzione e sulle opzioni 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 una posizione. 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 main.

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
  • subscriptions
  • gruppi di risorse

È possibile definire l'ambito di una risorsa di estensione in 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@2020-02-01' = {
  ...
}

Ambito del gruppo di gestione

Per impostare come destinazione un gruppo di gestione all'interno del tenant, aggiungere un modulo. Utilizzare la funzione managementGroup per impostare la relativa 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 impostare la relativa 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 impostare la relativa 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@2020-02-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@2020-03-01-preview' = {
  name: roleAssignmentName
  properties: {
    roleDefinitionId: tenantResourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
    principalId: principalId
  }
}

Passaggi successivi

Per altre informazioni sugli altri ambiti, vedere: