クラウドエンジニアブログ

Virtual Machines ディスクの暗号化

岡村 亘

岡村 亘

今回は Virtual Machines(VM)ディスクの暗号化について記載したいと思います。

VM ディスクを暗号化するケースとしては、

  • IaaS VM で構成する必要がある
  • 重要なデータを取り扱うため、セキュリティを強化する必要がある
  • 顧客よりセキュリティ要件として、データの暗号化を要求されている

など様々にあります。
最近では PaaS で構成されることの方が柔軟性の観点からも多いように思いますが、機械学習は高スペックの VM で実行したい…といったニーズもまだまだ少なくありません。

そういった場合に1つの手法として覚えておくと便利な機能です。
比較的容易に暗号化することができるため、対応のオプションとして準備しておくことをお勧めします。

それでは早速手順概要を見ていきましょう。
下記は作成済みの Linux VM を暗号化する際の手順です。

1.Azure Disk Encryption の前提条件となる構成スクリプトの取得

VM の暗号化をする場合、下記スクリプトを実行することで必要なコンポーネントが設定されます。
まずはスクリプトを GitHubより取得しておきます。
スクリプトは “ADEPrereqScript.ps1” という名前で C:\AzureADEScript に保管します。

スクリプトを実行


2.PowerShell ISE によるスクリプト実行

ファイルの保管が完了したら、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

3.VM の暗号化

スクリプトの実行が終わったら、いよいよ暗号化です。
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

4.結果確認

完了したら、実際にポータルから暗号化された仮想マシンを確認します。
対象の仮想マシンにアクセスしてディスクを確認すると暗号化部分が「有効」になっていることが確認できます。

仮想マシンを確認


5.まとめ

暗号化した VM へのアクセスは一見何も変わらずにみえますが、処理パフォーマンスに影響が出ることが確認できています。(ケースにもよりますが、今回確認した処理パフォーマンスとしては処理時間が約50%増加しました。)

VM マシンディスクを暗号化する場合は、セキュリティ要件とパフォーマンス要件の双方を考慮して実装を検討しましょう。

また、暗号化では Key Vault および Azure Active Directory アプリケーションが利用されるため、構成上の制約については、参考 URL にてご確認ください。

参考:Azure 仮想マシンの暗号化



次回予告
  • クラウド技術を使って DevOps を!



【総合】お問い合わせ

ソリューションに関する全般的なお問い合わせはお気軽にご相談ください。

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録