Leggere in inglese

Condividi tramite


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.

Avviare Azure Cloud Shell

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.

Panoramica

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.

Creare un Azure Key Vault

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

Generare un certificato e archiviarlo in Key Vault

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 

Creare una macchina virtuale

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.

Aggiungere un certificato alla macchina virtuale da Key Vault

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

Configurare IIS per usare il certificato

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

Testare l'applicazione Web protetta

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:

Screenshot del browser che mostra il sito IIS sicuro.

Passaggi successivi

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: