Condividi tramite


Distribuzioni di gruppi di gestione con file Bicep

Questo articolo descrive come impostare l'ambito con Bicep durante la distribuzione in un gruppo di gestione.

Man mano che la propria organizzazione è in crescita, è possibile distribuire un file Bicep per creare risorse a livello di gruppo di gestione. Ad esempio, si potrebbe aver bisogno di definire e assegnare criteri o il controllo degli accessi in base al ruolo di Azure (RBAC) per un gruppo di gestione. Con i modelli a livello di gruppo di gestione, è possibile applicare criteri in modo dichiarativo e assegnare ruoli a livello di gruppo di gestione. Per altre informazioni, vedere Comprendere l'ambito.

Risorse di formazione

Se si preferisce ottenere informazioni sugli ambiti di distribuzione tramite materiale sussidiario dettagliato, 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 gruppo di gestione. Questa sezione elenca i tipi di risorse supportati.

Per Azure Blueprints, usare:

Per Criteri di Azure, usa:

Per il controllo di accesso, usa:

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

Per gestire le proprie risorse, usare:

I gruppi di gestione sono risorse a livello di tenant. È tuttavia possibile creare gruppi di gestione in una distribuzione di gruppi di gestione impostando l'ambito del nuovo gruppo di gestione sul tenant. Vedere Gruppo di gestione.

Ambito set

Per impostare l'ambito sul gruppo di gestione, usare:

targetScope = 'managementGroup'

Comandi di distribuzione

Per eseguire la distribuzione in un gruppo di gestione, usare i comandi di distribuzione del gruppo di gestione.

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

az deployment mg create \
  --name demoMGDeployment \
  --location WestUS \
  --management-group-id myMG \
  --template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/management-level-deployment/azuredeploy.json"

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

Percorso e nome della distribuzione

Per le distribuzioni a livello di gruppo di gestione, è necessario specificare una posizione 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 tenant richiedono una posizione. Per le distribuzioni del gruppo 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 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 di gruppo di gestione con il nome deployment1 in centralus, non sarò possibile creare in seguito un'altra distribuzione con il nome deployment1 ma con posizione 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

In un file Bicep tutte le risorse dichiarate con la resource parola chiave devono essere distribuite nello stesso ambito della distribuzione. Per una distribuzione di un gruppo di gestione, significa che tutte le resource dichiarazioni nel file Bicep devono essere distribuite nello stesso gruppo di gestione o come risorsa figlio o estensione di una risorsa nello stesso gruppo di gestione della distribuzione.

Tuttavia, questa restrizione non si applica alle existing risorse. È possibile fare riferimento alle risorse esistenti in un ambito diverso rispetto alla distribuzione.

Per distribuire le risorse in più ambiti all'interno di una singola distribuzione, usare i moduli. La distribuzione di un modulo attiva una "distribuzione nidificata", consentendo di specificare come destinazione ambiti diversi. L'utente che distribuisce il file Bicep padre deve disporre delle autorizzazioni necessarie per avviare le distribuzioni in tali ambiti.

È possibile distribuire un modulo Bicep dall'interno di un file Bicep con ambito gruppo di gestione negli ambiti seguenti:

Ambito del gruppo di gestione

Per distribuire le risorse nel gruppo di gestione di destinazione, aggiungere tali risorse con la parola chiave resource.

targetScope = 'managementGroup'

// policy definition created in the management group
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2025-01-01' = {
  ...
}

Per specificare come destinazione un altro gruppo di gestione, aggiungere un modulo. Utilizzare la funzione managementGroup per impostare la proprietà scope. Specificare il nome del gruppo di gestione.

targetScope = 'managementGroup'

param otherManagementGroupName string

// module deployed at management group level but in a different management group
module exampleModule 'module.bicep' = {
  name: 'deployToDifferentMG'
  scope: managementGroup(otherManagementGroupName)
}

Ambito della sottoscrizione

È anche possibile specificare come destinazione le sottoscrizioni all'interno di un gruppo di gestione. L'utente che distribuisce il modello deve avere accesso all’ambito specificato.

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

targetScope = 'managementGroup'

param subscriptionID string

// module deployed to subscription in the management group
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(subscriptionID)
}

Ambito del gruppo di risorse

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

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

targetScope = 'managementGroup'

param subscriptionID string
param resourceGroupName string

// module deployed to resource group in the management group
module exampleModule 'module.bicep' = {
  name: 'deployToRG'
  scope: resourceGroup(subscriptionID, resourceGroupName)
}

Ambito del tenant

Per creare risorse nel tenant, aggiungere un modulo. Usare la funzione tenant per impostarne la proprietà scope. L'utente che distribuisce il modello deve avere l'accesso necessario per la distribuzione nel tenant.

targetScope = 'managementGroup'

// module deployed at tenant level
module exampleModule 'module.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

In alternativa, è possibile impostare l'ambito su / per alcuni tipi di risorse, ad esempio i gruppi di gestione. La creazione di un nuovo gruppo di gestione è descritta nella sezione successiva.

Gruppo di gestione

Per creare un gruppo di gestione in una distribuzione del gruppo di gestione, è necessario impostare l'ambito sul tenant.

Nell'esempio seguente viene creato un nuovo gruppo di gestione nel gruppo di gestione radice.

targetScope = 'managementGroup'

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

resource newMG 'Microsoft.Management/managementGroups@2023-04-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output newManagementGroup string = mgName

Nell'esempio seguente viene creato un nuovo gruppo di gestione nel gruppo di gestione di destinazione per la distribuzione. Usa la funzione del gruppo di gestione.

targetScope = 'managementGroup'

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

resource newMG 'Microsoft.Management/managementGroups@2023-04-01' = {
  scope: tenant()
  name: mgName
  properties: {
    details: {
      parent: {
        id: managementGroup().id
      }
    }
  }
}

output newManagementGroup string = mgName

Sottoscrizioni

Per usare un modello di ARM per creare una nuova sottoscrizione di Azure in un gruppo di gestione, vedere:

Per distribuire un modello che trasferisca una sottoscrizione di Azure esistente in un nuovo gruppo di gestione, vedere Trasferire sottoscrizioni nel modello di ARM

Criteri di Azure

Le definizioni di criteri personalizzate distribuite nel gruppo di gestione sono estensioni del gruppo di gestione. Per ottenere l'ID di una definizione di criteri personalizzata, usare la funzione extensionResourceId(). Le definizioni di criteri predefinite sono risorse a livello di tenant. Per ottenere l'ID di una definizione di criteri predefinita, usare la funzione tenantResourceId().

Nell'esempio seguente viene spiegato come definire un criterio a livello di gruppo di gestione e assegnarlo.

targetScope = 'managementGroup'

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: 'locationAssignment'
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

Passaggi successivi

Per altre informazioni sugli altri ambiti, vedere: