Jaa


暗号化仮想マシン(Azure Disk Encryption:ADE)をバックアップからリストアする

こんにちは、Azure サポートチームの米田です。
今回は、ADE(Azure Disk Encryption)によるディスクの暗号化を完了した仮想マシンを、バックアップデータからリストア(復元)する手段をお伝えします。

※本手順は ARM (リソースマネージャー モデル / V2)を対象にした記事になります。
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

1.(前提)ADE(Azure Disk Encryption)とは


ADEは、Azure仮想マシンのディスクドライブを暗号化する機能です。Widnows であればBitlocker、LinuxであればDM-Cryptといった暗号化ツールを使用して暗号化をおこないます。
オンプレミスの暗号化されたサーバであれば、起動時にBitlockerの暗号化キーを入力しOS起動されると思います。しかし、Azureの仮想マシンはクラウド上に存在しますので、RDP、あるいはSSHといったリモート接続を前提としていますので、OS起動前に暗号化キーを入力する方法がございません。そこで、暗号化キーをAzure Keyvault といったAzure上のリソースに保管し、その構成を仮想マシンに設定することで、ディスクドライブを有効化状態で仮想マシンを運用できるようにする機能がADEとなります。

Azure Disk Encryption for IaaS VMs
/ja-jp/azure/security/azure-security-disk-encryption-overview

2. 本記事の目的


サーバ運用にあたりバックアップ計画の策定は必要不可欠かと思います。特にクラウドサービス上の仮想マシンでは、物理環境が雲の先に存在するためマシンへの接続方法が限定されています。その状況で、例えばOSが起動できないような状況に陥いると八方ふさがりですので、定期的なバックアップの取得、すくなくともサーバメンテナンス・更新前のバックアップ取得はかなり重要度の高い検討事項かと思います。
Azure 仮想マシンのバックアップ手段には、Azure Backup によるRecovery Services をもちいたバックアップや、ディスクのスナップショットを取得するといった方法があり、弊社の公開情報や本blogなどで情報を案内していました。

Recovery Services コンテナーへの Azure 仮想マシンのバックアップ
/ja-jp/azure/backup/backup-azure-vms-first-look-arm

管理ディスク (Managed Disks) スナップショットより VM をデプロイする
https://blogs.technet.microsoft.com/jpaztech/2017/05/02/deployvmfromsnapshot/

しかし、ADEを有効化した仮想マシンは、ディスク内のデータが暗号化されているため、通常の仮想マシンと同じ方法でバックアップデータから仮想マシンを復元すると、ディスクの復号化が完了できずOSが立ち上がらない状態となります。
そこで本記事では、ADEを有効化した仮想マシンをバックアップから復元する具体的な手順についてご紹介します。

  • Azure Backup を用いた暗号化仮想マシンのリストア
  • 管理ディスクのスナップショットからの仮想マシンのリストア

3. Azure Backup を用いた暗号化仮想マシンのリストア


暗号化された仮想マシンをAzure Backupでバックアップするには、事前に暗号化キーが保管されているAzure Keyvaultへのアクセス権の設定といった独自の構成が必要になります。
このバックアップの設定手順および、仮想マシンのリストアの方法については次に公開情報がありますのでご参照ください。

暗号化された仮想マシンを Azure Backup でバックアップおよび復元する
/ja-jp/azure/backup/backup-azure-vms-encryption#backup-encrypted-vm

4. 管理ディスクのスナップショットからの仮想マシンのリストア


仮想マシンのOSディスクやデータディスクのスナップショット取得を利用されてバックアップをされている場合は、次の手順で仮想マシンのリストアを実施します。

※事前準備
以下の作業には、事前に管理ディスクのスナップショット取得、Azure Powershellがインストールされていることを前提しています。
管理ディスクのスナップショット取得については、「管理ディスク (Managed Disks) スナップショットより VM をデプロイする」の 「1. スナップショットを取得する。」を参照ください。
また、Azure Powershellのセットアップは、Azure PowerShell のインストールを参照ください

■手順
A. スナップショットから管理ディスクを作成
B. 管理ディスクから暗号化済み仮想マシンとして作成

===========================================
A. スナップショットから管理ディスクを作成
===========================================
1. Azureポータルにアクセスし、”ディスク” > ”追加” を選択します
2. ソースの種類に"スナップショット"を選択し、事前に取得したディスクのスナップショットから管理ディスクを作成します

