Exercice - Gérer les secrets dans votre modèle ARM
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 :
Créez une variable PowerShell qui contient le nom du coffre de clés :
$KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
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.
Connectez-vous au portail Azure à l’aide du compte utilisé pour activer le bac à sable.
Dans le menu du portail Azure ou dans la page Accueil, sélectionnez Créer une ressource.
Dans la zone de recherche, entrez Key Vault.
Sélectionnez Key Vault dans la liste, puis sélectionnez Créer pour démarrer la configuration du coffre de clés.
Dans le volet de création, spécifiez les valeurs suivantes :
- Groupe de ressources :
nom du groupe de ressources . - Nom du coffre de clés : La valeur de
$KVNAME
, par exemple, tailwind-secrets5978564.
- Groupe de ressources :
Sélectionnez Revoir + créer.
Sélectionnez Create (Créer). Cela devrait prendre environ une minute. Une fois la ressource créée, sélectionnez Accéder à la ressource.
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.
À partir de votre session PowerShell, exécutez l’applet de commande
ConvertTo-SecureString
et affectez le résultat à la variablesecretSecureString
:$secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
Exécutez la commande
Set-AzKeyVaultSecret
suivante pour créer un secret dans le coffre de clés. Le secret se nommevmPassword
et a la valeurinsecurepassword123!
:$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.
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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Notez la sortie pour l’étape suivante.
Dans Visual Studio Code, créez un fichier nommé azuredeploy.parameters.json dans le même répertoire que celui qui contient azuredeploy.json.
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" } } } }
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.
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 valeurvm2-
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 :
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.
À 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
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 :
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.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.Exécutez la commande
az keyvault secret set
suivante pour créer un secret dans le coffre de clés. Le secret se nommevmPassword
et a la valeurinsecurepassword123!
: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.
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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Notez la sortie pour l’étape suivante.
Dans Visual Studio Code, créez un fichier nommé azuredeploy.parameters.json dans le même répertoire que celui qui contient azuredeploy.json.
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" } } } }
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.
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!
.À 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
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.