Esercitazione: Proteggere un server Web in una macchina virtuale Windows in Azure con certificati TLS archiviati in Key Vault
Si applica a: ✔️ macchine virtuali di Windows ✔️ set di scalabilità flessibili
Nota
Attualmente, questo documento funziona solo per le immagini generalizzate. Se si tenta di eseguire questa esercitazione usando un disco specializzato, verrà visualizzato un errore.
Per proteggere i server Web, è possibile usare un certificato TLS (Transport Layer Security) per crittografare il traffico Web. I certificati TLS possono essere archiviati in Azure Key Vault e consentono distribuzioni sicure di certificati in macchine virtuali Windows in Azure. In questa esercitazione si apprenderà come:
- Creare un insieme di credenziali delle chiavi di Azure.
- Generare o caricare un certificato nell'insieme di credenziali delle chiavi.
- Creare una macchina virtuale e installare il server Web IIS.
- Inserire il certificato nella macchina virtuale e configurare IIS con un'associazione TLS.
Azure Cloud Shell è una shell interattiva gratuita che può essere usata per eseguire la procedura di questo articolo. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account.
Per aprire Cloud Shell, selezionare Apri CloudShell nell'angolo in alto a destra di un blocco di codice. È anche possibile avviare Cloud Shell in una scheda separata del browser visitando https://shell.azure.com/powershell. Selezionare Copia per copiare i blocchi di codice, incollarli in Cloud Shell e premere INVIO per eseguirli.
Azure Key Vault consente di proteggere chiavi crittografiche e segreti, come certificati e password. Key Vault semplifica il processo di gestione dei certificati e consente di mantenere il controllo delle chiavi che accedono a tali certificati. È possibile creare un certificato autofirmato all'interno di Key Vault oppure caricare un certificato attendibile esistente già proprietario.
Invece di usare un'immagine di macchina virtuale personalizzata che include certificati inseriti nel baking, inserire i certificati in una macchina virtuale in esecuzione. Questo processo assicura che, durante la distribuzione, in un server Web vengano installati i certificati più aggiornati. Se si rinnova o sostituisce un certificato, non è necessario creare anche una nuova immagine di macchina virtuale personalizzata. I certificati più recenti vengono automaticamente inseriti quando si creano macchine virtuali aggiuntive. Durante l'intero processo, i certificati non lasciano mai la piattaforma Azure e non vengono mai esposti in uno script, in una cronologia della riga di comando o in un modello.
Per poter creare un'istanza di Key Vault e i certificati, creare prima di tutto un gruppo di risorse con New-AzResourceGroup. L'esempio seguente crea un gruppo di risorse denominato myResourceGroupSecureWeb nella località Stati Uniti orientali:
$resourceGroup = "myResourceGroupSecureWeb"
$location = "East US"
New-AzResourceGroup -ResourceGroupName $resourceGroup -Location $location
Creare quindi un insieme di credenziali delle chiavi con New-AzKeyVault. Ogni insieme di credenziali delle chiavi richiede un nome univoco e deve essere tutto minuscolo. Sostituire mykeyvault
con il proprio nome univoco di Key Vault nell'esempio seguente:
$keyvaultName="mykeyvault"
New-AzKeyVault -VaultName $keyvaultName `
-ResourceGroup $resourceGroup `
-Location $location `
-EnabledForDeployment
Per l'uso in produzione, è necessario importare un certificato valido firmato da un provider attendibile con Import-AzKeyVaultCertificate. Per questa esercitazione, l'esempio seguente illustra come generare un certificato autofirmato con il comando Add-AzKeyVaultCertificate che usi i criteri dei certificati predefiniti da 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
Impostare nome utente e password dell'amministratore della macchina virtuale con il comando Get-Credential:
$cred = Get-Credential
A questo punto è possibile creare la VM con New-AzVM. L'esempio seguente crea una macchina virtuale denominata myVM nell'area EastUS. Se non esistono già, vengono create le risorse di rete di supporto. Per consentire il traffico Web sicuro, il cmdlet apre anche la porta 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"}'
Per creare la macchina virtuale sono necessari alcuni minuti. L'ultimo passaggio usa l'estensione per script personalizzati di Azure per installare il server Web IIS con Set-AzVmExtension.
Per aggiungere un certificato da Key Vault a una macchina virtuale, ottenere l'ID del certificato con Get-AzKeyVaultSecret. Aggiungere il certificato alla VM con 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
Usare di nuovo l'estensione per script personalizzati con Set-AzVMExtension per aggiornare la configurazione di IIS. Questo aggiornamento applica il certificato inserito da Key Vault a IIS e configura l'associazione 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
Ottenere l'indirizzo IP pubblico della macchina virtuale con Get-AzPublicIPAddress. L'esempio seguente ottiene l'indirizzo IP myPublicIP
creato in precedenza:
Get-AzPublicIPAddress -ResourceGroupName $resourceGroup -Name "myPublicIPAddress" | select "IpAddress"
È ora possibile aprire un Web browser e immettere https://<myPublicIP>
bella barra degli indirizzi. Per accettare l'avviso di sicurezza se si è usato un certificato autofirmato, selezionare Dettagli e quindi Continua per la pagina Web.
Il sito Web IIS protetto viene quindi visualizzato come illustrato nell'esempio seguente:
In questa esercitazione è stato protetto un server Web IIS con un certificato TLS archiviato in Azure Key Vault. Contenuto del modulo:
- Creare un insieme di credenziali delle chiavi di Azure.
- Generare o caricare un certificato nell'insieme di credenziali delle chiavi.
- Creare una macchina virtuale e installare il server Web IIS.
- Inserire il certificato nella macchina virtuale e configurare IIS con un'associazione TLS.
Per esempi di script di macchina virtuale predefiniti, vedere: