Come crittografare i dischi virtuali in una VM di WindowsHow to encrypt virtual disks on a Windows VM

Per migliorare gli aspetti di sicurezza e conformità delle macchine virtuali (VM), i dischi virtuali in Azure possono essere crittografati.For enhanced virtual machine (VM) security and compliance, virtual disks in Azure can be encrypted. I dischi vengono crittografati usando chiavi di crittografia protette in un insieme di credenziali delle chiavi di Azure.Disks are encrypted using cryptographic keys that are secured in an Azure Key Vault. È possibile controllare queste chiavi di crittografia e il loro uso.You control these cryptographic keys and can audit their use. Questo articolo descrive come crittografare i dischi virtuali in una VM di Windows tramite Azure PowerShell.This article details how to encrypt virtual disks on a Windows VM using Azure PowerShell. È inoltre possibile crittografare una VM di Linux usando l'interfaccia della riga di comando di Azure 2.0.You can also encrypt a Linux VM using the Azure CLI 2.0.

Panoramica della crittografia dei dischiOverview of disk encryption

I dischi virtuali delle VM di Windows vengono crittografati a riposo mediante Bitlocker.Virtual disks on Windows VMs are encrypted at rest using Bitlocker. Non è previsto alcun addebito per la crittografia dei dischi virtuali in Azure.There is no charge for encrypting virtual disks in Azure. Le chiavi di crittografia vengono archiviate nell'insieme di credenziali delle chiavi di Azure che usano la protezione del software oppure è possibile importare o generare le chiavi in moduli di protezione hardware certificati per gli standard FIPS 140-2 di livello 2.Cryptographic keys are stored in Azure Key Vault using software-protection, or you can import or generate your keys in Hardware Security Modules (HSMs) certified to FIPS 140-2 level 2 standards. Queste chiavi di crittografia vengono usate per crittografare e decrittografare i dischi virtuali collegati alla VM.These cryptographic keys are used to encrypt and decrypt virtual disks attached to your VM. È possibile esercitare il controllo su queste chiavi di crittografia e sul loro uso.You retain control of these cryptographic keys and can audit their use. Un'entità servizio di Azure Active Directory offre un meccanismo protetto per il rilascio delle chiavi di crittografia all'accensione e allo spegnimento delle VM.An Azure Active Directory service principal provides a secure mechanism for issuing these cryptographic keys as VMs are powered on and off.

Il processo per la crittografia di una VM si articola nel modo seguente:The process for encrypting a VM is as follows:

  1. Creare una chiave di crittografia in un insieme di credenziali delle chiavi di Azure.Create a cryptographic key in an Azure Key Vault.
  2. Configurare la chiave di crittografia in modo da renderla utilizzabile per la crittografia dei dischi.Configure the cryptographic key to be usable for encrypting disks.
  3. Per leggere la chiave di crittografia dall'insieme di credenziali delle chiavi di Azure, creare un'entità servizio di Azure Active Directory con le autorizzazioni appropriate.To read the cryptographic key from the Azure Key Vault, create an Azure Active Directory service principal with the appropriate permissions.
  4. Eseguire il comando per crittografare i dischi virtuali, specificando l'entità servizio di Azure Active Directory e la chiave di crittografia appropriata da usare.Issue the command to encrypt your virtual disks, specifying the Azure Active Directory service principal and appropriate cryptographic key to be used.
  5. L'entità servizio di Azure Active Directory richiede la chiave di crittografia necessaria dall'insieme di credenziali delle chiavi di Azure.The Azure Active Directory service principal requests the required cryptographic key from Azure Key Vault.
  6. I dischi virtuali vengono crittografati tramite la chiave di crittografia fornita.The virtual disks are encrypted using the provided cryptographic key.

Processo di crittografiaEncryption process

La crittografia del disco si basa sui componenti aggiuntivi seguenti:Disk encryption relies on the following additional components:

  • Insieme di credenziali delle chiavi di Azure, che consente di proteggere le chiavi crittografiche e private usate per il processo di crittografia/decrittografia dei dischi.Azure Key Vault - used to safeguard cryptographic keys and secrets used for the disk encryption/decryption process.
    • Se disponibile, è possibile usare un insieme di credenziali delle chiavi di Azure esistente.If one exists, you can use an existing Azure Key Vault. Non è necessario dedicare un insieme di credenziali delle chiavi alla crittografia dei dischi.You do not have to dedicate a Key Vault to encrypting disks.
    • Per separare i limiti amministrativi e la visibilità delle chiavi, è possibile creare un insieme di credenziali delle chiavi dedicato.To separate administrative boundaries and key visibility, you can create a dedicated Key Vault.
  • Azure Active Directory gestisce lo scambio protetto delle chiavi di crittografia necessarie e dell'autenticazione per le azioni richieste.Azure Active Directory - handles the secure exchanging of required cryptographic keys and authentication for requested actions.
    • In genere, è possibile inserire l'applicazione in un'istanza esistente di Azure Active Directory.You can typically use an existing Azure Active Directory instance for housing your application.
    • L'entità servizio offre un meccanismo protetto per richiedere e consentire il rilascio delle chiavi di crittografia appropriate.The service principal provides a secure mechanism to request and be issued the appropriate cryptographic keys. Non si sta procedendo a sviluppare un'applicazione reale integrata con Azure Active Directory.You are not developing an actual application that integrates with Azure Active Directory.

Requisiti e limitazioniRequirements and limitations

Requisiti relativi alla crittografia dei dischi e scenari supportati:Supported scenarios and requirements for disk encryption:

  • Abilitazione della crittografia in nuove macchine virtuali di Windows da immagini di Azure Marketplace o da un'immagine del disco rigido virtuale personalizzata.Enabling encryption on new Windows VMs from Azure Marketplace images or custom VHD image.
  • Abilitazione della crittografia nelle macchine virtuali esistenti di Windows in Azure.Enabling encryption on existing Windows VMs in Azure.
  • Abilitazione della crittografia nelle macchine virtuali di Windows configurate usando spazi di archiviazione.Enabling encryption on Windows VMs that are configured using Storage Spaces.
  • Disabilitazione della crittografia nel sistema operativo e nelle unità dati per le VM di Windows.Disabling encryption on OS and data drives for Windows VMs.
  • Tutte le risorse, come l'insieme di credenziali delle chiavi, l'account di archiviazione e la VM, devono risiedere nella stessa area e nella stessa sottoscrizione di Azure.All resources (such as Key Vault, Storage account, and VM) must be in the same Azure region and subscription.
  • Macchine virtuali di livello standard, ad esempio macchine virtuali di serie A, D, DS, G e GS.Standard tier VMs, such as A, D, DS, G, and GS series VMs.

La crittografia del disco non è attualmente supportata negli scenari seguenti:Disk encryption is not currently supported in the following scenarios:

  • VM di base.Basic tier VMs.
  • VM create con il modello di distribuzione classica.VMs created using the Classic deployment model.
  • Aggiornare le chiavi di crittografia in una VM già crittografata.Updating the cryptographic keys on an already encrypted VM.
  • Integrazione con il Servizio di gestione delle chiavi locale.Integration with on-prem Key Management Service.

Creare le chiavi e l'insieme di credenziali delle chiavi di AzureCreate Azure Key Vault and keys

Prima di iniziare verificare che sia installata la versione più recente del modulo Azure PowerShell.Before you start, make sure that the latest version of the Azure PowerShell module has been installed. Per altre informazioni, vedere Come installare e configurare Azure PowerShell.For more information, see How to install and configure Azure PowerShell. Negli esempi di comandi sostituire tutti i parametri di esempio con i propri valori di nome, percorso e chiave.Throughout the command examples, replace all example parameters with your own names, location, and key values. Negli esempi seguenti viene usata una convenzione di myResourceGroup, myKeyVault, myVM e così via.The following examples use a convention of myResourceGroup, myKeyVault, myVM, etc.

