Déploiements de groupes d’administration avec des fichiers Bicep
Cet article explique comment définir l’étendue avec Bicep lors du déploiement sur un groupe d’administration.
À mesure que votre organisation devient plus mature, vous pouvez déployer un fichier Bicep pour créer des ressources au niveau du groupe d’administration. Par exemple, vous pouvez être amené à définir et attribuer des stratégies ou un contrôle d’accès en fonction du rôle Azure (Azure RBAC) pour un groupe d’administration. Avec des modèles au niveau du groupe d’administration, vous pouvez de façon déclarative appliquer des stratégies et assigner des rôles au niveau du groupe d’administration.
Ressources de formation
Si vous préférez découvrir les étendues de déploiement via des instructions d’aide pas à pas, consultez Déployer des ressources sur des abonnements, des groupes d’administration et des locataires en utilisant Bicep.
Ressources prises en charge
Certains types de ressources ne peuvent pas être déployés au niveau du groupe d’administration. Cette section répertorie les types de ressources pris en charge.
Pour Azure Blueprints, utilisez :
Pour Azure Policy, utilisez :
Pour le contrôle d’accès, utilisez :
- privateLinkAssociations
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Pour les modèles imbriqués qui sont déployés sur des abonnements ou des groupes de ressources, utilisez :
Pour gérer vos ressources, utilisez :
Les groupes d’administration sont des ressources de niveau client. Toutefois, vous pouvez créer des groupes d’administration dans un déploiement de groupe d’administration en définissant l’étendue du nouveau groupe d’administration sur le locataire. Consultez Groupe d’administration.
Étendue de jeu
Pour définir l’étendue sur le groupe d’administration, utilisez :
targetScope = 'managementGroup'
Commandes de déploiement
Pour opérer un déploiement vers un groupe d’administration, utilisez les commandes de déploiement de groupes d’administration.
Pour Azure CLI, utilisez az deployment mg create :
az deployment mg create \
--name demoMGDeployment \
--location WestUS \
--management-group-id myMG \
--template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/management-level-deployment/azuredeploy.json"
Pour plus d’informations sur les commandes et options de déploiement de modèles Resource Manager, consultez :
- Déployer des ressources à l’aide de modèles ARM et l’interface CLI Azure
- Déployer des ressources à l’aide de modèles Resource Manager et d’Azure PowerShell
- Déployer des modèles Resource Manager à partir de Cloud Shell
Emplacement et nom du déploiement
Pour les déploiements au niveau du groupe d'administration, vous devez fournir un emplacement de déploiement. L’emplacement du déploiement est distinct de l’emplacement des ressources que vous déployez. L’emplacement de déploiement indique où stocker les données de déploiement. Les déploiements d’abonnement et de locataire nécessitent également un emplacement. Pour les déploiements d’un groupe de ressources, l’emplacement du groupe de ressources est utilisé pour stocker les données de déploiement.
Vous pouvez fournir un nom de déploiement ou utiliser le nom de déploiement par défaut. Le nom par défaut est le nom du fichier de modèle. Par exemple, le déploiement d’un modèle nommé main.bicep crée le nom de déploiement par défaut main.
Pour chaque nom de déploiement, l’emplacement est immuable. Il n’est pas possible de créer un déploiement dans un emplacement s’il existe un déploiement du même nom dans un autre emplacement. Par exemple, si vous créez un déploiement de groupe d’administration avec le nom deployment1 dans centralus, vous ne pouvez pas créer par la suite un autre déploiement avec le nom deployment1 mais un emplacement westus. Si vous obtenez le code d’erreur InvalidDeploymentLocation
, utilisez un autre nom ou le même emplacement que le déploiement précédent pour ce nom.
Étendues de déploiement
Lors du déploiement sur un groupe d’administration, vous pouvez déployer des ressources vers :
- le groupe d’administration cible de l’opération
- un autre groupe d’administration dans le locataire
- des abonnements dans le groupe d’administration
- les groupes de ressources dans le groupe d’administration
- le locataire pour le groupe de ressources
Une ressource d’extension peut être étendue à une cible différente de la cible de déploiement.
L’utilisateur qui déploie le modèle doit avoir accès à l’étendue spécifiée.
Étendue au groupe d’administration
Pour déployer des ressources dans le groupe d’administration cible, ajoutez ces ressources avec le mot clé resource
.
targetScope = 'managementGroup'
// policy definition created in the management group
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
...
}
Pour cibler un autre groupe d'administration, ajoutez un module. Utilisez la fonction managementGroup pour définir la propriété scope
. Indiquez le nom du groupe d’administration.
targetScope = 'managementGroup'
param otherManagementGroupName string
// module deployed at management group level but in a different management group
module exampleModule 'module.bicep' = {
name: 'deployToDifferentMG'
scope: managementGroup(otherManagementGroupName)
}
Étendue à l’abonnement
Vous pouvez également cibler des abonnements dans un groupe d’administration. L’utilisateur qui déploie le modèle doit avoir accès à l’étendue spécifiée.
Pour cibler un abonnement au sein du groupe d'administration, ajoutez un module. Utilisez la fonction d’abonnement pour définir la propriété scope
. Indiquez l’ID d’abonnement.
targetScope = 'managementGroup'
param subscriptionID string
// module deployed to subscription in the management group
module exampleModule 'module.bicep' = {
name: 'deployToSub'
scope: subscription(subscriptionID)
}
Étendue au groupe de ressources
Vous pouvez également cibler des groupes de ressources au sein du groupe d’administration. L’utilisateur qui déploie le modèle doit avoir accès à l’étendue spécifiée.
Pour cibler un groupe de ressources au sein du groupe d’administration, ajoutez un module. Utilisez la fonction resourceGroup pour définir la propriété scope
. Fournissez l’ID d’abonnement et le nom du groupe de ressources.
targetScope = 'managementGroup'
param subscriptionID string
param resourceGroupName string
// module deployed to resource group in the management group
module exampleModule 'module.bicep' = {
name: 'deployToRG'
scope: resourceGroup(subscriptionID, resourceGroupName)
}
Étendue au locataire
Pour créer des ressources au niveau du locataire, ajoutez un module. Utilisez la fonction locataire pour définir sa propriété scope
. L’utilisateur qui déploie le modèle doit disposer de l’accès requis pour déployer au niveau du locataire.
targetScope = 'managementGroup'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
Ou vous pouvez définir l’étendue sur /
pour certains types de ressources, comme les groupes d’administration. La création d’un nouveau groupe d’administration est décrite dans la section suivante.
Groupe d’administration
Pour créer un groupe d’administration dans un déploiement de groupes d’administration, vous devez définir l’étendue sur le locataire.
L’exemple suivant crée un groupe d’administration dans le groupe d’administration racine.
targetScope = 'managementGroup'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource newMG 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: mgName
properties: {}
}
output newManagementGroup string = mgName
L’exemple suivant crée un nouveau groupe d’administration dans le groupe de gestion ciblé pour le déploiement. Il utilise la fonction de groupe d’administration.
targetScope = 'managementGroup'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource newMG 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: mgName
properties: {
details: {
parent: {
id: managementGroup().id
}
}
}
}
output newManagementGroup string = mgName
Abonnements
Pour utiliser un modèle ARM afin de créer un nouvel abonnement Azure dans un groupe d’administration, consultez :
- Créer des abonnements Contrat Entreprise Azure par programmation
- Créer des abonnements Azure pour un Contrat client Microsoft par programmation
- Créer des abonnements Azure pour un Contrat Partenaire Microsoft par programmation
Pour déployer un modèle qui déplace un abonnement Azure existant vers un nouveau groupe d’administration, consultez Déplacer des abonnements dans un modèle ARM
Azure Policy
Les définitions de stratégie personnalisée qui sont déployées sur un groupe d’administration sont des extensions de celui-ci. Pour obtenir l’ID d’une définition de stratégie personnalisée, utilisez la fonction extensionResourceId(). Les définitions de stratégie intégrées sont des ressources de niveau locataire. Pour obtenir l’ID d’une définition de stratégie intégrée, utilisez la fonction tenantResourceId().
L’exemple suivant montre comment définir une stratégie au niveau du groupe d’administration et comment l’attribuer.
targetScope = 'managementGroup'
@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
'australiaeast'
'australiasoutheast'
'australiacentral'
]
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
name: 'locationRestriction'
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
not: {
field: 'location'
in: allowedLocations
}
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: 'locationAssignment'
properties: {
policyDefinitionId: policyDefinition.id
}
}
Étapes suivantes
Pour en apprendre plus sur d’autres étendues, consultez :