Partager via


Créer et déployer des ensembles de déploiement Azure avec Bicep

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 envoyez un fichier Bicep ou un modèle JSON Azure Resource Manager (modèle ARM JSON) à une pile de déploiement, vous définissez les ressources que la pile gère. Si vous supprimez une ressource du modèle, elle peut être détachée ou supprimée en fonction du comportement d’actionOnUnmanage spécifié de la pile de déploiement. Vous pouvez restreindre l’accès à la pile de déploiement à l’aide du contrôle d’accès en fonction du rôle Azure (Azure RBAC), similaire à d’autres ressources Azure.

Pour créer et mettre à jour une pile de déploiement, utilisez Azure CLI, Azure PowerShell ou le portail Azure avec des fichiers Bicep. La pile transpile ces fichiers Bicep dans des modèles JSON ARM et les déploie en tant qu’objet de déploiement. La pile de déploiement offre des fonctionnalités supplémentaires au-delà des ressources de déploiement familières et constitue un 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 des mises à jour un-à-plusieurs entre les étendues des ressources qu’il décrit et bloquer les modifications indésirables apportées à 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, tenez compte du cycle de vie de gestion de ces ressources, qui inclut la création, la mise à jour et la suppression. Par exemple, vous devrez peut-être provisionner certaines machines virtuelles de test pour différentes équipes d’applications dans différentes étendues de groupe de ressources. Vous pouvez utiliser une pile de déploiement pour créer ces environnements de test et mettre à jour les configurations de machine virtuelle de test via les mises à jour suivantes de la pile de déploiement. Une fois le projet terminé, vous devrez peut-être supprimer ou supprimer toutes les ressources que vous avez créées, telles que les machines virtuelles de test. Utilisez une pile de déploiement et spécifiez l’indicateur de suppression approprié pour supprimer les ressources managées. Cette approche simplifiée permet de gagner du temps pendant le nettoyage de l’environnement, car elle implique une mise à jour unique de la ressource de pile plutôt que de modifier ou de supprimer individuellement chaque machine virtuelle de test dans différentes étendues de groupe 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 piles 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, de modèles ARM ou de spécifications de modèle pour vos ensembles de déploiement.

Limitations connues

  • Il existe une limite de 800 piles de déploiement pouvant être créées dans une seule étendue.
  • Un maximum de 2 000 affectations de refus peut exister dans une étendue donnée.
  • La pile de déploiement ne gère pas les ressources créées implicitement. Par conséquent, vous ne pouvez pas utiliser d’affectations de refus ou de nettoyage pour ces ressources.
  • 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. Lorsque vous créez 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 refus d'attribution, vous pouvez supprimer le groupe de ressources et sa pile. Toutefois, si un verrou est actif sur une ressource au sein du groupe, l’opération de suppression échoue.
  • La prise en charge de Simulation n’est pas encore disponible.
  • Une pile attribuée à 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 Azure PowerShell répertorie une valeur DeleteResourcesAndResourcesGroups pour le commutateur ActionOnUnmanage. Lorsque vous utilisez cette valeur, la commande détache les ressources managées et les groupes de ressources. Cette valeur est supprimée dans la prochaine mise à jour. N’utilisez pas cette valeur.
  • Dans certains cas, les applets de commande New et Set 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. Si l’erreur n’est pas claire, exécutez l’applet de commande en mode débogage pour afficher une erreur plus détaillée dans la réponse brute.
  • Le fournisseur Microsoft Graph ne prend pas en charge le déploiement des ensembles.

Rôles intégrés

Avertissement

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

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

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

Créer des piles de déploiement

Vous pouvez créer une ressource de pile de déploiement dans l’étendue du groupe de ressources, de l’abonnement ou du groupe d’administration. Le modèle que vous fournissez avec une pile de déploiement définit les ressources à créer ou à mettre à jour dans l’étendue cible.

  • Une pile au niveau de l’étendue du groupe de ressources peut déployer le modèle sur le même 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 sur un groupe de ressources ou sur le même abonnement que celui où la pile de déploiement existe.
  • Une pile au niveau de l’étendue du groupe d’administration peut déployer le modèle sur l’abonnement.

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 à l’étendue de l’abonnement qui déploie le modèle à l’étendue du groupe de ressources et avec le mode des paramètres de refus DenyDelete, vous pouvez facilement provisionner des ressources gérées dans le groupe de ressources spécifié et bloquer les tentatives de suppression de ces ressources. Cette approche vous permet d’améliorer la sécurité de la pile de déploiement en la séparant au niveau de l’abonnement au lieu du niveau du groupe de ressources. Cette séparation garantit que les équipes de développement travaillant avec les ressources approvisionnées disposent uniquement d’une visibilité et d’un accès en écriture aux groupes de ressources. La pile de déploiement reste isolée à un niveau plus élevé. Cette configuration 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.

Vous pouvez également utiliser les commandes create-stack 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 vous ne spécifiez pas le paramètre, les ressources gérées sont stockées dans l’étendue de l’abonnement.

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

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

