Partager via


Piles de déploiement

Une pile de déploiement Azure est une ressource qui vous permet de gérer un groupe de ressources Azure en tant qu’unité cohérente unique. Lorsque vous soumettez un fichier Bicep ou un modèle JSON ARM à une pile de déploiement, il définit les ressources gérées par la pile. Si une ressource précédemment incluse dans le modèle est supprimée, elle sera détachée ou supprimée en fonction du comportement actionOnUnmanage spécifié de la pile de déploiement. L’accès à la pile de déploiement peut être restreint à l’aide du contrôle d’accès en fonction du rôle Azure (RBAC Azure), comme pour d’autres ressources Azure.

Pour créer et mettre à jour une pile de déploiement, vous pouvez utiliser Azure CLI, Azure PowerShell ou le Portail Azure avec des fichiers Bicep. Ces fichiers Bicep sont transpilés en modèles ARM JSON, qui sont ensuite déployés en tant qu’objet de déploiement par la pile. La pile de déploiement offre des fonctionnalités supplémentaires au-delà des ressources de déploiement familières, servant de sur-ensemble de ces fonctionnalités.

Microsoft.Resources/deploymentStacks est le type de ressource pour les piles de déploiement. Il se compose d’un modèle principal qui peut effectuer une à plusieurs mises à jour dans les étendues des ressources qu’il décrit et bloquer toute modification indésirable de ces ressources.

Lors de la planification de votre déploiement et de la détermination des groupes de ressources qui doivent faire partie de la même pile, il est important de prendre en compte le cycle de vie de gestion de ces ressources, notamment la création, la mise à jour et la suppression. Par exemple, supposez que vous devez approvisionner des machines virtuelles de test pour différentes équipes d’application sur différentes étendues de groupes de ressources. Dans ce cas, une pile de déploiement peut être utilisée pour créer ces environnements de test et mettre à jour les configurations de machine virtuelle de test via des mises à jour ultérieures de la pile de déploiement. Une fois le projet terminé, il peut être nécessaire de supprimer toutes les ressources qui ont été créées, telles que les machines virtuelles de test. En utilisant une pile de déploiement, les ressources managées peuvent être facilement supprimées en spécifiant l’indicateur de suppression approprié. Cette approche rationalisée permet de gagner du temps pendant le nettoyage de l’environnement, car elle implique une mise à jour unique de la ressource de pile au lieu de modifier ou de supprimer individuellement chaque machine virtuelle de test dans différentes étendues de groupes de ressources.

Les piles de déploiement nécessitent Azure PowerShell version 12.0.0 ou ultérieure ou Azure CLI version 2.61.0 ou ultérieure.

Pour créer votre première pile de déploiement, utilisez Démarrage rapide : créer une pile de déploiement.

Pourquoi utiliser les piles de déploiement ?

Les travaux de déploiement offrent les avantages suivants :

  • Rationalisation de l’approvisionnement et de la gestion des ressources dans différentes étendues en tant qu’entité unifiée.
  • Prévention des modifications indésirables des ressources managées par le biais des paramètres de refus.
  • Nettoyage efficace de l’environnement en utilisant des indicateurs de suppression lors des mises à jour de la pile de déploiement.
  • Utilisation de modèles standard tels que Bicep, modèles ARM ou spécifications de modèle pour vos piles de déploiement.

Limitations connues

  • Les ressources créées implicitement ne sont pas gérées par la pile. Par conséquent, aucune affectation de refus ou nettoyage n’est possible.
  • Les affectations de refus ne prennent pas en charge les balises.
  • Les affectations de refus ne sont pas prises en charge au niveau de l’étendue du groupe d’administration. Toutefois, elles sont prises en charge dans une pile de groupes d’administration si le déploiement est pointé vers l’étendue de l’abonnement.
  • Les piles de déploiement ne peuvent pas supprimer les secrets de coffre de clés. Si vous supprimez des secrets de coffre de clés d’un modèle, veillez à exécuter également la commande de mise à jour/suppression de la pile de déploiement en mode détacher.

Problèmes connus

  • La suppression des groupes de ressources contourne actuellement les attributions de refus. Lors de la création d’une pile de déploiement, dans l’étendue du groupe de ressources, le fichier Bicep ne contient pas la définition du groupe de ressources. Malgré le paramètre de l’affectation de refus, il est possible de supprimer le groupe de ressources et la pile qu’il contient. Toutefois, si un verrou est actif sur une ressource au sein du groupe, l’opération de suppression échoue.
  • La prise en charge desimulation n’est pas encore disponible.
  • Une pile délimitée par un groupe d’administration ne peut pas être déployée sur un autre groupe d’administration. Elle peut uniquement être déployée sur le groupe d’administration de la pile elle-même ou sur un abonnement enfant.
  • L’aide de la commande PowerShell répertorie une valeur DeleteResourcesAndResourcesGroups pour le commutateur ActionOnUnmanage. Lorsque cette valeur est utilisée, la commande détache les ressources managées et les groupes de ressources. Cette valeur sera supprimée dans la prochaine mise à jour. N’utilisez pas cette valeur.
  • Dans certains cas, les cmdlets New et Set d’Azure PowerShell peuvent retourner une erreur de validation de modèle générique qui n’est pas clairement exploitable. Ce bogue sera résolu dans la prochaine version, mais pour l’instant, si l’erreur n’est pas claire, vous pouvez exécuter le cmdlet en mode débogage pour afficher une erreur plus détaillée dans la réponse brute.

Rôles intégrés

Avertissement

L’application de l’autorisation RBAC Microsoft.Resources/deploymentStacks/manageDenySetting/action est déployée entre les régions, y compris les clouds gouvernementaux.

Il existe deux rôles intégrés pour la pile de déploiement :

  • Contributeur de pile de déploiement Azure : permet aux utilisateurs de gérer les piles de déploiement, mais ne peut pas créer ou supprimer des affectations de refus dans les piles de déploiement.
  • Propriétaire de pile de déploiement Azure : permet aux utilisateurs de gérer les piles de déploiement, y compris celles avec des affectations de refus.

Créer des piles de déploiement

Une ressource de pile de déploiement peut être créée dans l’étendue du groupe de ressources, de l’abonnement ou du groupe d’administration. Le modèle passé dans une pile de déploiement définit les ressources à créer ou à mettre à jour dans l’étendue cible spécifiée pour le déploiement du modèle.

  • Une pile au niveau de l’étendue du groupe de ressources peut déployer le modèle transmis à la même étendue de groupe de ressources où la pile de déploiement existe.
  • Une pile au niveau de l’étendue de l’abonnement peut déployer le modèle transmis à une étendue de groupe de ressources (si elle est spécifiée) ou la même étendue d’abonnement où existe la pile de déploiement.
  • Une pile au niveau de l’étendue du groupe d’administration peut déployer le modèle transmis à l’étendue d’abonnement spécifiée.

Il est important de noter que lorsqu’une pile de déploiement existe, il en va de même pour l’affectation de refus créée avec la fonctionnalité de refus des paramètres. Par exemple, en créant une pile de déploiement au niveau de l’étendue de l’abonnement qui déploie le modèle dans l’étendue du groupe de ressources et en mode DenyDeleterefuser les paramètres , vous pouvez facilement provisionner des ressources managées dans le groupe de ressources spécifié et bloquer les tentatives de suppression de ces ressources. En utilisant cette approche, vous améliorez également la sécurité de la pile de déploiement en la séparant au niveau de l’abonnement, par opposition au niveau du groupe de ressources. Cette séparation garantit que les équipes de développement qui travaillent avec les ressources approvisionnées ont uniquement une visibilité et un accès en écriture aux groupes de ressources, tandis que la pile de déploiement reste isolée à un niveau supérieur. Cela réduit le nombre d’utilisateurs qui peuvent modifier une pile de déploiement et apporter des modifications à son affectation de refus. Pour plus d’informations, consultez Protéger les ressources managées contre la suppression.

Les commandes create-stack peuvent également être utilisées pour mettre à jour les piles de déploiement.

Pour créer une pile de déploiement dans l’étendue du groupe de ressources :

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

Pour créer une pile de déploiement dans l’étendue de l’abonnement :

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

Le DeploymentResourceGroupName paramètre spécifie le groupe de ressources utilisé pour stocker les ressources managées. Si le paramètre n’est pas spécifié, les ressources managées sont stockées dans l’étendue de l’abonnement.

Pour créer une pile de déploiement dans l’étendue du groupe de ressources :

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

Le deploymentSubscriptionId paramètre spécifie le groupe de ressources utilisé pour stocker les ressources managées. Si le paramètre n’est pas spécifié, les ressources managées sont stockées dans l’étendue de l’abonnement.

Répertorier les piles de déploiement

Pour répertorier les ressources de pile de déploiement dans l’étendue du groupe de ressources :

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

Pour répertorier les ressources de pile de déploiement dans l’étendue de l’abonnement :

Get-AzSubscriptionDeploymentStack

Pour répertorier les ressources de pile de déploiement dans l’étendue du groupe d’administration :

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

Mettre à jour des piles de déploiement

Pour mettre à jour une pile de déploiement, ce qui peut impliquer l’ajout ou la suppression d’une ressource managée, vous devez apporter des modifications aux fichiers Bicep sous-jacents. Une fois les modifications effectuées, vous disposez de deux options pour mettre à jour la pile de déploiement : exécuter la commande update ou réexécuter la commande create.

La liste des ressources managées peut être entièrement contrôlée via le modèle de conception d’infrastructure en tant que code (IaC).

Utiliser la commande Set

Pour mettre à jour une pile de déploiement dans l’étendue du groupe de ressources :

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

Pour mettre à jour une pile de déploiement dans l’étendue de l’abonnement :

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

Le DeploymentResourceGroupName paramètre spécifie le groupe de ressources utilisé pour stocker les ressources de la pile de déploiement. Si vous ne spécifiez pas de nom de groupe de ressources, le service de pile de déploiement crée un groupe de ressources pour vous.

Pour mettre à jour une pile de déploiement dans l’étendue du groupe d’administration :

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

Utiliser la nouvelle commande

Vous recevez un avertissement semblable à celui-ci :

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)

Pour plus d’informations, voir Créer les piles de déploiement.

Détachement et suppression de contrôle

Une ressource détachée (ou une ressource non managée) fait référence à une ressource qui n’est pas suivie ou gérée par la pile de déploiement, mais qui existe toujours dans Azure.

Pour demander à Azure de supprimer des ressources non managées, mettez à jour la pile avec la commande create stack avec le commutateur suivant. Pour plus d’informations, consultez Créer une pile de déploiement.

Utilisez le commutateur ActionOnUnmanage pour définir ce qui se passe pour les ressources qui ne sont plus gérées après la mise à jour ou la suppression d’une pile. Les valeurs autorisées sont les suivantes :

  • deleteAll: utilisez supprimer plutôt que détacher pour les ressources managées et les groupes de ressources.
  • deleteResources: utilisez supprimer plutôt que détacher pour uniquement les ressources managées.
  • detachAll: détachez les ressources managées et les groupes de ressources.

Par exemple :

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

Avertissement

Lors de la suppression de groupes de ressources avec le commutateur action-on-unmanage défini sur DeleteAll, les groupes de ressources managés et toutes les ressources contenues dans ces groupes seront également supprimés.

Gérer l’erreur de désynchronisation de pile

Lors de la mise à jour ou de la suppression d’une pile de déploiement, vous pouvez rencontrer l’erreur de désynchronisation de pile suivante, indiquant que la liste des ressources de pile n’est pas correctement synchronisée.

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.

Vous pouvez obtenir la liste des ressources à partir du portail Azure ou redéployer le fichier Bicep actuellement déployé avec les mêmes paramètres. La sortie affiche les ressources managées

...
Resources: /subscriptions/9e8db52a-71bc-4871-9007-1117bf304622/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk
           /subscriptions/9e8db52a-71bc-4871-9007-1117bf304622/resourceGroups/demoRg/providers/Microsoft.Storage/storageAccounts/storethmimleef5fwk

Une fois que vous avez examiné et vérifié la liste des ressources dans la pile, vous pouvez réexécuter la commande avec le commutateur BypassStackOutOfSyncError dans Azure PowerShell (ou bypass-stack-out-of-sync-error dans Azure CLI). Ce commutateur ne doit être utilisé qu’après avoir examiné soigneusement la liste des ressources de la pile avant de réexécuter la commande. Ce commutateur ne doit jamais être utilisé par défaut.

Supprimer des piles de déploiement

Le commutateur ActionOnUnmanage définit l’action sur les ressources qui ne sont plus gérées. Le commutateur a les valeurs suivantes :

  • DeleteAll: supprimez les ressources et les groupes de ressources.
  • DeleteResources : supprimez les ressources uniquement.
  • DetachAll: détacher les ressources.

Même si vous spécifiez le commutateur delete-all, les ressources non managées dans le groupe de ressources où se trouve la pile de déploiement empêchent la suppression de la ressource non managée et du groupe de ressources lui-même.

Pour supprimer les ressources de pile de déploiement dans l’étendue du groupe de ressources :

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

