Partager via


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 :

Capture d’écran du navigateur, montrant un site IIS sécurisé.

É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 :