Exercice – Déploiement d’une ressource étendue à l’abonnement

Effectué

Important

Vous avez besoin de votre propre abonnement Azure pour exécuter cet exercice et des frais pourraient vous être facturés. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

Project Teddybear est en pleine effervescence. L’équipe R&D attend que vous lui accordiez l’accès au nouvel abonnement Azure. Vous avez déjà créé l’abonnement. Avant de donner l’accès à l’équipe, vous devez vous assurer qu’elle ne déploie que des machines virtuelles conformes à ses stratégies. Les membres de l’équipe vous ont dit qu’ils ne voulaient pas déployer de machines virtuelles de série F ni G.

Dans cet exercice, vous allez créer un modèle Bicep qui configure l’abonnement en fonction des stratégies de l’équipe.

Pendant ce processus, vous allez :

  • Créer un modèle Bicep à déployer dans l’étendue d’un abonnement
  • Ajouter une définition et une attribution Azure Policy
  • Déployer le modèle et vérifier le résultat

Pour mener à bien cet exercice, vous devez disposer de l’autorisation de déployer des ressources dont l’étendue est délimitée par l’abonnement. Si vous ne pouvez pas répondre à cet impératif avec votre compte Azure actuel, vous pouvez obtenir un essai gratuit pour créer un abonnement Azure et un locataire. Vous pouvez également ignorer les étapes de déploiement de cet exercice.

Cet exercice utilise l’extension Bicep pour Visual Studio Code. Assurez-vous d’installer cette extension dans Visual Studio Code.

Création d’un modèle étendu à l’abonnement

  1. Ouvrez Visual Studio Code.

  2. Créez un fichier nommé main.bicep.

  3. Enregistrez le fichier vide afin que Visual Studio Code charge les outils Bicep.

    Vous pouvez soit sélectionner Fichier>Enregistrer sous, soit Ctrl+S dans Windows (⌘+S sur macOS). Veillez à mémoriser l’emplacement où vous avez enregistré le fichier. Vous pouvez par exemple créer un dossier scripts pour l’y enregistrer.

  4. Ajoutez le contenu suivant au fichier main.bicep. Vous allez bientôt déployer le modèle. Il est judicieux de taper ces informations manuellement au lieu d’effectuer un copier-coller. Vous verrez ainsi comment les outils vous aident à écrire vos fichiers Bicep.

    targetScope = 'subscription'
    

    Cette ligne de code indique à Bicep que votre modèle va être déployé dans l’étendue d’un abonnement.

Ajout d’une définition de stratégie

  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@2020-03-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'
          }
        }
      }
    }
    

    Comme vous pouvez le constater, la définition de stratégie s’applique uniquement aux ressources qui satisfont les critères suivants :

    • Le type de ressource est égal à Microsoft.Compute/virtualMachines.
    • La propriété sku.name commence par Standard_FouStandard_G.

    Lorsque vous essayez de créer une ressource qui correspond à ces conditions, Azure refuse sa création.

    Avertissement

    Faites attention lorsque vous utilisez l’effet de stratégie deny pour vos définitions de stratégie, en particulier pour les grandes étendues telles que les abonnements et les groupes d’administration. Si la définition n’est pas créée correctement, elle peut avoir des effets inattendus susceptibles d’entraîner des pannes. Il est préférable de commencer par l’effet de stratégie audit, et de ne passer à l’effet deny qu’après avoir constaté son bon fonctionnement sur une certaine période.

    Vous créez la définition de stratégie dans l’étendue de l’abonnement. Une fois déployée, elle sera donc disponible dans tous les groupes de ressources de l’abonnement.

Affecter la stratégie

Une définition de stratégie n’a aucun effet tant qu’elle n’est pas appliquée. Lors de cette étape, vous allez déployer une deuxième ressource étendue à l’abonnement qui applique la définition de stratégie à l’abonnement.

  1. Sous la définition de variable policyDefinitionName, ajoutez la définition de 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@2020-03-01' = {
      name: policyAssignmentName
      properties: {
        policyDefinitionId: policyDefinition.id
      }
    }
    

    Comme vous pouvez le constater, l’attribution de stratégie n’est pas configurée explicitement pour s’appliquer à l’ensemble de l’abonnement. Bicep le déduit du fait que le modèle sera déployé dans l’étendue de l’abonnement.

  3. Enregistrez les modifications du fichier.

Vérification du modèle

Votre fichier doit se présenter ainsi :

targetScope = 'subscription'

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

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2020-03-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@2020-03-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

Pour déployer ce modèle sur Azure, vous devez vous connecter à votre compte Azure à partir du terminal Visual Studio Code. Veillez à installer les outils Azure CLI.

  1. Dans le menu Terminal, sélectionnez Nouveau terminal. La fenêtre de terminal s’ouvre généralement dans la moitié inférieure de votre écran.

  2. Si l’interpréteur de commandes affiché sur le côté droit de la fenêtre de terminal est bash, il s’agit du bon interpréteur de commandes qui est ouvert et vous pouvez passer à la section suivante.

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec l’option bash affichée.

  3. Si un interpréteur de commandes autre que bash apparaît, sélectionnez la flèche déroulante des interpréteurs de commandes, puis Azure Cloud Shell (Bash).

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec la liste déroulante de l’interpréteur de commande affichée et l’option Git Bash par défaut sélectionnée.

  4. Dans la liste des interpréteurs de commandes de terminal, sélectionnez bash.

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec le terminal bash sélectionné.

  5. Dans le terminal, accédez au répertoire où vous avez enregistré votre modèle. Par exemple, si vous avez enregistré votre modèle dans le dossier templates, vous pouvez utiliser la commande suivante :

    cd templates
    

Installer Bicep

Exécutez la commande suivante pour vous assurer de disposer de la dernière version de Bicep :

az bicep install && az bicep upgrade

Connexion à Azure avec Azure CLI

  1. Dans le terminal Visual Studio Code, connectez-vous à Azure en exécutant la commande suivante :

    az login
    
  2. Dans le navigateur qui s’ouvre, connectez-vous à votre compte Azure.

    Le terminal Visual Studio Code affiche la liste des abonnements associés à ce compte.

  3. Dans la liste, trouvez l’abonnement que vous voulez utiliser pour cet exercice.

    Si vous avez manqué la liste lors de la connexion, vous pouvez utiliser l’extrait suivant pour obtenir à nouveau la liste de vos abonnements.

    az account list --output table
    
  4. Définissez l’abonnement par défaut pour toutes les commandes Azure CLI exécutées dans cette session.

    az account set --subscription "Your Subscription Name or ID"
    

Pour déployer ce modèle sur Azure, connectez-vous à votre compte Azure dans le terminal Visual Studio Code. Vérifiez que vous avez installé Azure PowerShell.

  1. Dans le menu Terminal, sélectionnez Nouveau terminal. La fenêtre de terminal s’ouvre généralement dans la moitié inférieure de votre écran.

  2. Si l’interpréteur de commandes affiché sur le côté droit de la fenêtre de terminal est powershell ou pwsh, il s’agit du bon interpréteur de commandes qui est ouvert et vous pouvez passer à la section suivante.

    Capture d’écran de la fenêtre de terminal Visual Studio Code, avec l’option pwsh indiquée dans la liste déroulante de l’interpréteur de commande.

  3. Si un shell autre que powershell ou pwsh apparaît, sélectionnez la flèche déroulante des interpréteurs de commandes, puis PowerShell.

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec la liste déroulante de l’interpréteur de commande affichée avec PowerShell sélectionné.

  4. Dans la liste d’interpréteurs de commandes de terminal, sélectionnez powershell ou pwsh.

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec le terminal PowerShell sélectionné.

  5. Dans le terminal, accédez au répertoire où vous avez enregistré votre modèle. Par exemple, si vous avez enregistré votre modèle dans le dossier templates, vous pouvez utiliser la commande suivante :

    Set-Location -Path templates
    

Installer l’interface CLI Bicep

Pour utiliser Bicep à partir d’Azure PowerShell, installez l’interface CLI de Bicep.

