Ripristinare la chiave di Key Vault e il segreto per le macchine virtuali crittografate con Backup di Azure
Questo articolo illustra l'uso di Backup di macchine virtuali di Azure per eseguire il ripristino di macchine virtuali di Azure crittografate, se la chiave e il segreto non esistono nell'insieme di credenziali delle chiavi. Questi passaggi possono essere usati anche se si vuole mantenere una copia separata della chiave (chiave di crittografia della chiave) e del segreto (chiave di crittografia BitLocker) per la macchina virtuale ripristinata.
Nota
È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.
Prerequisiti
- Backup delle macchine virtuali crittografate: il backup delle macchine virtuali crittografate di Azure deve essere eseguito tramite Backup di Azure. Vedere l'articolo Gestire il backup e il ripristino di macchine virtuali di Azure con PowerShell per informazioni dettagliate su come eseguire il backup di macchine virtuali di Azure crittografate.
- Configurazione dell'insieme di credenziali delle chiavi di Azure: assicurarsi che l'insieme di credenziali delle chiavi in cui eseguire il ripristino di chiavi e segreti sia presente. Per informazioni dettagliate sulla gestione dell'insieme di credenziali delle chiavi, vedere l'articolo Introduzione ad Azure Key Vault .
- Ripristino del disco : assicurarsi di aver attivato il processo di ripristino per il ripristino dei dischi per la macchina virtuale crittografata usando i passaggi di PowerShell. Questo processo, infatti, genera un file JSON nell'account di archiviazione contenente le chiavi e i segreti della macchina virtuale crittografata da ripristinare.
Ottenere la chiave e il segreto da Backup di Azure
Nota
Dopo aver ripristinato il disco per la macchina virtuale crittografata, verificare che:
- In $details siano specificati i dettagli del processo di ripristino del disco, come indicato nella procedura relativa a PowerShell della sezione Ripristinare i dischi
- La macchina virtuale venga creata dai dischi ripristinati solo dopo aver ripristinato la chiave e il segreto nell'insieme di credenziali delle chiavi.
Ricercare i dettagli del processo nelle proprietà del disco ripristinato.
$properties = $details.properties
$storageAccountName = $properties["Target Storage Account Name"]
$containerName = $properties["Config Blob Container Name"]
$encryptedBlobName = $properties["Encryption Info Blob Name"]
Impostare il contesto di archiviazione di Azure e ripristinare il file di configurazione JSON contenente i dettagli relativi alla chiave e al segreto della macchina virtuale crittografata.
Set-AzCurrentStorageAccount -Name $storageaccountname -ResourceGroupName '<rg-name>'
$destination_path = 'C:\vmencryption_config.json'
Get-AzStorageBlobContent -Blob $encryptedBlobName -Container $containerName -Destination $destination_path
$encryptionObject = Get-Content -Path $destination_path | ConvertFrom-Json
Ripristinare la chiave
Dopo aver generato il file JSON nel percorso di destinazione indicato in precedenza, generare il file BLOB della chiave dal file JSON e compilarlo in modo da ripristinare il cmdlet della chiave e reinserire la chiave di crittografia della chiave (KEK) nell'insieme di credenziali delle chiavi.
$keyDestination = 'C:\keyDetails.blob'
[io.file]::WriteAllBytes($keyDestination, [System.Convert]::FromBase64String($encryptionObject.OsDiskKeyAndSecretDetails.KeyBackupData))
Restore-AzKeyVaultKey -VaultName '<target_key_vault_name>' -InputFile $keyDestination
Ripristinare il segreto
Usare il file JSON generato in precedenza per ottenere il valore e il nome del segreto e compilarlo in modo da impostare il cmdlet del segreto per reinserire il segreto (BEK) nell'insieme di credenziali delle chiavi. Usare questi cmdlet se la macchina virtuale è crittografata con BEK e KEK.
Usare questi cmdlet se la macchina virtuale Windows è crittografata con BEK e KEK.
$secretdata = $encryptionObject.OsDiskKeyAndSecretDetails.SecretData
$Secret = ConvertTo-SecureString -String $secretdata -AsPlainText -Force
$secretname = 'B3284AAA-DAAA-4AAA-B393-60CAA848AAAA'
$Tags = @{'DiskEncryptionKeyEncryptionAlgorithm' = 'RSA-OAEP';'DiskEncryptionKeyFileName' = 'B3284AAA-DAAA-4AAA-B393-60CAA848AAAA.BEK';'DiskEncryptionKeyEncryptionKeyURL' = $encryptionObject.OsDiskKeyAndSecretDetails.KeyUrl;'MachineName' = 'vm-name'}
Set-AzKeyVaultSecret -VaultName '<target_key_vault_name>' -Name $secretname -SecretValue $Secret -ContentType 'Wrapped BEK' -Tags $Tags
Usare questi cmdlet se la macchina virtuale Linux è crittografata con BEK e KEK.
$secretdata = $encryptionObject.OsDiskKeyAndSecretDetails.SecretData
$Secret = ConvertTo-SecureString -String $secretdata -AsPlainText -Force
$secretname = 'B3284AAA-DAAA-4AAA-B393-60CAA848AAAA'
$Tags = @{'DiskEncryptionKeyEncryptionAlgorithm' = 'RSA-OAEP';'DiskEncryptionKeyFileName' = 'LinuxPassPhraseFileName';'DiskEncryptionKeyEncryptionKeyURL' = <Key_url_of_newly_restored_key>;'MachineName' = 'vm-name'}
Set-AzKeyVaultSecret -VaultName '<target_key_vault_name>' -Name $secretname -SecretValue $Secret -ContentType 'Wrapped BEK' -Tags $Tags
Usare il file JSON generato in precedenza per ottenere il valore e il nome del segreto e compilarlo in modo da impostare il cmdlet del segreto per reinserire il segreto (BEK) nell'insieme di credenziali delle chiavi. Usare questi cmdlet se la macchina virtuale è crittografata solo con BEK.
$secretDestination = 'C:\secret.blob'
[io.file]::WriteAllBytes($secretDestination, [System.Convert]::FromBase64String($encryptionObject.OsDiskKeyAndSecretDetails.KeyVaultSecretBackupData))
Restore-AzKeyVaultSecret -VaultName '<target_key_vault_name>' -InputFile $secretDestination -Verbose
Nota
- Il valore per $secretname può essere ottenuto facendo riferimento all'output di $encryptionObject.OsDiskKeyAndSecretDetails.SecretUrl e usando testo dopo i segreti. Ad esempio, l'URL del segreto di output è
https://keyvaultname.vault.azure.net/secrets/B3284AAA-DAAA-4AAA-B393-60CAA848AAAA/xx000000xx0849999f3xx30000003163
e il nome del segreto è B3284AAA-DAAA-4AAA-B393-60CAA848AAAAA - Il valore del tag DiskEncryptionKeyFileName corrisponde al nome del segreto.
Creare una macchina virtuale dal disco ripristinato
Se è stato eseguito il backup di una macchina virtuale crittografata con Backup di macchine virtuali di Azure, i cmdlet di PowerShell indicati in precedenza consentono di ripristinare la chiave e il segreto nell'insieme di credenziali delle chiavi. Dopo il ripristino, vedere l'articolo Gestire il backup e il ripristino di macchine virtuali di Azure usando PowerShell per creare macchine virtuali crittografate da disco, chiave e segreto ripristinati.
Approccio legacy
L'approccio sopra descritto potrà essere adottato per tutti i punti di ripristino. L'approccio precedente, che prevedeva di recuperare le informazioni sulla chiave e sul segreto dal punto di ripristino, può essere ancora adottato per i punti di ripristino precedenti all'11 luglio 2017 per le macchine virtuali crittografate con BEK e KEK. Dopo aver completato il processo di ripristino del disco per le macchine virtuali crittografate applicando la procedura relativa a PowerShell, assicurarsi che in $rp sia inserito un valore valido.
Chiave di ripristino (approccio legacy)
Usare i cmdlet seguenti per ottenere informazioni sulla chiave di crittografia della chiave dal punto di ripristino e compilarli in modo da ripristinare il cmdlet della chiave e reinserirlo nell'insieme di credenziali delle chiavi.
$rp1 = Get-AzRecoveryServicesBackupRecoveryPoint -RecoveryPointId $rp[0].RecoveryPointId -Item $backupItem -KeyFileDownloadLocation 'C:\Users\downloads'
Restore-AzureKeyVaultKey -VaultName '<target_key_vault_name>' -InputFile 'C:\Users\downloads'
Ripristinare il segreto (approccio legacy)
Usare i cmdlet seguenti per ottenere informazioni sulla chiave di crittografia a blocchi dal punto di ripristino e compilarli in modo da impostare il cmdlet del segreto e reinserirlo nell'insieme di credenziali delle chiavi.
$secretname = 'B3284AAA-DAAA-4AAA-B393-60CAA848AAAA'
$secretdata = $rp1.KeyAndSecretDetails.SecretData
$Secret = ConvertTo-SecureString -String $secretdata -AsPlainText -Force
$Tags = @{'DiskEncryptionKeyEncryptionAlgorithm' = 'RSA-OAEP';'DiskEncryptionKeyFileName' = 'B3284AAA-DAAA-4AAA-B393-60CAA848AAAA.BEK';'DiskEncryptionKeyEncryptionKeyURL' = 'https://mykeyvault.vault.azure.net:443/keys/KeyName/84daaac999949999030bf99aaa5a9f9';'MachineName' = 'vm-name'}
Set-AzKeyVaultSecret -VaultName '<target_key_vault_name>' -Name $secretname -SecretValue $secret -Tags $Tags -SecretValue $Secret -ContentType 'Wrapped BEK'
Nota
- Il valore per $secretname può essere ottenuto facendo riferimento all'output di $rp 1. KeyAndSecretDetails.SecretUrl e uso del testo dopo i segreti. Ad esempio, l'URL del segreto di output è e il nome del segreto è
https://keyvaultname.vault.azure.net/secrets/B3284AAA-DAAA-4AAA-B393-60CAA848AAAA/xx000000xx0849999f3xx30000003163
B3284AAA-DAAA-4AAA-B393-60CAA848AAAAA - Il valore del tag DiskEncryptionKeyFileName è uguale al nome del segreto.
- È possibile ottenere il valore di DiskEncryptionKeyEncryptionKeyURL dall'insieme di credenziali delle chiavi dopo il ripristino delle chiavi, usando il cmdlet Get-AzureKeyVaultKey.
Passaggi successivi
Dopo aver ripristinato la chiave e il segreto nell'insieme di credenziali delle chiavi, vedere l'articolo Gestire il backup e il ripristino di macchine virtuali di Azure usando PowerShell per creare macchine virtuali crittografate da disco, chiave e segreto ripristinati.