Distributionsstackar

En Azure-distributionsstack är en resurs som gör att du kan hantera en grupp Azure-resurser som en enda sammanhängande enhet. När du skickar en Bicep-fil eller en ARM JSON-mall till en distributionsstack definierar den de resurser som stacken hanterar. Om en resurs som tidigare ingick i mallen tas bort kopplas den från eller tas bort baserat på den angivna åtgärdenOnUnmanage-beteendet för distributionsstacken. Åtkomsten till distributionsstacken kan begränsas med rollbaserad åtkomstkontroll i Azure (Azure RBAC), liknande andra Azure-resurser.

Om du vill skapa och uppdatera en distributionsstack kan du använda Azure CLI, Azure PowerShell eller Azure-portalen tillsammans med Bicep-filer. Dessa Bicep-filer överförs till ARM JSON-mallar, som sedan distribueras som ett distributionsobjekt av stacken. Distributionsstacken erbjuder ytterligare funktioner utöver de välbekanta distributionsresurserna och fungerar som en supermängd av dessa funktioner.

Microsoft.Resources/deploymentStacks är resurstypen för distributionsstackar. Den består av en huvudmall som kan utföra 1-till-många-uppdateringar över omfång för de resurser som beskrivs och blockera oönskade ändringar av dessa resurser.

När du planerar distributionen och avgör vilka resursgrupper som ska ingå i samma stack är det viktigt att tänka på hanteringslivscykeln för dessa resurser, som omfattar skapande, uppdatering och borttagning. Anta till exempel att du behöver etablera några virtuella testdatorer (VM) för olika programteam i olika resursgruppsomfång. I det här fallet kan en distributionsstack användas för att skapa dessa testmiljöer och uppdatera testkonfigurationerna för virtuella datorer via efterföljande uppdateringar av distributionsstacken. När projektet har slutförts kan det vara nödvändigt att ta bort eller ta bort resurser som har skapats, till exempel de virtuella testdatorerna. Genom att använda en distributionsstack kan de hanterade resurserna enkelt tas bort genom att ange lämplig borttagningsflagga. Den här effektiva metoden sparar tid under miljörensningen, eftersom det innebär en enskild uppdatering av stackresursen i stället för att individuellt ändra eller ta bort varje virtuell testdator i olika resursgruppsomfång.

Distributionsstackar kräver Azure PowerShell version 12.0.0 eller senare eller Azure CLI version 2.61.0 eller senare.

Om du vill skapa din första distributionsstack går du igenom Snabbstart: skapa distributionsstack.

Varför ska du använda distributionsstackar?

Distributionsstackar ger följande fördelar:

  • Effektiviserad etablering och hantering av resurser i olika omfång som en enhetlig entitet.
  • Förhindra oönskade ändringar av hanterade resurser via neka-inställningar.
  • Effektiv miljörensning med borttagningsflaggor under uppdateringar av distributionsstacken.
  • Användning av standardmallar som Bicep, ARM-mallar eller mallspecifikationer för dina distributionsstackar.

Kända begränsningar

  • Implicit skapade resurser hanteras inte av distributionsstacken. Därför går det inte att neka tilldelningar eller rensa.
  • Neka tilldelningar stöder inte taggar.
  • Neka-tilldelningar stöds inte i hanteringsgruppens omfång. De stöds dock i en hanteringsgruppsstack om distributionen pekar på prenumerationsomfånget.
  • Distributionsstackar kan inte ta bort Key Vault-hemligheter. Om du tar bort key vault-hemligheter från en mall ska du även köra kommandot update/delete för distributionsstacken med frånkopplat läge.

Kända problem

  • Om du tar bort resursgrupper kringgås för närvarande neka-tilldelningar. När du skapar en distributionsstack i resursgruppens omfång innehåller Bicep-filen inte definitionen för resursgruppen. Trots inställningen neka tilldelning går det att ta bort resursgruppen och dess inneslutna stack. Men om ett lås är aktivt på en resurs i gruppen misslyckas borttagningsåtgärden.
  • What-if-supporten är ännu inte tillgänglig.
  • En stack med omfång för hanteringsgrupp är begränsad från att distribueras till en annan hanteringsgrupp. Den kan bara distribueras till själva stackens hanteringsgrupp eller till en underordnad prenumeration.
  • PowerShell-kommandohjälpen visar ett DeleteResourcesAndResourcesGroups värde för växeln ActionOnUnmanage . När det här värdet används kopplar kommandot från de hanterade resurserna och resursgrupperna. Det här värdet tas bort i nästa uppdatering. Använd inte det här värdet.
  • I vissa fall kan cmdletarna New och Set i Azure PowerShell returnera ett allmänt mallvalideringsfel som inte är tydligt användbart. Den här buggen kommer att åtgärdas i nästa version, men om felet är oklart kan du köra cmdleten i felsökningsläge för att se ett mer detaljerat fel i råsvaret.
  • Distributionsstackar stöds inte av Microsoft Graph-providern.

