Exercice - Gérer les secrets dans votre modèle ARM

Effectué

Dans l’exercice précédent, vous avez exécuté un modèle ARM (Azure Resource Manager) de base, qui provisionne une machine virtuelle Linux. Dans cette partie, vous suivez un processus similaire.

Cette fois, au lieu de transmettre le mot de passe en tant que paramètre, vous stockez le mot de passe dans Azure Key Vault. Pour permettre au modèle ARM d’accéder au mot de passe, vous créez un fichier de paramètres qui référence le secret du coffre de clés dans votre abonnement.

Déployer Azure Key Vault

Notes

En raison des limitations du bac à sable (sandbox), vous devez créer ici un coffre de clés dans Azure Key Vault à partir du portail Azure. Normalement, vous utilisez l’applet de commande New-AzKeyVault pour créer un coffre de clés à partir d’Azure PowerShell.

Créez un coffre de clés et autorisez l’accès au moment du déploiement. Pour ce faire :

  1. Créez une variable PowerShell qui contient le nom du coffre de clés :

    $KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
    
  2. Exécutez $KVNAME pour imprimer sa valeur :

    $KVNAME
    

    Votre sortie ressemble à ceci (le nombre que vous voyez est différent) :

    tailwind-secrets5978564
    

    Copiez la valeur quelque part pour l’étape suivante.

  3. Connectez-vous au portail Azure à l’aide du compte utilisé pour activer le bac à sable.

  4. Dans le menu du portail Azure ou dans la page Accueil, sélectionnez Créer une ressource.

  5. Dans la zone de recherche, entrez Key Vault.

  6. Sélectionnez Key Vault dans la liste, puis sélectionnez Créer pour démarrer la configuration du coffre de clés.

  7. Dans le volet de création, spécifiez les valeurs suivantes :

    1. Groupe de ressources : nom du groupe de ressources.
    2. Nom du coffre de clés : La valeur de $KVNAME, par exemple, tailwind-secrets5978564.
  8. Sélectionnez Revoir + créer.

  9. Sélectionnez Create (Créer). Cela devrait prendre environ une minute. Une fois la ressource créée, sélectionnez Accéder à la ressource.

  10. Sélectionnez Configuration d’accès sous Paramètres. Activez l’option Azure Resource Manager pour le déploiement de modèles, puis sélectionnez Appliquer.

  11. À partir de votre session PowerShell, exécutez l’applet de commande ConvertTo-SecureString et affectez le résultat à la variable secretSecureString :

    $secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
    
  12. Exécutez la commande Set-AzKeyVaultSecret suivante pour créer un secret dans le coffre de clés. Le secret se nomme vmPassword et a la valeur insecurepassword123! :

    $secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
    

Créer le fichier de paramètres

Ici, vous créez un fichier de paramètres qui contient le nom de la machine virtuelle, le nom d’utilisateur de l’administrateur et une référence au mot de passe de la machine virtuelle dans le coffre de clés.

Vous pouvez transmettre des paramètres à des modèles à partir de la ligne de commande. Rappelez-vous qu’un fichier de paramètres est une autre façon de passer des paramètres à votre modèle ARM pendant le déploiement. Un fichier de paramètres vous permet d’accéder à des secrets de coffre de clés à partir de votre modèle.

  1. Exécutez la commande Get-AzKeyVault suivante pour imprimer votre ID de coffre de clés :

    Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
    

    La sortie ressemble à ceci :

    /subscriptions/7c7df858-93a0-4f38-8990-304c836a4e8d/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
    

    Notez la sortie pour l’étape suivante.

  2. Dans Visual Studio Code, créez un fichier nommé azuredeploy.parameters.json dans le même répertoire que celui qui contient azuredeploy.json.

  3. Ajoutez ces contenus à azuredeploy.parameters.json :

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "adminUsername": {
          "value": "azureuser"
        },
        "vmName": {
          "value": "vm2"
        },
        "adminPasswordOrKey": {
          "reference": {
             "keyVault": {
             "id": ""
             },
             "secretName": "vmPassword"
          }
        }
      }
    }
    
  4. Remplacez la valeur de id (la chaîne vide) par la valeur que vous avez copiée à l’étape précédente. Puis enregistrez le fichier.

Déployer une machine virtuelle Linux

