Azure Key Vault: пошаговое руководство по простому резервному копированию и восстановлению

Опубликовано: 3 Марта, 2023
Azure Key Vault: пошаговое руководство по простому резервному копированию и восстановлению

По умолчанию Azure Key Vault имеет несколько уровней избыточности в регионе, где оно размещено, и реплицируется в другой регион в том же геополитическом регионе. В маловероятном случае сбоя региона в Microsoft Azure оставшийся регион примет на себя Azure Key Vault через несколько минут, но Azure Key Vault будет в режиме только для чтения. Вся эта высокая доступность и отказоустойчивость сервиса встроена — нам как клиенту не нужно ничего настраивать.

В некоторых сценариях предприятие хочет контролировать возможности аварийного восстановления и создавать реплику Key Vault в другом регионе, не полагаясь на Microsoft Azure для выполнения аварийного переключения.

Azure Key Vault позволяет процессу экспортировать и импортировать ключи и секреты, если они находятся в одной подписке и в одном географическом регионе.

Определение простого сценария

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

Наш дизайн прост, и его легко реализовать с помощью пары команд PowerShell. Однако мы хотим убедиться, что он динамичен, и по этой причине воспользуемся тегами. Мы свяжем два тега для каждого хранилища ключей Azure в рабочей среде. Они будут называться KeyVaultBackupRole и KeyVaultBackupPair, где первый имеет строку для представления всего Azure Key Vault в производственной среде, а второй тег будет иметь значение Azure Key Vault, которое представляет собой пару (цель для экспортно-импортные операции).

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

Мы можем видеть высокоуровневый дизайн нашего решения, изображенный на изображении ниже. Мы видим, что в Azure Key Vault в есть все ключи и секреты, и у нас есть виртуальные машины и приложения, использующие эту информацию. Хранилище ключей Azure называется APKVCAC и имеет два тега. Во втором регионе той же подписки у нас есть другое хранилище ключей Azure, которое будет получать все ключи и секреты из исходного/исходного хранилища ключей Azure.

Понимание процесса резервного копирования и восстановления

Давайте приступим к делу и поймем, как перечислять, экспортировать и импортировать ключи и секреты.

Базовыми командлетами являются Get-AzureRMKeyVault, в которых будут перечислены все Key Vault любой данной подписки; также Get-AzureKeyVaultSecret -VaultName <Vault-Name> для получения списка всех секретов и Get-AzureKeyVaultKey -VaultName <Vault-Name> для получения списка ключей.

Возможно, вы заметили, что для ключей и секретов есть два отдельных командлета. Например, чтобы создать резервную копию определенного ключа, мы можем использовать Backup-AzureKeyVaultKey -VaultName <Vault-Name> -Name <Key-Name>. Результатом будет файл по локальному пути (мы можем указать вывод, используя -OutputFile ). Если мы хотим защитить секрет, единственным отличием будет командлет Backup-AzureKeyVaultSecret.

Если мы хотим восстановить определенный ключ или секрет, пока у нас есть файл, достаточно запустить Restore-AzureKeyVaultKey -VaultName <имя-хранилища> -InputFile <файл>, и ключ будет восстановлен в указанном имени хранилища.. Чтобы выполнить то же действие с , просто замените «Ключ» на «Секрет» в командлете.

Проверка репликации на основе нашего дизайна

Первым шагом в нашем сценарии является проверка всех текущих хранилищ Azure Key Vault, которые поддерживают наши теги. По сути, мы собираемся запросить всю подписку для Azure Key Vaults, у которых есть значение Primary в их KeyVaultBackupRole и что-то, связанное с .

Следующий сценарий PowerShell делает именно это.

Отчет о функцииKVBackup{
Запись-вывод «Текущие хранилища ключей правильно настроены для репликации…»
$vKVaults = Get-AzureRmKeyVault | где-объект { ($_.Tags.KeyVaultBackupRole -eq 'Primary') -и ($_.Tags.KeyVaultBackupPair -ne $null)}
запись-вывод $vKVaults.VaultName
Вернуть $vKVaults
}

Как мы это протестируем? В этой статье мы будем использовать Azure Cloud Shell. По сути, скопируйте и вставьте функцию в PowerShell, а затем выполните ее. Вы можете сделать то же самое при использовании PowerShell на своем сервере/машине.

Azure Key Vault — процесс резервного копирования

Процесс резервного копирования Azure Key Vault прост. Мы можем создать функцию, которая получает хранилище первичных ключей, и эта функция создаст файл для каждого ключа и секрета в указанном хранилище ключей Azure.