Connectez-vous à Azure en utilisant Azure PowerShell

  1. Dans le terminal Visual Studio Code, connectez-vous à Azure en exécutant la commande suivante :

    Connect-AzAccount
    
  2. Dans le navigateur qui s’ouvre, connectez-vous à votre compte Azure.

  3. Récupérez l’ID de l’abonnement que vous voulez utiliser pour cet exercice en exécutant la commande suivante :

    Get-AzSubscription
    

    L’ID d’abonnement est la deuxième colonne. Copiez la deuxième colonne. Il se présente ainsi : cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

  4. Définissez l’abonnement par défaut pour toutes les commandes Azure PowerShell exécutées dans cette session.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

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 :

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

az deployment sub create \
    --name $deploymentName \
    --location westus \
    --template-file $templateFile

Comme vous pouvez le constater, le déploiement étendu à l’abonnement est créé avec la commande az deployment sub create, au lieu de la commande az deployment group create habituelle.

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

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

New-AzSubscriptionDeployment `
  -Name $deploymentName `
  -Location westus `
  -TemplateFile $templateFile

Comme vous pouvez le constater, le déploiement étendu à l’abonnement est créé avec la cmdlet New-AzSubscriptionDeployment, au lieu de la cmdlet New-AzResourceGroupDeployment habituelle.

Vous remarquerez également que vous spécifiez explicitement un nom et un emplacement pour le déploiement. Azure utilise ces informations pour stocker les métadonnées de déploiement.

Conseil

Le nom de votre déploiement inclut la date du jour. Ainsi, il est moins probable que vous utilisiez accidentellement le même nom qu’un autre déploiement.

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

Notes

Si vous recevez un message d’erreur avec le code AuthorizationFailed, cela signifie que vous n’avez probablement pas l’autorisation de déployer des ressources dont l’étendue est délimitée par l’abonnement. Demandez à votre administrateur Azure de vous octroyer les autorisations nécessaires. Éventuellement, si vous ne pouvez pas répondre à cet impératif avec votre compte Azure actuel, vous pouvez obtenir un essai gratuit pour créer un abonnement Azure et un locataire.

Vérifier le déploiement

Vous pouvez afficher les déploiements étendus à l’abonnement dans le Portail Azure, ce qui peut être utile pour vérifier que le déploiement a réussi et inspecter les résultats.

  1. Accédez au portail Azure.

  2. Dans le volet gauche, sélectionnez Abonnements.

  3. Sélectionnez votre abonnement.

  4. Dans la zone de recherche, entrez Déploiements, puis sélectionnez l’élément de menu Déploiements.

    Capture d’écran de la zone de recherche du Portail Azure et de l’élément de menu Déploiements.

  5. Dans la colonne Nom du déploiement, sélectionnez le déploiement commençant par sub-scope pour voir quelles ressources ont été déployées.

    Capture d’écran de l’interface du Portail Azure montrant la liste des déploiements.

  6. Sélectionnez Détails du déploiement pour le développer. Dans ce cas, les deux ressources Azure Policy apparaissent.

    Capture d’écran du volet de vue d’ensemble du Portail Azure pour le déploiement sélectionné.

Nettoyer les ressources

Vous avez déployé des ressources étendues à l’abonnement. Vous pouvez supprimer les ressources de stratégie que vous avez créées en exécutant les commandes suivantes :

subscriptionId=$(az account show --query 'id' --output tsv)

az policy assignment delete --name 'DenyFandGSeriesVMs' --scope "/subscriptions/$subscriptionId"
az policy definition delete --name 'DenyFandGSeriesVMs' --subscription $subscriptionId
$subscriptionId = (Get-AzContext).Subscription.Id

Remove-AzPolicyAssignment -Name 'DenyFandGSeriesVMs' -Scope "/subscriptions/$subscriptionId"
Remove-AzPolicyDefinition -Name 'DenyFandGSeriesVMs' -SubscriptionId $subscriptionId

Dans l’unité d’exercice suivante, vous redéployerez les mêmes ressources de stratégie. Elles seront recréées, mais vous pourrez les nettoyer par la suite.