Dela via


Skapa och distribuera Azure-distributionsstackar i Bicep

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 Azure Resource Manager JSON-mall (ARM JSON-mall) till en distributionsstack definierar du de resurser som stacken hanterar. Om du tar bort en resurs från mallen kan den kopplas från eller tas bort baserat på den angivna åtgärdenOnUnmanage-beteendet för distributionsstacken. Du kan begränsa åtkomsten till distributionsstacken med hjälp av rollbaserad åtkomstkontroll i Azure (Azure RBAC), ungefär som andra Azure-resurser.

Om du vill skapa och uppdatera en distributionsstack använder du Azure CLI, Azure PowerShell eller Azure-portalen med Bicep-filer. Stacken överför dessa Bicep-filer till ARM JSON-mallar och distribuerar dem som ett distributionsobjekt. Distributionsstacken erbjuder ytterligare funktioner utöver de välbekanta distributionsresurserna och är en supermängd av dessa funktioner.

Microsoft.Resources/deploymentStacks är resurstypen för distributionsstackar. Den består av en huvudmall som kan utföra uppdateringar från en till många över områden för de resurser som den beskriver och blockera oönskade ändringar av dessa resurser.

När du planerar distributionen och avgör vilka resursgrupper som ska ingå i samma stack bör du överväga hanteringslivscykeln för dessa resurser, som omfattar skapande, uppdatering och borttagning. Du kan till exempel behöva etablera några virtuella testdatorer för olika programteam i olika resursgruppsomfång. Du kan använda en distributionsstack för att skapa dessa testmiljöer och uppdatera testkonfigurationerna för virtuella datorer via efterföljande uppdateringar av distributionsstacken. När du har slutfört projektet kan du behöva ta bort eller ta bort alla resurser som du har skapat, till exempel de virtuella testdatorerna. Använd en distributionsstack och ange lämplig borttagningsflagga för att ta bort hanterade resurser. Den här effektiva metoden sparar tid under miljörensningen, eftersom det innebär en enda 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 använda distributionsstackar?

Implementeringsstackar ger följande fördelar:

  • Effektiviserad försörjning och hantering av resurser på olika nivåer 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

  • Det finns en gräns på 800 distributionsstackar som kan skapas inom ett enda omfång.
  • Högst 2 000 neka tilldelningar kan finnas inom ett givet område.
  • Distributionsstacken hanterar inte implicit skapade resurser. Därför kan du inte använda neka-tilldelningar eller rensning för dessa resurser.
  • Nekade tilldelningar stöder inte taggar.
  • Nekande-tilldelningar stöds inte på hanteringsgruppsnivå. De stöds dock i en hanteringsgruppstack om distributionen är riktad mot abonnemangsgränsen.
  • Distributionsstackar kan inte ta bort Key Vault-hemligheter. Om du tar bort hemligheter i key vault från en mall ska du även köra kommandot för att uppdatera/radera distributionsstacken i frånkopplat läge.

Kända problem

  • Att radera resursgrupper kringgår för närvarande nekande 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 kan du 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 hanteringsgruppomfång kan inte distribueras till en annan hanteringsgrupp. sv-SE: Den kan endast distribueras till stackens egen hanteringsgrupp eller till ett underordnat abonnemang.
  • Azure PowerShell-kommandohjälpen listar ett DeleteResourcesAndResourcesGroups-värde för växeln ActionOnUnmanage. När du använder det här värdet frigör kommandot 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 Azure PowerShell returnera ett allmänt mallverifieringsfel som inte är tydligt åtgärdsbart. Den här buggen kommer att åtgärdas i nästa version. Om felet inte är klart kör du cmdleten i felsökningsläge för att se ett mer detaljerat fel i råsvaret.
  • Microsoft Graph-providern stöder inte distributionsstackar.

Inbyggda roller

Varning

Tillämpning av RBAC-behörigheten Microsoft.Resources/deploymentStacks/manageDenySetting/action introduceras över regioner, inklusive statliga moln.

Det finns två inbyggda roller för distributionsstacken:

  • Azure Deployment Stack-deltagare: Användare kan hantera distributionsstackar, men kan inte skapa eller ta bort neka-tilldelningar i distributionsstacken.
  • Azure Deployment Stack-ägare: Användare kan hantera distributionsstackar, inklusive de användare som nekar tilldelningar.

Skapa distributionsstackar

Du kan skapa en distributionsstackresurs i resursgruppen, prenumerationen eller hanteringsgruppens omfång. Mallen som du anger med en distributionsstack definierar de resurser som ska skapas eller uppdateras i målomfånget.

  • En stack i resursgruppsomfånget kan distribuera mallen till samma resursgrupp där distributionsstacken finns.
  • En stack i prenumerationsomfånget kan distribuera mallen till en resursgrupp eller till samma prenumeration där distributionsstacken finns.
  • En stack i hanteringsgruppens omfång kan distribuera mallen till prenumerationen.

