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 l'organizzazione è matura, è possibile distribuire un file Bicep per creare risorse a livello di gruppo di gestione. Ad esempio, potrebbe essere necessario definire e assegnare criteri o il controllo degli accessi in base al ruolo di Azure per un gruppo di gestione. Con i modelli a livello di gruppo di gestione, è possibile applicare in modo dichiarativo i criteri e assegnare ruoli a livello di gruppo di gestione.
Risorse di formazione
Se si preferisce 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 gruppo di gestione. Questa sezione elenca i tipi di risorse supportati.
Per Azure Blueprints, usare:
Per Criteri di Azure, usare:
Per il controllo di accesso, usare:
- privateLinkAssociations
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Per i modelli annidati che vengono distribuiti nelle sottoscrizioni o nei gruppi di risorse, usare:
Per gestire le risorse, usare:
I gruppi di gestione sono risorse a livello di tenant. È tuttavia possibile creare gruppi di gestione in una distribuzione del gruppo di gestione impostando l'ambito del nuovo gruppo di gestione nel tenant. Vedere Gruppo di gestione.
Ambito set
Per impostare l'ambito sul gruppo di gestione, usare:
targetScope = 'managementGroup'
Comandi di distribuzione
Per distribuire 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 mg 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 Resource Manager, vedere:
- Distribuire le risorse con i modelli di Azure Resource Manager e l'interfaccia della riga di comando di Azure
- Distribuire le risorse con i modelli di Azure Resource Manager e Azure PowerShell
- Distribuire modelli di Resource Manager da Cloud Shell
Percorso e nome della distribuzione
Per le distribuzioni a livello di gruppo di gestione, è necessario fornire un percorso per la distribuzione. Il percorso di distribuzione è separato dal percorso delle risorse distribuite e specifica dove archiviare i dati di distribuzione. Le distribuzioni di sottoscrizioni e tenant 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 main.bicep crea un nome di distribuzione predefinito di 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 di un gruppo di gestione 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 gruppo di gestione, è possibile distribuire le risorse in:
- gruppo di gestione di destinazione dall'operazione
- un altro gruppo di gestione nel tenant
- sottoscrizioni nel gruppo di gestione
- gruppi di risorse nel gruppo di gestione
- tenant per il gruppo 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.
Ambito del gruppo di gestione
Per distribuire le risorse nel gruppo di gestione di destinazione, aggiungere tali risorse con la resource
parola chiave.
targetScope = 'managementGroup'
// policy definition created in the management group
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
...
}
Per indirizzare un altro gruppo di gestione, aggiungere un modulo. Usare la funzione managementGroup per impostare la scope
proprietà. 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 indirizzare le sottoscrizioni all'interno di un gruppo di gestione. L'utente che distribuisce il modello deve avere accesso all'ambito specificato.
Per indirizzare una sottoscrizione all'interno del gruppo di gestione, aggiungere un modulo. Usare la funzione di sottoscrizione per impostare la scope
proprietà. Specificare l'ID 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 indirizzare i gruppi di risorse all'interno del gruppo di gestione. L'utente che distribuisce il modello deve avere accesso all'ambito specificato.
Per indirizzare un gruppo di risorse all'interno del gruppo di gestione, aggiungere un modulo. Utilizzare la funzione resourceGroup per impostare la scope
proprietà. Specificare l'ID 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 impostare la relativa scope
proprietà. 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@2021-04-01' = {
scope: tenant()
name: mgName
properties: {}
}
output newManagementGroup string = mgName
Nell'esempio successivo viene creato un nuovo gruppo di gestione nel gruppo di gestione destinato alla distribuzione. Usa la funzione del gruppo di gestione.
targetScope = 'managementGroup'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource newMG 'Microsoft.Management/managementGroups@2021-04-01' = {
scope: tenant()
name: mgName
properties: {
details: {
parent: {
id: managementGroup().id
}
}
}
}
output newManagementGroup string = mgName
Sottoscrizioni
Per usare un modello di Resource Manager per creare una nuova sottoscrizione di Azure in un gruppo di gestione, vedere:
- Creare sottoscrizioni di Azure Enterprise Agreement a livello di codice
- Creare sottoscrizioni di Azure a livello di codice per un Contratto del cliente Microsoft
- Creare sottoscrizioni di Azure a livello di codice per un Contratto Microsoft Partner
Per distribuire un modello che sposta una sottoscrizione di Azure esistente in un nuovo gruppo di gestione, vedere Spostare le sottoscrizioni nel modello di Resource Manager
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 dei 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 illustrato 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@2021-06-01' = {
name: 'locationRestriction'
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
not: {
field: 'location'
in: allowedLocations
}
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
name: 'locationAssignment'
properties: {
policyDefinitionId: policyDefinition.id
}
}
Passaggi successivi
Per altre informazioni sugli altri ambiti, vedere: