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 Azure CLI 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?
I processi di distribuzione offrono i vantaggi seguenti:
- Provisioning e gestione delle risorse semplificati in ambiti diversi come 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.
Limitazioni note
- È previsto un limite di 800 stack di distribuzione che possono essere creati all'interno di un singolo ambito.
- Un massimo di 2.000 assegnazioni di negazione possono esistere per qualsiasi ambito.
- Lo stack di distribuzione non gestisce le risorse create in modo implicito. Pertanto, non è possibile usare assegnazioni di negazione o operazioni di pulizia per queste risorse.
- Le assegnazioni di rifiuto non supportano i tag.
- Le assegnazioni di rifiuto non sono supportate nell'ambito del gruppo di gestione. Tuttavia, sono supportate in uno stack di gruppi di gestione se la distribuzione punta all'ambito della sottoscrizione.
- Gli stack di distribuzione non possono eliminare segreti di Key Vault. Se si rimuovono segreti di Key Vault da un modello, assicurarsi di eseguire anche il comando di aggiornamento/eliminazione dello stack di distribuzione con la modalità di scollegamento.
Problemi noti
- L’eliminazione di gruppi di risorse attualmente ignora le assegnazioni di negazione. Quando si crea uno stack di distribuzione nell'ambito del gruppo di risorse, il file Bicep non contiene la definizione per il gruppo di risorse. Nonostante l'impostazione di assegnazione di rifiuto, è possibile eliminare il gruppo di risorse e il relativo stack contenuto. Tuttavia, se un blocco è attivo in qualsiasi risorsa all'interno del gruppo, l'operazione di eliminazione ha esito negativo.
- Il supporto della simulazione non è ancora disponibile.
- Uno stack con ambito gruppo di gestione non può essere distribuito in un altro gruppo di gestione. Può essere distribuito solo nel gruppo di gestione dello stack stesso o in una sottoscrizione figlio.
- Il comando di Azure PowerShell elenca il valore `
DeleteResourcesAndResourcesGroups
` per l'interruttore `ActionOnUnmanage
`. Quando si usa questo valore, il comando scollega le risorse gestite e i gruppi di risorse. Questo valore viene rimosso nell'aggiornamento successivo. Non usare questo valore. - In alcuni casi, i cmdlet New e Set di Azure PowerShell potrebbero restituire un errore generico di convalida del modello che non è chiaramente utilizzabile. Questo bug verrà risolto nella versione successiva. Se l'errore non è chiaro, eseguire il cmdlet in modalità debug per visualizzare un errore più dettagliato nella risposta non elaborata.
- Il provider Microsoft Graph non supporta gli stack di distribuzione.
Ruoli predefiniti
Avviso
L'imposizione dell'autorizzazione di Controllo degli accessi in base al ruolo Microsoft.Resources/deploymentStacks/manageDenySetting/action è in fase di implementazione in più aree, inclusi i cloud per enti pubblici.
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.
Creare 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, se esiste uno stack di distribuzione, esiste anche l'assegnazione di negazione creata con la funzionalità nega impostazioni. Ad esempio, creando uno stack di distribuzione nell'ambito della sottoscrizione che distribuisce il modello nell'ambito del gruppo di risorse e con la modalità nega impostazioni DenyDelete
, puoi effettuare facilmente il provisioning delle risorse gestite al gruppo di risorse specificato e bloccare i tentativi di eliminazione a 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 sottoposte a 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 negazione. 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 nell'ambito della 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 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.
Usare il comando Imposta
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 nell'ambito della 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.
Controllare lo scollegamento e l'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 delete anziché scollegare per le risorse gestite e i gruppi di risorse. -
deleteResources
: Usa delete piuttosto che scollegare 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 Azure CLI). 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
: scollega 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 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 vault di chiavi attraverso il piano di controllo, il che significa che lo stack di distribuzione li gestisce. Tuttavia, si creano risorse subordinate come segreti o contenitori di blob tramite il piano dati, il che significa che lo stack di distribuzione non può 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 del servizio Azure Kubernetes gestito crea svariati altri servizi di supporto, ad esempio 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 questi 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
,DenyDelete
eDenyWriteAndDelete
. -
DenySettingsApplyToChildScopes
: se specificato, la configurazione della modalità dell'impostazione di rifiuto 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'impostazioneDenySettingsApplyToChildScopes
abilitata e ilDenySettingsMode
set 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 IDs Microsoft Entra esclusi dal blocco. Sono consentite fino a cinque entità di sicurezza.
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 sottoscrizione in cui 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 modelli da 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 nell'ambito della sottoscrizione:
Save-AzSubscriptionDeploymentStack `
-name "<deployment-stack-name>"
Per esportare uno stack di distribuzione nell'ambito del 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.