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 mogą być również używane, jeśli chcesz zachować oddzielną kopię klucza (klucz szyfrowania klucza) i wpis tajny (klucz szyfrowania funkcji BitLocker) dla przywróconej maszyny wirtualnej.
Uwaga
Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. 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 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 wpisy tajne, jest już obecny. 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 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 usługi 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
Przywracanie klucza
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 w celu przywrócenia klucza (KEK) z powrotem w magazynie 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 wpisu tajnego
Użyj pliku JSON wygenerowanego powyżej, aby uzyskać nazwę wpisu tajnego i wartość i podać ją, aby ustawić polecenie cmdlet wpisu tajnego w celu ponownego umieszczenia wpisu tajnego (BEK) w magazynie kluczy. Użyj tych poleceń cmdlet, jeśli maszyna wirtualna jest szyfrowana przy użyciu klucza szyfrowania klucza i klucza szyfrowania kluczy.
Użyj tych poleceń cmdlet, jeśli maszyna wirtualna z systemem Windows jest szyfrowana przy użyciu klucza szyfrowania klucza i klucza szyfrowania kluczy.
$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 szyfrowania klucza i klucza szyfrowania kluczy.
$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ę wpisu tajnego i wartość i podać ją, aby ustawić polecenie cmdlet wpisu tajnego w celu ponownego umieszczenia wpisu tajnego (BEK) 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 używając 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
B3284AAA-DAAA-4AAA-B393-60CAA848AAAAAA - 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 ich 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 będzie prawidłowe dla punktów odzyskiwania starszych niż 11 lipca 2017 r. dla maszyn wirtualnych zaszyfrowanych przy użyciu klucza szyfrowania przy użyciu klucza szyfrowania kluczy i kluczy kluczy sieciowych. 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 i podawać je w celu przywrócenia polecenia cmdlet klucza, aby przywrócić je z powrotem do magazynu 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ć polecenie cmdlet wpisu tajnego, 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ść dla $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
i nazwa wpisu tajnego to B3284AAA-DAAA-4AAA-B393-60CAA848AAAAA - 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 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.