Azure PowerShell - Abilitare le chiavi gestite dai clienti con la crittografia sul lato server - Dischi gestiti

Si applica a: ✔️ Set di scalabilità flessibili di macchine virtuali ✔️ Windows: set ✔️ di scalabilità uniformi

La Archiviazione dischi di Azure consente di gestire le proprie chiavi quando si usa la crittografia lato server (S edizione Standard) per i dischi gestiti, se si sceglie. Per informazioni concettuali su S edizione Standard con chiavi gestite dal cliente e altri tipi di crittografia del disco gestito, vedere la sezione Chiavi gestite dal cliente dell'articolo Crittografia dischi.

Limitazioni

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 l'interfaccia della riga di comando di Azure o il modulo Azure PowerShell.
  • 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.
  • Solo per dischi Ultra e dischi SSD Premium v2: gli snapshot creati da dischi crittografati con la crittografia lato server e le chiavi gestite dal cliente devono essere crittografati con le stesse 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.
    • Gli insiemi di credenziali delle chiavi di Azure possono essere usati da una sottoscrizione diversa, ma devono trovarsi nella stessa area del set di crittografia del disco. Come anteprima, è possibile usare Azure Key Vault da diversi tenant di Microsoft Entra.
  • 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.
  • Può creare fino a 5000 set di crittografia 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 un insieme di credenziali delle chiavi di Azure e DiskEncryptionSet facoltativamente con rotazione automatica delle chiavi

Per usare chiavi gestite dal cliente con S edizione Standard, è necessario configurare un insieme di credenziali delle chiavi di Azure e una risorsa DiskEncryptionSet.

  1. Verificare di aver installato la versione di Azure PowerShell più recente e di aver eseguito l'accesso a un account di Azure con Connect-AzAccount

  2. Creare un'istanza di Azure Key Vault e la 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 insieme di credenziali delle chiavi per la crittografia dei 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 
    
  3. Creare un'istanza di un set di crittografia dischi. È possibile impostare RotationToLatestKeyVersionEnabled uguale a $true per abilitare la rotazione automatica della chiave. Quando si abilita la rotazione automatica, il sistema aggiornerà 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 $false
    
    $des=New-AzDiskEncryptionSet -Name $diskEncryptionSetName `
           -ResourceGroupName $ResourceGroupName `
           -InputObject $desConfig
    
  4. Concedere al set di crittografia dischi l'accesso all'insieme di credenziali delle chiavi.

    Nota

    La creazione dell'identità di DiskEncryptionSet nell'ID Microsoft Entra potrebbe richiedere alcuni minuti. Se quando si esegue il comando seguente viene visualizzato un errore simile a "Impossibile trovare l'oggetto Active Directory", attendere qualche minuto e riprovare.

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

Usare un insieme di credenziali delle chiavi in una sottoscrizione diversa

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

Importante

Per questa configurazione, sia l'insieme di credenziali delle chiavi 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 insieme di credenziali delle chiavi 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 $false

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

Esempi

Dopo aver creato e configurato queste risorse, è possibile usarle per proteggere i dischi gestiti. Di seguito sono riportati gli script di esempio, ognuno con uno scenario corrispondente, che è possibile usare per proteggere i dischi gestiti.

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

Copiare lo script, sostituire tutti i valori di esempio con i propri parametri e quindi eseguirlo.

$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

Copiare lo script, sostituire tutti i valori di esempio con i propri parametri e quindi eseguirlo.

$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 per poterli crittografare usando lo script seguente:

$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) con S edizione Standard e 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 l'argomento Crittografare i dischi gestiti esistenti per ogni macchina virtuale.

Copiare lo script, sostituire tutti i valori di esempio con i propri parametri e quindi eseguirlo:

#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

Copiare lo script, sostituire tutti i valori di esempio con i propri parametri e quindi eseguirlo.

Importante

A partire da novembre 2023, i set di scalabilità di macchine virtuali creati con PowerShell e l'interfaccia della riga di comando di Azure per impostazione predefinita saranno modalità di orchestrazione flessibile se non è specificata alcuna modalità di orchestrazione. Per altre informazioni su questa modifica e sulle azioni da eseguire, vedere Modifica di rilievo per i clienti di PowerShell/interfaccia della riga di comando di VMSS - Hub della community Microsoft

$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 dischi per ruotare la chiave per tutte le risorse che fanno riferimento al set di crittografia dischi

Copiare lo script, sostituire tutti i valori di esempio con i propri parametri e quindi eseguirlo.

$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

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

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

Importante

Le chiavi gestite dal cliente si basano sulle identità gestite per le risorse di 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 di 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 altre informazioni, vedere Trasferimento di una sottoscrizione tra le directory di Microsoft Entra.

Passaggi successivi