Distribuzioni della sottoscrizione con file Bicep
Per semplificare la gestione delle risorse, è possibile distribuire le risorse a livello della sottoscrizione di Azure. Ad esempio, è possibile distribuire nella sottoscrizione i criteri e il Controllo degli accessi in base al ruolo di Azure (Azure RBAC), che li applica nella sottoscrizione.
Questo articolo descrive come impostare l'ambito di distribuzione per una sottoscrizione in un file Bicep.
Nota
È possibile eseguire una distribuzione a livello di sottoscrizione in un massimo di 800 gruppi di risorse diversi.
Risorse di formazione
Se si preferisce ottenere informazioni sugli ambiti di distribuzione tramite un 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 sottoscrizione. Questa sezione elenca i tipi di risorse supportati.
Per Azure Blueprints, usa:
Per Criteri di Azure, usare:
Per il controllo di accesso, usare:
- accessReviewScheduleDefinitions
- accessReviewScheduleSettings
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Per modelli annidati che distribuiscono a gruppi di risorse, usare:
Per la creazione di nuovi gruppi di risorse, usare:
Per la gestione della sottoscrizione, usare:
- budgets
- configurazioni - Azure Advisor
- lineOfCredit
- blocchi
- profilo - Analisi delle modifiche
- supportPlanTypes
- tag
Per il monitoraggio, usare:
Per la protezione, usare:
- advancedThreatProtectionSettings
- alertsSuppressionRules
- assessmentMetadata
- verifiche
- autoProvisioningSettings
- connettori
- devicesSecurityGroups
- ingestionSettings
- prezzi
- securityContacts
- impostazioni
- workspaceSettings
Altri tipi supportati includono:
Ambito set
Per impostare l'ambito sulla sottoscrizione, usare:
targetScope = 'subscription'
Comandi di distribuzione
Per eseguire la distribuzione in una sottoscrizione, usare i comandi di distribuzione a livello di sottoscrizione.
Per l'interfaccia della riga di comando di Azure usare az deployment sub create. L'esempio seguente distribuisce un modello per creare un gruppo di risorse:
az deployment sub create \
--name demoSubDeployment \
--location centralus \
--template-file main.bicep \
--parameters rgName=demoResourceGroup rgLocation=centralus
Per informazioni più dettagliate sui comandi e sulle opzioni di distribuzione per la distribuzione di modelli di ARM, 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 ARM da Cloud Shell
Percorso e nome della distribuzione
Per le distribuzioni a livello di sottoscrizione, è 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 Gruppo di gestione e tenant richiedono una posizione. Per le distribuzioni del gruppo 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 modello denominato main.json 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 sottoscrizione con il nome deployment1 in centralus , non è 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
Quando si esegue la distribuzione in una sottoscrizione, è possibile distribuire le risorse in:
- sottoscrizione di destinazione dall'operazione
- qualsiasi sottoscrizione nel tenant
- gruppi di risorse all'interno della sottoscrizione o di altre sottoscrizioni
- tenant per la sottoscrizione
È 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.
Ambito della sottoscrizione
Per distribuire le risorse nella sottoscrizione di destinazione, aggiungere tali risorse con la parola chiave resource
.
targetScope = 'subscription'
// resource group created in target subscription
resource exampleResource 'Microsoft.Resources/resourceGroups@2024-03-01' = {
...
}
Pergli esempi di distribuzione nella sottoscrizione, vedere Creare gruppi di risorse con Bicep e Assegnare una definizione dei criteri.
Per distribuire le risorse in una sottoscrizione diversa dalla sottoscrizione dall'operazione, aggiungere un modulo. Usare la funzione sottoscrizione per impostare la proprietà scope
. Specificare la proprietà subscriptionId
all'ID della sottoscrizione in cui si vuole eseguire la distribuzione.
targetScope = 'subscription'
param otherSubscriptionID string
// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
name: 'deployToDifferentSub'
scope: subscription(otherSubscriptionID)
}
Ambito per il gruppo di risorse
Per distribuire le risorse in un gruppo di risorse all'interno della sottoscrizione, aggiungere un modulo e impostarne la sua proprietà scope
. Se il gruppo di risorse esiste già, usare la funzione resourceGroup per impostare il valore dell'ambito. Specificare il nome del gruppo di risorse.
targetScope = 'subscription'
param resourceGroupName string
module exampleModule 'module.bicep' = {
name: 'exampleModule'
scope: resourceGroup(resourceGroupName)
}
Se il gruppo di risorse viene creato nello stesso file Bicep, usare il nome simbolico del gruppo di risorse per impostare il valore di ambito. Per un esempio di impostazione dell'ambito per il nome simbolico, vedere Creare un gruppo di risorse con Bicep.
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 obbligatorio per la distribuzione nel tenant.
L'esempio seguente include un modulo distribuito nel tenant.
targetScope = 'subscription'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
Anziché usare un modulo, è possibile impostare l'ambito su tenant()
per alcuni tipi di risorse. L'esempio seguente distribuisce un gruppo di gestione nel tenant.
targetScope = 'subscription'
param mgName string = 'mg-${uniqueString(newGuid())}'
// management group created at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: mgName
properties: {}
}
output output string = mgName
Per altre informazioni, vedere Gruppo di gestione.
Gruppi di risorse
Per informazioni sulla creazione di gruppi di risorse, vedere Creare un gruppo di risorse con Bicep.
Criteri di Azure
Assegnare una definizione di criteri
L'esempio seguente assegna una definizione di criteri esistente alla sottoscrizione. Se la definizione di criteri accetta parametri, specificarli come oggetto. Se non accetta parametri, usare l'oggetto vuoto predefinito.
targetScope = 'subscription'
param policyDefinitionID string
param policyName string
param policyParameters object = {}
resource policyAssign 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: policyName
properties: {
policyDefinitionId: policyDefinitionID
parameters: policyParameters
}
}
Creare e assegnare definizioni di criteri
È possibile definire e assegnare una definizione di criteri nello stesso file Bicep.
targetScope = 'subscription'
resource locationPolicy 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
name: 'locationpolicy'
properties: {
policyType: 'Custom'
parameters: {}
policyRule: {
if: {
field: 'location'
equals: 'northeurope'
}
then: {
effect: 'deny'
}
}
}
}
resource locationRestrict 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: 'allowedLocation'
properties: {
policyDefinitionId: locationPolicy.id
}
}
Controllo di accesso
Per informazioni sull'assegnazione dei ruoli, vedere Aggiungere assegnazioni di ruolo di Azure usando i modelli di Azure Resource Manager.
Nell'esempio seguente viene creato un gruppo di risorse, viene applicato un blocco e viene assegnato un ruolo a un'entità di sicurezza.
targetScope = 'subscription'
@description('Name of the resourceGroup to create')
param resourceGroupName string
@description('Location for the resourceGroup')
param resourceGroupLocation string
@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string
@description('roleDefinition to apply to the resourceGroup - default is contributor')
param roleDefinitionId string = 'b24988ac-6180-42a0-ab88-20f7382dd24c'
@description('Unique name for the roleAssignment in the format of a guid')
param roleAssignmentName string = guid(principalId, roleDefinitionId, resourceGroupName)
var roleID = '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/${roleDefinitionId}'
resource newResourceGroup 'Microsoft.Resources/resourceGroups@2024-03-01' = {
name: resourceGroupName
location: resourceGroupLocation
properties: {}
}
module applyLock 'lock.bicep' = {
name: 'applyLock'
scope: newResourceGroup
}
module assignRole 'role.bicep' = {
name: 'assignRBACRole'
scope: newResourceGroup
params: {
principalId: principalId
roleNameGuid: roleAssignmentName
roleDefinitionId: roleID
}
}
L'esempio seguente mostra il modulo per applicare il blocco:
resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
L'esempio seguente mostra il modulo per assegnare il ruolo:
@description('The principal to assign the role to')
param principalId string
@description('A GUID used to identify the role assignment')
param roleNameGuid string = newGuid()
param roleDefinitionId string
resource roleNameGuid_resource 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: roleNameGuid
properties: {
roleDefinitionId: roleDefinitionId
principalId: principalId
}
}
Passaggi successivi
Per altre informazioni sugli altri ambiti, vedere: