Tutoriel : Intégrer Azure Key Vault à votre déploiement de modèle ARM

Découvrez comment récupérer les secrets d’un coffre de clés Azure et les passer en tant que paramètres quand vous déployez un modèle Azure Resource Manager (modèle ARM). La valeur du paramètre n’est jamais exposée, car vous référencez uniquement son ID de coffre de clés. Vous pouvez référencer le secret du coffre de clés à l’aide d’un ID statique ou d’un ID dynamique. Ce tutoriel utilise un ID statique. Avec l’approche d’ID statique, vous référencez le coffre de clés dans le fichier de paramètres de modèle, et non dans le fichier de modèle. Pour plus d’informations sur les deux approches, consultez Utiliser Azure Key Vault pour transmettre une valeur de paramètre sécurisée pendant le déploiement.

Dans le tutoriel Définir l’ordre de déploiement des ressources, vous créez une machine virtuelle. Vous devez fournir le nom d’utilisateur et le mot de passe de l’administrateur de la machine virtuelle. Au lieu de fournir le mot de passe, vous pouvez le stocker au préalable dans le coffre de clés Azure Key Vault. Il vous suffit ensuite de personnaliser le modèle pour récupérer le mot de passe à partir du coffre de clés au cours du déploiement.

Diagramme affichant l’intégration d’un modèle Resource Manager avec un coffre de clés

Ce tutoriel décrit les tâches suivantes :

  • Préparer un coffre de clés
  • Ouvrir un modèle de démarrage rapide
  • Modifier le fichier de paramètres
  • Déployer le modèle
  • Valider le déploiement
  • Nettoyer les ressources

Si vous ne disposez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

Pour suivre un module Learn qui utilise une valeur sécurisée à partir d’un coffre de clés, consultez Gérer des déploiements cloud complexes à l’aide des fonctionnalités avancées de modèle ARM.

Prérequis

Pour effectuer ce qui est décrit dans cet article, vous avez besoin des éléments suivants :

Préparer un coffre de clés

Dans cette section, vous créez un coffre de clés auquel vous ajoutez un secret pour pouvoir le récupérer quand vous déployez votre modèle. Il existe de nombreuses façons de créer un coffre de clés. Dans ce tutoriel, vous utilisez Azure PowerShell pour déployer un modèle ARM. Ce modèle effectue deux opérations :

  • Crée un coffre de clés avec activation de la propriété enabledForTemplateDeployment. Cette propriété doit avoir la valeur true pour que le processus de déploiement de modèle puisse accéder aux secrets définis dans le coffre de clés.
  • Ajoute un secret au coffre de clés. Le secret stocke le mot de passe d’administrateur de la machine virtuelle.

Notes

Si, en tant qu’utilisateur déployant le modèle de machine virtuelle, vous n’êtes ni le propriétaire ni un contributeur du coffre de clés, son propriétaire ou un contributeur doit vous accorder l’accès à l’autorisation Microsoft.KeyVault/vaults/deploy/action pour le coffre de clés. Pour plus d’informations, consultez l’article Utiliser Azure Key Vault pour transmettre une valeur de paramètre sécurisée pendant le déploiement.

Pour exécuter le script Azure PowerShell suivant, sélectionnez Essayer afin d’ouvrir Cloud Shell. Pour coller le script, cliquez avec le bouton droit dans volet de l’interpréteur de commandes, puis sélectionnez Coller.

$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$upn = Read-Host -Prompt "Enter your user principal name (email address) used to sign in to Azure"
$secretValue = Read-Host -Prompt "Enter the virtual machine administrator password" -AsSecureString

$resourceGroupName = "${projectName}rg"
$keyVaultName = $projectName
$adUserId = (Get-AzADUser -UserPrincipalName $upn).Id
$templateUri = "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorials-use-key-vault/CreateKeyVault.json"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -keyVaultName $keyVaultName -adUserId $adUserId -secretValue $secretValue

Write-Host "Press [ENTER] to continue ..."

Important

  • Le nom du groupe de ressources correspond au nom du projet auquel est ajouté rg. Pour faciliter le nettoyage des ressources créées dans ce tutoriel, utilisez le même nom de projet et le même nom de groupe de ressources quand vous déployez le modèle suivant.
  • Le nom par défaut du secret est vmAdminPassword. Il est codé en dur dans le modèle.
  • Pour permettre au modèle de récupérer le secret, vous devez activer une stratégie d’accès appelée Activer l’accès à Azure Resource Manager pour le déploiement de modèles pour le coffre de clés. Cette stratégie est activée dans le modèle. Pour plus d’informations sur la stratégie d’accès, consultez Déployer des coffres de clés et des secrets.

Le modèle contient une seule valeur de sortie appelée keyVaultId. Vous utiliserez cet ID avec le nom du secret pour récupérer la valeur du secret plus loin dans le tutoriel. Le format d’ID de ressource est le suivant :

/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>

Quand vous copiez et collez l’ID, il peut figurer sur plusieurs lignes. Fusionnez les lignes et supprimez les espaces supplémentaires.

Pour valider le déploiement, exécutez la commande PowerShell suivante dans le même volet de l’interpréteur de commandes afin de récupérer le secret en texte clair. La commande fonctionne uniquement dans la même session d’interpréteur de commandes, car elle utilise la variable $keyVaultName définie dans le script PowerShell précédent.

$secret = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name "vmAdminPassword"
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
   $secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
   [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Output $secretValueText

Vous avez préparé un coffre de clés et un secret. Les sections suivantes expliquent comment personnaliser un modèle existant pour récupérer le secret durant le déploiement.

Ouvrir un modèle de démarrage rapide

Le dépôt Modèles de démarrage rapide Azure contient les modèles ARM. Au lieu de créer un modèle à partir de zéro, vous pouvez chercher un exemple de modèle et le personnaliser. Le modèle utilisé dans ce tutoriel se nomme Déployer une machine virtuelle Windows simple.

  1. Dans Visual Studio Code, sélectionnez Fichier>Ouvrir un fichier.

  2. Dans la zone Nom de fichier, collez l’URL suivante :

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
    
  3. Sélectionnez Ouvrir pour ouvrir le fichier. Le scénario est identique à celui utilisé dans Tutoriel : Créer des modèles ARM avec des ressources dépendantes. Le modèle définit six ressources :

    Il est préférable d’avoir des notions de base sur ce modèle avant de le personnaliser.

  4. Sélectionnez Fichier>Enregistrer sous, puis enregistrez une copie du fichier sur votre ordinateur local sous le nom azuredeploy.json.

  5. Répétez les étapes 1 à 3 pour accéder à l’URL ci-après, puis enregistrez le fichier sous le nom azuredeploy.parameters.json.

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.parameters.json
    

Modifier le fichier de paramètres

En utilisant la méthode d’ID statique, aucune modification du fichier de modèle n’est nécessaire. La récupération de la valeur du secret s’effectue en configurant le fichier de paramètres de modèle.

  1. Dans Visual Studio Code, ouvrez azuredeploy.parameters.json, s’il n’est pas déjà ouvert.

  2. Mettez à jour le paramètre adminPassword comme suit :

    "adminPassword": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>"
        },
        "secretName": "vmAdminPassword"
      }
    },
    

    Important

    Remplacez la valeur de id par l’ID de ressource du coffre de clés que vous avez créé au cours de la procédure précédente. Le secretName est codé en dur en tant que vmAdminPassword. Consultez Préparer un coffre de clés.

    Fichier de paramètres de déploiement de machine virtuelle pour l’intégration d’un coffre de clés à un modèle Resource Manager

  3. Utilisez les valeurs suivantes :

    • adminUsername : nom du compte administrateur de la machine virtuelle.
    • dnsLabelPrefix : Nommez la valeur dnsLabelPrefix.

    Pour des exemples de noms, consultez l’image précédente.

  4. Enregistrez les modifications.

Déployer le modèle

  1. Connectez-vous à Cloud Shell.

  2. Choisissez votre environnement préféré en sélectionnant PowerShell ou Bash (pour CLI) en haut à gauche. Il est nécessaire de redémarrer l’interpréteur de commandes lors d’un tel changement.

    Fichier de chargement du Cloud Shell du portail Azure

  3. Sélectionnez Charger/Télécharger des fichiers, puis Charger. Chargez azuredeploy.json et azuredeploy.parameters.json dans Cloud Shell. Après avoir chargé le fichier, vous pouvez utiliser la commande ls et la commande cat pour vérifier que le chargement a été correctement effectué.

  4. Exécutez le script PowerShell suivant pour déployer le modèle.

    $projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
    $location = Read-Host -Prompt "Enter the same location that is used for creating the key vault (i.e. centralus)"
    $resourceGroupName = "${projectName}rg"
    
    New-AzResourceGroupDeployment `
        -ResourceGroupName $resourceGroupName `
        -TemplateFile "$HOME/azuredeploy.json" `
        -TemplateParameterFile "$HOME/azuredeploy.parameters.json"
    
    Write-Host "Press [ENTER] to continue ..."
    

    Quand vous déployez le modèle, utilisez le même groupe de ressources que celui que vous avez utilisé dans le coffre de clés. Cette approche facilite le nettoyage des ressources, car vous devez supprimer uniquement un seul groupe de ressources au lieu de deux.

Valider le déploiement

Une fois que vous avez réussi le déploiement de la machine virtuelle, testez les informations d’identification de connexion à l’aide du mot de passe stocké dans le coffre de clés.

  1. Ouvrez le portail Azure.

  2. Sélectionnez Groupes de ressources><NomDeVotreGroupeDeRessources>>MachineVirtuelleWindowsSimple.

  3. Sélectionnez Se connecter tout en haut.

  4. Sélectionnez Télécharger le fichier RDP, puis suivez les instructions pour vous connecter à la machine virtuelle à l’aide du mot de passe stocké dans le coffre de clés.

Nettoyer les ressources

Une fois que vous n’avez plus besoin de vos ressources Azure, nettoyez les ressources que vous avez déployées en supprimant le groupe de ressources.

$projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
$resourceGroupName = "${projectName}rg"

Remove-AzResourceGroup -Name $resourceGroupName

Write-Host "Press [ENTER] to continue ..."

Étapes suivantes

Dans ce tutoriel, vous avez récupéré un secret dans votre coffre de clés Azure. Vous avez ensuite utilisé le secret dans votre déploiement de modèle. Pour découvrir comment utiliser les extensions de machine virtuelle afin d’exécuter les tâches post-déploiement, consultez :