Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: гиперконвергентные развертывания локальной среды Azure
В этой статье описывается, как вручную создавать резервные копии и восстанавливать ключи защиты гостевого состояния для локальных виртуальных машин Azure с доверительным запуском, использующих Azure Arc.
Для локальной версии Azure 2505 и более поздних версий: резервное копирование и восстановление ключей защиты состояния гостевой виртуальной машины Azure в и из папки файловой системы.
Для локальных выпусков Azure до 2505: выполняйте резервное копирование и восстановление ключей защиты состояния гостевых виртуальных машин Azure, перенося их в хранилище ключей в другом локальном экземпляре Azure.
Этот раздел относится к локальному выпуску Azure 2505 и более поздних версий.
Для резервного копирования ключи защиты гостевого состояния виртуальной машины копируются из локального хранилища ключей локального экземпляра Azure в папку, которая периодически выполняет резервное копирование. Ключи защиты гостевой виртуальной машины, хранящиеся в этой папке, находятся в зашифрованной форме.
Для восстановления ключи защиты гостевого состояния виртуальной машины восстанавливаются из папки, содержащей копию резервной копии в хранилище ключей локального экземпляра Azure, где необходимо восстановить виртуальные машины.
Резервное копирование ключей
Приведенные ниже действия включают копирование ключей защиты состояния гостевой виртуальной машины из локального хранилища ключей вашего локального экземпляра Azure в папку, резервные копии которой выполняются периодически.
На защищенном компьютере с помощью PowerShell 7 создайте ключ упаковки размером 2048:
$rsa = [System.Security.Cryptography.RSA]::Create(2048) $privateKeyPem = $rsa.ExportPkcs8PrivateKeyPem() $privateKeyPem | Out-File -FilePath .\private.pem $publicKeyPem = $rsa.ExportRSAPublicKeyPem() $publicKeyPem | Out-File -FilePath .\public.pemЗапишите ключ упаковки, так как он понадобится позднее.
Скопируйте файл
.\public.pemна локальный экземпляр Azure.Скопируйте ключи защиты ВМ из локального хранилища ключей экземпляра Azure в папку, резервное копирование которой выполняется периодически.
Скачайте сценарий TvmBackupUtils.psm1 с GitHub на локальный экземпляр Azure. Примечание. Этот скрипт является примером, который можно адаптировать для конкретных потребностей.
Выполните следующее:
import-module .\TvmBackupUtils.psm1 -force Backup-TVMKeys -WrappingKeyPath <path to public.pem> -BackupRootPath <path to backup root folder where the timestamped backup folder is stored>Ниже приведен пример выходных данных после выполнения этой команды:
Backing up TVM Vault keys to .\<backup root folder>\20250722192116 Backing up key 7fb16fe7-00a0-476f-92b3-ccb98fd9525a to AES folder Backing up key AzureStackTvmAKRootKey to RSA folder
Обратите внимание на папку резервной копии с отметкой времени, созданную в корневой папке резервных копий. Это необходимо позже во время восстановления. Например, папка резервного копирования с именем "2025-06-12-20-53-55" с форматом "гггг-ММ-dd-HH-mm-ss".
Восстановление ключей
Приведенные ниже действия включают восстановление ключей защиты гостевой виртуальной машины из папки, содержащей копию резервной копии в хранилище ключей локального экземпляра Azure, где необходимо восстановить виртуальные машины.
Скопируйте файлы закрытого и открытого ключей для ключа-оболочки, созданного ранее, в локальный экземпляр Azure.
Скопируйте папку резервной копии с меткой времени в локальный экземпляр Azure. Выберите папку в корневой папке резервного копирования с последней меткой времени, так как эта папка будет иметь последнюю копию. Не изменяйте папку резервного копирования.
Импортируйте ключ упаковки, созданный ранее, в локальный экземпляр Azure:
Скачайте сценарий TvmBackupUtils.psm1 с GitHub на локальный экземпляр Azure. Примечание. Этот скрипт является примером, который можно адаптировать для конкретных потребностей.
Выполните следующие команды.
Note
Обязательно создайте уникальное имя для WrappingKeyName. В противном случае это приводит к сбою во время импорта:
Import-Module .\TvmBackupUtils.psm1 -force Import-TvmWrappingKeyFromPem -KeyName <WrappingKeyName> -PublicKeyPath <path to public.pem> -PrivateKeyPath <path to private.pem> -KeySize 2048Ниже приведен пример выходных данных:
Generating import JSON for key <WrappingKeyName> at temporary location C:\Users\HCIDeploymentUser\AppData\Local\Temp\tmpD383.tmp... Importing key <WrappingKeyName> into the vault... Key <WrappingKeyName> successfully imported into the vault. Temporary file C:\Users\HCIDeploymentUser\AppData\Local\Temp\tmpD383.tmp has been cleaned up.
Выполните этот шаг, только если вы восстанавливаете виртуальную машину в том же локальном экземпляре Azure, где виртуальная машина находилась до сбоя. Удалите следующее
AzureStackTvmAKRootKey.Remove-MocKey -name AzureStackTvmAKRootKey -group AzureStackHostAttestation -keyvaultName AzureStackTvmKeyVaultВосстановите ключи из резервной копии:
Import-TVMKeys -WrappingKeyName <WrappingKeyName> -BackupPath <path to timestamped backup folder>Ниже приведен пример выходных данных:
Importing TVM keys from .\<backup root folder>\20250722192116\ Importing key 7fb16fe7-00a0-476f-92b3-ccb98fd9525a with size 256 from AES folder path = .\<backup root folder>\20250722192116\AES\7fb16fe7-00a0-476f-92b3-ccb98fd9525a_256.json Importing key AzureStackTvmAKRootKey with size 4096 from RSA folder path = .\<backup root folder>\20250722192116\RSA\AzureStackTvmAKRootKey_4096.jsonЕсли локальное хранилище ключей локального экземпляра Azure уже имеет ключ защиты гостевой виртуальной машины с тем же именем или уже имеет
AzureStackTvmAKRootKeyзначение, вы получите ошибкуInvalidVersionдля этого ключа. Это можно игнорировать, так как ключ уже находится в хранилище ключей.Ниже приведен пример выходных данных, показывающих эту ошибку:
Importing TVM keys from .\<backup root folder>\20250722192116\ Importing key 7fb16fe7-00a0-476f-92b3-ccb98fd9525a with size 256 from AES folder path = .\<backup root folder>\20250722192116\AES\7fb16fe7-00a0-476f-92b3-ccb98fd9525a_256.json Import-TVMKeys : Error Importing Key: C:\Program Files\AksHci\mocctl.exe --cloudFqdn s-cluster.v.masd.stbtest.microsoft.com security keyvault key import --group "AzureStackHostAttestation" --key-size "256" --vault-name "AzureStackTvmKeyVault" --key-type "AES" --key-file-path ".\<backup root folder>\20250722192116\AES\7fb16fe7-00a0-476f-92b3-ccb98fd9525a_256.json" --name "7fb16fe7-00a0-476f-92b3-ccb98fd9525a" --wrapping-key-name "WrappingKey" System.Collections.Hashtable.generic_non_zero 1 [Error: Keys Import failed: Type[Key] Vault[AzureStackTvmKeyVault] Name[7fb16fe7-00a0-476f-92b3-ccb98fd9525a]: InvalidVersion] + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Import-TVMKeys Importing key AzureStackTvmAKRootKey with size 4096 from RSA folder path = .\<backup root folder>\20250722192116\RSA\AzureStackTvmAKRootKey_4096.json Import-TVMKeys : Error Importing Key: C:\Program Files\AksHci\mocctl.exe --cloudFqdn s-cluster.v.masd.stbtest.microsoft.com security keyvault key import --group "AzureStackHostAttestation" --key-size "4096" --vault-name "AzureStackTvmKeyVault" --key-type "RSA" --key-file-path ".\<backup root folder>\20250722192116\RSA\AzureStackTvmAKRootKey_4096.json" --name "AzureStackTvmAKRootKey" --wrapping-key-name "WrappingKey" System.Collections.Hashtable.generic_non_zero 1 [Error: Keys Import failed: Type[Key] Vault[AzureStackTvmKeyVault] Name[AzureStackTvmAKRootKey]: InvalidVersion] + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Import-TVMKeysОчистка файлов и ключей:
Удалите оба файла
public.pemиprivate.pemиз локального экземпляра Azure.Important
Удалите ключ-оболочку из хранилища ключей локального экземпляра Azure с помощью
Remove-MocKey. Это помогает избежать конфликтов позже.Remove-MocKey -name WrappingKeyName -group AzureStackHostAttestation -keyvaultName AzureStackTvmKeyVault