Exercice – Déploiement de ressources dans un groupe d’administration

Effectué

Face au succès de Project Teddybear, le mystérieux service R&D de votre entreprise est prête à effectuer des recherches sur de nouveaux jouets. L’équipe a commencé à vous demander de nouveaux abonnements presque tous les jours. Elle doit appliquer ses stratégies à tous ces abonnements.

Plutôt que de dupliquer les définitions et les attributions de stratégies dans chaque abonnement, vous avez décidé de placer tous les abonnements de l’équipe dans un groupe d’administration. Vous pouvez donc appliquer la stratégie à l’ensemble du groupe d’administration plutôt qu’à chaque abonnement individuellement.

Dans cet exercice, vous allez créer un modèle Bicep pour appliquer les définitions et les attributions de stratégies à un groupe d’administration.

Pendant ce processus, vous allez :

  • Créer un groupe d’administration
  • Créer un fichier Bicep étendu au groupe d’administration
  • Ajouter les ressources Azure Policy au fichier
  • Relier l’attribution de stratégie à la définition de stratégie en construisant manuellement l’ID de la ressource
  • Déployer le modèle et vérifier le résultat

Cet exercice s’accompagne des prérequis suivants :

  • Les groupes d’administration doivent être activés sur votre locataire Azure.
  • Vous avez besoin de l’autorisation de créer un groupe d’administration dans votre hiérarchie.
  • Vous avez besoin de l’autorisation de déployer les ressources Azure Policy dans le groupe d’administration.

Si votre compte Azure actuel ne respecte pas ces exigences, vous pouvez bénéficier d’un essai gratuit en créant un nouvel abonnement et un nouveau locataire Azure. Vous pouvez également ignorer les étapes de déploiement de cet exercice.

Créer un groupe d’administration

Dans cet exercice, vous allez créer un nouveau groupe d’administration afin de ne pas affecter accidentellement des ressources dans une autre partie de votre environnement Azure.

Dans le terminal Visual Studio Code, exécutez les commandes Azure CLI suivantes :

az account management-group create \
  --name SecretRND \
  --display-name "Secret R&D Projects"

Par défaut, le nouveau groupe d’administration créé constitue un enfant direct du groupe d’administration racine du locataire. Si vous devez placer le groupe d’administration à un endroit spécifique de votre hiérarchie de groupes d’administration, utilisez le paramètre --parent-id et spécifiez le nom du groupe d’administration qui servira de parent.

Dans le terminal Visual Studio Code, exécutez les commandes Azure PowerShell suivantes :

New-AzManagementGroup `
  -GroupId 'SecretRND' `
  -DisplayName 'Secret R&D Projects'

Par défaut, le nouveau groupe d’administration créé constitue un enfant du groupe d’administration racine du locataire. Si vous devez placer le groupe d’administration à un endroit spécifique de votre hiérarchie de groupes d’administration, utilisez le paramètre -ParentId et spécifiez le nom du groupe d’administration qui servira de parent.

Dans un déploiement réel, vous devez déplacer les abonnements de l’équipe R&D dans le groupe d’administration. Pour cet exercice, vous allez déployer les stratégies même si le groupe d’administration ne contient pas d’abonnements. Le même processus de déploiement s’applique que le groupe d’administration soit vide ou qu’il contienne des abonnements.

Création d’un fichier Bicep à déployer dans un groupe d’administration

  1. Ouvrez Visual Studio Code.

  2. Supprimez votre fichier main.bicep, puis créez un fichier vide du même nom.

  3. Enregistrez le fichier vide.

  4. Ajoutez le contenu suivant au fichier.

    targetScope = 'managementGroup'
    

    Notez que cette ligne de code indique à Bicep que votre modèle sera déployé dans l’étendue du groupe d’administration.

Ajout d’une définition de stratégie

Comme tout à l’heure, créez une définition de stratégie dans le fichier Bicep.

  1. Sous la ligne que vous venez d’ajouter, ajoutez la définition de variable suivante :

    var policyDefinitionName = 'DenyFandGSeriesVMs'
    
  2. En bas du fichier, ajoutez la définition Azure Policy suivante :

    resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-01' = {
      name: policyDefinitionName
      properties: {
        policyType: 'Custom'
        mode: 'All'
        parameters: {}
        policyRule: {
          if: {
            allOf: [
              {
                field: 'type'
                equals: 'Microsoft.Compute/virtualMachines'
              }
              {
                anyOf: [
                  {
                    field: 'Microsoft.Compute/virtualMachines/sku.name'
                    like: 'Standard_F*'
                  }
                  {
                    field: 'Microsoft.Compute/virtualMachines/sku.name'
                    like: 'Standard_G*'
                  }
                ]
              }
            ]
          }
          then: {
            effect: 'deny'
          }
        }
      }
    }
    

    La définition de stratégie est la même que celle que vous avez déjà appliquée à votre abonnement. Cette fois cependant, vous la déployez dans un groupe d’administration.

