Azure PowerShell - Abilitare le chiavi gestite dai clienti con la crittografia sul lato server - Dischi gestiti
Si applica a: ✔️ macchine virtuali di Windows ✔️ set di scalabilità flessibili ✔️ set di scalabilità uniformi
Archiviazione su disco di Azure consente di gestire le proprie chiavi quando si usa la crittografia lato server per i dischi gestiti, se si vuole. Per informazioni concettuali sulla crittografia lato server con chiavi gestite dal cliente e su altri tipi di crittografia del disco gestito, vedere la sezione Chiavi gestite dal cliente dell'articolo relativo alla crittografia dei dischi.
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 l'interfaccia della riga di comando di Azure o il modulo di Azure PowerShell.
- Un disco e tutti gli snapshot incrementali associati devono avere lo stesso set di crittografia del disco.
- Solo chiavi RSA software e HSM di dimensioni pari a 2.048 bit, 3.072 bit e 4.096 bit non sono supportate altre chiavi o dimensioni.
- Le chiavi del modulo di protezione hardware richiedono il livello Premium degli insiemi di credenziali delle chiavi di Azure.
- Solo per Dischi Ultra e dischi SSD Premium v2:
- I dischi creati da snapshot crittografati con la crittografia lato server e le chiavi gestite dal cliente devono essere crittografati con lo stesso set di crittografia del disco.
- Le identità gestite assegnate dall'utente non sono supportate per i Dischi Ultra e i dischi SSD Premium v2 crittografati con chiavi gestite dal cliente.
- La crittografia di dischi Ultra e dischi SSD Premium v2 con chiavi gestite dal cliente tramite Azure Key Vault archiviati in un tenant diverso di Microsoft Entra ID non è attualmente supportata.
- 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 Vaults 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.
- È possibile 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'istanza di Azure Key Vault e DiskEncryptionSet facoltativamente con rotazione automatica delle chiavi
Per usare le chiavi gestite dal cliente con la crittografia lato server, è necessario configurare un'istanza di Azure Key Vault e una risorsa DiskEncryptionSet.
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
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
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
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 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 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 crittografia lato server 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 avranno per impostazione predefinita la modalità di orchestrazione flessibile se non è specificata alcuna modalità di orchestrazione. Per altre informazioni su questa modifica e sulle azioni da eseguire, vedere Modifica che causa un'interruzione per i clienti di PowerShell/CLI 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
- Esplorare i modelli di Azure Resource Manager per la creazione di dischi crittografati con chiavi gestite dal cliente
- Replicare le macchine virtuali con i dischi abilitati per le chiavi gestite dal cliente
- Configurare il ripristino di emergenza di VM VMware in Azure con PowerShell
- Configurare il ripristino di emergenza in Azure per le macchine virtuali Hyper-V tramite PowerShell e Azure Resource Manager