Pour supprimer les ressources de pile de déploiement dans l’étendue de l’abonnement :

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

Pour supprimer les ressources de pile de déploiement dans l’étendue du groupe d’administration :

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

Afficher les ressources managées dans la pile de déploiement

Le service de pile de déploiement n’a pas encore d’interface utilisateur graphique (GUI) Portail Azure. Pour afficher les ressources managées à l’intérieur d’une pile de déploiement, utilisez les commandes Azure PowerShell/Azure CLI suivantes :

Pour afficher les ressources managées dans l’étendue du groupe de ressources :

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

Pour afficher les ressources managées dans l’étendue de l’abonnement :

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

Pour afficher les ressources managées dans l’étendue du groupe d’administration :

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

Ajouter des ressources à la pile de déploiement

Pour ajouter une ressource managée, ajoutez la définition de ressource aux fichiers Bicep sous-jacents, puis exécutez la commande update ou réexécutez la commande create. Pour plus d’informations, consultez Mise à jour des piles de déploiement.

Supprimer des ressources managées de la pile de déploiement

Pour supprimer une ressource managée, supprimez la définition de ressource aux fichiers Bicep sous-jacents, puis exécutez la commande update ou réexécutez la commande create. Pour plus d’informations, consultez Mise à jour des piles de déploiement.

Protéger les ressources managées contre la suppression

Lors de la création d’une pile de déploiement, il est possible d’attribuer un type d’autorisations spécifique aux ressources managées, ce qui empêche leur suppression par des principaux de sécurité non autorisés. Ces paramètres sont appelés paramètres de refus. Vous souhaitez stocker la pile dans une étendue parente.

Remarque

La dernière version nécessite des autorisations spécifiques dans l’étendue de la pile afin de :

  • Créez ou mettez à jour une pile de déploiement et définissez le paramètre de refus sur une valeur autre que « Aucun ».
  • Mettre à jour ou supprimer une pile de déploiement avec un paramètre de refus existant autre que « Aucun »

Utilisez les rôles intégrés pour accorder les autorisations.

Azure PowerShell inclut les paramètres suivants pour personnaliser l’affectation de refus :

  • DenySettingsMode: définit les opérations interdites sur les ressources managées pour vous protéger contre les principaux de sécurité non autorisés qui tentent de les supprimer ou de les mettre à jour. Cette restriction s’applique à tout le monde, sauf si l’accès est explicitement accordé. Ces valeurs incluent None, DenyDelete et DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: les paramètres de refus sont appliqués aux ressources imbriquées sous les ressources managées.
  • DenySettingsExcludedAction: liste des opérations de gestion basées sur les rôles qui sont exclues des paramètres de refus. Jusqu’à 200 actions sont autorisées.
  • DenySettingsExcludedPrincipal : liste des ID de principal Microsoft Entra exclus du verrou. Jusqu’à cinq principaux sont autorisés.

Pour appliquer des paramètres de refus à l’étendue du groupe de ressources :

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

Pour appliquer des paramètres de refus à l’étendue de l’abonnement :

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

Utilisez le DeploymentResourceGroupName paramètre pour spécifier le nom du groupe de ressources au niveau duquel la pile de déploiement est créée. Si aucune étendue n’est spécifiée, elle utilise l’étendue de la pile de déploiement.

Pour appliquer des paramètres de refus à l’étendue du groupe d’administration :

New-AzManagmentGroupDeploymentStack `
  -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>"

Utilisez le DeploymentSubscriptionId paramètre pour spécifier l’ID d’abonnement au niveau duquel la pile de déploiement est créée. Si aucune étendue n’est spécifiée, elle utilise l’étendue de la pile de déploiement.

Détacher des ressources managées de la pile de déploiement

Par défaut, les piles de déploiement détachent et ne suppriment pas les ressources non managées lorsqu’elles ne sont plus contenues dans l’étendue de gestion de la pile. Pour plus d’informations, consultez Mise à jour des piles de déploiement.

Exporter des modèles à partir de piles de déploiement

Vous pouvez exporter les ressources d’une pile de déploiement vers une sortie JSON. Vous pouvez diriger la sortie vers un fichier.

Pour exporter une pile de déploiement dans l’étendue du groupe de ressources :

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

Pour exporter une pile de déploiement dans l’étendue de l’abonnement :

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

Pour exporter une pile de déploiement dans l’étendue du groupe d’administration :

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

Étapes suivantes

Pour effectuer un démarrage rapide, consultez Démarrage rapide : créer une pile de déploiement.