Ajout d’une attribution de stratégie

Vous allez maintenant appliquer la stratégie au groupe d’administration. Elle s’appliquera donc à tous les abonnements enfants de ce groupe d’administration.

  1. Sous la définition de la variable policyDefinitionName, ajoutez la variable suivante :

    var policyAssignmentName = 'DenyFandGSeriesVMs'
    
  2. En bas du fichier, ajoutez l’attribution de stratégie suivante sous la ressource de définition de stratégie :

    resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = {
      name: policyAssignmentName
      properties: {
        policyDefinitionId: policyDefinition.id
      }
    }
    
  3. Enregistrez les modifications du fichier.

Vérification du modèle

Votre fichier doit se présenter ainsi :

targetScope = 'managementGroup'

var policyDefinitionName = 'DenyFandGSeriesVMs'
var policyAssignmentName = 'DenyFandGSeriesVMs'

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-01' = {
  name: policyDefinitionName
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        allOf: [
          {
            field: 'type'
            equals: 'Microsoft.Compute/virtualMachines'
          }
          {
            anyOf: [
              {
                field: 'Microsoft.Compute/virtualMachines/sku.name'
                like: 'Standard_F*'
              }
              {
                field: 'Microsoft.Compute/virtualMachines/sku.name'
                like: 'Standard_G*'
              }
            ]
          }
        ]
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = {
  name: policyAssignmentName
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

Si ce n’est pas le cas, copiez l’exemple ou ajustez votre modèle pour qu’il y corresponde.

Déployer le modèle sur Azure

Dans le terminal Visual Studio Code, déployez le modèle en utilisant les commandes Azure CLI suivantes :

managementGroupId="SecretRND"
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="mg-scope-"$today

az deployment mg create \
  --management-group-id $managementGroupId \
  --name $deploymentName \
  --location westus \
  --template-file $templateFile

Déployez le modèle en utilisant des commandes Azure PowerShell dans le terminal.

$managementGroupId = 'SecretRND'
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "mg-scope-$today"

New-AzManagementGroupDeployment `
  -ManagementGroupId $managementGroupId `
  -Name $deploymentName `
  -Location westus `
  -TemplateFile $templateFile

Notez que, comme avec les déploiements d’abonnement, vous spécifiez explicitement un nom et un emplacement pour les métadonnées de déploiement. Vous utilisez la date du jour pour réduire le risque d’utiliser le nom d’un déploiement existant.

Le déploiement peut prendre une ou deux minutes. Une notification de déploiement réussi s’affiche ensuite.

Vérifier le déploiement

Tout comme les déploiements étendus à l’abonnement, vous pouvez afficher les déploiements étendus au groupe d’administration sur le Portail Azure.

  1. Accédez au portail Azure.

  2. Dans le volet gauche, sélectionnez Tous les services.

  3. Dans la zone de recherche, entrez groupe d’administration et sélectionnez Groupes d’administration dans la liste des résultats.

    Screenshot of the Azure portal interface showing the service list with 'Management groups' highlighted.

  4. Sélectionnez le groupe d’administration Secret R&D Projects.

    Screenshot of the Azure portal interface, highlighting 'Secret R&D Projects' in the list of management groups.

  5. Dans la zone de recherche du volet gauche, entrez Déploiements, puis sélectionnez Déploiements sous Gouvernance.

    Screenshot of the Azure portal interface, showing the management group details.

  6. Sélectionnez le déploiement commençant par mg-scope pour voir quelles ressources ont été déployées.

    Screenshot of the Azure portal Deployments pane, highlighting the 'mg-scope-*' deployment in the list of deployments.

  7. Dans le volet Vue d’ensemble du déploiement sélectionné, sélectionnez Détails du déploiement pour le développer. Les deux ressources Azure Policy apparaissent.

    Screenshot of the Azure portal 'Overview' pane for the selected deployment.

Nettoyer les ressources

Vous avez déployé vos ressources étendues au groupe d’administration. Vous pouvez supprimer les ressources de stratégie et le groupe d’administration que vous avez créés.

az account management-group delete --name SecretRND
Remove-AzManagementGroup -GroupId SecretRND