Il primo passaggio consiste nel creare un insieme di credenziali delle chiavi di Azure in cui archiviare le chiavi di crittografia.The first step is to create an Azure Key Vault to store your cryptographic keys. L'insieme di credenziali delle chiavi di Azure consente di archiviare chiavi, chiavi private o password da implementare in tutta sicurezza in applicazioni e servizi.Azure Key Vault can store keys, secrets, or passwords that allow you to securely implement them in your applications and services. Per la crittografia del disco virtuale, creare il Key Vault per archiviare una chiave di crittografia usata per crittografare o decrittografare i dischi virtuali.For virtual disk encryption, you create a Key Vault to store a cryptographic key that is used to encrypt or decrypt your virtual disks.

Abilitare il provider di Azure Key Vault nella sottoscrizione di Azure con Register-AzureRmResourceProvider e creare un gruppo di risorse con New-AzureRmResourceGroup.Enable the Azure Key Vault provider within your Azure subscription with Register-AzureRmResourceProvider, then create a resource group with New-AzureRmResourceGroup. L'esempio seguente crea un nome del gruppo di risorse myResourceGroup nella posizione Stati Uniti Orientali:The following example creates a resource group name myResourceGroup in the East US location:

$rgName = "myResourceGroup"
$location = "East US"

Register-AzureRmResourceProvider -ProviderNamespace "Microsoft.KeyVault"
New-AzureRmResourceGroup -Location $location -Name $rgName

L'insieme di credenziali delle chiavi di Azure contenente le chiavi di crittografia e le risorse di calcolo associate, come l'archiviazione e la VM stessa, devono risiedere nella stessa area.The Azure Key Vault containing the cryptographic keys and associated compute resources such as storage and the VM itself must reside in the same region. Creare un Azure Key Vault con New-AzureRmKeyVault e abilitare il Key Vault per l'uso con la crittografia del disco.Create an Azure Key Vault with New-AzureRmKeyVault and enable the Key Vault for use with disk encryption. Specificare un nome univoco di Key Vault per keyVaultName come indicato di seguito:Specify a unique Key Vault name for keyVaultName as follows:

