Przywracanie klucza i wpisu tajnego usługi Key Vault dla szyfrowanych maszyn wirtualnych za pomocą usługi Azure Backup

W tym artykule omówiono używanie usługi Azure VM Backup do przywracania zaszyfrowanych maszyn wirtualnych platformy Azure, jeśli klucz i wpis tajny nie istnieją w magazynie kluczy. Te kroki można również użyć, jeśli chcesz zachować oddzielną kopię klucza (klucz szyfrowania kluczy) i wpis tajny (klucz szyfrowania funkcją BitLocker) dla przywróconej maszyny wirtualnej.

Uwaga

Zalecamy korzystanie z modułu Azure Az programu PowerShell do interakcji z platformą Azure. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Wymagania wstępne

  • Kopie zapasowe zaszyfrowanych maszyn wirtualnych — zaszyfrowane maszyny wirtualne platformy Azure zostały utworzone przy użyciu Azure Backup. Zapoznaj się z artykułem Zarządzanie tworzeniem kopii zapasowych i przywracaniem maszyn wirtualnych platformy Azure przy użyciu programu PowerShell , aby uzyskać szczegółowe informacje na temat tworzenia kopii zapasowych zaszyfrowanych maszyn wirtualnych platformy Azure.
  • Konfigurowanie usługi Azure Key Vault — upewnij się, że magazyn kluczy, do którego należy przywrócić klucze i wpisy tajne, jest już obecny. Aby uzyskać szczegółowe informacje na temat zarządzania magazynem kluczy, zapoznaj się z artykułem Wprowadzenie do usługi Azure Key Vault.
  • Przywracanie dysku — upewnij się, że zadanie przywracania zostało wyzwolone na potrzeby przywracania dysków dla zaszyfrowanej maszyny wirtualnej przy użyciu kroków programu PowerShell. Dzieje się tak, ponieważ to zadanie generuje plik JSON na koncie magazynu zawierający klucze i wpisy tajne dla zaszyfrowanej maszyny wirtualnej do przywrócenia.

Uzyskiwanie klucza i wpisu tajnego z Azure Backup

Uwaga

Po przywróceniu dysku dla zaszyfrowanej maszyny wirtualnej upewnij się, że:

  • $details jest wypełniana szczegółami zadania przywracania dysku, jak wspomniano w krokach programu PowerShell w sekcji Przywracanie dysków
  • Maszyna wirtualna powinna zostać utworzona na podstawie przywróconych dysków dopiero po przywróceniu klucza i wpisu tajnego do magazynu kluczy.

Wykonaj zapytanie o przywrócone właściwości dysku, aby uzyskać szczegółowe informacje o zadaniu.

$properties = $details.properties
$storageAccountName = $properties["Target Storage Account Name"]
$containerName = $properties["Config Blob Container Name"]
$encryptedBlobName = $properties["Encryption Info Blob Name"]

Ustaw kontekst usługi Azure Storage i przywróć plik konfiguracji JSON zawierający klucz i szczegóły wpisu tajnego dla zaszyfrowanej maszyny wirtualnej.

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

Klucz przywracania

Po wygenerowaniu pliku JSON w ścieżce docelowej wymienionej powyżej wygeneruj plik obiektu blob klucza z pliku JSON i przekaż go, aby przywrócić polecenie cmdlet klucza, aby umieścić klucz (KEK) z powrotem w magazynie kluczy.

$keyDestination = 'C:\keyDetails.blob'
[io.file]::WriteAllBytes($keyDestination, [System.Convert]::FromBase64String($encryptionObject.OsDiskKeyAndSecretDetails.KeyBackupData))
Restore-AzureKeyVaultKey -VaultName '<target_key_vault_name>' -InputFile $keyDestination

Przywracanie wpisu tajnego

Użyj pliku JSON wygenerowanego powyżej, aby uzyskać nazwę i wartość wpisu tajnego i podać go, aby ustawić polecenie cmdlet wpisu tajnego, aby umieścić wpis tajny (BEK) z powrotem w magazynie kluczy. Użyj tych poleceń cmdlet, jeśli maszyna wirtualna jest szyfrowana przy użyciu klucza BEK i klucza KEK.

Użyj tych poleceń cmdlet, jeśli maszyna wirtualna z systemem Windows jest szyfrowana przy użyciu klucza BEK i klucza 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

Użyj tych poleceń cmdlet, jeśli maszyna wirtualna z systemem Linux jest szyfrowana przy użyciu klucza BEK i klucza 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

Użyj pliku JSON wygenerowanego powyżej, aby uzyskać nazwę i wartość wpisu tajnego i podać go, aby ustawić polecenie cmdlet wpisu tajnego, aby umieścić wpis tajny (BEK) z powrotem w magazynie kluczy. Użyj tych poleceń cmdlet, jeśli maszyna wirtualna jest szyfrowana tylko przy użyciu klucza 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

Uwaga

  • Wartość $secretname można uzyskać, odwołując się do danych wyjściowych $encryptionObject.OsDiskKeyAndSecretDetails.SecretUrl i tekstu po wpisach tajnych/ Na przykład adres URL wpisu tajnego danych wyjściowych to https://keyvaultname.vault.azure.net/secrets/B3284AAA-DAAA-4AAA-B393-60CAA848AAAA/xx000000xx0849999f3xx30000003163 B3284AAAA-DAAA-4AAA-B393-60CAA848AAAAA
  • Wartość tagu DiskEncryptionKeyFileName jest taka sama jak nazwa wpisu tajnego.

Tworzenie maszyny wirtualnej na podstawie przywróconego dysku

Jeśli utworzono kopię zapasową zaszyfrowanej maszyny wirtualnej przy użyciu usługi Azure VM Backup, polecenia cmdlet programu PowerShell wymienione powyżej ułatwiają przywracanie klucza i wpisu tajnego z powrotem do magazynu kluczy. Po przywróceniu zapoznaj się z artykułem Zarządzanie tworzeniem kopii zapasowych i przywracaniem maszyn wirtualnych platformy Azure przy użyciu programu PowerShell w celu utworzenia zaszyfrowanych maszyn wirtualnych z przywróconego dysku, klucza i wpisu tajnego.

Starsze podejście

Podejście wymienione powyżej działałoby dla wszystkich punktów odzyskiwania. Jednak starsze podejście do pobierania informacji o kluczu i wpisie tajnym z punktu odzyskiwania jest prawidłowe dla punktów odzyskiwania starszych niż 11 lipca 2017 r. dla maszyn wirtualnych zaszyfrowanych przy użyciu klucza szyfrowania kluczy i kluczy szyfrowania kluczy. Po zakończeniu przywracania zadania dysku dla zaszyfrowanej maszyny wirtualnej przy użyciu kroków programu PowerShell upewnij się, że $rp jest wypełniana prawidłową wartością.

Klucz przywracania (starsze podejście)

Użyj następujących poleceń cmdlet, aby pobrać informacje o kluczu (KEK) z punktu odzyskiwania i posunąć je do przywrócenia polecenia cmdlet klucza, aby umieścić je z powrotem w magazynie kluczy.

$rp1 = Get-AzRecoveryServicesBackupRecoveryPoint -RecoveryPointId $rp[0].RecoveryPointId -Item $backupItem -KeyFileDownloadLocation 'C:\Users\downloads'
Restore-AzureKeyVaultKey -VaultName '<target_key_vault_name>' -InputFile 'C:\Users\downloads'

Przywracanie wpisu tajnego (starsze podejście)

Użyj następujących poleceń cmdlet, aby uzyskać informacje o wpisie tajnym (BEK) z punktu odzyskiwania i podawać je, aby ustawić tajne polecenie cmdlet, aby umieścić je z powrotem w magazynie kluczy.

$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'

Uwaga

  • Wartość $secretname można uzyskać, odwołując się do danych wyjściowych $rp 1. KeyAndSecretDetails.SecretUrl i używając tekstu po wpisach tajnych/ Na przykład wyjściowy adres URL wpisu tajnego to https://keyvaultname.vault.azure.net/secrets/B3284AAA-DAAA-4AAA-B393-60CAA848AAAA/xx000000xx0849999f3xx30000003163 B3284AAAA-DAAA-4AAA-B393-60CAA848AAAAAA
  • Wartość tagu DiskEncryptionKeyFileName jest taka sama jak nazwa wpisu tajnego.
  • Wartość diskEncryptionKeyEncryptionKeyURL można uzyskać z magazynu kluczy po przywróceniu kluczy z powrotem i przy użyciu polecenia cmdlet Get-AzureKeyVaultKey

Następne kroki

Po przywróceniu klucza i wpisu tajnego z powrotem do magazynu kluczy zapoznaj się z artykułem Zarządzanie kopiami zapasowymi i przywracaniem maszyn wirtualnych platformy Azure przy użyciu programu PowerShell w celu utworzenia zaszyfrowanych maszyn wirtualnych z przywróconego dysku, klucza i wpisu tajnego.