Didacticiel : sécuriser un serveur web sur une machine virtuelle Windows dans Azure avec les certificats TLS stockés dans Key Vault
S’applique à : ✔️ Machines virtuelles Windows ✔️ Groupes identiques flexibles
Notes
Actuellement, cette documentation s’applique uniquement aux images généralisées. Si vous tentez d’effectuer ce tutoriel avec un disque spécialisé, vous recevrez une erreur.
Pour sécuriser les serveurs web, vous pouvez utiliser un certificat TLS (Transport Layer Security) et chiffrer ainsi le trafic web. Ces certificats TLS peuvent être stockés dans Azure Key Vault et autoriser les déploiements sécurisés de certificats sur les machines virtuelles Windows dans Azure. Ce didacticiel vous montre comment effectuer les opérations suivantes :
- Créez un coffre de clés Azure.
- Générez ou téléchargez un certificat dans Key Vault.
- Créez une machine virtuelle et installez le serveur web IIS.
- Injectez le certificat dans la machine virtuelle et configurez IIS à l’aide d’une liaison TLS.
Lancement d’Azure Cloud Shell
Azure Cloud Shell est un interpréteur de commandes interactif et gratuit que vous pouvez utiliser pour exécuter les étapes de cet article. Il contient des outils Azure courants préinstallés et configurés pour être utilisés avec votre compte.
Pour ouvrir Cloud Shell, il vous suffit de sélectionner Ouvrir Cloud Shell en haut à droite d’un bloc de code. Vous pouvez aussi lancer Cloud Shell dans un onglet distinct du navigateur en accédant à https://shell.azure.com/powershell. Sélectionnez Copier pour copier les blocs de code, collez-les dans Cloud Shell, puis appuyez sur « Entrée » pour les exécuter.
Vue d’ensemble
Azure Key Vault protège les clés de chiffrement et les secrets, tels que les certificats ou les mots de passe. Key Vault rationalise le processus de gestion de certificats et vous permet de garder le contrôle sur les clés d’accès à ces certificats. Vous pouvez créer un certificat auto-signé à l’intérieur de Key Vault ou charger un certificat approuvé existant que vous avez déjà.
Au lieu d’utiliser une image de machine virtuelle personnalisée qui inclut des certificats intégrés, vous injectez des certificats dans une machine virtuelle en cours d’exécution. Ce processus garantit que les certificats les plus récents sont installés sur un serveur web pendant le déploiement. Si vous renouvelez ou remplacez un certificat, vous n’êtes pas non plus obligé de créer une image de machine virtuelle personnalisée. Les certificats les plus récents sont automatiquement injectés à la création des machines virtuelles en plus. Pendant tout le processus, les certificats ne quittent jamais la plateforme Azure, ni ne sont exposés dans un script, un historique de ligne de commande ou un modèle.
Créer un Azure Key Vault
Avant de créer un coffre de clés et des certificats, créez un groupe de ressources avec New-AzResourceGroup. L’exemple suivant crée un groupe de ressources nommé myResourceGroupSecureWeb à l’emplacement USA Est :
$resourceGroup = "myResourceGroupSecureWeb"
$location = "East US"
New-AzResourceGroup -ResourceGroupName $resourceGroup -Location $location
Ensuite, créez un coffre de clés avec New-AzKeyVault. Chaque Key Vault requiert un nom unique en minuscules. Remplacez mykeyvault
par le nom unique de votre propre Key Vault dans l’exemple suivant :
$keyvaultName="mykeyvault"
New-AzKeyVault -VaultName $keyvaultName `
-ResourceGroup $resourceGroup `
-Location $location `
-EnabledForDeployment
Générer un certificat et le stocker dans Key Vault
Dans un environnement de production, vous devez importer un certificat valide, signé par un fournisseur approuvé, à l’aide de la commande Import-AzKeyVaultCertificate. Pour ce didacticiel, l’exemple suivant vous montre comment générer un certificat auto-signé avec la commande Add-AzKeyVaultCertificate qui utilise la stratégie de certificat par défaut à partir de New-AzKeyVaultCertificatePolicy.
$policy = New-AzKeyVaultCertificatePolicy `
-SubjectName "CN=www.contoso.com" `
-SecretContentType "application/x-pkcs12" `
-IssuerName Self `
-ValidityInMonths 12
Add-AzKeyVaultCertificate `
-VaultName $keyvaultName `
-Name "mycert" `
-CertificatePolicy $policy
Création d'une machine virtuelle
Définissez un nom d’utilisateur administrateur et un mot de passe pour la machine virtuelle avec Get-Credential :
$cred = Get-Credential
Vous pouvez maintenant créer la machine virtuelle avec New-AzVM. L’exemple suivant permet de créer une machine virtuelle nommée myVM dans l’emplacement EastUS. Si elles n’existent pas déjà, les ressources réseau requises sont créées. Pour autoriser le trafic web sécurisé, le cmdlet ouvre également le port 443.
# Create a VM
New-AzVm `
-ResourceGroupName $resourceGroup `
-Name "myVM" `
-Location $location `
-VirtualNetworkName "myVnet" `
-SubnetName "mySubnet" `
-SecurityGroupName "myNetworkSecurityGroup" `
-PublicIpAddressName "myPublicIpAddress" `
-Credential $cred `
-OpenPorts 443
# Use the Custom Script Extension to install IIS
Set-AzVMExtension -ResourceGroupName $resourceGroup `
-ExtensionName "IIS" `
-VMName "myVM" `
-Location $location `
-Publisher "Microsoft.Compute" `
-ExtensionType "CustomScriptExtension" `
-TypeHandlerVersion 1.8 `
-SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server -IncludeManagementTools"}'
Il faut quelques minutes pour que la machine virtuelle soit créée. La dernière étape utilise l’extension de script personnalisé Azure pour installer le serveur web IIS avec Set-AzVmExtension.
Ajouter un certificat à la machine virtuelle à partir de Key Vault
Pour ajouter le certificat à partir de Key Vault sur une machine virtuelle, obtenez l’ID du certificat avec Get-AzKeyVaultSecret. Ajoutez le certificat à la machine virtuelle avec Add-AzVMSecret :
$certURL=(Get-AzKeyVaultSecret -VaultName $keyvaultName -Name "mycert").id
$vm=Get-AzVM -ResourceGroupName $resourceGroup -Name "myVM"
$vaultId=(Get-AzKeyVault -ResourceGroupName $resourceGroup -VaultName $keyVaultName).ResourceId
$vm = Add-AzVMSecret -VM $vm -SourceVaultId $vaultId -CertificateStore "My" -CertificateUrl $certURL | Update-AzVM
Configurer IIS pour utiliser le certificat
Réutilisez l’extension de script personnalisé avec Set-AzVMExtension pour mettre à jour la configuration d’IIS. Cette mise à jour applique le certificat injecté à partir de Key Vault dans IIS et configure la liaison web :
$publicSettings = '{
"fileUris":["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/secure-iis.ps1"],
"commandToExecute":"powershell -ExecutionPolicy Unrestricted -File secure-iis.ps1"
}'
Set-AzVMExtension -ResourceGroupName $resourceGroup `
-ExtensionName "IIS" `
-VMName "myVM" `
-Location $location `
-Publisher "Microsoft.Compute" `
-ExtensionType "CustomScriptExtension" `
-TypeHandlerVersion 1.8 `
-SettingString $publicSettings
Tester l’application web sécurisée
Obtenez l’adresse IP publique de votre machine virtuelle avec Get-AzPublicIPAddress. L’exemple suivant obtient l’adresse IP de myPublicIP
créée précédemment :
Get-AzPublicIPAddress -ResourceGroupName $resourceGroup -Name "myPublicIPAddress" | select "IpAddress"
Vous pouvez maintenant ouvrir un navigateur web et entrer https://<myPublicIP>
dans la barre d’adresse. Pour accepter l’avertissement de sécurité si vous avez utilisé un certificat auto-signé, sélectionnez Détails, puis Atteindre la page web.
Votre site IIS sécurisé apparaît maintenant comme dans l’exemple suivant :
Étapes suivantes
Dans ce tutoriel, vous avez sécurisé un serveur web IIS à l’aide d’un certificat TLS stocké dans Azure Key Vault. Vous avez appris à :
- Créez un coffre de clés Azure.
- Générez ou téléchargez un certificat dans Key Vault.
- Créez une machine virtuelle et installez le serveur web IIS.
- Injectez le certificat dans la machine virtuelle et configurez IIS à l’aide d’une liaison TLS.
Pour obtenir des exemples de script de machine virtuelle prédéfinis, consultez :