===========================================
B. 管理ディスクから暗号化済み仮想マシンとして作成
===========================================
1. 元の仮想マシンの暗号化情報を取得しメモしておきます

Azure Powershellで下記のコマンドを実行し、DiskEncryptionKeyとKeyEncryptionKeyの情報を確認します

 $vm = Get-AzureRmVM -ResourceGroupName  -Name 

Write-Host "-------------------"
Write-Host "DiskEncryptionKey"
Write-Host "-------------------"
$vm.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SecretUrl
$vm.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SourceVault.Id

Write-Host "-------------------"
Write-Host "KeyEncryptionKey"
Write-Host "-------------------"
$vm.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.KeyUrl
$vm.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.SourceVault.Id

2. 1で取得した情報を含むパラメータを入力し管理ディスクから仮想マシンを作成します
Azure Powershellで下記のコマンドを実行します(#パラメータは環境にあわせて変更)

 #パラメータ
$ResourceGroupName = "xxxx" #リソースグループ名
$VmName = "RestoreVM" #仮想マシン名
$VmSize = "Standard_DS2_v2" #仮想マシンサイズ
$Location = "japaneast" #リージョン名(japaneastなど)
$VnetName = "myVnet" #仮想ネットワーク名(既存)
$SubnetName = "mySubnet" #サブネット名(既存)
$PublicIpName = "mypip"
$NicName = "nic01" #NIC名
$OSDiskName = "encryptedosdisk" #手順A-2で作成したOSディスク名 
$BekId = "/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.KeyVault/vaults/xxxx" #手順B-1で取得したDiskEncryptionKey.SecretUrl
$Bekurl = "https://xxx.vault.azure.net/secrets/xxx/xxx" #手順B-1で取得したDiskEncryptionKey.SourceVault.Id

# ログインとサブスクリプション指定
Login-AzureRmAccount
$mySub = Get-AzureRmSubscription | Out-GridView -Title "Select an Azure Subscription ..." -PassThru
Select-AzureRmSubscription -SubscriptionId $mySub.SubscriptionId

# 対象サブネット情報取得
$Subnet = (Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName).Subnets[0]

# NIC 新規作成
$pip = New-AzureRmPublicIpAddress -Name $PublicIpName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic
$Nic = New-AzureRmNetworkInterface -Name $NicName -ResourceGroupName $ResourceGroupName -Location $Location -Subnet $Subnet -PublicIpAddress $pip
$Nic = Get-AzureRmNetworkInterface -Name $NicName -ResourceGroupName $ResourceGroupName
$osDisk = get-azurermdisk -ResourceGroupName $ResourceGroupName -DiskName $OSDiskName

# 仮想マシン設定の定義(BEKの場合)
$Vm = New-AzureRmVMConfig -Name $VmName -VMSize $VmSize
$vm = Set-AzureRmVMOSDisk -VM $vm -ManagedDiskId $osDisk.Id -CreateOption Attach -Windows -DiskEncryptionKeyUrl $Bekurl -DiskEncryptionKeyVaultId $BekId #-KeyEncryptionKeyUrl "" -KeyEncryptionKeyVaultId "手順B-1 KeyEncryptionKey.SourceVault.Id"


# 作成した NIC を追加
$Nic = Get-AzureRmNetworkInterface -ResourceGroupName $ResourceGroupName -Name $NicName
$Vm = Add-AzureRmVMNetworkInterface -VM $Vm -NetworkInterface $Nic
$Vm.NetworkProfile.NetworkInterfaces.Item(0).Primary = $true

# 仮想マシンの新規作成
New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $Vm

5. 最後に


ADEは、セキュリティ要件が厳しいお客様によくご利用あるいは検討される機能ですが、ADEとよく比較検討される暗号化機能として、Storage Service Encryption (SSE)と呼ばれる機能があります。SSEは、Bitlocker、DM-Cryptなどのディスクドライブレベルの暗号化ではなく、Azureデータセンター内でストレージアカウント内に保存されたデータを暗号化するといった機能になります。両者の違いについては次に詳しく説明を記載していますので、宜しければこちらもご活用ください。

Azure Disk Encryption (ADE) と Storage Service Encryption (SSE) のご紹介
https://blogs.technet.microsoft.com/jpaztech/2016/11/21/azure-disk-encryption-and-storage-service-encryption/

本情報が、Azure仮想マシンの利用のお役に少しでも立ちましたら幸いです。