$keyVaultName = "myUniqueKeyVaultName"
New-AzureRmKeyVault -Location $location `
    -ResourceGroupName $rgName `
    -VaultName $keyVaultName `
    -EnabledForDiskEncryption

È possibile archiviare le chiavi di crittografia usando il software o il modulo di protezione hardware.You can store cryptographic keys using software or Hardware Security Model (HSM) protection. L'uso di un modulo di protezione hardware richiede un insieme di credenziali delle chiavi premium.Using an HSM requires a premium Key Vault. Esiste un costo aggiuntivo per creare un insieme di credenziali delle chiavi premium, anziché standard, in cui archiviare le chiavi protette tramite software.There is an additional cost to creating a premium Key Vault rather than standard Key Vault that stores software-protected keys. Per creare un Key Vault premium, aggiungere i parametri -Sku "Premium" nel passaggio precedente.To create a premium Key Vault, in the preceding step add the -Sku "Premium" parameters. L'esempio seguente usa chiavi protette tramite software, poiché viene creato un insieme di credenziali delle chiavi standard.The following example uses software-protected keys since we created a standard Key Vault.

Per entrambi i modelli di protezione, è necessario consentire alla piattaforma Azure di accedere all'avvio della VM per richiedere le chiavi di crittografia con cui decrittografare i dischi virtuali.For both protection models, the Azure platform needs to be granted access to request the cryptographic keys when the VM boots to decrypt the virtual disks. Creare una chiave crittografica in Key Vault con Add-AzureKeyVaultKey.Create a cryptographic key in your Key Vault with Add-AzureKeyVaultKey. Nell'esempio seguente viene creata una chiave denominata myKey:The following example creates a key named myKey:

Add-AzureKeyVaultKey -VaultName $keyVaultName `
    -Name "myKey" `
    -Destination "Software"

Creare un'entità servizio di Azure Active DirectoryCreate the Azure Active Directory service principal

Al momento di crittografare o decrittografare i dischi virtuali, specificare un account per gestisce l'autenticazione e lo scambio delle chiavi di crittografia dall'insieme di credenziali delle chiavi.When virtual disks are encrypted or decrypted, you specify an account to handle the authentication and exchanging of cryptographic keys from Key Vault. Tale account, un'entità servizio di Azure Active Directory, consente alla piattaforma Azure di richiedere le chiavi di crittografia appropriate per conto della VM.This account, an Azure Active Directory service principal, allows the Azure platform to request the appropriate cryptographic keys on behalf of the VM. Un'istanza di Azure Active Directory predefinita è già disponibile nella sottoscrizione, anche se molte organizzazioni hanno directory di Azure Active Directory dedicate.A default Azure Active Directory instance is available in your subscription, though many organizations have dedicated Azure Active Directory directories.

Creare un'entità servizio in Azure Active Directory con New AzureRmADServicePrincipal.Create a service principal in Azure Active Directory with New-AzureRmADServicePrincipal. Per specificare una password sicura seguire Restrizioni e criteri password in Azure Active Directory:To specify a secure password, follow the Password policies and restrictions in Azure Active Directory:

$appName = "My App"
$securePassword = "P@ssword!"
$app = New-AzureRmADApplication -DisplayName $appName `
    -HomePage "https://myapp.contoso.com" `
    -IdentifierUris "https://contoso.com/myapp" `
    -Password $securePassword
New-AzureRmADServicePrincipal -ApplicationId $app.ApplicationId

Per crittografare o decrittografare correttamente i dischi virtuali, le autorizzazioni per la chiave di crittografia archiviata nell'insieme di credenziali delle chiavi devono essere impostate in modo tale da consentire all'entità servizio di Azure Active Directory di leggere le chiavi.To successfully encrypt or decrypt virtual disks, permissions on the cryptographic key stored in Key Vault must be set to permit the Azure Active Directory service principal to read the keys. Impostare le autorizzazioni per Key Vault con Set-AzureRmKeyVaultAccessPolicy:Set permissions on your Key Vault with Set-AzureRmKeyVaultAccessPolicy:

Set-AzureRmKeyVaultAccessPolicy -VaultName $keyvaultName `
    -ServicePrincipalName $app.ApplicationId `
    -PermissionsToKeys "WrapKey" `
    -PermissionsToSecrets "Set"

Crea macchina virtualeCreate virtual machine

Per testare il processo di crittografia è necessario creare una macchina virtuale.To test the encryption process, let's create a VM. Nell'esempio seguente viene creata una VM denominata myVM usando un'immagine di Windows Server 2016 Datacenter:The following example creates a VM named myVM using a Windows Server 2016 Datacenter image:

$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name mySubnet -AddressPrefix 192.168.1.0/24

$vnet = New-AzureRmVirtualNetwork -ResourceGroupName $rgName `
    -Location $location `
    -Name myVnet `
    -AddressPrefix 192.168.0.0/16 `
    -Subnet $subnetConfig

$pip = New-AzureRmPublicIpAddress -ResourceGroupName $rgName `
    -Location $location `
    -AllocationMethod Static `
    -IdleTimeoutInMinutes 4 `
    -Name "mypublicdns$(Get-Random)"

$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig -Name myNetworkSecurityGroupRuleRDP `
    -Protocol Tcp `
    -Direction Inbound `
    -Priority 1000 `
    -SourceAddressPrefix * `
    -SourcePortRange * `
    -DestinationAddressPrefix * `
    -DestinationPortRange 3389 `
    -Access Allow

$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $rgName `
    -Location $location `
    -Name myNetworkSecurityGroup `
    -SecurityRules $nsgRuleRDP