Inbyggda roller

Varning

Tillämpning av RBAC-behörigheten Microsoft.Resources/deploymentStacks/manageDenySetting/action lanseras mellan regioner, inklusive myndighetsmoln.

Det finns två inbyggda roller för distributionsstacken:

  • Azure Deployment Stack-deltagare: Tillåter användare att hantera distributionsstackar, men kan inte skapa eller ta bort neka-tilldelningar i distributionsstackarna.
  • Azure Deployment Stack-ägare: Tillåter användare att hantera distributionsstackar, inklusive de med neka-tilldelningar.

Skapa distributionsstackar

En distributionsstackresurs kan skapas i resursgruppen, prenumerationen eller hanteringsgruppens omfång. Mallen som skickas till en distributionsstack definierar vilka resurser som ska skapas eller uppdateras i det målomfång som anges för malldistributionen.

  • En stack i resursgruppsomfånget kan distribuera mallen som skickats in till samma resursgruppsomfång där distributionsstacken finns.
  • En stack i prenumerationsomfånget kan distribuera mallen som skickats in till ett resursgruppsomfång (om det anges) eller samma prenumerationsomfång där distributionsstacken finns.
  • En stack i hanteringsgruppens omfång kan distribuera mallen som skickats in till det angivna prenumerationsomfånget.

Det är viktigt att observera att där en distributionsstack finns, så är neka-tilldelningen skapad med funktionen neka inställningar. Genom att till exempel skapa en distributionsstack i prenumerationsomfånget som distribuerar mallen till resursgruppens omfång och med läget DenyDeleteneka inställningar kan du enkelt etablera hanterade resurser till den angivna resursgruppen och blockera borttagningsförsök till dessa resurser. Med den här metoden förbättrar du även säkerheten för distributionsstacken genom att separera den på prenumerationsnivå, i stället för på resursgruppsnivå. Den här separationen säkerställer att utvecklarteamen som arbetar med de etablerade resurserna endast har synlighet och skrivåtkomst till resursgrupperna, medan distributionsstacken förblir isolerad på en högre nivå. Detta minimerar antalet användare som kan redigera en distributionsstack och göra ändringar i dess neka-tilldelning. Mer information finns i Skydda hanterade resurser mot borttagning.

Kommandot create-stack kan också användas för att uppdatera distributionsstackar.

Så här skapar du en distributionsstack i resursgruppens omfång:

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

Så här skapar du en distributionsstack i prenumerationsomfånget:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentResourceGroupName "<resource-group-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

Parametern DeploymentResourceGroupName anger den resursgrupp som används för att lagra de hanterade resurserna. Om parametern inte anges lagras de hanterade resurserna i prenumerationsomfånget.

Så här skapar du en distributionsstack i hanteringsgruppens omfång:

New-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

Parametern deploymentSubscriptionId anger den prenumeration som används för att lagra de hanterade resurserna. Om parametern inte anges lagras de hanterade resurserna i hanteringsgruppens omfång.

Lista distributionsstackar

Så här listar du distributionsstackresurser i resursgruppens omfång:

Get-AzResourceGroupDeploymentStack `
  -ResourceGroupName "<resource-group-name>"

Så här listar du distributionsstackresurser i prenumerationsomfånget:

Get-AzSubscriptionDeploymentStack

Så här listar du distributionsstackresurser i hanteringsgruppens omfång:

Get-AzManagementGroupDeploymentStack `
  -ManagementGroupId "<management-group-id>"

Uppdatera distributionsstackar

Om du vill uppdatera en distributionsstack, som kan innebära att lägga till eller ta bort en hanterad resurs, måste du göra ändringar i de underliggande Bicep-filerna. När ändringarna har gjorts har du två alternativ för att uppdatera distributionsstacken: kör uppdateringskommandot eller kör kommandot create igen.

Listan över hanterade resurser kan kontrolleras fullständigt via designmönstret infrastruktur som kod (IaC).

Använd kommandot Ange

Så här uppdaterar du en distributionsstack i resursgruppens omfång:

Set-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

Så här uppdaterar du en distributionsstack i prenumerationsomfånget:

Set-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentResourceGroupName "<resource-group-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

Parametern DeploymentResourceGroupName anger den resursgrupp som används för att lagra distributionsstackens resurser. Om du inte anger ett resursgruppsnamn skapar distributionsstacken en ny resursgrupp åt dig.

