今回は Virtual Machines(VM)ディスクの暗号化について記載したいと思います。
VM ディスクを暗号化するケースとしては、
など様々にあります。
最近では PaaS で構成されることの方が柔軟性の観点からも多いように思いますが、機械学習は高スペックの VM で実行したい…といったニーズもまだまだ少なくありません。
そういった場合に1つの手法として覚えておくと便利な機能です。
比較的容易に暗号化することができるため、対応のオプションとして準備しておくことをお勧めします。
それでは早速手順概要を見ていきましょう。
下記は作成済みの Linux VM を暗号化する際の手順です。
VM の暗号化をする場合、下記スクリプトを実行することで必要なコンポーネントが設定されます。
まずはスクリプトを GitHubより取得しておきます。
スクリプトは “ADEPrereqScript.ps1” という名前で C:\AzureADEScript に保管します。
ファイルの保管が完了したら、PowerShell ISE を管理者として実行します。
実行方法は以下の通りです。
# スクリプト保管ディレクトリへ移動 PS C:\Windows\system32> cd C:\AzureADEScript # 実行ポリシーの設定(※1) PS C:\AzureADEScript> Set-ExecutionPolicy RemoteSigned # Azure アカウントへログイン PS C:\AzureADEScript> Login-AzureRmAccount PS C:\AzureADEScript> Select-AzureRmSubscription -SubscriptionId < subscription_id > <結果表示> Environment : Account : TenantId : SubscriptionId : SubscriptionName : CurrentStorageAccount : # スクリプトの実行 PS C:\AzureADEScript> C:\AzureADEScript\ADEPrereqScript.ps1 # スクリプト実行により求められる下記項目を入力 resourceGroupName : [入力] keyVaultName : [入力] location : [入力] subscriptionId : [入力] aadAppName : [入力] ※新しく作成する場合は、使用する名前を入力します。
(※1)警告メッセージを確認し、「はい」を選択します。実行ポリシーについては下記をご参照ください。
参考:Set-ExecutionPolicy コマンドレットの使用※ 以下のメッセージで前提となるスクリプトの実行は完了となります。
<結果表示> Creating new AAD application [入力名] Created a new AAD Application [入力名] with ID: xxxx-xxxx-xxxx-xxxx-xxxx Creating new key vault: [入力名] Created a new KeyVault named [入力名] to store encryption keys Please note down below aadClientID, aadClientSecret, -> diskEncryptionKeyVaultUrl, keyVaultResourceId values that will be needed to -> enable encryption on your VMs aadClientID: xxxx-xxxx-xxxx-xxxx-xxxx aadClientSecret: xxxx-xxxx-xxxx-xxxx-xxxx diskEncryptionKeyVaultUrl: https://[入力名].vault.azure.net keyVaultResourceId: /subscriptions/xxxx-xxxx-xxxx-xxxx-xxxx/ -> resourceGroups/[入力名]/providers/Microsoft.KeyVault/vaults/[入力名] -> Please Press [Enter] after saving values displayed above. -> They are needed to enable encryption using Set-AzureRmVmDiskEncryptionExtension cmdlet
スクリプトの実行が終わったら、いよいよ暗号化です。
PowerShell ISE のコンソールで下記を実行します。
PS C:\AzureADEScript> $vmName = ‘ 暗号化するVM名 ’ PS C:\AzureADEScript> Set-AzureRmVMDiskEncryptionExtension -> -ResourceGroupName $resourceGroupName -> -VMName $vmName -> -AadClientID $aadClientID -> -AadClientSecret $aadClientSecret -> -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -> -DiskEncryptionKeyVaultId $keyVaultResourceId -> -VolumeType All -> -skipVmBackup
注意)
私も検証時に躓いた点ですが、現在、Set-AzureRmVMDiskEncryptionExtension には管理ディスクをバックアップする機能がなく、-skipVmBackup パラメーターを指定せずに管理ディスクに対して使用するとエラーになるため注意が必要です。このパラメーターを使用すると管理ディスクのバックアップは作成されないため、暗号化前にバックアップを作成してからパラメーターを使用する必要があります。
参考:Windows および Linux IaaS VM の Azure ディスク暗号化
正常に完了すると、下記メッセージが出ます。
RequestId IsSuccessStatusCode ----- OK StatusCode ----- OK ReasonPhrase ----- OK
完了したら、実際にポータルから暗号化された仮想マシンを確認します。
対象の仮想マシンにアクセスしてディスクを確認すると暗号化部分が「有効」になっていることが確認できます。
暗号化した VM へのアクセスは一見何も変わらずにみえますが、処理パフォーマンスに影響が出ることが確認できています。(ケースにもよりますが、今回確認した処理パフォーマンスとしては処理時間が約50%増加しました。)
VM マシンディスクを暗号化する場合は、セキュリティ要件とパフォーマンス要件の双方を考慮して実装を検討しましょう。また、暗号化では Key Vault および Azure Active Directory アプリケーションが利用されるため、構成上の制約については、参考 URL にてご確認ください。