Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Uno stack di distribuzione di Azure è una risorsa che consente di gestire un gruppo di risorse di Azure come una singola unità coesa. Quando si invia un file Bicep o un modello JSON di Azure Resource Manager (modello JSON ARM) a uno stack di distribuzione, si definiscono le risorse gestite dallo stack. Se si rimuove una risorsa dal modello, può essere scollegata o eliminata in base al comportamento actionOnUnmanage specificato dello stack di distribuzione. È possibile limitare l'accesso allo stack di distribuzione usando il controllo degli accessi in base al ruolo di Azure, simile ad altre risorse di Azure.
Per creare e aggiornare uno stack di distribuzione, usare l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure con i file Bicep. Lo stack traspila questi file Bicep nei modelli JSON arm e li distribuisce come oggetto di distribuzione. Lo stack di distribuzione offre funzionalità aggiuntive oltre alle risorse di distribuzione familiari ed è un superset di tali funzionalità.
Microsoft.Resources/deploymentStacks è il tipo di risorsa per gli stack di distribuzione. È costituito da un modello principale che può eseguire aggiornamenti uno-a-molti tra diversi ambiti sulle risorse che descrive e bloccare qualsiasi modifica indesiderata a tali risorse.
Quando si pianifica la distribuzione e si determina quali gruppi di risorse devono far parte dello stesso stack, prendere in considerazione il ciclo di vita di gestione di tali risorse, che include la creazione, l'aggiornamento e l'eliminazione. Ad esempio, potrebbe essere necessario effettuare il provisioning di alcune macchine virtuali di test per vari team di applicazioni in ambiti di gruppi di risorse diversi. È possibile usare uno stack di distribuzione per creare questi ambienti di test e aggiornare le configurazioni delle macchine virtuali di test tramite gli aggiornamenti successivi allo stack di distribuzione. Dopo aver completato il progetto, potrebbe essere necessario rimuovere o eliminare tutte le risorse create, ad esempio le macchine virtuali di test. Usare uno stack di distribuzione e specificare il flag di eliminazione appropriato per rimuovere le risorse gestite. Questo approccio semplificato consente di risparmiare tempo durante la pulizia dell'ambiente, perché comporta un singolo aggiornamento alla risorsa stack anziché modificare singolarmente o rimuovere ogni macchina virtuale di test in vari ambiti del gruppo di risorse.
Gli stack di distribuzione richiedono Azure PowerShell versione 12.0.0 o successiva oppure interfaccia della riga di comando di Azure versione 2.61.0 o successiva.
Per creare il tuo primo stack di distribuzione, usa Avvio rapido: Creare lo stack di distribuzione.
Perché usare gli stack di distribuzione?
Gli stack di distribuzione offrono i seguenti vantaggi:
- Provisioning e gestione semplificati delle risorse tra diversi ambiti come un'entità unificata.
- Prevenzione delle modifiche indesiderate alle risorse gestite tramite nega impostazioni.
- Pulizia efficiente dell'ambiente usando flag di eliminazione durante gli aggiornamenti dello stack di distribuzione.
- Uso di modelli standard, come Bicep, modelli ARM o specifiche di modello per gli stack di distribuzione.
Problemi noti e limitazioni
Per limitazioni note, problemi noti e soluzioni alternative consigliate, vedere Problemi noti per gli stack di distribuzione.
Ruoli predefiniti
Avviso
L'applicazione dell'autorizzazione RBAC Microsoft.Resources/deploymentStacks/manageDenySetting/action è in fase di distribuzione nelle varie aree geografiche, inclusi i cloud governativi.
Esistono due ruoli predefiniti per lo stack di distribuzione:
- Collaboratore di Azure Deployment Stack: gli utenti possono gestire gli stack di distribuzione, ma non possono creare o eliminare assegnazioni di rifiuto all'interno degli stack di distribuzione.
- Proprietario di Azure Deployment Stack: gli utenti possono gestire gli stack di distribuzione, inclusi gli utenti con assegnazioni di rifiuto.
Crea stack di distribuzione
È possibile creare una risorsa dello stack di distribuzione nell'ambito del gruppo di risorse, della sottoscrizione o del gruppo di gestione. Il modello fornito con uno stack di distribuzione definisce le risorse da creare o aggiornare nell'ambito di destinazione.
- Uno stack nell'ambito del gruppo di risorse può distribuire il modello nello stesso gruppo di risorse in cui è presente lo stack di distribuzione.
- Uno stack nell'ambito della sottoscrizione può distribuire il modello in un gruppo di risorse o nella stessa sottoscrizione in cui è presente lo stack di distribuzione.
- Uno stack nell'ambito del gruppo di gestione può distribuire il modello nella sottoscrizione.
È importante notare che, laddove esista uno stack di distribuzione, viene creata anche l'assegnazione di rifiuto con la funzionalità delle impostazioni di rifiuto. Ad esempio, creando uno stack di distribuzione a livello di sottoscrizione che distribuisce il modello a livello di gruppo di risorse e con la modalità delle impostazioni di negazione DenyDelete, puoi effettuare facilmente il provisioning delle risorse gestite nel gruppo di risorse specificato e bloccare i tentativi di eliminazione di tali risorse. Questo approccio consente di migliorare la sicurezza dello stack di distribuzione separandolo a livello di sottoscrizione anziché a livello di gruppo di risorse. Questa separazione garantisce che i team di sviluppo che lavorano con le risorse oggetto di provisioning abbiano visibilità e accesso in scrittura solo ai gruppi di risorse. Lo stack di distribuzione rimane isolato a un livello più elevato. Questa configurazione limita il numero di utenti che possono modificare uno stack di distribuzione e apportare modifiche alla sua assegnazione di rifiuto. Per altre informazioni, vedi Proteggere la risorsa gestita dall'eliminazione.
È anche possibile usare i comandi create-stack per aggiornare gli stack di distribuzione.
Per creare uno stack di distribuzione nell'ambito del gruppo di risorse:
New-AzResourceGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-ResourceGroupName "<resource-group-name>" `
-TemplateFile "<bicep-file-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "none"
Per creare uno stack di distribuzione a livello di sottoscrizione:
New-AzSubscriptionDeploymentStack `
-Name "<deployment-stack-name>" `
-Location "<location>" `
-TemplateFile "<bicep-file-name>" `
-DeploymentResourceGroupName "<resource-group-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "none"
Il parametro DeploymentResourceGroupName specifica il gruppo di risorse usato per archiviare le risorse gestite. Se non si specifica il parametro , le risorse gestite vengono archiviate nell'ambito della sottoscrizione.
Per creare uno stack di distribuzione nell'ambito del gruppo di gestione:
New-AzManagementGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-Location "<location>" `
-TemplateFile "<bicep-file-name>" `
-DeploymentSubscriptionId "<subscription-id>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "none"
Il parametro deploymentSubscriptionId specifica la sottoscrizione usata per archiviare le risorse gestite. Se non si specifica il parametro , le risorse gestite vengono archiviate nell'ambito del gruppo di gestione.
Elenca gli stack di distribuzione
Per elencare le risorse dello stack di distribuzione nell'ambito del gruppo di risorse:
Get-AzResourceGroupDeploymentStack `
-ResourceGroupName "<resource-group-name>"
Per elencare le risorse dello stack di distribuzione nell'ambito della sottoscrizione:
Get-AzSubscriptionDeploymentStack
Per elencare le risorse dello stack di distribuzione nell'ambito del gruppo di gestione:
Get-AzManagementGroupDeploymentStack `
-ManagementGroupId "<management-group-id>"
Aggiornare gli stack di distribuzione
Per aggiornare uno stack di distribuzione, che potrebbe comportare l'aggiunta o l'eliminazione di una risorsa gestita, è necessario apportare modifiche ai file Bicep sottostanti. Dopo aver apportato le modifiche, è possibile aggiornare lo stack di distribuzione eseguendo il comando update o eseguendo nuovamente il comando create.
Il modello di progettazione dell'infrastruttura come codice offre il controllo completo sull'elenco delle risorse gestite.
Usa il comando Set
Per aggiornare uno stack di distribuzione nell'ambito del gruppo di risorse:
Set-AzResourceGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-ResourceGroupName "<resource-group-name>" `
-TemplateFile "<bicep-file-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "none"
Per aggiornare uno stack di distribuzione a livello di sottoscrizione:
Set-AzSubscriptionDeploymentStack `
-Name "<deployment-stack-name>" `
-Location "<location>" `
-TemplateFile "<bicep-file-name>" `
-DeploymentResourceGroupName "<resource-group-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "none"
Il parametro DeploymentResourceGroupName specifica il gruppo di risorse usato per archiviare le risorse dello stack di distribuzione. Se non si specifica un nome di gruppo di risorse, il servizio stack di distribuzione creerà automaticamente un nuovo gruppo di risorse.
Per aggiornare uno stack di distribuzione nell'ambito del gruppo di gestione:
Set-AzManagementGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-Location "<location>" `
-TemplateFile "<bicep-file-name>" `
-DeploymentSubscriptionId "<subscription-id>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "none"
Usa il comando Nuovo
Verrà visualizzato un avviso simile al seguente:
The deployment stack 'myStack' you're trying to create already exists in the current subscription/management group/resource group. Do you want to overwrite it? Detaching: resources, resourceGroups (Y/N)
Per ulteriori informazioni, vedi Creare stack di distribuzione.
Controllo della disconnessione e dell'eliminazione
Una risorsa scollegata (o una risorsa non gestita) fa riferimento a una risorsa che lo stack di distribuzione non tiene traccia o gestisce ma che esiste ancora in Azure.
Per indicare ad Azure di eliminare le risorse non gestite, aggiornare lo stack con il comando create stack e includere l'opzione ActionOnUnmanage . Per ulteriori informazioni, vedi Creare stack di distribuzione.
Usare l'opzione ActionOnUnmanage per definire cosa accade alle risorse non più gestite dopo l'aggiornamento o l'eliminazione di uno stack. I valori consentiti sono i seguenti:
-
deleteAll: usare l'eliminazione anziché la rimozione per le risorse gestite e i gruppi di risorse. -
deleteResources: usare l'eliminazione anziché la rimozione solo per le risorse gestite. -
detachAll: scollegare le risorse gestite e i gruppi di risorse.
Ad esempio:
New-AzSubscriptionDeploymentStack `
-Name "<deployment-stack-name" `
-TemplateFile "<bicep-file-name>" `
-DenySettingsMode "none" `
-ActionOnUnmanage "deleteAll"
Avviso
Quando si eliminano gruppi di risorse con l'opzione action-on-unmanage impostata su deleteAll, si eliminano i gruppi di risorse gestiti e tutte le risorse contenute all'interno di esse.
Gestire l'errore di stack non sincronizzato
Quando si aggiorna o si elimina uno stack di distribuzione, è possibile che venga visualizzato l'errore di stack non sincronizzato seguente, a indicare che l'elenco di risorse dello stack non è sincronizzato correttamente.
The deployment stack '{0}' might not have an accurate list of managed resources. To prevent resources from being accidentally deleted, check that the managed resource list doesn't have any additional values. If there is any uncertainty, it's recommended to redeploy the stack with the same template and parameters as the current iteration. To bypass this warning, specify the 'BypassStackOutOfSyncError' flag.
È possibile ottenere un elenco delle risorse dal portale di Azure o ridistribuire il file Bicep attualmente distribuito con gli stessi parametri. L'output mostra le risorse gestite.
...
Resources: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/demoRg/providers/Microsoft.Storage/storageAccounts/storethmimleef5fwk
Dopo aver esaminato e verificato l'elenco delle risorse nello stack, eseguire di nuovo il comando con l'opzione BypassStackOutOfSyncError in Azure PowerShell (o bypass-stack-out-of-sync-error in interfaccia della riga di comando di Azure). Usare questa opzione solo dopo aver esaminato attentamente l'elenco delle risorse nello stack. Non usare questa opzione per impostazione predefinita.
Eliminare gli stack di distribuzione
L'opzione ActionOnUnmanage definisce l'azione da eseguire per le risorse che non sono più gestite. L'opzione ha i valori seguenti:
-
DeleteAll: eliminare sia le risorse che i gruppi di risorse. -
DeleteResources: elimina solo le risorse. -
DetachAll: rimuovere le risorse.
Anche se si specifica l'opzione delete-all, le risorse non gestite all'interno del gruppo di risorse in cui si trova lo stack di distribuzione impediscono l'eliminazione delle risorse non gestite e del gruppo di risorse stesso.
Per eliminare le risorse dello stack di distribuzione nell'ambito del gruppo di risorse:
Remove-AzResourceGroupDeploymentStack `
-name "<deployment-stack-name>" `
-ResourceGroupName "<resource-group-name>" `
-ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"
Per eliminare le risorse dello stack di distribuzione nell'ambito della sottoscrizione:
Remove-AzSubscriptionDeploymentStack `
-Name "<deployment-stack-name>" `
-ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"
Per eliminare le risorse dello stack di distribuzione nell'ambito del gruppo di gestione:
Remove-AzManagementGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-ManagementGroupId "<management-group-id>" `
-ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"
Visualizza le risorse gestite nello stack di distribuzione
Il servizio stack di distribuzione non ha ancora un'interfaccia utente grafica (GUI) del portale di Azure. Per visualizzare le risorse gestite all'interno di uno stack di distribuzione, usare i comandi seguenti di Azure PowerShell/interfaccia della riga di comando di Azure:
Per visualizzare le risorse gestite nell'ambito del gruppo di risorse:
(Get-AzResourceGroupDeploymentStack -Name "<deployment-stack-name>" -ResourceGroupName "<resource-group-name>").Resources
Per visualizzare le risorse gestite nell'ambito della sottoscrizione:
(Get-AzSubscriptionDeploymentStack -Name "<deployment-stack-name>").Resources
Per visualizzare le risorse gestite nell'ambito del gruppo di gestione:
(Get-AzManagementGroupDeploymentStack -Name "<deployment-stack-name>" -ManagementGroupId "<management-group-id>").Resources
Aggiungi risorse allo stack di distribuzione
Per aggiungere una risorsa gestita, aggiungi la definizione di risorsa ai file Bicep sottostanti e quindi esegui di nuovo il comando update o riesegui il comando create. Per ulteriori informazioni, vedi Aggiornare stack di distribuzione.
Eliminare le risorse gestite dallo stack di distribuzione
Per eliminare una risorsa gestita, rimuovi la definizione della risorsa dai file Bicep sottostanti e quindi riesegui il comando di aggiornamento o riesegui il comando create. Per ulteriori informazioni, vedi Aggiornare stack di distribuzione.
Proteggere le risorse gestite
È possibile assegnare autorizzazioni specifiche alle risorse gestite di uno stack di distribuzione per impedire alle entità di sicurezza non autorizzate di eliminarle o aggiornarle. Queste autorizzazioni vengono definite impostazioni di rifiuto. Archiviare gli stack nell'ambito padre. Ad esempio, per proteggere le risorse in una sottoscrizione, posizionare lo stack al livello padre, ovvero al gruppo di gestione padre immediatamente superiore.
L'impostazione deny si applica solo alle operazioni del piano di controllo e non alle operazioni del piano dati. Ad esempio, si creano account di archiviazione e Key Vault attraverso il piano di controllo, il che significa che lo stack di distribuzione li gestisce. Tuttavia, si creano risorse figlio come segreti o contenitori BLOB tramite il piano dati, il che significa che lo stack di distribuzione non è in grado di gestirli.
L'impostazione di rifiuto si applica solo alle risorse create in modo esplicito, non a quelle create in modo implicito. Ad esempio, un cluster AKS gestito crea diversi altri servizi a supporto, come una macchina virtuale. In questo caso, poiché la macchina virtuale non è definita nel file Bicep ed è una risorsa creata in modo implicito, non è soggetta alle impostazioni di negazione dello stack di distribuzione.
Nota
La versione più recente richiede autorizzazioni specifiche nell'ambito dello stack per:
- Creare o aggiornare uno stack di distribuzione e configurare l'impostazione deny su un valore diverso da
None. - Aggiornare o eliminare uno stack di distribuzione con un'impostazione di rifiuto esistente con un valore diverso da
None.
Usare i ruoli predefiniti dello stack di distribuzione per concedere le autorizzazioni.
Azure PowerShell include i seguenti parametri per personalizzare l'assegnazione di rifiuto:
-
DenySettingsMode: definisce le operazioni non consentite nelle risorse gestite per proteggersi da entità di sicurezza non autorizzate che tentano di eliminarle o aggiornarle. Questa restrizione si applica a tutti, a meno che non si conceda esplicitamente l'accesso. I valori includono:None,DenyDeleteeDenyWriteAndDelete. -
DenySettingsApplyToChildScopes: Se specificato, la configurazione della modalità di impostazione "Nega" si applica anche all'ambito figlio delle risorse gestite. Ad esempio, un file Bicep definisce una risorsa Microsoft.Sql/servers (padre) e una risorsa Microsoft.Sql/servers/databases (figlio). Se si crea uno stack di distribuzione usando il file Bicep con l'impostazioneDenySettingsApplyToChildScopesabilitata e ilDenySettingsModeset suDenyWriteAndDelete, non è possibile aggiungere altre risorse figlio alla risorsa Microsoft.Sql/servers o alla risorsa Microsoft.Sql/servers/databases . -
DenySettingsExcludedAction: elenco di operazioni di gestione basate sui ruoli escluse dalle impostazioni di negazione. Sono consentite fino a 200 azioni. -
DenySettingsExcludedPrincipal: elenco degli ID delle entità di sicurezza Microsoft Entra esclusi dal blocco. Sono consentite fino a cinque entità di sicurezza.
Escludere le entità di sicurezza dalle impostazioni di rifiuto
Usare l'impostazione delle entità escluse (DenySettingsExcludedPrincipal in Azure PowerShell, deny-settings-excluded-principals in interfaccia della riga di comando di Azure) per esentare identità specifiche dall'impostazione di negazione. L'impostazione accetta l'ID oggetto Microsoft Entra di qualsiasi tipo di entità di sicurezza, tra cui:
- Utenti
- gruppi Microsoft Entra (ad esempio, gruppi di sicurezza)
- Principali del servizio
- Identità gestite
Quando si esclude un gruppo, l'impostazione deny non si applica alle entità del gruppo. La gestione delle esclusioni tramite l'appartenenza al gruppo è l'approccio consigliato, perché è possibile modificare gli utenti esclusi aggiornando il gruppo anziché aggiornare lo stack di distribuzione. Le identità comunemente escluse includono le connessioni al servizio CI/CD e le identità del carico di lavoro, il team della piattaforma o i gruppi di amministratori di emergenza e le identità di correzione dei criteri.
Importante
È possibile escludere un massimo di cinque entità. Se si specificano più di cinque entità di sicurezza, non viene restituito alcun errore, quindi verificare che l'elenco non contenga più di cinque voci. Per escludere più identità rispetto al limite consentito, consolidarle in uno o più gruppi di Microsoft Entra ed escludere i gruppi anziché le singole entità.
Quando si esclude un gruppo, l'impostazione deny viene valutata rispetto all'appartenenza a tale gruppo. Se si usano gruppi annidati, testare la configurazione per verificare che le entità da escludere siano escluse prima di basarsi sull'impostazione di negazione.
Per applicare le impostazioni di negazione nell'ambito del gruppo di risorse:
New-AzResourceGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-ResourceGroupName "<resource-group-name>" `
-TemplateFile "<bicep-file-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "denyDelete" `
-DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
-DenySettingsExcludedPrincipal "<object-id>,<object-id>"
Per applicare le impostazioni di negazione nell'ambito della sottoscrizione:
New-AzSubscriptionDeploymentStack `
-Name "<deployment-stack-name>" `
-Location "<location>" `
-TemplateFile "<bicep-file-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "denyDelete" `
-DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
-DenySettingsExcludedPrincipal "<object-id>,<object-id>"
Usa il parametro DeploymentResourceGroupName per specificare il nome del gruppo di risorse in cui viene creato lo stack di distribuzione. Se non viene specificato un ambito, usa l'ambito dello stack di distribuzione.
Per applicare le impostazioni di negazione nell'ambito del gruppo di gestione:
New-AzManagementGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-Location "<location>" `
-TemplateFile "<bicep-file-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "denyDelete" `
-DenySettingsExcludedActions "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
-DenySettingsExcludedPrincipal "<object-id>,<object-id>"
Usa il parametro DeploymentSubscriptionId per specificare l'ID della sottoscrizione in corrispondenza del quale viene creato lo stack di distribuzione. Se non viene specificato un ambito, usa l'ambito dello stack di distribuzione.
Scollegare le risorse gestite dallo stack di distribuzione
Per impostazione predefinita, gli stack di distribuzione si scollegano e non eliminano le risorse non gestite quando non sono più contenuti nell'ambito di gestione dello stack. Per ulteriori informazioni, vedi Aggiornare stack di distribuzione.
Esportare template dagli stack di distribuzione
Puoi esportare le risorse da uno stack di distribuzione in un output JSON. Puoi reindirizzare l'output a un file.
Per esportare uno stack di distribuzione nell'ambito del gruppo di risorse:
Save-AzResourceGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-ResourceGroupName "<resource-group-name>" `
Per esportare uno stack di distribuzione in un ambito di sottoscrizione:
Save-AzSubscriptionDeploymentStack `
-name "<deployment-stack-name>"
Per esportare uno stack di distribuzione nell'ambito di un gruppo di gestione:
Save-AzManagementGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-ManagementGroupId "<management-group-id>"
Passaggi successivi
Per una guida introduttiva alla distribuzione Bicep, vedere Avvio rapido: Creare e distribuire uno stack di distribuzione con Bicep.