Så här uppdaterar du en distributionsstack i hanteringsgruppens omfång:

Set-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

Använd kommandot Nytt

Du får en varning som liknar följande:

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)

Mer information finns i Skapa distributionsstackar.

Kontrollera frånkoppling och borttagning

En frånkopplad resurs (eller ohanterad resurs) refererar till en resurs som inte spåras eller hanteras av distributionsstacken men som fortfarande finns i Azure.

Om du vill instruera Azure att ta bort ohanterade resurser uppdaterar du stacken med kommandot create stack med följande växel. Mer information finns i Skapa distributionsstack.

Använd växeln ActionOnUnmanage för att definiera vad som händer med resurser som inte längre hanteras när en stack har uppdaterats eller tagits bort. Tillåtna värden är:

  • deleteAll: Använd ta bort i stället för att koppla från för hanterade resurser och resursgrupper.
  • deleteResources: Använd endast ta bort i stället för att koppla från för hanterade resurser.
  • detachAll: Koppla från de hanterade resurserna och resursgrupperna.

Till exempel:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none" `
  -ActionOnUnmanage "deleteAll" 

Varning

När du tar bort resursgrupper med växeln action-on-unmanage inställd DeleteAllpå tas även de hanterade resursgrupperna och alla resurser som ingår i dem bort.

Hantera stack-out-of-sync-felet

När du uppdaterar eller tar bort en distributionsstack kan följande stack-out-of-sync-fel uppstå, vilket indikerar att stackresurslistan inte är korrekt synkroniserad.

The deployment stack '{0}' may not have an accurate list of managed resources. To ensure no resources are accidentally deleted, please check that the managed resource list does not have any additional values. If there is any uncertainty, we recommend redeploying the stack with the same template and parameters as the current iteration. To bypass this warning, please specify the 'BypassStackOutOfSyncError' flag.

Du kan hämta en lista över resurserna från Azure-portalen eller distribuera om den distribuerade Bicep-filen med samma parametrar. Utdata visar de hanterade resurserna

...
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

När du har granskat och verifierat listan över resurser i stacken kan du köra kommandot igen med växeln BypassStackOutOfSyncError i Azure PowerShell (eller bypass-stack-out-of-sync-error i Azure CLI). Den här växeln bör endast användas efter att noggrant ha granskat listan över resurser i stacken innan kommandot körs igen. Den här växeln bör aldrig användas som standard.

Ta bort distributionsstackar

Växeln ActionOnUnmanage definierar åtgärden för de resurser som inte längre hanteras. Växeln har följande värden:

  • DeleteAll: Ta bort både resurserna och resursgrupperna.
  • DeleteResources: Ta bara bort resurserna.
  • DetachAll: Koppla från resurserna.

Även om du anger växeln delete-all kan ohanterade resurser i resursgruppen där distributionsstacken finns förhindra att både ohanterade resurser och själva resursgruppen tas bort.

Så här tar du bort distributionsstackens resurser i resursgruppens omfång:

Remove-AzResourceGroupDeploymentStack `
  -name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"

Så här tar du bort distributionsstackresurser i prenumerationsomfånget:

Remove-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"

Så här tar du bort distributionsstackresurser i hanteringsgruppens omfång:

Remove-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>" `
  -ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"

Visa hanterade resurser i distributionsstacken

Distributionsstackens tjänst har ännu inte något grafiskt användargränssnitt (GUI) i Azure-portalen. Om du vill visa de hanterade resurserna i en distributionsstack använder du följande Azure Powershell/Azure CLI-kommandon:

Så här visar du hanterade resurser i resursgruppens omfång:

(Get-AzResourceGroupDeploymentStack -Name "<deployment-stack-name>" -ResourceGroupName "<resource-group-name>").Resources

Så här visar du hanterade resurser i prenumerationsomfånget:

(Get-AzSubscriptionDeploymentStack -Name "<deployment-stack-name>").Resources

Så här visar du hanterade resurser i hanteringsgruppens omfång:

(Get-AzManagementGroupDeploymentStack -Name "<deployment-stack-name>" -ManagementGroupId "<management-group-id>").Resources

Lägga till resurser i distributionsstacken

Om du vill lägga till en hanterad resurs lägger du till resursdefinitionen i de underliggande Bicep-filerna och kör sedan uppdateringskommandot eller kör kommandot create igen. Mer information finns i Uppdatera distributionsstackar.

Ta bort hanterade resurser från distributionsstacken

Ta bort en hanterad resurs genom att ta bort resursdefinitionen från de underliggande Bicep-filerna och sedan köra uppdateringskommandot eller köra kommandot create igen. Mer information finns i Uppdatera distributionsstackar.

