Udostępnij przez


Przywracanie klucza i sekretu Key Vault dla zaszyfrowanych maszyn wirtualnych przy użyciu Azure Backup

W tym artykule opisano sposób używania usługi Azure VM Backup do przywracania zaszyfrowanych maszyn wirtualnych platformy Azure, gdy oryginalny klucz i wpis tajny nie są dostępne w usłudze Key Vault. Dotyczy to również scenariuszy, w których chcesz zachować oddzielną kopię klucza (klucz szyfrowania klucza) i klucz tajny (klucz szyfrowania funkcji BitLocker) dla przywróconej maszyny wirtualnej.

Note

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

Prerequisites

Przed rozpoczęciem przywracania zaszyfrowanej maszyny wirtualnej upewnij się, że zostały spełnione następujące wymagania wstępne:

  • Kopie zapasowe zaszyfrowanych maszyn wirtualnych — kopie zapasowe zaszyfrowanych maszyn wirtualnych platformy Azure są tworzone przy użyciu usługi 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 tajemnice, już istnieje. Aby uzyskać szczegółowe informacje na temat zarządzania magazynem kluczy, zapoznaj się z artykułem Rozpoczynanie pracy z usługą Azure Key Vault .
  • Przywracanie dysku — upewnij się, że wyzwalasz zadanie przywracania w celu przywrócenia dysków dla zaszyfrowanej maszyny wirtualnej za pomocą kroków programu PowerShell, aby to zadanie wygenerowało plik JSON na koncie magazynu zawierający klucze i sekrety zaszyfrowanej maszyny wirtualnej, które mają zostać przywrócone.

Uzyskiwanie klucza i sekretu z usługi Azure Backup

Note

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

  • $details są wypełniane 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 sekretu 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, który zawiera klucz i dane tajne 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

Przywracanie klucza

Po wygenerowaniu pliku JSON w wymienionej ścieżce docelowej, wygeneruj plik obiektu blob klucza z tego pliku JSON i użyj go w poleceniu cmdlet do przywrócenia klucza (KEK) do magazynu kluczy.

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

Przywracanie tajemnicy

Użyj wygenerowanego pliku JSON, aby uzyskać nazwę i wartość sekretu, i przekaż je do polecenia cmdlet, aby umieścić klucz szyfrowania BitLocker (BEK) z powrotem w skarbcu kluczy. Użyj tych poleceń cmdlet, jeśli maszyna wirtualna jest szyfrowana przy użyciu BEK i KEK.

Użyj tych poleceń cmdlet, jeśli maszyna wirtualna z systemem Windows jest szyfrowana przy użyciu BEK i 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 Twoja maszyna wirtualna Linux jest szyfrowana przy użyciu kluczy BEK i 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 wygenerowanego pliku JSON, aby pobrać nazwę i wartość tajemnicy, i przekaż ją do polecenia cmdlet ustawiania tajemnicy, aby umieścić z powrotem tajemnicę (BEK) w magazynie tajemnic. Użyj tych poleceń cmdlet, jeśli Twoja VM jest szyfrowana używając tylko 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

Note

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

Tworzenie maszyny wirtualnej na podstawie przywróconego dysku

Jeśli tworzysz kopię zapasową zaszyfrowanej maszyny wirtualnej przy użyciu usługi Azure VM Backup, wcześniej wspomniane polecenia cmdlet programu PowerShell ułatwiają przywracanie klucza i tajemnicy z powrotem do magazynu kluczy. Po ich przywróceniu zapoznaj się z artykułem Zarządzanie tworzeniem kopii zapasowych i przywracaniem maszyn wirtualnych platformy Azure przy użyciu programu PowerShell, aby utworzyć zaszyfrowane maszyny wirtualne z przywróconego dysku, klucza i tajemnicy.

Dziedziczone podejście

Opisane podejście działa dla wszystkich punktów odzyskiwania. Jednak starsze podejście do pobierania kluczowych i tajnych informacji z punktu odzyskiwania będzie prawidłowe dla punktów odzyskiwania starszych niż 11 lipca 2017 r. dla maszyn wirtualnych zaszyfrowanych przy użyciu kluczy BEK i KEK. Po ukończeniu zadania przywracania dysku dla zaszyfrowanej maszyny wirtualnej przy użyciu kroków programu PowerShell upewnij się, że $rp jest wypełniana prawidłową wartością.

Przywracanie klucza (starsze podejście)

Użyj następujących poleceń cmdlet, aby uzyskać informacje o kluczu (KEK) z punktu odzyskiwania danych i przekazać je do polecenia cmdlet przywracania klucza, aby umieścić go 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 sekreta (metoda dziedziczna)

Użyj następującego polecenia cmdlet, aby uzyskać tajne informacje (BEK) z punktu odzyskiwania i użyj go do polecenia cmdlet ustawienia sekretu, aby przywrócić je do magazynu 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'

Note

  • Wartość dla $secretname można uzyskać, odwołując się do danych wyjściowych $rp1.KeyAndSecretDetails.SecretUrl i używając tekstu po sekcji secrets/ Na przykład, wyjściowy adres URL tajnego wpisu to https://keyvaultname.vault.azure.net/secrets/B3284AAA-DAAA-4AAA-B393-60CAA848AAAA/xx000000xx0849999f3xx30000003163, a nazwa tajnego wpisu to B3284AAA-DAAA-4AAA-B393-60CAA848AAAA.
  • Wartość tagu DiskEncryptionKeyFileName jest taka sama jak nazwa wpisu tajnego.
  • Wartość dla DiskEncryptionKeyEncryptionKeyURL można uzyskać z magazynu kluczy po przywróceniu kluczy i za pomocą polecenia cmdlet Get-AzKeyVaultKey

Dalsze kroki

Po przywróceniu klucza i tajemnicy z powrotem do magazynu kluczy, zapoznaj się z artykułem Zarządzanie tworzeniem kopii zapasowych i przywracaniem maszyn wirtualnych platformy Azure przy użyciu programu PowerShell, aby utworzyć zaszyfrowane maszyny wirtualne z przywróconego dysku, klucza i tajemnicy.