Ici, vous déployez le même modèle ARM que celui que vous avez déployé au cours de l’exercice précédent. Cette fois-ci, vous fournissez le fichier de paramètres qui fait référence au mot de passe de la machine virtuelle dans le coffre de clés.

  1. Exécutez la commande New-AzResourceGroupDeployment suivante :

    New-AzResourceGroupDeployment `
      -TemplateFile "./azuredeploy.json" `
      -TemplateParameterFile "./azuredeploy.parameters.json" `
      -dnsLabelPrefix ("vm2-" + (Get-Random -Count 1 -Maximum 9999999))
    

    Dans l’exercice précédent, vous avez fourni chaque paire clé-valeur directement à partir de la ligne de commande. Ici, vous spécifiez "./azuredeploy.parameters.json" pour fournir votre fichier de paramètres.

    dnsLabelPrefix a la valeur vm2- suivi d’un nombre aléatoire. Cela est nécessaire pour s’assurer que le nom DNS est différent du nom DNS que vous avez utilisé dans l’exercice précédent.

Vérifier le déploiement

Vérifiez que la machine virtuelle est configurée et qu’elle peut être connectée via SSH. Pour ce faire :

  1. Exécutez la commande Invoke-Expression pour vous connecter à la machine virtuelle via SSH :

    Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
    

    Quand vous y êtes invité, entrez yes (oui) pour poursuivre la connexion. Entrez ensuite le mot de passe de l’administrateur, insecurepassword123!.

    Important

    Dans la pratique, gardez des mots de passe sécurisés. Vous pouvez également utiliser l’authentification par clé publique, qui est généralement plus sécurisée que l’utilisation de mots de passe.

  2. À partir de votre connexion SSH à la machine virtuelle, exécutez hostname pour imprimer le nom d’hôte de la machine virtuelle :

    hostname
    

    Vous voyez le nom d’hôte interne de la machine virtuelle, vm1 :

    vm2
    
  3. Exécutez exit pour quitter votre session SSH.

    exit
    

Bravo ! Vous avez étendu votre déploiement pour inclure un fichier de paramètres qui lit les informations confidentielles à partir d’un coffre de clés.

Déployer Azure Key Vault

Dans Azure Key Vault, créez un coffre de clés, puis ajoutez le mot de passe de la machine virtuelle sous forme de secret sécurisé. Pour ce faire :

  1. Créez une variable Bash qui contient le nom du coffre de clés.

    KVNAME=tailwind-secrets$RANDOM
    

    Les noms de coffres de clés doivent être uniques. La partie $RANDOM permet de vérifier que le nom du coffre de clés finit par une série aléatoire de nombres.

  2. Exécutez la commande az keyvault create suivante pour créer le coffre de clés :

    az keyvault create \
      --name $KVNAME \
      --enabled-for-template-deployment true
    

    L’argument --enabled-for-template-deployment permet au modèle ARM (Azure Resource Manager) de récupérer des secrets à partir du coffre de clés.

  3. Exécutez la commande az keyvault secret set suivante pour créer un secret dans le coffre de clés. Le secret se nomme vmPassword et a la valeur insecurepassword123! :

    az keyvault secret set \
      --vault-name $KVNAME \
      --name vmPassword \
      --value 'insecurepassword123!'
    

Créer le fichier de paramètres

Ici, vous créez un fichier de paramètres qui contient le nom de la machine virtuelle, le nom d’utilisateur de l’administrateur et une référence au mot de passe de la machine virtuelle dans le coffre de clés.

Vous pouvez transmettre des paramètres à des modèles à partir de la ligne de commande. Rappelez-vous qu’un fichier de paramètres est une autre façon de passer des paramètres à votre modèle ARM pendant le déploiement. Un fichier de paramètres vous permet d’accéder à des secrets de coffre de clés à partir de votre modèle.

  1. Exécutez la commande az keyvault show suivante pour imprimer votre ID de coffre de clés :

    az keyvault show \
      --name $KVNAME \
      --query id \
      --output tsv
    

    La sortie ressemble à ceci :

    /subscriptions/7c7df858-93a0-4f38-8990-304c836a4e8d/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
    

    Notez la sortie pour l’étape suivante.

  2. Dans Visual Studio Code, créez un fichier nommé azuredeploy.parameters.json dans le même répertoire que celui qui contient azuredeploy.json.

  3. Ajoutez ces contenus à azuredeploy.parameters.json :

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "adminUsername": {
          "value": "azureuser"
        },
        "vmName": {
          "value": "vm2"
        },
        "adminPasswordOrKey": {
          "reference": {
             "keyVault": {
             "id": ""
             },
             "secretName": "vmPassword"
          }
        }
      }
    }
    
  4. Remplacez la valeur de id (la chaîne vide) par la valeur que vous avez copiée à l’étape précédente. Puis enregistrez le fichier.

Déployer une machine virtuelle Linux

Ici, vous déployez le même modèle ARM que celui que vous avez déployé au cours de l’exercice précédent. Cette fois-ci, vous fournissez le fichier de paramètres qui fait référence au mot de passe de la machine virtuelle dans le coffre de clés.

Pour déployer le modèle, exécutez la commande az deployment group create suivante :

az deployment group create \
  --template-file azuredeploy.json \
  --parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"

Dans l’exercice précédent, vous avez fourni chaque paire clé-valeur dans l’argument --parameters. Ici, vous spécifiez @azuredeploy.parameters.json pour fournir votre fichier de paramètres.

dnsLabelPrefix a la valeur vm2- suivi d’un nombre aléatoire. Cela est nécessaire pour s’assurer que le nom DNS est différent du nom DNS que vous avez utilisé dans l’exercice précédent.

Vérifier le déploiement

Comme vous l’avez fait dans l’exercice précédent, vérifiez que la machine virtuelle est configurée et qu’elle peut être connectée via SSH. Par souci de concision, cette fois, vous allez passer certaines étapes intermédiaires.

  1. Exécutez la commande suivante pour vous connecter à votre machine virtuelle via SSH :

    $(az deployment group show \
      --name azuredeploy \
      --query properties.outputs.sshCommand.value \
      --output tsv)
    

    Quand vous y êtes invité, entrez yes (oui) pour poursuivre la connexion. Entrez ensuite le mot de passe de l’administrateur, insecurepassword123!.

  2. À partir de votre connexion SSH à la machine virtuelle, exécutez hostname pour imprimer le nom d’hôte de la machine virtuelle :

    hostname
    

    Vous voyez le nom d’hôte interne de la machine virtuelle, vm2 :

    vm2
    
  3. Exécutez exit pour quitter votre session SSH.

    exit
    

Bravo ! Vous avez étendu votre déploiement pour inclure un fichier de paramètres qui lit les informations confidentielles à partir d’un coffre de clés.