Déploiements de locataires avec fichier Bicep

À mesure que votre organisation évolue, vous pouvez être amené à définir et à attribuer des stratégies ou des contrôles d’accès en fonction du rôle Azure (Azure RBAC) dans votre locataire Microsoft Entra. Avec les modèles au niveau du locataire, vous pouvez appliquer de façon déclarative des stratégies et attribuer des rôles à un niveau global.

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 du locataire. Cette section répertorie les types de ressources pris en charge.

Pour le contrôle d’accès en fonction du rôle Azure (Azure RBAC), utilisez :

Pour les modèles imbriqués qui sont déployés sur des groupes d’administration, des abonnements ou des groupes de ressources, utilisez :

Pour créer des groupes d’administration, utilisez :

Pour créer des abonnements, utilisez :

Pour la gestion des coûts, utilisez :

Pour la configuration du portail, utilisez :

Les définitions de stratégies intégrées sont des ressources au niveau du locataire, mais vous ne pouvez pas déployer de définitions de stratégies personnalisées au niveau du locataire. Pour obtenir un exemple d’attribution de définition de stratégie intégrée à une ressource, consultez Exemple tenantResourceId.

Étendue de jeu

Pour définir l’étendue sur locataire, utilisez :

targetScope = 'tenant'

Accès requis

Le principal déployant le modèle doit être autorisé à créer des ressources au niveau du locataire. Le principal doit être autorisé à exécuter les actions de déploiement (Microsoft.Resources/deployments/*) et à créer les ressources définies dans le modèle. Par exemple, pour créer un groupe d’administration, le principal doit disposer de l’autorisation Contributeur au niveau du locataire. Pour créer des attributions de rôles, le principal doit disposer de l’autorisation Propriétaire.

L’administrateur général de Microsoft Entra ID n’est pas automatiquement autorisé à attribuer des rôles. Pour activer les déploiements de modèles au niveau du locataire, l’Administrateur général doit procéder comme suit :

  1. Élever l’accès au compte de manière à permettre à l'Administrateur général d'attribuer des rôles. Pour plus d’informations, consultez Élever l’accès pour gérer tous les abonnements et groupes d’administration Azure.

  2. Attribuer le rôle Propriétaire ou Contributeur au principal devant déployer les modèles.

    New-AzRoleAssignment -SignInName "[userId]" -Scope "/" -RoleDefinitionName "Owner"
    
    az role assignment create --assignee "[userId]" --scope "/" --role "Owner"
    

Le principal dispose désormais des autorisations requises pour déployer le modèle.

Commandes de déploiement

Les commandes utilisées pour les déploiements de locataires sont différentes de celles utilisées pour les déploiements de groupes de ressources.

Pour Azure CLI, utilisez az deployment tenant create :

az deployment tenant create \
  --name demoTenantDeployment \
  --location WestUS \
  --template-file main.bicep

Pour plus d’informations sur les commandes et options de déploiement de modèles Resource Manager, consultez :

Emplacement et nom du déploiement

Pour les déploiements au niveau du locataire, 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 groupe d’administration 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 fichier nommé main.bicep crée un nom de déploiement par défaut de 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 locataire 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 dans un locataire, vous pouvez déployer des ressources vers :

  • le locataire
  • des groupes d’administration dans le locataire
  • subscriptions
  • groupes 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.

Cette section montre comment spécifier des étendues différentes. Vous pouvez combiner ces différentes étendues dans un seul modèle.

Étendue au locataire

Les ressources définies au sein du fichier Bicep sont appliquées au locataire.

targetScope = 'tenant'

// create resource at tenant
resource mgName_resource 'Microsoft.Management/managementGroups@2021-04-01' = {
  ...
}

Étendue au groupe d’administration

Pour cibler un groupe d’administration au sein du locataire, ajoutez un module. Utilisez la fonction managementGroup pour définir sa propriété scope. Indiquez le nom du groupe d’administration.

targetScope = 'tenant'

param managementGroupName string

// create resources at management group level
module  'module.bicep' = {
  name: 'deployToMG'
  scope: managementGroup(managementGroupName)
}

Étendue à l’abonnement

Pour cibler un abonnement au sein du locataire, ajoutez un module. Utilisez la fonction d’abonnement pour définir sa propriété scope. Indiquez l’ID d’abonnement.

targetScope = 'tenant'

param subscriptionID string

// create resources at subscription level
module  'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(subscriptionID)
}

Étendue au groupe de ressources

Pour cibler un groupe de ressources au sein du locataire, ajoutez un module. Utilisez la fonction resourceGroup pour définir sa propriété scope. Fournissez l’ID d’abonnement et le nom du groupe de ressources.

targetScope = 'tenant'

param resourceGroupName string
param subscriptionID string

// create resources at resource group level
module  'module.bicep' = {
  name: 'deployToRG'
  scope: resourceGroup(subscriptionID, resourceGroupName)
}

Créer un groupe d’administration

Le modèle suivant crée un groupe d'administration.

targetScope = 'tenant'
param mgName string = 'mg-${uniqueString(newGuid())}'

resource mgName_resource 'Microsoft.Management/managementGroups@2021-04-01' = {
  name: mgName
  properties: {}
}

Même si votre compte n’est pas autorisé à effectuer un déploiement sur le locataire, vous pouvez créer des groupes d’administration en choisissant une autre étendue de déploiement. Pour plus d’informations, consultez Groupe d’administration.

Affecter le rôle

Le modèle suivant attribue un rôle au niveau du locataire.

targetScope = 'tenant'

@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string

@description('roleDefinition for the assignment - default is owner')
param roleDefinitionId string = '8e3af657-a8ff-443c-a75c-2fe8c4bcb635'

var roleAssignmentName = guid(principalId, roleDefinitionId)

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: roleAssignmentName
  properties: {
    roleDefinitionId: tenantResourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
    principalId: principalId
  }
}

Étapes suivantes

Pour en apprendre plus sur d’autres étendues, consultez :