Det är viktigt att notera att där det finns en distributionsstack, skapas även en avslagsuppgift med förmågan att 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. Den här metoden hjälper dig att förbättra 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. Distributionsstacken förblir isolerad på en högre nivå. Den här konfigurationen 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.

Du kan också använda kommandona create-stack 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 du inte anger parametern lagras de hanterade resurserna i prenumerationsomfånget.

Så här skapar du en distributionsstack inom ramen för en hanteringsgrupp:

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 du inte anger parametern lagras de hanterade resurserna i hanteringsgruppens omfång.

Lista distributionsmiljöer

För att lista distributionsstackresurser på resursgruppens omfattning:

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

Så här listar du distributionsstackresurser på prenumerationsnivå:

Get-AzSubscriptionDeploymentStack

Så här listar du distributionsstackens resurser 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 du har ändrat kan du uppdatera distributionsstacken genom att antingen köra uppdateringskommandot eller köra kommandot create igen.

Designmönstret infrastruktur som kod ger dig fullständig kontroll över listan över hanterade resurser.

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.

För att uppdatera en distributionsstack i en ledningsgrupps kontext:

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 frikoppling och radering

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

Om du vill instruera Azure att ta bort ohanterade resurser uppdaterar du stacken med kommandot create stack och tar med växeln ActionOnUnmanage . 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 radera istället för att koppla från för hanterade resurser och resursgrupper.
  • deleteResources: Använd delete istället för detach endast 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 på deleteAlltar du bort de hanterade resursgrupperna och alla resurser som finns i dem.

Hantera stacken-som-inte-är-synkroniserad-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}' 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.

Du kan hämta en lista över resurserna från Azure Portal 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 kör du kommandot igen med växeln BypassStackOutOfSyncError i Azure PowerShell (eller bypass-stack-out-of-sync-error i Azure CLI). Använd endast den här switchen efter att noggrant ha granskat listan över resurser i stacken. Använd inte den här växeln 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 loss resurserna.

Även om du anger omkopplaren delete-all, kan ohanterade resurser i resursgruppen där distributionsstacken är belägen förhindra att både de ohanterade resurserna och den själva resursgruppen tas bort.

Så här tar du bort resurser i distributionsstacken vid resursgruppsnivå:

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

För att ta bort resurser i distributionsstacken på ledningsgruppens nivå:

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 ett Azure Portal grafiskt användargränssnitt (GUI). 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

För att visa hanterade resurser på hanteringsgruppens nivå:

(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. Lagra staplar i överordnat omfång. Om du till exempel vill skydda resurser i en prenumeration kan du placera stacken i det överordnade omfånget, vilket är den direkt överordnade hanteringsgruppen.

Inställningen neka gäller endast för kontrollplanåtgärder och inte dataplanåtgärder. Du kan till exempel skapa lagringskonton och nyckelvalv via kontrollplanet, vilket innebär att distributionsstacken hanterar dem. Du skapar dock underordnade resurser som hemligheter eller blobcontainrar via dataflödet, vilket innebär att implementeringsstacken inte kan hantera dem.

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.

Anteckning

Den senaste versionen kräver specifika behörigheter på stacknivån för att:

  • Skapa eller uppdatera en distributionsstack och konfigurera nekainställningen 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 du inte uttryckligen beviljar åtkomst. Värdena är: None, DenyDeleteoch DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: När det anges gäller konfigurationen för avslagsläge även på de hanterade resursernas barnområde. En Bicep-fil definierar till exempel en Microsoft.Sql/servers-resurs (överordnad) och en Microsoft.Sql/servers/databases-resurs (underordnad ). Om du skapar en distributionsstack med 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 huvudprincipals-ID:n för Microsoft Entra som är undantagna från låsningen. Upp till fem rektorer ä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 ett omfång inte anges, 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 ett omfång inte anges, används omfånget för distributionsstacken.

Koppla från hanterade resurser från distributionsstacken

Som standardinställning kopplas distributionsstackar loss och tar inte bort ohanterade resurser när de inte längre hanteras inom stackens omfå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 inom resursgruppens omfattning:

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

Så här exporterar du en distributionsstack på prenumerationsnivå:

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

Så här exporterar du en distributionsstack på hanteringsgruppsnivå:

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

Nästa steg

Information om hur du går igenom en snabbstart för Bicep-distribution finns i Snabbstart: Skapa och distribuera en distributionsstack med Bicep.