$nic = New-AzureRmNetworkInterface -Name myNic `
    -ResourceGroupName $rgName `
    -Location $location `
    -SubnetId $vnet.Subnets[0].Id `
    -PublicIpAddressId $pip.Id `
    -NetworkSecurityGroupId $nsg.Id

$cred = Get-Credential

$vmName = "myVM"
$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize Standard_D1 | `
Set-AzureRmVMOperatingSystem -Windows -ComputerName myVM -Credential $cred | `
Set-AzureRmVMSourceImage -PublisherName MicrosoftWindowsServer `
    -Offer WindowsServer -Skus 2016-Datacenter -Version latest | `
Add-AzureRmVMNetworkInterface -Id $nic.Id

New-AzureRmVM -ResourceGroupName $rgName -Location $location -VM $vmConfig

Crittografare una macchina virtualeEncrypt virtual machine

Per crittografare i dischi virtuali, è necessario riunire tutti i componenti precedenti:To encrypt the virtual disks, you bring together all the previous components:

  1. Specificare un'entità servizio e la password di Azure Active Directory.Specify the Azure Active Directory service principal and password.
  2. Specificare l'insieme di credenziali delle chiavi in cui memorizzare i metadati dei dischi crittografati.Specify the Key Vault to store the metadata for your encrypted disks.
  3. Specificare le chiavi di crittografia da usare per la crittografia e la decrittografia effettive.Specify the cryptographic keys to use for the actual encryption and decryption.
  4. Specificare se si desidera crittografare il disco del sistema operativo, i dischi dati o tutti i dischi.Specify whether you want to encrypt the OS disk, the data disks, or all.

Crittografare la macchina virtuale con Set-AzureRmVMDiskEncryptionExtension tramite la chiave di Azure Key Vault e le credenziali dell'entità servizio di Azure Active Directory.Encrypt your VM with Set-AzureRmVMDiskEncryptionExtension using the Azure Key Vault key and Azure Active Directory service principal credentials. Nell'esempio seguente vengono recuperate tutte le principali informazioni e quindi viene crittografata la macchina virtuale denominata myVM:The following example retrieves all the key information then encrypts the VM named myVM:

$keyVault = Get-AzureRmKeyVault -VaultName $keyVaultName -ResourceGroupName $rgName;
$diskEncryptionKeyVaultUrl = $keyVault.VaultUri;
$keyVaultResourceId = $keyVault.ResourceId;
$keyEncryptionKeyUrl = (Get-AzureKeyVaultKey -VaultName $keyVaultName -Name myKey).Key.kid;

Set-AzureRmVMDiskEncryptionExtension -ResourceGroupName $rgName `
    -VMName $vmName `
    -AadClientID $app.ApplicationId `
    -AadClientSecret $securePassword `
    -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl `
    -DiskEncryptionKeyVaultId $keyVaultResourceId `
    -KeyEncryptionKeyUrl $keyEncryptionKeyUrl `
    -KeyEncryptionKeyVaultId $keyVaultResourceId

Accettare la richiesta di continuare la crittografia della macchina virtuale.Accept the prompt to continue with the VM encryption. Durante questo processo, la VM viene riavviata.The VM restarts during the process. Dopo aver completato il processo di crittografia e aver riavviato la macchina virtuale, controllare lo stato di crittografia con Get-AzureRmVmDiskEncryptionStatus:Once the encryption process completes and the VM has rebooted, review the encryption status with Get-AzureRmVmDiskEncryptionStatus:

Get-AzureRmVmDiskEncryptionStatus  -ResourceGroupName $rgName -VMName $vmName

L'output è simile all'esempio seguente:The output is similar to the following example:

OsVolumeEncrypted          : Encrypted
DataVolumesEncrypted       : Encrypted
OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings
ProgressMessage            : OsVolume: Encrypted, DataVolumes: Encrypted

Passaggi successiviNext steps