В приведенном ниже коде мы видим, что все секреты и ключи будут храниться во вложенной папке в папке C:AzureKeyVaultSwap, и мы будем использовать определенный суффикс для ключей (key.bkp) и секретов (secret. бкп).

Функция BKPKeyVault ($param_PrimaryKeyVault)
{
Если ((Get-AzureRmKeyVault -VaultName $param_PrimaryKeyVault) -ne $null) {
If (test-path C:AzureKeyVaultSwap$param_PrimaryKeyVault) {Write-Output «Папка уже существует»} Else { New-Item («C:AzureKeyVaultSwap» + $param_PrimaryKeyVault) -ItemType Directory}
компакт-диск C:AzureKeyVaultSwap$param_PrimaryKeyVault
Get-AzureKeyVaultSecret -VaultName $param_PrimaryKeyVault | % { Backup-AzureKeyVaultSecret -VaultName $_.VaultName -Name $_.Name -OutputFile ($_.Name + «.secret.bkp») -Confirm:$False -Force}
Get-AzureKeyVaultKey -VaultName $param_PrimaryKeyVault | % { Backup-AzureKeyVaultKey -VaultName $_.VaultName -Name $_.Name -OutputFile ($_.Name + «.key.bkp») -Confirm:$False -Force}
}
}

Azure Key Vault — репликация

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

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

Функция DRKeyVault($param_PrimaryKV,$param_SecondaryKV){
Если (ПроверитьKVReplication $param_PrimaryKV) {
Get-AzureKeyVaultSecret -VaultName $param_SecondaryKV | Remove-AzureKeyVaultSecret-confirm:$false-Force
Get-AzureKeyVaultKey -VaultName $param_SecondaryKV | Remove-AzureKeyVaultKey-Confirm:$False-Force
компакт-диск C:AzureKeyVaultSwap$param_PrimaryKV
$vSecretBKP = Get-Item *.secret.bkp
$vKeyBKP = Get-Item *.key.bkp
Если ($vSecretBKP -ne $null) { $vSecretBKP | % { Restore-AzureKeyVaultSecret -VaultName $param_SecondaryKV -InputFile $_.Name } } Else { Write-Output «Нет секретов для передачи». }
Если ($vKeyBKP -ne $null) { $vKeyBKP | % { Restore-AzureKeyVaultKey -VaultName $param_SecondaryKV -InputFile $_.Name } } Else { Write-Output «Нет ключей для передачи». }
}Еще{
Write-Host 'Этот' $param_SecondaryKV 'не существует или разрешение не определено.'
}
}

Дополнительные функции

Нам нужно выполнить некоторые проверки, чтобы улучшить наш текущий скрипт. Приведенный ниже код функции вернет значение True или False, чтобы проверить, действительно ли существует Azure Key Vault.

Функция ValidateKVPair($param_KVPair){
If ((Get-AzureRmKeyVault $param_KVPair) -ne $null) {возврат $true} Else {возврат $False}
}

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

Функция CheckKVReplication($param_PrimaryKV){
$vPrimary_KeyVault = Get-AzureRMKeyVault $param_PrimaryKV -ErrorAction SilentlyContinue
Если ($vPrimary_KeyVault -ne $null) {
$vSecondary_KeyVault = Get-AzureRMKeyVault $vPrimary_KeyVault.Tags.KeyVaultBackupPair -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
Если ($vSecondary_KeyVault -ne $null) { вернуть $True}иначе {вернуть $False}
}Else{ write-Output «Извините, но в настоящее время не удалось найти основное или резервное хранилище парных ключей. Ознакомьтесь с текущим хранилищем ключей Azure. «}
}

Последний сценарий, который мы собираемся использовать, — это простое правило домашней очистки, которое удалит папку C:AzureKeyVaultSwap и ее подкаталоги.

Функция SwapClean{
CD
if (Test-Path C:AzureKeyVaultSwap) {remove-item C:AzureKeyVaultSwap -Force -Recurse}
Каталог New-Item C:AzureKeyVaultSwap -ItemType
компакт-диск C:AzureKeyVaultSwap
}

Завершение

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

По сути, этот окончательный код создаст список со всеми ресурсами Azure Key Vault в переменной $vValidKVServers, а в следующей строке мы создадим резервную копию и восстановим данные, используя атрибуты, полученные из тегов.

$vVALidKVServers = Отчет о резервной копии KV
$vValidKVСерверы | foreach { BKPKeyVault $_.VaultName;DRKeyVault $_.VaultName $_.Tags.KeyVaultBackupPair}

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

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