Le deploymentSubscriptionId paramètre spécifie l'abonnement utilisé pour stocker les ressources gérées. Si vous ne spécifiez pas le paramètre, les ressources managées sont stockées dans l’étendue du groupe d’administration.

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, 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 pouvez mettre à jour la pile de déploiement en exécutant la commande de mise à jour ou en réexécutant la commande create.

Le modèle de conception d’infrastructure en tant que code vous donne un contrôle total sur la liste des ressources managées.

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 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-AzManagementGroupDeploymentStack `
  -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 des stacks 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 que la pile de déploiement ne suit pas ou ne gère pas, mais existe toujours dans Azure.

Pour demander à Azure de supprimer des ressources non gérées, mettez à jour la pile avec la commande create stack et incluez le commutateur ActionOnUnmanage. Pour plus d’informations, reportez-vous à Créer un stack 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 la suppression plutôt que de détacher pour les ressources managées et les groupes de ressources.
  • deleteResources: Utilisez la suppression plutôt que de détacher pour les ressources managées uniquement.
  • detachAll: Détachez les ressources gérées et les groupes de ressources.

Par exemple :

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

Avertissement

Lorsque vous supprimez des groupes de ressources avec le action-on-unmanage commutateur défini sur deleteAll, vous supprimez les groupes de ressources managés et toutes les ressources contenues dans ceux-ci.

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 risquez de rencontrer l'erreur de désynchronisation suivante, ce qui indique que la liste des ressources de la pile n'est pas correctement synchronisée.

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.

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

Après avoir examiné et vérifié la liste des ressources dans la pile, réexécutez la commande avec le BypassStackOutOfSyncError commutateur dans Azure PowerShell (ou bypass-stack-out-of-sync-error dans Azure CLI). Utilisez ce commutateur uniquement après avoir examiné soigneusement la liste des ressources dans la pile. N’utilisez pas ce commutateur 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 uniquement les ressources.
  • 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ù la pile de déploiement se trouve empêchent à la fois les ressources non managées et le groupe de ressources lui-même d’être supprimés.

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

Vous pouvez attribuer des autorisations spécifiques aux ressources gérées d’une pile de déploiement pour empêcher les principaux de sécurité non autorisés de les supprimer ou de les mettre à jour. Ces autorisations sont appelées paramètres de refus. Stockez les piles au niveau de l’étendue parente. Par exemple, pour protéger les ressources d’un abonnement, placez la pile dans l’étendue parente qui est le groupe d’administration parent immédiat.

Le paramètre de refus s’applique uniquement aux opérations du plan de contrôle et non aux opérations de plan de données. Par exemple, vous créez des comptes de stockage et des coffres de clés via le plan de contrôle, ce qui signifie que la pile de déploiement les gère. Toutefois, vous créez des ressources secondaires telles que des secrets ou des conteneurs d’objets blob via le plan de données, ce qui signifie que la pile de déploiement ne peut pas les gérer.

Le paramètre de refus s’applique uniquement aux ressources créées explicitement, et non aux ressources créées implicitement. Par exemple, un cluster AKS managé crée plusieurs autres services pour le prendre en charge, comme une machine virtuelle. Dans ce cas, étant donné que la machine virtuelle n’est pas définie dans le fichier Bicep et qu’elle est une ressource créée implicitement, elle n’est pas soumise aux paramètres de refus de la pile de déploiement.

Remarque

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

  • Créez ou mettez à jour une pile de déploiement et configurez le paramètre de refus sur une valeur autre que None.
  • Mettez à jour ou supprimez une pile de déploiement avec un paramètre de refus existant avec une valeur autre que None.

Utilisez les rôles intégrés de la pile de déploiement pour accorder des autorisations.

Azure PowerShell inclut ces paramètres pour personnaliser le deny-assignment :

  • DenySettingsMode: définit les opérations interdites sur les ressources gérées afin de protéger contre les entités de sécurité non autorisées qui tentent de les supprimer ou de les mettre à jour. Cette restriction s’applique à tous, sauf si vous accordez explicitement l’accès. Ces valeurs incluent None, DenyDelete et DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes : lorsqu’elle est spécifiée, la configuration du mode de paramètre de refus s’applique également à l’étendue enfant des ressources managées. Par exemple, un fichier Bicep définit une ressource Microsoft.Sql/servers (parent) et une ressource Microsoft.Sql/servers/databases (enfant). Si vous créez une pile de déploiement à l’aide du fichier Bicep avec le paramètre DenySettingsApplyToChildScopes activé et le paramètre DenySettingsMode défini sur DenyWriteAndDelete, vous ne pouvez pas ajouter de ressources enfants supplémentaires à la ressource Microsoft.Sql/servers ni à la ressource Microsoft.Sql/servers/databases.
  • 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 directeurs d'école 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-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>"

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-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>"

Étapes suivantes

Pour suivre un démarrage rapide du déploiement Bicep, consultez Démarrage rapide : Créer et déployer une pile de déploiement avec Bicep.