Skydda hanterade resurser

Du kan tilldela specifika behörigheter till de hanterade resurserna i en distributionsstack för att förhindra att obehöriga säkerhetsobjekt tar bort eller uppdaterar dem. Dessa behörigheter kallas neka-inställningar. Du vill lagra staplar i överordnat omfång. Om du till exempel vill skydda resurser i en prenumeration måste du placera stacken i det överordnade omfånget, som är den omedelbara överordnade hanteringsgruppen.

Inställningen neka gäller endast för kontrollplansåtgärder, inte dataplansåtgärder. Till exempel skapas lagringskonton och nyckelvalv via kontrollplanet, så att de kan hanteras av en distributionsstack. Underordnade resurser som hemligheter eller blobcontainrar, som skapas via dataplanet, kan dock inte hanteras av en distributionsstack.

Inställningen neka gäller endast explicit skapade resurser, inte implicit skapade resurser. Ett hanterat AKS-kluster skapar till exempel flera andra tjänster som stöd för det, till exempel en virtuell dator. I det här fallet, eftersom den virtuella datorn inte har definierats i Bicep-filen och är en implicit skapad resurs, omfattas den inte av inställningarna för nekande av distributionsstacken.

Kommentar

Den senaste versionen kräver specifika behörigheter i stackomfånget för att:

  • Skapa eller uppdatera en distributionsstack och konfigurera inställningen neka till ett annat värde än None.
  • Uppdatera eller ta bort en distributionsstack med en befintlig neka-inställning för ett annat värde än None.

Använd de inbyggda rollerna för distributionsstacken för att bevilja behörigheter.

Azure PowerShell innehåller dessa parametrar för att anpassa neka-tilldelningen:

  • DenySettingsMode: Definierar de åtgärder som är förbjudna för de hanterade resurserna för att skydda mot obehöriga säkerhetsobjekt som försöker ta bort eller uppdatera dem. Den här begränsningen gäller för alla om inte uttryckligen beviljad åtkomst. Värdena är: None, DenyDeleteoch DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: När det anges gäller konfigurationen för neka-inställningsläget även för det underordnade omfånget för de hanterade resurserna. En Bicep-fil definierar till exempel en Microsoft.Sql/servers-resurs (överordnad) och en Microsoft.Sql/servers/databases-resurs (underordnad ). Om en distributionsstack skapas med hjälp av Bicep-filen med DenySettingsApplyToChildScopes inställningen aktiverad och DenySettingsMode inställd på DenyWriteAndDeletekan du inte lägga till några ytterligare underordnade resurser till resursen Microsoft.Sql/servers eller resursen Microsoft.Sql/servers/databases .
  • DenySettingsExcludedAction: Lista över rollbaserade hanteringsåtgärder som undantas från neka-inställningarna. Upp till 200 åtgärder är tillåtna.
  • DenySettingsExcludedPrincipal: Lista över huvud-ID:t för Microsoft Entra som är undantagna från låset. Upp till fem huvudnamn är tillåtna.

Så här tillämpar du neka-inställningar i resursgruppens omfång:

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>"

Så här tillämpar du neka-inställningar i prenumerationsomfånget:

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>"

Använd parametern DeploymentResourceGroupName för att ange resursgruppens namn där distributionsstacken skapas. Om inget omfång har angetts används omfånget för distributionsstacken.

Så här tillämpar du neka-inställningar i hanteringsgruppens omfång:

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>"

Använd parametern DeploymentSubscriptionId för att ange prenumerations-ID:t där distributionsstacken skapas. Om inget omfång har angetts används omfånget för distributionsstacken.

Koppla från hanterade resurser från distributionsstacken

Som standard kopplas distributionsstackarna bort och tar inte bort ohanterade resurser när de inte längre finns i stackens hanteringsomfång. Mer information finns i Uppdatera distributionsstackar.

Exportera mallar från distributionsstackar

Du kan exportera resurserna från en distributionsstack till ett JSON-utdata. Du kan skicka utdata till en fil.

Så här exporterar du en distributionsstack i resursgruppens omfång:

Save-AzResourceGroupDeploymentStack `
   -Name "<deployment-stack-name>" `
   -ResourceGroupName "<resource-group-name>" `

Så här exporterar du en distributionsstack i prenumerationsomfånget:

Save-AzSubscriptionDeploymentStack `
  -name "<deployment-stack-name>"

Så här exporterar du en distributionsstack i hanteringsgruppens omfång:

Save-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>"

Nästa steg

Information om hur du går igenom en snabbstart finns i Snabbstart: skapa en distributionsstack.