Резервное копирование и восстановление виртуальных машин Azure с помощью Azure PowerShell

В этой статье описывается резервное копирование и восстановление виртуальной машины Azure в хранилище служб восстановления Azure с помощью командлетов PowerShell.

Azure Backup создает независимые, изолированные резервные копии для защиты от непреднамеренного уничтожения данных на виртуальных машинах. Резервные копии хранятся на складе служб восстановления со встроенным управлением точками восстановления. Конфигурация и масштабирование просты, резервное копирование оптимизировано, а восстановление выполняется легко.

Прежде чем можно будет переходить к резервному копированию (или защите) виртуальной машины, вам потребуется выполнить необходимые условия, чтобы подготовить среду для защиты виртуальных машин.

Перед началом работы

Иерархия объектов Служб восстановления

Иерархия объектов представлена на следующей схеме.

Disgram shows the Recovery Services object hierarchy.

Ознакомьтесь с руководством по командлету Az.RecoveryServices в библиотеке Azure.

Настройка и регистрация

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Чтобы начать работу, сделайте следующее:

  1. Скачайте последнюю версию PowerShell.

  2. Чтобы получить список доступных командлетов PowerShell для службы архивации Azure, введите следующую команду:

    Get-Command *azrecoveryservices*
    

    Отображаются псевдонимы и командлеты для службы архивации Azure, Azure Site Recovery и хранилища служб восстановления. Ниже приведен пример того, что вы увидите. Это неполный список командлетов.

    Screenshot shows the list of Recovery Services.

  3. Чтобы войти в учетную запись Azure, используйте командлет Connect-AzAccount. Откроется веб-станица, на которой пользователю предлагается ввести данные для входа в учетную запись:

    • Кроме того, учетные данные можно добавить в качестве параметра в командлет Connect-AzAccount, используя параметр -Credential.
    • Если вы — партнер CSP, работающий от имени арендатора, вам потребуется указать заказчика в качестве арендатора. Для этого нужно ввести идентификатор или основное доменное имя арендатора. Например: Connect-AzAccount -Tenant "fabrikam.com".
  4. Свяжите подписку, которую собираетесь использовать, с учетной записью, так как последняя может иметь несколько подписок:

    Select-AzSubscription -SubscriptionName $SubscriptionName
    
  5. Если вы используете Azure Backup впервые, выполните командлет Register-AzResourceProvider, чтобы зарегистрировать поставщика службы восстановления Azure в своей подписке.

    Register-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  6. Вы можете проверить, зарегистрированы ли поставщики, выполнив следующие команды:

    Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    

    В выходных данных команды для RegistrationState должно быть установлено значение Registered. Если это не так, повторно выполните командлет Register-AzResourceProvider.

Создание хранилища Служб восстановления

Чтобы создать хранилище служб восстановления, выполните описанные ниже действия. Хранилище служб восстановления отличается от хранилища службы архивации.

  1. Хранилище служб восстановления представляет собой ресурс Resource Manager, поэтому вам потребуется разместить его в группе ресурсов. Вы можете использовать имеющуюся группу ресурсов или создать новую, выполнив командлет New-AzResourceGroup. При создании группы ресурсов укажите ее имя и расположение.

    New-AzResourceGroup -Name "test-rg" -Location "West US"
    
  2. Воспользуйтесь командлетом New-AzRecoveryServicesVault, чтобы создать хранилище Служб восстановления. Разместите хранилище там же, где находится группа ресурсов.

    New-AzRecoveryServicesVault -Name "testvault" -ResourceGroupName "test-rg" -Location "West US"
    
  3. Укажите необходимый тип избыточности хранилища: Вы можете использовать Локально избыточное хранилище (LRS), Геоизбыточное хранилище (GRS) или хранилище, избыточное между зонами (ZRS). В следующем примере показан параметр -Backup служба хранилища Redundancy для testvault параметра GeoRedundant.

    $vault1 = Get-AzRecoveryServicesVault -Name "testvault"
    Set-AzRecoveryServicesBackupProperty  -Vault $vault1 -BackupStorageRedundancy GeoRedundant
    

    Совет

    Для многих командлетов службы архивации Azure требуется объект хранилища служб восстановления в качестве входных данных. По этой причине объект хранилища Служб восстановления резервных копий удобно хранить в переменной.

Просмотр хранилищ в подписке

Выполнив командлет Get-AzRecoveryServicesVault, вы получите список всех хранилищ в подписке.

Get-AzRecoveryServicesVault

Результат будет аналогичен приведенному ниже; обратите внимание, что указаны соответствующие ResourceGroupName и Location.

Name              : Contoso-vault
ID                : /subscriptions/1234
Type              : Microsoft.RecoveryServices/vaults
Location          : WestUS
ResourceGroupName : Contoso-docs-rg
SubscriptionId    : 1234-567f-8910-abc
Properties        : Microsoft.Azure.Commands.RecoveryServices.ARSVaultProperties

Резервное копирование виртуальных машин Azure

Используйте хранилище служб восстановления для защиты виртуальной машины. Прежде чем применить защиту, задайте контекст хранилища (тип данных, защиту которых обеспечивает хранилище) и проверьте политику защиты. Политика защиты — это график выполнения заданий резервного копирования и срок хранения каждого моментального снимка резервной копии.

Задание контекста хранилища

Перед включением защиты на виртуальной машине выполните командлет Set-AzRecoveryServicesVaultContext, чтобы задать контекст хранилища. Заданный контекст хранилища применяется ко всем последующим командлетам. В следующем примере задается контекст хранилища для хранилища testvault.

Get-AzRecoveryServicesVault -Name "testvault" -ResourceGroupName "Contoso-docs-rg" | Set-AzRecoveryServicesVaultContext

Получение идентификатора хранилища

Мы планируем отказаться от параметра контекста хранилища в соответствии с рекомендациями Azure PowerShell. Вместо этого можно сохранить или извлечь идентификатор хранилища и передать его в соответствующие команды. Таким образом, если вы не указали контекст хранилища или хотите указать команду для выполнения в определенном хранилище, передайте идентификатор хранилища как "-vaultID" во все соответствующие команды следующим образом:

$targetVault = Get-AzRecoveryServicesVault -ResourceGroupName "Contoso-docs-rg" -Name "testvault"
$targetVault.ID

Or

$targetVaultID = Get-AzRecoveryServicesVault -ResourceGroupName "Contoso-docs-rg" -Name "testvault" | select -ExpandProperty ID

Изменение параметров репликации хранилища

Чтобы задать для хранилища конфигурацию репликации LRS (локально избыточное хранилище) или GRS (геоизбыточное хранилище), используйте команду Set-AzRecoveryServicesBackupProperty.

Set-AzRecoveryServicesBackupProperty -Vault $targetVault -BackupStorageRedundancy GeoRedundant/LocallyRedundant

Примечание.

Избыточность хранилища можно изменить только в том случае, если в хранилище нет защищенных резервных копий.

Создание политики защиты

Создаваемое хранилище служб восстановления поставляется с политиками защиты и хранения по умолчанию. Политика защиты по умолчанию запускает задание резервного копирования каждый день в указанное время. Политика хранения по умолчанию хранит ежедневную точку восстановления в течение 30 дней. С помощью политики по умолчанию можно быстро защитить виртуальную машину. Кроме того, политику можно изменить позже, задав другие сведения.

Для получения списка политик защиты в хранилище используется командлет Get-AzRecoveryServicesBackupProtectionPolicy. С его помощью можно получить конкретную политику или просмотреть политики, связанные с типом рабочей нагрузки. В следующем примере возвращаются политики для типа рабочей нагрузки AzureVM.

Get-AzRecoveryServicesBackupProtectionPolicy -WorkloadType "AzureVM" -VaultId $targetVault.ID

Вы должны увидеть результат, аналогичный приведенному ниже.

Name                 WorkloadType       BackupManagementType BackupTime                DaysOfWeek
----                 ------------       -------------------- ----------                ----------
DefaultPolicy        AzureVM            AzureVM              4/14/2016 5:00:00 PM

Примечание.

Часовой пояс поля BackupTime в PowerShell — UTC. Однако при отображении времени архивации на портале Azure время меняется в соответствии с локальным часовым поясом.

Политика защиты архивации связана по крайней мере с одной политикой хранения. Политика хранения определяет продолжительность хранения точки восстановления до ее удаления.

  • Для просмотра политики хранения по умолчанию используется командлет Get-AzRecoveryServicesBackupRetentionPolicyObject.
  • Аналогичным образом для получения политики расписания по умолчанию используется командлет Get-AzRecoveryServicesBackupSchedulePolicyObject.
  • Командлет New-AzRecoveryServicesBackupProtectionPolicy создает объект PowerShell, который содержит сведения о политике архивации.
  • Объекты политик расписания и хранения используются в качестве входных данных в командлете New-AzRecoveryServicesBackupProtectionPolicy.

По умолчанию время запуска определено в объекте политики Schedule. Используйте следующий пример, чтобы изменить время запуска на нужное значение. Требуемое время запуска также должно быть в формате UTC. В следующем примере предполагается, что требуемое время запуска для ежедневного резервного копирования — 01:00 UTC.

$schPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType "AzureVM"
$UtcTime = Get-Date -Date "2019-03-20 01:00:00Z"
$UtcTime = $UtcTime.ToUniversalTime()
$schpol.ScheduleRunTimes[0] = $UtcTime

Важно!

Время запуска должно быть указано с кратностью 30 минут. В приведенном выше примере это может быть только "01:00:00" или "02:30:00". Время запуска не может быть равным "01:15:00".

В следующем примере показано сохранение политик расписания и хранения в переменных. В примере эти переменные используются для определения параметров при создании политики защиты NewPolicy.

$retPol = Get-AzRecoveryServicesBackupRetentionPolicyObject -WorkloadType "AzureVM"
New-AzRecoveryServicesBackupProtectionPolicy -Name "NewPolicy" -WorkloadType "AzureVM" -RetentionPolicy $retPol -SchedulePolicy $schPol -VaultId $targetVault.ID

Вы должны увидеть результат, аналогичный приведенному ниже.

Name                 WorkloadType       BackupManagementType BackupTime                DaysOfWeek
----                 ------------       -------------------- ----------                ----------
NewPolicy           AzureVM            AzureVM              4/24/2016 1:30:00 AM

Включить защиту

После определения политики защиты по-прежнему необходимо включить политику для элемента. Для включения защиты используется командлет Enable-AzRecoveryServicesBackupProtection. Защита включается для двух объектов: элемента и политики. После того как политика сопоставится с хранилищем, рабочий процесс архивации будет активироваться по времени, определенному в политике расписания.

Важно!

При использовании PowerShell для одновременного резервного копирования нескольких виртуальных машин убедитесь, что с одной политикой связано не более 100 виртуальных машин. Это рекомендуемый метод. В настоящее время клиент PowerShell не выполняет явную блокировку при наличии более 100 виртуальных машин, но в будущем планируется добавить проверку.

В следующих примерах включается защита для элемента V2VM с помощью политики NewPolicy. Примеры отличаются в зависимости от того, зашифрована ли виртуальная машина и какой у нее тип шифрования.

Включение защиты на виртуальных машинах Resource Manager без шифрования

$pol = Get-AzRecoveryServicesBackupProtectionPolicy -Name "NewPolicy" -VaultId $targetVault.ID
Enable-AzRecoveryServicesBackupProtection -Policy $pol -Name "V2VM" -ResourceGroupName "RGName1" -VaultId $targetVault.ID

Чтобы включить защиту на зашифрованных виртуальных машинах (зашифрованных с помощью BEK и KEK), необходимо предоставить службе Azure Backup разрешения на доступ для чтения ключей и секретов из хранилища ключей.

Set-AzKeyVaultAccessPolicy -VaultName "KeyVaultName" -ResourceGroupName "RGNameOfKeyVault" -PermissionsToKeys backup,get,list -PermissionsToSecrets get,list -ServicePrincipalName 262044b1-e2ce-469f-a196-69ab7ada62d3
$pol = Get-AzRecoveryServicesBackupProtectionPolicy -Name "NewPolicy" -VaultId $targetVault.ID
Enable-AzRecoveryServicesBackupProtection -Policy $pol -Name "V2VM" -ResourceGroupName "RGName1" -VaultId $targetVault.ID

Чтобы включить защиту на зашифрованных виртуальных машинах (зашифрованных только с помощью BEK), необходимо предоставить службе архивации Azure разрешения на доступ для чтения секретов из хранилища ключей.

Set-AzKeyVaultAccessPolicy -VaultName "KeyVaultName" -ResourceGroupName "RGNameOfKeyVault" -PermissionsToSecrets backup,get,list -ServicePrincipalName 262044b1-e2ce-469f-a196-69ab7ada62d3
$pol = Get-AzRecoveryServicesBackupProtectionPolicy -Name "NewPolicy" -VaultId $targetVault.ID
Enable-AzRecoveryServicesBackupProtection -Policy $pol -Name "V2VM" -ResourceGroupName "RGName1" -VaultId $targetVault.ID

Примечание.

Если вы работаете в облаке Azure для государственных организаций, используйте значение ff281ffe-705c-4f53-9f37-a40e6f2c68f3 для параметра ServicePrincipalName в командлете Set-AzKeyVaultAccessPolicy.

Если вы хотите выборочно создать резервные копии для нескольких дисков и исключить другие, как упоминалось в этих сценариях, можно настроить защиту и резервное копирование только для соответствующих дисков, как описано здесь.

Наблюдение за выполнением задания резервного копирования

Вы можете отслеживать длительные операции, например задания резервного копирования, без использования портала Azure. Чтобы получить состояние выполняющегося задания, используйте командлет Get-AzRecoveryservicesBackupJob. Этот командлет возвращает задания резервного копирования для конкретного хранилища, и это хранилище указывается в контексте хранилища. Следующий пример возвращает состояние выполняющегося задания в виде массива и сохраняет состояние в переменной $joblist.

$joblist = Get-AzRecoveryservicesBackupJob –Status "InProgress" -VaultId $targetVault.ID
$joblist[0]

Вы должны увидеть результат, аналогичный приведенному ниже.

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   ----------
V2VM             Backup               InProgress            4/23/2016                5:00:30 PM                cf4b3ef5-2fac-4c8e-a215-d2eba4124f27

Вместо опроса этих заданий о ходе их выполнения, который требует выполнения дополнительного кода, используйте командлет Wait-AzRecoveryServicesBackupJob. Он приостанавливает выполнение сценария до завершения задания или до достижения конкретного значения времени ожидания.

Wait-AzRecoveryServicesBackupJob -Job $joblist[0] -Timeout 43200 -VaultId $targetVault.ID

Управление резервными копиями виртуальных машин Azure

Изменение политики защиты

Чтобы изменить политику защиты, используйте командлет Set-AzRecoveryServicesBackupProtectionPolicy для изменения объектов SchedulePolicy или RetentionPolicy.

Изменение запланированного времени

При создании политики защиты ей по умолчанию назначается время запуска. В следующих примерах показано, как изменить время запуска политики защиты.

$SchPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType "AzureVM"
$UtcTime = Get-Date -Date "2019-03-20 01:00:00Z" (This is the time that you want to start the backup)
$UtcTime = $UtcTime.ToUniversalTime()
$SchPol.ScheduleRunTimes[0] = $UtcTime
$pol = Get-AzRecoveryServicesBackupProtectionPolicy -Name "NewPolicy" -VaultId $targetVault.ID
Set-AzRecoveryServicesBackupProtectionPolicy -Policy $pol  -SchedulePolicy $SchPol -VaultId $targetVault.ID

Изменение срока хранения

В следующем примере количество дней хранения точки восстановления изменяется на 365.

$retPol = Get-AzRecoveryServicesBackupRetentionPolicyObject -WorkloadType "AzureVM"
$retPol.DailySchedule.DurationCountInDays = 365
$pol = Get-AzRecoveryServicesBackupProtectionPolicy -Name "NewPolicy" -VaultId $targetVault.ID
Set-AzRecoveryServicesBackupProtectionPolicy -Policy $pol  -RetentionPolicy $RetPol -VaultId $targetVault.ID

Настройка хранения моментальных снимков мгновенного восстановления

Примечание.

Начиная с версии Azure PowerShell версии 1.6.0 можно изменить период хранения моментальных снимков мгновенного восстановления в политике с помощью PowerShell.

$bkpPol = Get-AzRecoveryServicesBackupProtectionPolicy -WorkloadType "AzureVM" -VaultId $targetVault.ID
$bkpPol.SnapshotRetentionInDays=7
Set-AzRecoveryServicesBackupProtectionPolicy -policy $bkpPol -VaultId $targetVault.ID

По умолчанию будет использоваться значение 2. Можно задать значение от 1 до 5. Для политик еженедельного резервного копирования период имеет значение 5, и его невозможно изменить.

Создание группы ресурсов Azure Backup во время хранения моментальных снимков

Примечание.

Начиная с версии Azure PowerShell 3.7.0 можно создать и изменить группу ресурсов, созданную для хранения мгновенных моментальных снимков.

Дополнительные сведения о правилах создания групп ресурсов и другую полезную информацию см. в документации по группе ресурсов Azure Backup для виртуальных машин.

$bkpPol = Get-AzureRmRecoveryServicesBackupProtectionPolicy -name "DefaultPolicyForVMs"
$bkpPol.AzureBackupRGName="Contosto_"
$bkpPol.AzureBackupRGNameSuffix="ForVMs"
Set-AzureRmRecoveryServicesBackupProtectionPolicy -policy $bkpPol

Исключение дисков для защищенной виртуальной машины

Служба резервного копирования виртуальных машин Azure позволяет выборочно исключать и включать диски, что полезно в этих сценариях. Если виртуальная машина уже защищена службой резервного копирования виртуальных машин Azure и при этом выполняется резервное копирование всех дисков, можно изменить защиту, чтобы выборочно включить или исключить диски, как описано здесь.

Активация архивации

Для активации задания резервного копирования используйте командлет Backup-AzRecoveryServicesBackupItem. Если это начальная архивация, она будет полной. При последующем выполнении архивации резервная копия будет добавочной. В следующем примере резервная копия виртуальной машины будет храниться в течение 60 дней.

$namedContainer = Get-AzRecoveryServicesBackupContainer -ContainerType "AzureVM" -Status "Registered" -FriendlyName "V2VM" -VaultId $targetVault.ID
$item = Get-AzRecoveryServicesBackupItem -Container $namedContainer -WorkloadType "AzureVM" -VaultId $targetVault.ID
$endDate = (Get-Date).AddDays(60).ToUniversalTime()
$job = Backup-AzRecoveryServicesBackupItem -Item $item -VaultId $targetVault.ID -ExpiryDateTimeUTC $endDate

Вы должны увидеть результат, аналогичный приведенному ниже.

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   ----------
V2VM              Backup              InProgress          4/23/2016                  5:00:30 PM                cf4b3ef5-2fac-4c8e-a215-d2eba4124f27

Примечание.

Часовой пояс для полей StartTime и EndTime в PowerShell — UTC. Однако при отображении времени на портале Azure время меняется в соответствии с локальным часовым поясом.

Изменение политики для элементов резервных копий

Можно внести изменения в существующую политику или изменить политику для элемента резервного копирования с Policy1 на Policy2. Чтобы переключить политики для архивированного элемента, извлеките соответствующую политику и элемент резервной копии и примените команду Enable-AzRecoveryServices с этим элементом в качестве параметра.

$TargetPol1 = Get-AzRecoveryServicesBackupProtectionPolicy -Name <PolicyName> -VaultId $targetVault.ID
$anotherBkpItem = Get-AzRecoveryServicesBackupItem -WorkloadType AzureVM -BackupManagementType AzureVM -Name "<BackupItemName>" -VaultId $targetVault.ID
Enable-AzRecoveryServicesBackupProtection -Item $anotherBkpItem -Policy $TargetPol1 -VaultId $targetVault.ID

Команда ожидает завершения настройки резервного копирования и возвращает следующие выходные данные.

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
TestVM           ConfigureBackup      Completed            3/18/2019 8:00:21 PM      3/18/2019 8:02:16 PM      654e8aa2-4096-402b-b5a9-e5e71a496c4e

Отключение защиты

Сохранение данных

Если нужно отключить защиту, можно использовать командлет PowerShell Disable-AzRecoveryServicesBackupProtection. Это остановит создание запланированных резервных копий, но данные, сохраненные до текущего момента, будут храниться неограниченное время.

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureVM -WorkloadType AzureVM -Name "<backup item name>" -VaultId $targetVault.ID
Disable-AzRecoveryServicesBackupProtection -Item $bkpItem -VaultId $targetVault.ID

Возобновить резервное копирование

Если защита остановлена и данные резервной копии сохранены, вы можете возобновить защиту еще раз. Необходимо назначить политику для обновленной защиты. Командлет аналогичен командлету из раздела Изменение политики для элементов резервного копирования.

$TargetPol1 = Get-AzRecoveryServicesBackupProtectionPolicy -Name <PolicyName> -VaultId $targetVault.ID
$anotherBkpItem = Get-AzRecoveryServicesBackupItem -WorkloadType AzureVM -BackupManagementType AzureVM -Name "<BackupItemName>" -VaultId $targetVault.ID
Enable-AzRecoveryServicesBackupProtection -Item $anotherBkpItem -Policy $TargetPol1 -VaultId $targetVault.ID

удаление резервных копий;

Чтобы полностью удалить сохраненные резервные копии данных из хранилища, добавьте флаг (аргумент) -RemoveRecoveryPoints для команды защиты disable.

Disable-AzRecoveryServicesBackupProtection -Item $bkpItem -VaultId $targetVault.ID -RemoveRecoveryPoints

Восстановление виртуальной машины Azure

Операции восстановления виртуальной машины через портал Azure и с помощью Azure PowerShell существенно отличаются. При использовании PowerShell операция восстановления завершается созданием дисков и сведений о конфигурации из точки восстановления. Виртуальная машина при операции восстановления не создается. Чтобы создать виртуальную машину с диска, см. раздел Создание виртуальной машины с восстановленного диска. Чтобы восстановить несколько файлов из резервной копии виртуальной машины Azure без восстановления всей виртуальной машины, изучите раздел о восстановлении файлов.

Совет

Виртуальная машина при операции восстановления не создается.

На следующем рисунке показана иерархия объектов снизу RecoveryServicesVault до .BackupRecoveryPoint

Screenshot shows the BackupContainer listed by Recovery Services object hierarchy.

Чтобы восстановить данные резервной копии, определите архивный элемент и точку восстановления, которая содержит данные на определенный момент времени. Выполните командлет Restore-AzRecoveryServicesBackupItem, чтобы восстановить данные из хранилища в свою учетную запись.

Ниже перечислены основные шаги для восстановления виртуальной машины Azure.

  • Выберите виртуальную машину.
  • Выберите точку восстановления.
  • Восстановите диски.
  • Создайте виртуальную машину с хранимых дисков.

Теперь можно также использовать PowerShell для непосредственного восстановления содержимого резервной копии на виртуальной машине (исходной или новой), не выполняя описанные выше действия отдельно. Дополнительные сведения см. в разделе Восстановление данных на виртуальную машину с помощью PowerShell.

Выбор виртуальной машины (при восстановлении файлов)

Чтобы получить объект PowerShell, определяющий правильный архивный элемент, начните с контейнера в хранилище и пройдите постепенно вниз по иерархии объектов. Чтобы выбрать контейнер, который представляет виртуальную машину, используйте командлет Get-AzRecoveryServicesBackupContainer и передайте найденный контейнер в командлет Get-AzRecoveryServicesBackupItem.

$namedContainer = Get-AzRecoveryServicesBackupContainer  -ContainerType "AzureVM" -Status "Registered" -FriendlyName "V2VM" -VaultId $targetVault.ID
$backupitem = Get-AzRecoveryServicesBackupItem -Container $namedContainer  -WorkloadType "AzureVM" -VaultId $targetVault.ID

Выбор точки восстановления (при восстановлении файлов)

Выполните командлет Get-AzRecoveryServicesBackupRecoveryPoint, чтобы получить полный список точек восстановления. Выберите нужную точку восстановления. Если вы не знаете, какую точку восстановления выбрать, используйте последнюю точку RecoveryPointType = AppConsistent в списке.

В следующем сценарии переменная $rpпредставляет собой массив точек восстановления для выбранного архивного элемента за последние семь дней. Массив сортируется по времени в обратном порядке, так что последняя точка восстановления получает индекс 0. Используйте стандартное индексирование массива PowerShell для выбора точки восстановления. В примере $rp[0] выбирает последнюю точку восстановления.

$startDate = (Get-Date).AddDays(-7)
$endDate = Get-Date
$rp = Get-AzRecoveryServicesBackupRecoveryPoint -Item $backupitem -StartDate $startdate.ToUniversalTime() -EndDate $enddate.ToUniversalTime() -VaultId $targetVault.ID
$rp[0]

Вы должны увидеть результат, аналогичный приведенному ниже.

RecoveryPointAdditionalInfo :
SourceVMStorageType         : NormalStorage
Name                        : 15260861925810
ItemName                    : VM;iaasvmcontainer;RGName1;V2VM
RecoveryPointId             : /subscriptions/XX/resourceGroups/ RGName1/providers/Microsoft.RecoveryServices/vaults/testvault/backupFabrics/Azure/protectionContainers/IaasVMContainer;iaasvmcontainer;RGName1;V2VM/protectedItems/VM;iaasvmcontainer; RGName1;V2VM/recoveryPoints/15260861925810
RecoveryPointType           : AppConsistent
RecoveryPointTime           : 4/23/2016 5:02:04 PM
WorkloadType                : AzureVM
ContainerName               : IaasVMContainer;iaasvmcontainer; RGName1;V2VM
ContainerType               : AzureVM
BackupManagementType        : AzureVM

Восстановление дисков

Выполните командлет Restore-AzRecoveryServicesBackupItem, чтобы восстановить данные и конфигурацию элемента резервного копирования до точки восстановления. Используйте выбранную точку восстановления как значение для параметра -RecoveryPoint. В предыдущем примере была выбрана точка восстановления $rp[0]. В следующем примере кода $rp[0] является точкой восстановления, которая используется для восстановления диска.

Восстановление дисков и сведений о конфигурации

$restorejob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $rp[0] -StorageAccountName "DestAccount" -StorageAccountResourceGroupName "DestRG" -VaultId $targetVault.ID
$restorejob

Восстановление управляемых дисков

Примечание.

Если в резервной копии виртуальной машины содержатся управляемые диски и их необходимо восстановить в качестве управляемых, вы можете это сделать с помощью модуля RM Azure PowerShell 6.7.0. и более поздних версий.

Укажите дополнительный параметр TargetResourceGroupName для указания группы ресурсов, в которой будут восстановлены управляемые диски.

Важно!

Настоятельно рекомендуется использовать параметр TargetResourceGroupName для восстановления управляемых дисков, поскольку это приведет к значительному повышению производительности. Если этот параметр не задан, вы не сможете воспользоваться функцией мгновенного восстановления и операция восстановления будет выполняться медленнее. Если управляемые диски необходимо восстановить в качестве неуправляемых, не указывайте этот параметр и задайте параметр -RestoreAsUnmanagedDisks. Параметр -RestoreAsUnmanagedDisks доступен в Azure PowerShell 3.7.0 и более поздних версий. В будущих версиях использование одного из этих параметров будет обязательным для правильного восстановления.

$restorejob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $rp[0] -StorageAccountName "DestAccount" -StorageAccountResourceGroupName "DestRG" -TargetResourceGroupName "DestRGforManagedDisks" -VaultId $targetVault.ID

Файл VMConfig.JSON будет восстановлен в учетной записи хранения, а управляемые диски — в указанной целевой группе ресурсов.

Вы должны увидеть результат, аналогичный приведенному ниже.

WorkloadName     Operation          Status               StartTime                 EndTime            JobID
------------     ---------          ------               ---------                 -------          ----------
V2VM              Restore           InProgress           4/23/2016 5:00:30 PM                        cf4b3ef5-2fac-4c8e-a215-d2eba4124f27

Чтобы дождаться завершения задания восстановления, используйте командлет Wait-AzRecoveryServicesBackupJob.

Wait-AzRecoveryServicesBackupJob -Job $restorejob -Timeout 43200

Когда задание восстановления будет выполнено, выполните командлет Get-AzRecoveryServicesBackupJobDetail, чтобы получить сведения об операции восстановления. Свойство JobDetails содержит сведения, необходимые для повторного создания виртуальной машины.

$restorejob = Get-AzRecoveryServicesBackupJob -Job $restorejob -VaultId $targetVault.ID
$details = Get-AzRecoveryServicesBackupJobDetail -Job $restorejob -VaultId $targetVault.ID

Использование управляемого удостоверения для восстановления дисков

Azure Backup также позволяет использовать управляемое удостоверение (MSI) во время операции восстановления для доступа к учетным записям хранения, в которые необходимо восстановить диски. В настоящее время этот параметр поддерживается только для восстановления управляемого диска.

Если вы хотите восстановить диски с помощью системного удостоверения, назначенного системой, передайте дополнительный флаг -UseSystemAssignedIdentity команде Restore-AzRecoveryServicesBackupItem. Если вы хотите использовать управляемое удостоверение, назначаемое пользователем, передайте параметр -UserAssignedIdentityId и идентификатор Azure Resource Manager управляемого удостоверения хранилища в качестве значения этого параметра. Сведения о том, как включить управляемое удостоверение для хранилищ, см. в этой статье.

Восстановление выборочных дисков

Пользователь может выборочно восстановить несколько дисков вместо всего набора резервного копирования. Укажите номера LUN необходимых дисков в качестве параметра, чтобы восстановить только их вместо всего набора, как описано здесь.

Важно!

Для выборочного восстановления дисков необходимо выборочно создать их резервные копии. Дополнительные сведения см. здесь.

Восстановив диски, перейдите к следующему разделу по созданию виртуальной машины.

Восстановление дисков в дополнительном регионе

Если для хранилища, с помощью которого защищены виртуальные машины, включено восстановление между регионами, резервные копии данных реплицируются в дополнительный регион. Резервные копии данных можно использовать для восстановления. Чтобы активировать восстановление в дополнительном регионе, выполните следующие действия.

  1. Получите идентификатор хранилища, с помощью которого защищены виртуальные машины.

  2. Выберите правильный элемент резервного копирования для восстановления.

  3. Выберите соответствующую точку восстановления в дополнительном регионе, который будет использоваться для восстановления.

    Чтобы выполнить этот шаг, выполните следующую команду:

    $rp=Get-AzRecoveryServicesBackupRecoveryPoint -UseSecondaryRegion -Item $backupitem -VaultId $targetVault.ID
    $rp=$rp[0]
    
  4. Выполните командлет Restore-AzRecoveryServicesBackupItem с параметром -RestoreToSecondaryRegion, чтобы активировать восстановление в дополнительном регионе.

    Чтобы выполнить этот шаг, выполните следующую команду:

    $restorejob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $rp[0] -StorageAccountName "DestAccount" -StorageAccountResourceGroupName "DestRG" -TargetResourceGroupName "DestRGforManagedDisks" -VaultId $targetVault.ID -VaultLocation $targetVault.Location -RestoreToSecondaryRegion -RestoreOnlyOSDisk
    

    Результат будет выглядеть примерно так:

    WorkloadName     Operation             Status              StartTime                 EndTime          JobID
    ------------     ---------             ------              ---------                 -------          ----------
    V2VM             CrossRegionRestore   InProgress           4/23/2016 5:00:30 PM                       cf4b3ef5-2fac-4c8e-a215-d2eba4124f27
    
  5. Выполните командлет Get-AzRecoveryServicesBackupJob с параметром -UseSecondaryRegion для отслеживания задания восстановления.

    Чтобы выполнить этот шаг, выполните следующую команду:

    Get-AzRecoveryServicesBackupJob -From (Get-Date).AddDays(-7).ToUniversalTime() -To (Get-Date).ToUniversalTime() -UseSecondaryRegion -VaultId $targetVault.ID
    

    Результат будет выглядеть примерно так:

    WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
    ------------     ---------            ------               ---------                 -------                   -----
    V2VM             CrossRegionRestore   InProgress           2/8/2021 4:24:57 PM                                 2d071b07-8f7c-4368-bc39-98c7fb2983f7
    

Восстановление между зонами

Виртуальные машины Azure, прикрепленные к зонам, можно восстановить в любой зоне доступности одного региона.

Чтобы восстановить виртуальную машину в другой зоне, укажите параметр TargetZoneNumber в командлете Restore-AzRecoveryServicesBackupItem.

$restorejob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $rp[0] -StorageAccountName "DestAccount" -StorageAccountResourceGroupName "DestRG" -VaultId $targetVault.ID -TargetZoneNumber 3

Результат будет выглядеть примерно так:

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
zonevmeus2       Restore              InProgress           1/3/2022 10:27:20 AM                                b2298...

Восстановление между зонами поддерживается только в следующих сценариях:

  • Исходная виртуальная машина прикреплена к зоне и не зашифрована.
  • Точка восстановления существует только на уровне хранилища. Не поддерживаются восстановление только моментальных снимков или моментальных снимков и уровня хранилища.
  • Для восстановления можно создать новую виртуальную машину или восстановить диски. Параметр "Замена дисков" заменяет исходные данные, следовательно, параметр зоны доступности не применим.
  • Создание виртуальных машин или дисков в одном регионе, если используется хранилище, избыточное между зонами. Обратите внимание, что этот вариант не работает, если хранилище является геоизбыточным, даже если исходная виртуальная машина прикреплена к зоне.
  • Создание виртуальных машин или дисков в связанном регионе, если включена избыточность хранилища для восстановления между регионами и связанный регион поддерживает зоны.

Замена дисков в виртуальной машине Azure

Чтобы заменить диски и сведения о конфигурации, выполните следующие действия.

Создание виртуальной машины с восстановленного диска

После восстановления дисков создайте и настройте виртуальную машину с диска, выполнив описанные ниже действия.

Примечание.

  1. Требуется модуль AzureAz 3.0.0 или более поздней версии.
  2. При создании зашифрованных виртуальных машин с помощью восстановленных дисков у роли Azure должно быть разрешение на выполнение действия Microsoft.KeyVault/vaults/deploy/action. Если у роли нет этого разрешения, создайте настраиваемую роль с этим действием. Дополнительные сведения см. в статье Настраиваемые роли Azure.
  3. После восстановления дисков можно получить шаблон развертывания, который можно использовать непосредственно для создания виртуальной машины. Для создания управляемых и неуправляемых зашифрованных и незашифрованных виртуальных машин вам больше не понадобятся различные командлеты PowerShell.

Создание виртуальной машины с помощью шаблона развертывания

В подробных сведениях о результирующем задании указан URI шаблона, который можно получить и развернуть.

   $properties = $details.properties
   $storageAccountName = $properties["Target Storage Account Name"]
   $containerName = $properties["Config Blob Container Name"]
   $templateBlobURI = $properties["Template Blob Uri"]

Этот шаблон недоступен напрямую, так как он находится в учетной записи хранения клиента, в указанном контейнере. Для доступа к этому шаблону требуется полный URL-адрес (вместе с временным маркером SAS).

  1. Сначала извлеките имя шаблона из templateBlobURI. Этот формат упоминается ниже. Для извлечения окончательного имени шаблона из этого URL-адреса можно использовать операцию разделения в PowerShell.

    https://<storageAccountName.blob.core.windows.net>/<containerName>/<templateName>
    
  2. Затем можно создать полный URL-адрес, как описано здесь.

    Set-AzCurrentStorageAccount -Name $storageAccountName -ResourceGroupName <StorageAccount RG name>
    $templateBlobFullURI = New-AzStorageBlobSASToken -Container $containerName -Blob <templateName> -Permission r -FullUri
    
  3. Разверните шаблон, чтобы создать виртуальную машину, как описано здесь.

    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup -TemplateUri $templateBlobFullURI
    

Создание виртуальной машины с помощью файла конфигурации

В следующем разделе перечислены действия, необходимые для создания виртуальной машины с помощью VMConfig файла.

Примечание.

Для создания виртуальной машины настоятельно рекомендуется использовать шаблон развертывания, описанный выше. Действия, указанные в этом разделе (пункты 1–6), скоро перестанут использоваться.

  1. Запросите свойства восстановленного диска для получения сведений о задании.

    $properties = $details.properties
    $storageAccountName = $properties["Target Storage Account Name"]
    $containerName = $properties["Config Blob Container Name"]
    $configBlobName = $properties["Config Blob Name"]
    
  2. Задайте контекст хранилища Azure и восстановите файл конфигурации JSON.

    Set-AzCurrentStorageAccount -Name $storageaccountname -ResourceGroupName "testvault"
    $destination_path = "C:\vmconfig.json"
    Get-AzStorageBlobContent -Container $containerName -Blob $configBlobName -Destination $destination_path
    $obj = ((Get-Content -Path $destination_path -Raw -Encoding Unicode)).TrimEnd([char]0x00) | ConvertFrom-Json
    
  3. Используйте файл конфигурации JSON для создания конфигурации виртуальной машины.

    $vm = New-AzVMConfig -VMSize $obj.'properties.hardwareProfile'.vmSize -VMName "testrestore"
    
  4. Подключите диск операционной системы и диски данных. Здесь приводятся примеры для различных конфигураций управляемых и зашифрованных виртуальных машин. Используйте пример, подходящий для вашей конфигурации виртуальных машин.

    • Используйте следующий пример для неуправляемой виртуальной машины без шифрования.
        Set-AzVMOSDisk -VM $vm -Name "osdisk" -VhdUri $obj.'properties.StorageProfile'.osDisk.vhd.Uri -CreateOption "Attach"
        $vm.StorageProfile.OsDisk.OsType = $obj.'properties.StorageProfile'.OsDisk.OsType
        foreach($dd in $obj.'properties.StorageProfile'.DataDisks)
        {
            $vm = Add-AzVMDataDisk -VM $vm -Name "datadisk1" -VhdUri $dd.vhd.Uri -DiskSizeInGB 127 -Lun $dd.Lun -CreateOption "Attach"
        }
    
    • Неуправляемые и зашифрованные виртуальные машины с идентификатором Microsoft Entra ID (только BEK) — для неуправляемых зашифрованных виртуальных машин с идентификатором Microsoft Entra (зашифрованным только с помощью BEK), необходимо восстановить секрет в хранилище ключей, прежде чем подключить диски. Дополнительные сведения см. в статье Восстановление ключа и секрета в хранилище ключей для зашифрованных виртуальных машин с помощью службы Azure Backup. В следующем примере показано, как подключить диски операционной системы и диски данных к зашифрованной виртуальной машине. При указании диска операционной системы указывайте соответствующий тип операционной системы.
        $dekUrl = "https://ContosoKeyVault.vault.azure.net:443/secrets/ContosoSecret007/xx000000xx0849999f3xx30000003163"
        $dekUrl = "/subscriptions/abcdedf007-4xyz-1a2b-0000-12a2b345675c/resourceGroups/ContosoRG108/providers/Microsoft.KeyVault/vaults/ContosoKeyVault"
        Set-AzVMOSDisk -VM $vm -Name "osdisk" -VhdUri $obj.'properties.storageProfile'.osDisk.vhd.uri -DiskEncryptionKeyUrl $dekUrl -DiskEncryptionKeyVaultId $keyVaultId -CreateOption "Attach" -Windows/Linux
        $vm.StorageProfile.OsDisk.OsType = $obj.'properties.storageProfile'.osDisk.osType
        foreach($dd in $obj.'properties.storageProfile'.dataDisks)
        {
        $vm = Add-AzVMDataDisk -VM $vm -Name "datadisk1" -VhdUri $dd.vhd.Uri -DiskSizeInGB 127 -Lun $dd.Lun -CreateOption "Attach"
        }
    
        $dekUrl = "https://ContosoKeyVault.vault.azure.net:443/secrets/ContosoSecret007/xx000000xx0849999f3xx30000003163"
        $kekUrl = "https://ContosoKeyVault.vault.azure.net:443/keys/ContosoKey007/x9xxx00000x0000x9b9949999xx0x006"
        $keyVaultId = "/subscriptions/abcdedf007-4xyz-1a2b-0000-12a2b345675c/resourceGroups/ContosoRG108/providers/Microsoft.KeyVault/vaults/ContosoKeyVault"
        Set-AzVMOSDisk -VM $vm -Name "osdisk" -VhdUri $obj.'properties.storageProfile'.osDisk.vhd.uri -DiskEncryptionKeyUrl $dekUrl -DiskEncryptionKeyVaultId $keyVaultId -KeyEncryptionKeyUrl $kekUrl -KeyEncryptionKeyVaultId $keyVaultId -CreateOption "Attach" -Windows
        $vm.StorageProfile.OsDisk.OsType = $obj.'properties.storageProfile'.osDisk.osType
        foreach($dd in $obj.'properties.storageProfile'.dataDisks)
        {
        $vm = Add-AzVMDataDisk -VM $vm -Name "datadisk1" -VhdUri $dd.vhd.Uri -DiskSizeInGB 127 -Lun $dd.Lun -CreateOption "Attach"
        }
    
    • Неуправляемые и зашифрованные виртуальные машины без идентификатора Microsoft Entra (только BEK) — для неуправляемых виртуальных машин без идентификатора Microsoft Entra (зашифрованных только с помощью BEK), если исходный ключ и секрет недоступны для восстановления секретов в хранилище ключей с помощью процедуры восстановления без шифрования виртуальной машины из точки восстановления Azure Backup. Затем выполните следующие скрипты, чтобы задать сведения о шифровании для большого двоичного объекта с восстановленной операционной системой (этот шаг необязателен для больших двоичных объектов данных). $dekurl можно извлечь из восстановленного хранилища ключей.

    Приведенный ниже скрипт нужно выполнять только в том случае, если в исходном хранилище ключей недоступны секреты.

        $dekUrl = "https://ContosoKeyVault.vault.azure.net/secrets/ContosoSecret007/xx000000xx0849999f3xx30000003163"
        $keyVaultId = "/subscriptions/abcdedf007-4xyz-1a2b-0000-12a2b345675c/resourceGroups/ContosoRG108/providers/Microsoft.KeyVault/vaults/ContosoKeyVault"
        $encSetting = "{""encryptionEnabled"":true,""encryptionSettings"":[{""diskEncryptionKey"":{""sourceVault"":{""id"":""$keyVaultId""},""secretUrl"":""$dekUrl""}}]}"
        $osBlobName = $obj.'properties.StorageProfile'.osDisk.name + ".vhd"
        $osBlob = Get-AzStorageBlob -Container $containerName -Blob $osBlobName
        $osBlob.ICloudBlob.Metadata["DiskEncryptionSettings"] = $encSetting
        $osBlob.ICloudBlob.SetMetadata()
    

    После того как секреты станут доступны и будут установлены сведения о шифровании для большого двоичного объекта операционной системы, подключите диски, используя скрипт, приведенный ниже.

    Если в исходном хранилище ключей секреты уже доступны, приведенный выше скрипт выполнять не нужно.

        Set-AzVMOSDisk -VM $vm -Name "osdisk" -VhdUri $obj.'properties.StorageProfile'.osDisk.vhd.Uri -CreateOption "Attach"
        $vm.StorageProfile.OsDisk.OsType = $obj.'properties.StorageProfile'.OsDisk.OsType
        foreach($dd in $obj.'properties.StorageProfile'.DataDisks)
        {
        $vm = Add-AzVMDataDisk -VM $vm -Name "datadisk1" -VhdUri $dd.vhd.Uri -DiskSizeInGB 127 -Lun $dd.Lun -CreateOption "Attach"
        }
    
    • Неуправляемые и зашифрованные виртуальные машины без идентификатора Microsoft Entra (BEK и KEK) — для неуправляемых виртуальных машин без идентификатора Microsoft Entra (зашифрованных с помощью BEK и KEK), если исходный ключ и ключ/секрет недоступны для восстановления ключа и секретов в хранилище ключей с помощью процедуры восстановления не зашифрованной виртуальной машины из точки восстановления Azure Backup. Затем выполните следующие скрипты, чтобы задать сведения о шифровании для большого двоичного объекта с восстановленной операционной системой (этот шаг необязателен для больших двоичных объектов данных). $dekurl и $kekurl можно извлечь из восстановленного хранилища ключей.

    Приведенный ниже скрипт нужно выполнять только в том случае, если в исходном хранилище ключей недоступны ключи и секреты.

        $dekUrl = "https://ContosoKeyVault.vault.azure.net/secrets/ContosoSecret007/xx000000xx0849999f3xx30000003163"
        $kekUrl = "https://ContosoKeyVault.vault.azure.net/keys/ContosoKey007/x9xxx00000x0000x9b9949999xx0x006"
        $keyVaultId = "/subscriptions/abcdedf007-4xyz-1a2b-0000-12a2b345675c/resourceGroups/ContosoRG108/providers/Microsoft.KeyVault/vaults/ContosoKeyVault"
        $encSetting = "{""encryptionEnabled"":true,""encryptionSettings"":[{""diskEncryptionKey"":{""sourceVault"":{""id"":""$keyVaultId""},""secretUrl"":""$dekUrl""},""keyEncryptionKey"":{""sourceVault"":{""id"":""$keyVaultId""},""keyUrl"":""$kekUrl""}}]}"
        $osBlobName = $obj.'properties.StorageProfile'.osDisk.name + ".vhd"
        $osBlob = Get-AzStorageBlob -Container $containerName -Blob $osBlobName
        $osBlob.ICloudBlob.Metadata["DiskEncryptionSettings"] = $encSetting
        $osBlob.ICloudBlob.SetMetadata()
    

    После того как ключи или секреты станут доступны и будут установлены сведения о шифровании для большого двоичного объекта операционной системы, подключите диски, используя скрипт, приведенный ниже.

    Если в исходном хранилище ключей ключи и секреты уже доступны, приведенный выше скрипт выполнять не нужно.

        Set-AzVMOSDisk -VM $vm -Name "osdisk" -VhdUri $obj.'properties.StorageProfile'.osDisk.vhd.Uri -CreateOption "Attach"
        $vm.StorageProfile.OsDisk.OsType = $obj.'properties.StorageProfile'.OsDisk.OsType
        foreach($dd in $obj.'properties.StorageProfile'.DataDisks)
        {
        $vm = Add-AzVMDataDisk -VM $vm -Name "datadisk1" -VhdUri $dd.vhd.Uri -DiskSizeInGB 127 -Lun $dd.Lun -CreateOption "Attach"
        }
    
    • Управляемые и незашифрованные виртуальные машины. Для управляемых незашифрованных виртуальных машин подключите восстановленные управляемые диски. Более подробные сведения см. в статье Подключение диска данных к виртуальной машине Windows с помощью PowerShell.

    • Управляемые и зашифрованные виртуальные машины с идентификатором Microsoft Entra (только BEK) — для управляемых зашифрованных виртуальных машин с идентификатором Microsoft Entra (зашифрованным только с помощью BEK), присоединяйте восстановленные управляемые диски. Более подробные сведения см. в статье Подключение диска данных к виртуальной машине Windows с помощью PowerShell.

    • Управляемые и зашифрованные виртуальные машины с идентификатором Microsoft Entra (BEK и KEK) — для управляемых зашифрованных виртуальных машин с идентификатором Microsoft Entra (зашифрованным с помощью BEK и KEK), подключите восстановленные управляемые диски. Более подробные сведения см. в статье Подключение диска данных к виртуальной машине Windows с помощью PowerShell.

    • Управляемые и зашифрованные виртуальные машины без идентификатора Microsoft Entra ID (только BEK) — для управляемых зашифрованных виртуальных машин без идентификатора Microsoft Entra (зашифрованных только с помощью BEK), если исходный ключ и секрет недоступны для восстановления секретов в хранилище ключей с помощью процедуры восстановления без шифрования виртуальной машины из точки восстановления Azure Backup. Затем выполните следующие скрипты, чтобы задать сведения о шифровании для восстановленного диска операционной системы (этот шаг необязателен для диска данных). $dekurl можно извлечь из восстановленного хранилища ключей.

    Приведенный ниже скрипт нужно выполнять только в том случае, если в исходном хранилище ключей недоступны секреты.

    $dekUrl = "https://ContosoKeyVault.vault.azure.net/secrets/ContosoSecret007/xx000000xx0849999f3xx30000003163"
    $keyVaultId = "/subscriptions/abcdedf007-4xyz-1a2b-0000-12a2b345675c/resourceGroups/ContosoRG108/providers/Microsoft.KeyVault/vaults/ContosoKeyVault"
    $diskupdateconfig = New-AzDiskUpdateConfig -EncryptionSettingsEnabled $true
    $encryptionSettingsElement = New-Object Microsoft.Azure.Management.Compute.Models.EncryptionSettingsElement
    $encryptionSettingsElement.DiskEncryptionKey = New-Object Microsoft.Azure.Management.Compute.Models.KeyVaultAndSecretReference
    $encryptionSettingsElement.DiskEncryptionKey.SourceVault = New-Object Microsoft.Azure.Management.Compute.Models.SourceVault
    $encryptionSettingsElement.DiskEncryptionKey.SourceVault.Id = $keyVaultId
    $encryptionSettingsElement.DiskEncryptionKey.SecretUrl = $dekUrl
    $diskupdateconfig.EncryptionSettingsCollection.EncryptionSettings = New-Object System.Collections.Generic.List[Microsoft.Azure.Management.Compute.Models.EncryptionSettingsElement]
    $diskupdateconfig.EncryptionSettingsCollection.EncryptionSettings.Add($encryptionSettingsElement)
    $diskupdateconfig.EncryptionSettingsCollection.EncryptionSettingsVersion = "1.1"
    Update-AzDisk -ResourceGroupName "testvault" -DiskName $obj.'properties.StorageProfile'.osDisk.name -DiskUpdate $diskupdateconfig
    

    После того как секреты станут доступны и на диске ОС будут установлены сведения о шифровании, выполните действия для подключения восстановленных управляемых дисков, приведенные в статье Подключение диска данных к виртуальной машине Windows с помощью PowerShell.

    • Управляемые и зашифрованные виртуальные машины без идентификатора Microsoft Entra (BEK и KEK) — для управляемых зашифрованных виртуальных машин без идентификатора Microsoft Entra (зашифрованных с помощью BEK и KEK), если исходный ключ/ключ/ключ/секрет недоступны для восстановления ключа и секретов в хранилище ключей с помощью процедуры восстановления без шифрования виртуальной машины из точки восстановления Azure Backup. Затем выполните следующие скрипты, чтобы задать сведения о шифровании для восстановленного диска операционной системы (этот шаг необязателен для дисков данных). $dekurl и $kekurl можно извлечь из восстановленного хранилища ключей.

    Приведенный ниже скрипт нужно выполнять только в том случае, если в исходном хранилище ключей недоступны ключи и секреты.

    $dekUrl = "https://ContosoKeyVault.vault.azure.net/secrets/ContosoSecret007/xx000000xx0849999f3xx30000003163"
    $kekUrl = "https://ContosoKeyVault.vault.azure.net/keys/ContosoKey007/x9xxx00000x0000x9b9949999xx0x006"
    $keyVaultId = "/subscriptions/abcdedf007-4xyz-1a2b-0000-12a2b345675c/resourceGroups/ContosoRG108/providers/Microsoft.KeyVault/vaults/ContosoKeyVault"
    $diskupdateconfig = New-AzDiskUpdateConfig -EncryptionSettingsEnabled $true
    $encryptionSettingsElement = New-Object Microsoft.Azure.Management.Compute.Models.EncryptionSettingsElement
    $encryptionSettingsElement.DiskEncryptionKey = New-Object Microsoft.Azure.Management.Compute.Models.KeyVaultAndSecretReference
    $encryptionSettingsElement.DiskEncryptionKey.SourceVault = New-Object Microsoft.Azure.Management.Compute.Models.SourceVault
    $encryptionSettingsElement.DiskEncryptionKey.SourceVault.Id = $keyVaultId
    $encryptionSettingsElement.DiskEncryptionKey.SecretUrl = $dekUrl
    $encryptionSettingsElement.KeyEncryptionKey = New-Object Microsoft.Azure.Management.Compute.Models.KeyVaultAndKeyReference
    $encryptionSettingsElement.KeyEncryptionKey.SourceVault = New-Object Microsoft.Azure.Management.Compute.Models.SourceVault
    $encryptionSettingsElement.KeyEncryptionKey.SourceVault.Id = $keyVaultId
    $encryptionSettingsElement.KeyEncryptionKey.KeyUrl = $kekUrl
    $diskupdateconfig.EncryptionSettingsCollection.EncryptionSettings = New-Object System.Collections.Generic.List[Microsoft.Azure.Management.Compute.Models.EncryptionSettingsElement]
    $diskupdateconfig.EncryptionSettingsCollection.EncryptionSettings.Add($encryptionSettingsElement)
    $diskupdateconfig.EncryptionSettingsCollection.EncryptionSettingsVersion = "1.1"
    Update-AzDisk -ResourceGroupName "testvault" -DiskName $obj.'properties.StorageProfile'.osDisk.name -DiskUpdate $diskupdateconfig
    

    После того как секреты станут доступны и на диске ОС будут установлены сведения о шифровании, выполните действия для подключения восстановленных управляемых дисков, приведенные в статье Подключение диска данных к виртуальной машине Windows c помощью PowerShell.

  5. Задайте параметры сети.

    $nicName="p1234"
    $pip = New-AzPublicIpAddress -Name $nicName -ResourceGroupName "test" -Location "WestUS" -AllocationMethod Dynamic
    $virtualNetwork = New-AzVirtualNetwork -ResourceGroupName "test" -Location "WestUS" -Name "testvNET" -AddressPrefix 10.0.0.0/16
    $virtualNetwork | Set-AzVirtualNetwork
    $vnet = Get-AzVirtualNetwork -Name "testvNET" -ResourceGroupName "test"
    $subnetindex=0
    $nic = New-AzNetworkInterface -Name $nicName -ResourceGroupName "test" -Location "WestUS" -SubnetId $vnet.Subnets[$subnetindex].Id -PublicIpAddressId $pip.Id
    $vm=Add-AzVMNetworkInterface -VM $vm -Id $nic.Id
    
  6. Создайте виртуальную машину.

    New-AzVM -ResourceGroupName "test" -Location "WestUS" -VM $vm
    
  7. Отправьте расширение ADE. Если расширения ADE не отправятся, диски данных будут помечены как незашифрованные, поэтому в обязательном порядке выполните указанные ниже действия.

    • Для виртуальной машины с идентификатором Microsoft Entra — используйте следующую команду, чтобы вручную включить шифрование дисков данных

      Виртуальные машины, использующие только BEK

      Set-AzVMDiskEncryptionExtension -ResourceGroupName $RG -VMName $vm.Name -AadClientID $aadClientID -AadClientSecret $aadClientSecret -DiskEncryptionKeyVaultUrl $dekUrl -DiskEncryptionKeyVaultId $keyVaultId -VolumeType Data
      

      Виртуальные машины, использующие BEK и KEK

      Set-AzVMDiskEncryptionExtension -ResourceGroupName $RG -VMName $vm.Name -AadClientID $aadClientID -AadClientSecret $aadClientSecret -DiskEncryptionKeyVaultUrl $dekUrl -DiskEncryptionKeyVaultId $keyVaultId  -KeyEncryptionKeyUrl $kekUrl -KeyEncryptionKeyVaultId $keyVaultId -VolumeType Data
      
    • Для виртуальной машины без идентификатора Microsoft Entra— используйте следующую команду, чтобы вручную включить шифрование дисков данных.

      Если во время выполнения команды запрашивается AADClientID, необходимо обновить Azure PowerShell.

      Виртуальные машины, использующие только BEK

      Set-AzVMDiskEncryptionExtension -ResourceGroupName $RG -VMName $vm.Name -DiskEncryptionKeyVaultUrl $dekUrl -DiskEncryptionKeyVaultId $keyVaultId -SkipVmBackup -VolumeType "All"
      

      Виртуальные машины, использующие BEK и KEK

      Set-AzVMDiskEncryptionExtension -ResourceGroupName $RG -VMName $vm.Name -DiskEncryptionKeyVaultUrl $dekUrl -DiskEncryptionKeyVaultId $keyVaultId -KeyEncryptionKeyUrl $kekUrl -KeyEncryptionKeyVaultId $keyVaultId -SkipVmBackup -VolumeType "All"
      

Примечание.

Обязательно вручную удалите файлы JASON, созданные в процессе восстановления диска зашифрованной виртуальной машины.

Восстановление файлов из резервной копии виртуальной машины Azure

Из резервной копии виртуальной машины Azure можно восстанавливать не только диски, но и отдельные файлы. Функция восстановления отдельных файлов предоставляет доступ ко всем файлам в точке восстановления. Управление файлами ведется через проводник, как обычно.

Основные шаги по восстановлению файла из резервной копии виртуальной машины Azure:

  • Выбор виртуальной машины.
  • Выбор точки восстановления
  • Подключение дисков точки восстановления
  • Копирование необходимых файлов.
  • Отключение диска.

Выбор виртуальной машины (при восстановлении виртуальной машины)

Чтобы получить объект PowerShell, определяющий правильный архивный элемент, начните с контейнера в хранилище и пройдите постепенно вниз по иерархии объектов. Чтобы выбрать контейнер, который представляет виртуальную машину, используйте командлет Get-AzRecoveryServicesBackupContainer и передайте найденный контейнер в командлет Get-AzRecoveryServicesBackupItem.

$namedContainer = Get-AzRecoveryServicesBackupContainer  -ContainerType "AzureVM" -Status "Registered" -FriendlyName "V2VM" -VaultId $targetVault.ID
$backupitem = Get-AzRecoveryServicesBackupItem -Container $namedContainer  -WorkloadType "AzureVM" -VaultId $targetVault.ID

Выбор точки восстановления (при восстановлении виртуальной машины)

Выполните командлет Get-AzRecoveryServicesBackupRecoveryPoint, чтобы получить полный список точек восстановления. Выберите нужную точку восстановления. Если вы не знаете, какую точку восстановления выбрать, используйте последнюю точку RecoveryPointType = AppConsistent в списке.

В следующем сценарии переменная $rpпредставляет собой массив точек восстановления для выбранного архивного элемента за последние семь дней. Массив сортируется по времени в обратном порядке, так что последняя точка восстановления получает индекс 0. Используйте стандартное индексирование массива PowerShell для выбора точки восстановления. В примере $rp[0] выбирает последнюю точку восстановления.

$startDate = (Get-Date).AddDays(-7)
$endDate = Get-Date
$rp = Get-AzRecoveryServicesBackupRecoveryPoint -Item $backupitem -StartDate $startdate.ToUniversalTime() -EndDate $enddate.ToUniversalTime() -VaultId $targetVault.ID
$rp[0]

Вы должны увидеть результат, аналогичный приведенному ниже.

RecoveryPointAdditionalInfo :
SourceVMStorageType         : NormalStorage
Name                        : 15260861925810
ItemName                    : VM;iaasvmcontainer;RGName1;V2VM
RecoveryPointId             : /subscriptions/XX/resourceGroups/ RGName1/providers/Microsoft.RecoveryServices/vaults/testvault/backupFabrics/Azure/protectionContainers/IaasVMContainer;iaasvmcontainer;RGName1;V2VM/protectedItems/VM;iaasvmcontainer; RGName1;V2VM/recoveryPoints/15260861925810
RecoveryPointType           : AppConsistent
RecoveryPointTime           : 4/23/2016 5:02:04 PM
WorkloadType                : AzureVM
ContainerName               : IaasVMContainer;iaasvmcontainer; RGName1;V2VM
ContainerType               : AzureVM
BackupManagementType        : AzureVM

Подключение дисков точки восстановления

Используйте командлет Get-AzRecoveryServicesBackupRPMountScript, чтобы получить скрипт для подключения всех дисков точки восстановления.

Примечание.

Диски подключаются к виртуальной машине, на которой выполняется скрипт, в качестве присоединенных дисков iSCSI. Подключение выполняется немедленно, плата не взимается.

Get-AzRecoveryServicesBackupRPMountScript -RecoveryPoint $rp[0] -VaultId $targetVault.ID

Вы должны увидеть результат, аналогичный приведенному ниже.

OsType  Password        Filename
------  --------        --------
Windows e3632984e51f496 V2VM_wus2_8287309959960546283_451516692429_cbd6061f7fc543c489f1974d33659fed07a6e0c2e08740.exe

Запустите скрипт на виртуальной машине, на которой нужно восстановить файлы. Чтобы выполнить сценарий, необходимо ввести предоставленный пароль. Присоединив диски, используйте проводник Windows для просмотра новых томов и файлов. Дополнительные сведения см. в статье Восстановление файлов из резервной копии виртуальной машины Azure.

Отключение дисков

Скопировав необходимые файлы, отключите диски с помощью командлета Disable-AzRecoveryServicesBackupRPMountScript. Убедитесь, что диски отключены, чтобы удалить доступ к файлам точки восстановления.

Disable-AzRecoveryServicesBackupRPMountScript -RecoveryPoint $rp[0] -VaultId $targetVault.ID

Восстановление данных на виртуальную машину с помощью PowerShell

Теперь вы можете напрямую восстановить данные на исходную или альтернативную виртуальную машину без выполнения нескольких действий.

Восстановление данных на исходную виртуальную машину

$vault = Get-AzRecoveryServicesVault -ResourceGroupName "resourceGroup" -Name "vaultName"
$BackupItem = Get-AzRecoveryServicesBackupItem -BackupManagementType "AzureVM" -WorkloadType "AzureVM" -Name "V2VM" -VaultId $vault.ID
$StartDate = (Get-Date).AddDays(-7)
$EndDate = Get-Date
$RP = Get-AzRecoveryServicesBackupRecoveryPoint -Item $BackupItem -StartDate $StartDate.ToUniversalTime() -EndDate $EndDate.ToUniversalTime() -VaultId $vault.ID
$OriginalLocationRestoreJob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $RP[0] -StorageAccountName "DestStorageAccount" -StorageAccountResourceGroupName "DestStorageAccRG" -VaultId $vault.ID -VaultLocation $vault.Location 
WorkloadName    Operation       Status          StartTime              EndTime
------------    ---------       ------          ---------              -------
V2VM            Restore         InProgress      26-Apr-16 1:14:01 PM   01-Jan-01 12:00:00 AM

Последняя команда активирует операцию восстановления в исходное расположение для восстановления данных на месте на существующей виртуальной машине.

Восстановление данных на только что созданную виртуальную машину

$vault = Get-AzRecoveryServicesVault -ResourceGroupName "resourceGroup" -Name "vaultName"
$BackupItem = Get-AzRecoveryServicesBackupItem -BackupManagementType "AzureVM" -WorkloadType "AzureVM" -Name "V2VM" -VaultId $vault.ID
$StartDate = (Get-Date).AddDays(-7)
$EndDate = Get-Date
$RP = Get-AzRecoveryServicesBackupRecoveryPoint -Item $BackupItem -StartDate $StartDate.ToUniversalTime() -EndDate $EndDate.ToUniversalTime() -VaultId $vault.ID
$AlternateLocationRestoreJob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $RP[0] -TargetResourceGroupName "Target_RG" -StorageAccountName "DestStorageAccount" -StorageAccountResourceGroupName "DestStorageAccRG" -TargetVMName "TagetVirtualMachineName" -TargetVNetName "Target_VNet" -TargetVNetResourceGroup "" -TargetSubnetName "subnetName" -VaultId $vault.ID -VaultLocation $vault.Location 
WorkloadName    Operation       Status          StartTime              EndTime
------------    ---------       ------          ---------              -------
V2VM            Restore         InProgress      26-Apr-16 1:14:01 PM   01-Jan-01 12:00:00 AM

Последняя команда активирует операцию восстановления в альтернативном расположении для создания виртуальной машины в группе ресурсов Target_RG в соответствии с входными данными, указанными с помощью параметров TargetVMName, TargetVNetName, TargetVNetResourceGroup, TargetSubnetName. Это гарантирует восстановление данных в требуемой виртуальной машине, виртуальной сети и подсети.

Следующие шаги

Если вы предпочитаете использовать PowerShell для взаимодействия с ресурсами Azure, см. статью Развертывание резервного копирования в Azure для Windows Server или клиента Windows и управление им с помощью PowerShell. Сведения об управлении резервными копиями DPM см. в статье Развертывание службы архивации для DPM и управление ею.