Abilitare le chiavi gestite dal cliente per Azure dischi gestiti con PowerShell

Applica a: ✔️ macchine virtuali Windows ✔️ set di scalabilità flessibili ✔️ set di scalabilità uniformi

archiviazione su disco di Azure supporta la crittografia lato server con chiavi gestite dal cliente per i dischi gestiti dal cliente. Per informazioni concettuali sulle chiavi gestite dal cliente e altri tipi di crittografia del disco gestito, vedere Chiavi gestite dal cliente.

Restrizioni

Per il momento, le chiavi gestite dal cliente presentano le restrizioni seguenti:

  • Se questa funzionalità è abilitata per un disco con snapshot incrementali, non può essere disabilitata su tale disco o sui relativi snapshot. Per risolvere questo problema, copiare tutti i dati in un disco gestito completamente diverso che non usa chiavi gestite dal cliente. A tale scopo, è possibile usare il modulo interfaccia della riga di comando di Azure o il modulo Azure PowerShell.
  • Un disco e tutti gli snapshot incrementali associati devono avere lo stesso set di crittografia del disco.
  • Sono supportate solo chiavi RSA software e HSM di dimensioni a 2.048 bit, a 3.072 bit e a 4.096 bit, senza altre chiavi o dimensioni.
    • Le chiavi HSM richiedono il livello Premium degli Azure Key Vault.
  • Solo per Dischi Ultra e dischi SSD Premium v2:
    • (Anteprima) Le identità gestite assegnate dall'utente sono disponibili per dischi Ultra e dischi SSD Premium v2 crittografati con chiavi gestite dal cliente.
  • La maggior parte delle risorse correlate alle chiavi gestite dal cliente (set di crittografia dischi, macchine virtuali, dischi e snapshot) deve trovarsi nella stessa sottoscrizione e nella stessa area.
  • I dischi crittografati con chiavi gestite dal cliente possono passare a un altro gruppo di risorse solo se la macchina virtuale a cui sono collegati è deallocata.
  • Non è possibile spostare dischi, snapshot e immagini crittografati con chiavi gestite dal cliente tra sottoscrizioni.
  • I dischi gestiti attualmente o precedentemente crittografati con Crittografia dischi di Azure non possono essere crittografati usando chiavi gestite dal cliente.
  • È possibile creare fino a 5000 set di crittografia dei dischi per area per sottoscrizione.
  • Per informazioni sull'uso di chiavi gestite dal cliente con raccolte di immagini condivise, vedere Anteprima: Usare chiavi gestite dal cliente per crittografare le immagini.

Configurare Azure Key Vault e un set di crittografia del disco con rotazione automatica delle chiavi

Per usare le chiavi gestite dal cliente con la crittografia lato server, configurare un Azure Key Vault e un set di crittografia del disco.

  1. Installare la versione Azure PowerShell più recente e accedere all'account Azure con Connect-AzAccount.

  2. Creare un'istanza di Azure Key Vault e chiave di crittografia.

    Quando si crea l'istanza di Key Vault, è necessario abilitare la protezione dall'eliminazione. La protezione dall'eliminazione garantisce che una chiave eliminata non possa essere eliminata definitivamente fino a quando non scade il periodo di conservazione. Queste impostazioni consentono di evitare la perdita di dati a causa dell'eliminazione accidentale. Queste impostazioni sono obbligatorie quando si usa un Key Vault per crittografare i dischi gestiti.

    $ResourceGroupName="yourResourceGroupName"
    $LocationName="westcentralus"
    $keyVaultName="yourKeyVaultName"
    $keyName="yourKeyName"
    $keyDestination="Software"
    $diskEncryptionSetName="yourDiskEncryptionSetName"
    
    $keyVault = New-AzKeyVault -Name $keyVaultName `
    -ResourceGroupName $ResourceGroupName `
    -Location $LocationName `
    -EnablePurgeProtection
    
    $key = Add-AzKeyVaultKey -VaultName $keyVaultName `
          -Name $keyName `
          -Destination $keyDestination
    
    Set-AzKeyVaultKeyRotationPolicy -VaultName $keyVaultName -KeyName $keyName -ExpiresIn P2Y -KeyRotationLifetimeAction @{Action="Rotate";TimeBeforeExpiry = "P18M"}
    
  3. Creare un set di crittografia del disco. Questo script imposta RotationToLatestKeyVersionEnabled uguale a $true per abilitare la rotazione automatica della chiave. Quando si abilita la rotazione automatica, il sistema aggiorna automaticamente tutti i dischi gestiti, gli snapshot e le immagini che fanno riferimento al set di crittografia del disco per usare la nuova versione della chiave entro un'ora.

    $desConfig=New-AzDiskEncryptionSetConfig -Location $LocationName `
        -SourceVaultId $keyVault.ResourceId `
        -KeyUrl $key.Key.Kid `
        -IdentityType SystemAssigned `
        -RotationToLatestKeyVersionEnabled $true
    
    $des=New-AzDiskEncryptionSet -Name $diskEncryptionSetName `
           -ResourceGroupName $ResourceGroupName `
           -InputObject $desConfig
    
  4. Concedere l'accesso all'insieme di credenziali delle chiavi al set di crittografia dei dischi.

    Nota

    La creazione dell'identità del set di crittografia del disco in Azure Microsoft Entra ID potrebbe richiedere alcuni minuti. Se viene visualizzato un errore simile a "Impossibile trovare l'oggetto Active Directory" quando si esegue il comando seguente, attendere alcuni minuti e riprovare.

    Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -ObjectId $des.Identity.PrincipalId -PermissionsToKeys wrapkey,unwrapkey,get
    

Usare un Key Vault in una sottoscrizione diversa

In alternativa, è possibile gestire centralmente gli insiemi di credenziali delle chiavi Azure da una singola sottoscrizione e usare le chiavi archiviate nel Key Vault per crittografare dischi gestiti e snapshot in altre sottoscrizioni dell'organizzazione. Ciò consente al team di sicurezza di gestire e applicare facilmente criteri di sicurezza affidabili a una singola sottoscrizione.

Importante

Per questa configurazione, sia il Key Vault che il set di crittografia del disco devono trovarsi nella stessa area e usare lo stesso tenant.

Lo script seguente è un esempio di come configurare un set di crittografia del disco per l'uso di una chiave da un Key Vault in una sottoscrizione diversa, ma nella stessa area:

$sourceSubscriptionId="<sourceSubID>"
$sourceKeyVaultName="<sourceKVName>"
$sourceKeyName="<sourceKeyName>"

$targetSubscriptionId="<targetSubID>"
$targetResourceGroupName="<targetRGName>"
$targetDiskEncryptionSetName="<targetDiskEncSetName>"
$location="<targetRegion>"

Set-AzContext -Subscription $sourceSubscriptionId

$key = Get-AzKeyVaultKey -VaultName $sourceKeyVaultName -Name $sourceKeyName

Set-AzContext -Subscription $targetSubscriptionId

$desConfig=New-AzDiskEncryptionSetConfig -Location $location `
-KeyUrl $key.Key.Kid `
-IdentityType SystemAssigned `
-RotationToLatestKeyVersionEnabled $true

$des=New-AzDiskEncryptionSet -Name $targetDiskEncryptionSetName `
-ResourceGroupName $targetResourceGroupName `
-InputObject $desConfig

Gestire le chiavi gestite dal cliente per Azure dischi gestiti con PowerShell

Dopo aver creato e configurato le risorse necessarie, usare l'esempio seguente Azure PowerShell script per creare macchine virtuali e dischi crittografati, crittografare dischi gestiti e set di scalabilità esistenti, ruotare una chiave del set di crittografia del disco e controllare lo stato della crittografia lato server di un disco.

Creare una macchina virtuale con un'immagine del Marketplace, crittografando il disco del sistema operativo e i dischi dati con chiavi gestite dal cliente

Prima di eseguire lo script, specificare un gruppo di risorse e un set di crittografia dischi esistenti, insieme ai valori per le credenziali di amministratore della macchina virtuale, l'area, le dimensioni della macchina virtuale e la rete virtuale. Lo script crea la rete virtuale, l'interfaccia di rete e la macchina virtuale da un'immagine Windows Server Marketplace. Get-AzDiskEncryptionSet Usa per recuperare il set di crittografia del disco e New-AzVM per creare la macchina virtuale con un disco del sistema operativo crittografato e un disco dati crittografato da 128 GiB. Sostituire i valori di esempio con i propri parametri e quindi eseguire lo script.

$VMLocalAdminUser = "yourVMLocalAdminUserName"
$VMLocalAdminSecurePassword = ConvertTo-SecureString <password> -AsPlainText -Force
$LocationName = "yourRegion"
$ResourceGroupName = "yourResourceGroupName"
$ComputerName = "yourComputerName"
$VMName = "yourVMName"
$VMSize = "yourVMSize"
$diskEncryptionSetName="yourdiskEncryptionSetName"
    
$NetworkName = "yourNetworkName"
$NICName = "yourNICName"
$SubnetName = "yourSubnetName"
$SubnetAddressPrefix = "10.0.0.0/24"
$VnetAddressPrefix = "10.0.0.0/16"
    
$SingleSubnet = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $SubnetAddressPrefix
$Vnet = New-AzVirtualNetwork -Name $NetworkName -ResourceGroupName $ResourceGroupName -Location $LocationName -AddressPrefix $VnetAddressPrefix -Subnet $SingleSubnet
$NIC = New-AzNetworkInterface -Name $NICName -ResourceGroupName $ResourceGroupName -Location $LocationName -SubnetId $Vnet.Subnets[0].Id
    
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword);
    
$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $ComputerName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2012-R2-Datacenter' -Version latest

$diskEncryptionSet=Get-AzDiskEncryptionSet -ResourceGroupName $ResourceGroupName -Name $diskEncryptionSetName

$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name $($VMName +"_OSDisk") -DiskEncryptionSetId $diskEncryptionSet.Id -CreateOption FromImage

$VirtualMachine = Add-AzVMDataDisk -VM $VirtualMachine -Name $($VMName +"DataDisk1") -DiskSizeInGB 128 -StorageAccountType Premium_LRS -CreateOption Empty -Lun 0 -DiskEncryptionSetId $diskEncryptionSet.Id 
    
New-AzVM -ResourceGroupName $ResourceGroupName -Location $LocationName -VM $VirtualMachine -Verbose

Creare un disco vuoto crittografato usando la crittografia lato server con chiavi gestite dal cliente e associarlo a una macchina virtuale

Lo script usa Add-AzVMDataDisk per aggiungere il disco dati crittografato alla configurazione della macchina virtuale e Update-AzVM per applicare la configurazione. Sostituire i valori di esempio con i propri parametri e quindi eseguire lo script.

$vmName = "yourVMName"
$LocationName = "westcentralus"
$ResourceGroupName = "yourResourceGroupName"
$diskName = "yourDiskName"
$diskSKU = "Premium_LRS"
$diskSizeinGiB = 30
$diskLUN = 1
$diskEncryptionSetName="yourDiskEncryptionSetName"


$vm = Get-AzVM -Name $vmName -ResourceGroupName $ResourceGroupName 

$diskEncryptionSet=Get-AzDiskEncryptionSet -ResourceGroupName $ResourceGroupName -Name $diskEncryptionSetName

$vm = Add-AzVMDataDisk -VM $vm -Name $diskName -CreateOption Empty -DiskSizeInGB $diskSizeinGiB -StorageAccountType $diskSKU -Lun $diskLUN -DiskEncryptionSetId $diskEncryptionSet.Id 

Update-AzVM -ResourceGroupName $ResourceGroupName -VM $vm

Crittografare i dischi gestiti esistenti

I dischi esistenti non devono essere collegati a una macchina virtuale in esecuzione. Lo script usa New-AzDiskUpdateConfig e Update-AzDisk per configurare le chiavi gestite dal cliente per il disco.

$rgName = "yourResourceGroupName"
$diskName = "yourDiskName"
$diskEncryptionSetName = "yourDiskEncryptionSetName"
 
$diskEncryptionSet = Get-AzDiskEncryptionSet -ResourceGroupName $rgName -Name $diskEncryptionSetName
 
New-AzDiskUpdateConfig -EncryptionType "EncryptionAtRestWithCustomerKey" -DiskEncryptionSetId $diskEncryptionSet.Id | Update-AzDisk -ResourceGroupName $rgName -DiskName $diskName

Crittografare un set di scalabilità di macchine virtuali esistente (modalità di orchestrazione uniforme) utilizzando la crittografia lato server e le chiavi gestite dal cliente

Questo script funzionerà solo per i set di scalabilità in modalità di orchestrazione uniforme. Per i set di scalabilità in modalità di orchestrazione flessibile, seguire Crittografare i dischi gestiti esistenti per ogni macchina virtuale.

Lo script usa Get-AzVmss per recuperare il set di scalabilità e Update-AzVmss per applicare il set di crittografia del disco. Sostituire i valori di esempio con i propri parametri e quindi eseguire lo script.

#set variables 
$vmssname = "name of the vmss that is already created"
$diskencryptionsetname = "name of the diskencryptionset already created"
$vmssrgname = "vmss resourcegroup name"
$diskencryptionsetrgname = "diskencryptionset resourcegroup name"

#get vmss object and create diskencryptionset object attach to vmss os disk
$ssevmss = get-azvmss -ResourceGroupName $vmssrgname -VMScaleSetName $vmssname
$ssevmss.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk.DiskEncryptionSet = New-Object -TypeName Microsoft.Azure.Management.Compute.Models.DiskEncryptionSetParameters

#get diskencryption object and retrieve the resource id
$des = Get-AzDiskEncryptionSet -ResourceGroupName $diskencryptionsetrgname -Name $diskencryptionsetname
write-host "the diskencryptionset resource id is:" $des.Id

#associate DES resource id to os disk and update vmss 
$ssevmss.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk.DiskEncryptionSet.id = $des.Id
$ssevmss | update-azvmss

Creare un set di scalabilità di macchine virtuali usando un'immagine del Marketplace, crittografando il sistema operativo e i dischi dati con chiavi gestite dal cliente

Prima di eseguire lo script, specificare un gruppo di risorse e un set di crittografia del disco esistenti, insieme ai valori per le credenziali di amministratore, l'area, le dimensioni della macchina virtuale e la rete virtuale. Lo script crea la rete virtuale e usa New-AzVmss per creare un set di scalabilità di macchine virtuali uniforme a due istanze da un'immagine Windows Server Marketplace. I dischi del sistema operativo del set di scalabilità e i dischi dati 128-GiB usano il set di crittografia del disco. Sostituire i valori di esempio con i propri parametri e quindi eseguire lo script.

Importante

A partire da novembre 2023, i set di scalabilità delle macchine virtuali creati con PowerShell e interfaccia della riga di comando di Azure utilizzeranno per impostazione predefinita la modalità di orchestrazione flessibile se non è specificata alcuna modalità di orchestrazione. Per ulteriori informazioni su questa modifica e sulle azioni da intraprendere, consultare Modifica significativa per gli utenti di PowerShell/CLI di VMSS - Microsoft Community Hub

$VMLocalAdminUser = "yourLocalAdminUser"
$VMLocalAdminSecurePassword = ConvertTo-SecureString Password@123 -AsPlainText -Force
$LocationName = "westcentralus"
$ResourceGroupName = "yourResourceGroupName"
$ComputerNamePrefix = "yourComputerNamePrefix"
$VMScaleSetName = "yourVMSSName"
$VMSize = "Standard_DS3_v2"
$diskEncryptionSetName="yourDiskEncryptionSetName"
    
$NetworkName = "yourVNETName"
$SubnetName = "yourSubnetName"
$SubnetAddressPrefix = "10.0.0.0/24"
$VnetAddressPrefix = "10.0.0.0/16"
    
$SingleSubnet = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $SubnetAddressPrefix

$Vnet = New-AzVirtualNetwork -Name $NetworkName -ResourceGroupName $ResourceGroupName -Location $LocationName -AddressPrefix $VnetAddressPrefix -Subnet $SingleSubnet

$ipConfig = New-AzVmssIpConfig -Name "myIPConfig" -SubnetId $Vnet.Subnets[0].Id 

$VMSS = New-AzVmssConfig -Location $LocationName -SkuCapacity 2 -SkuName $VMSize -UpgradePolicyMode 'Automatic' -OrchestrationMode 'Uniform'

$VMSS = Add-AzVmssNetworkInterfaceConfiguration -Name "myVMSSNetworkConfig" -VirtualMachineScaleSet $VMSS -Primary $true -IpConfiguration $ipConfig

$diskEncryptionSet=Get-AzDiskEncryptionSet -ResourceGroupName $ResourceGroupName -Name $diskEncryptionSetName

# Enable encryption at rest with customer managed keys for OS disk by setting DiskEncryptionSetId property 

$VMSS = Set-AzVmssStorageProfile $VMSS -OsDiskCreateOption "FromImage" -DiskEncryptionSetId $diskEncryptionSet.Id -ImageReferenceOffer 'WindowsServer' -ImageReferenceSku '2012-R2-Datacenter' -ImageReferenceVersion latest -ImageReferencePublisher 'MicrosoftWindowsServer'

$VMSS = Set-AzVmssOsProfile $VMSS -ComputerNamePrefix $ComputerNamePrefix -AdminUsername $VMLocalAdminUser -AdminPassword $VMLocalAdminSecurePassword

# Add a data disk encrypted at rest with customer managed keys by setting DiskEncryptionSetId property 

$VMSS = Add-AzVmssDataDisk -VirtualMachineScaleSet $VMSS -CreateOption Empty -Lun 1 -DiskSizeGB 128 -StorageAccountType Premium_LRS -DiskEncryptionSetId $diskEncryptionSet.Id

$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword);

New-AzVmss -VirtualMachineScaleSet $VMSS -ResourceGroupName $ResourceGroupName -VMScaleSetName $VMScaleSetName

Modificare la chiave di un set di crittografia del disco per ruotare la chiave per le risorse a cui si fa riferimento

Lo script usa Update-AzDiskEncryptionSet per modificare la chiave a cui fa riferimento il set di crittografia del disco. Sostituire i valori di esempio con i propri parametri e quindi eseguire lo script.

$ResourceGroupName="yourResourceGroupName"
$keyVaultName="yourKeyVaultName"
$keyName="yourKeyName"
$diskEncryptionSetName="yourDiskEncryptionSetName"

$keyVault = Get-AzKeyVault -VaultName $keyVaultName -ResourceGroupName $ResourceGroupName

$keyVaultKey = Get-AzKeyVaultKey -VaultName $keyVaultName -Name $keyName

Update-AzDiskEncryptionSet -Name $diskEncryptionSetName -ResourceGroupName $ResourceGroupName -SourceVaultId $keyVault.ResourceId -KeyUrl $keyVaultKey.Id

Trovare lo stato di crittografia lato server di un disco

Lo script usa Get-AzDisk per recuperare il tipo di crittografia lato server del disco.

$ResourceGroupName="yourResourceGroupName"
$DiskName="yourDiskName"

$disk=Get-AzDisk -ResourceGroupName $ResourceGroupName -DiskName $DiskName
$disk.Encryption.Type

Per i dischi configurati dagli esempi precedenti, EncryptionAtRestWithCustomerKey indica la crittografia lato server con una chiave gestita dal cliente. EncryptionAtRestWithPlatformAndCustomerKeys indica la doppia crittografia con chiavi gestite dal cliente e gestite dalla piattaforma.

Importante

Le chiavi gestite dal cliente si basano sulle identità gestite per le risorse Azure, una funzionalità di Microsoft Entra ID. Quando si configurano le chiavi gestite dal cliente, un'identità gestita viene assegnata automaticamente alle risorse dietro le quinte. Se successivamente si sposta la sottoscrizione, il gruppo di risorse o il disco gestito da una directory Microsoft Entra a un'altra, l'identità gestita associata ai dischi gestiti non viene trasferita al nuovo tenant, quindi le chiavi gestite dal cliente potrebbero non funzionare più. Per ulteriori informazioni, vedere Trasferimento di una sottoscrizione tra directory di Microsoft Entra.

Passaggi successivi