Déploiements d’abonnements avec des fichiers Bicep
Pour simplifier la gestion des ressources, vous pouvez déployer des ressources au niveau de votre abonnement Azure. Par exemple, vous pouvez déployer des stratégies et un contrôle d’accès en fonction du rôle Azure (Azure RBAC) sur votre abonnement, ce qui les applique à l’ensemble de votre abonnement.
Cet article explique comment définir l’étendue de déploiement sur un abonnement dans un fichier Bicep.
Remarque
Vous pouvez déployer sur 800 différents groupes de ressources dans un déploiement de niveau abonnement.
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
Tous les types de ressources ne peuvent pas être déployés au niveau de l’abonnement. Cette section répertorie les types de ressources pris en charge.
Pour Azure Blueprints, utilisez :
Pour les stratégies Azure, utilisez :
Pour le contrôle d’accès, utilisez :
- accessReviewScheduleDefinitions
- accessReviewScheduleSettings
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Pour les modèles imbriqués déployés sur des groupes de ressources, utilisez :
Pour la création de groupes de ressources, utilisez :
Pour la gestion de votre abonnement, utilisez :
- budgets
- configurations - Advisor
- lineOfCredit
- locks
- profil - Analyse des changements
- supportPlanTypes
- balises
Pour la supervision, utilisez :
Pour la sécurité, utilisez :
- advancedThreatProtectionSettings
- alertsSuppressionRules
- assessmentMetadata
- assessments
- autoProvisioningSettings
- connectors
- deviceSecurityGroups
- ingestionSettings
- pricings
- securityContacts
- settings
- workspaceSettings
Les autres types pris en charge sont les suivants :
Étendue de jeu
Définissez l’étendue vers l’abonnement, utilisez :
targetScope = 'subscription'
Commandes de déploiement
Pour déployer sur un abonnement, utilisez les commandes de déploiement au niveau de l’abonnement.
Pour l’interface de ligne de commande Azure, utilisez az deployment sub create. L’exemple suivant déploie un modèle pour créer un groupe de ressources :
az deployment sub create \
--name demoSubDeployment \
--location centralus \
--template-file main.bicep \
--parameters rgName=demoResourceGroup rgLocation=centralus
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 de l’abonnement, 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 de groupes d’administration et de locataires nécessitent également un emplacement. Pour les déploiements de groupes 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.json crée un nom de déploiement par défaut principal.
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 d’abonnement avec le nom deployment1 dans centralus, vous ne pouvez pas créer par la suite un autre déploiement avec le nom deployment1, mais à l’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 dans un abonnement, vous pouvez déployer des ressources vers :
- l’abonnement cible de l’opération
- tout abonnement dans le locataire
- des groupes de ressources dans le même abonnement ou dans d’autres abonnements
- le locataire de l’abonnement
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 à l’abonnement
Pour déployer des ressources vers l’abonnement cible, ajoutez ces ressources avec le mot clé resource
.
targetScope = 'subscription'
// resource group created in target subscription
resource exampleResource 'Microsoft.Resources/resourceGroups@2024-03-01' = {
...
}
Pour obtenir des exemples de déploiement sur l’abonnement, consultez Créer des groupes de ressources avec Bicep et Affecter une définition de stratégie.
Pour déployer des ressources dans un abonnement différent de l’abonnement de l’opération, ajoutez un module. Utilisez la fonction d’abonnement pour définir la propriété scope
. Définissez la propriété subscriptionId
sur l’ID de l’abonnement sur lequel vous souhaitez effectuer le déploiement.
targetScope = 'subscription'
param otherSubscriptionID string
// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
name: 'deployToDifferentSub'
scope: subscription(otherSubscriptionID)
}
Étendue au groupe de ressources
Pour déployer des ressources dans un groupe de ressources au sein de l’abonnement, ajoutez un module et définissez sa propriété scope
. Si le groupe de ressources existent déjà, utilisez la fonction resourceGroup pour définir la valeur de l’étendue. Fournissez le nom du groupe de ressources.
targetScope = 'subscription'
param resourceGroupName string
module exampleModule 'module.bicep' = {
name: 'exampleModule'
scope: resourceGroup(resourceGroupName)
}
Si le groupe de ressources est créé dans le même fichier Bicep, utilisez le nom symbolique du groupe de ressources pour définir la valeur de l’étendue. Pour obtenir un exemple de définition de l’étendue sur le nom symbolique, consultez Créer un groupe de ressources avec Bicep.
É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.
L’exemple suivant inclut un module qui est déployé sur le locataire.
targetScope = 'subscription'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
Au lieu d’utiliser un module, vous pouvez définir l’étendue sur tenant()
pour certains types de ressources. L’exemple suivant déploie un groupe d’administration au niveau du locataire.
targetScope = 'subscription'
param mgName string = 'mg-${uniqueString(newGuid())}'
// management group created at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: mgName
properties: {}
}
output output string = mgName
Pour plus d’informations, consultez Groupe d’administration.
Groupes de ressources
Pour des informations sur la création de groupes de ressources, consultez Créer un groupe de ressources avec Bicep.
Azure Policy
Affecter une définition de stratégie
L’exemple suivant assigne une définition de stratégie existante à l’abonnement. Si la définition de stratégie utilise des paramètres, fournissez-les en tant qu’objet. Si la définition de stratégie n’accepte pas de paramètres, utilisez l’objet vide par défaut.
targetScope = 'subscription'
param policyDefinitionID string
param policyName string
param policyParameters object = {}
resource policyAssign 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: policyName
properties: {
policyDefinitionId: policyDefinitionID
parameters: policyParameters
}
}
Créer et attribuer des définitions de stratégie
Vous pouvez définir et attribuer une définition de stratégie dans le même fichier Bicep.
targetScope = 'subscription'
resource locationPolicy 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
name: 'locationpolicy'
properties: {
policyType: 'Custom'
parameters: {}
policyRule: {
if: {
field: 'location'
equals: 'northeurope'
}
then: {
effect: 'deny'
}
}
}
}
resource locationRestrict 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: 'allowedLocation'
properties: {
policyDefinitionId: locationPolicy.id
}
}
Contrôle d’accès
Pour en savoir plus sur l’attribution de rôles, consultez Ajouter des attributions de rôle Azure à l’aide de modèles Resource Manager.
L’exemple suivant crée un groupe de ressources, lui applique un verrou et attribue un rôle à un principal.
targetScope = 'subscription'
@description('Name of the resourceGroup to create')
param resourceGroupName string
@description('Location for the resourceGroup')
param resourceGroupLocation string
@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string
@description('roleDefinition to apply to the resourceGroup - default is contributor')
param roleDefinitionId string = 'b24988ac-6180-42a0-ab88-20f7382dd24c'
@description('Unique name for the roleAssignment in the format of a guid')
param roleAssignmentName string = guid(principalId, roleDefinitionId, resourceGroupName)
var roleID = '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/${roleDefinitionId}'
resource newResourceGroup 'Microsoft.Resources/resourceGroups@2024-03-01' = {
name: resourceGroupName
location: resourceGroupLocation
properties: {}
}
module applyLock 'lock.bicep' = {
name: 'applyLock'
scope: newResourceGroup
}
module assignRole 'role.bicep' = {
name: 'assignRBACRole'
scope: newResourceGroup
params: {
principalId: principalId
roleNameGuid: roleAssignmentName
roleDefinitionId: roleID
}
}
L’exemple ci-dessous montre le module pour appliquer le verrou :
resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
L’exemple suivant montre le module pour attribuer le rôle :
@description('The principal to assign the role to')
param principalId string
@description('A GUID used to identify the role assignment')
param roleNameGuid string = newGuid()
param roleDefinitionId string
resource roleNameGuid_resource 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: roleNameGuid
properties: {
roleDefinitionId: roleDefinitionId
principalId: principalId
}
}
Étapes suivantes
Pour en apprendre plus sur d’autres étendues, consultez :