今回はAzure Key Vaultを使用し、Windows VMのDisk Encryptionを有効化しディスクの暗号化を行う手順について解説します。
目次
Azure Key Vaultとは
Azure Key Vaultは、Azure上でパスワードやトークン等のシークレット、暗号化キー、SSL証明書等を管理するサービスです。Azure Key Vaultを使用することで、シークレットの一元管理、シークレットやキーに対する認証と認可の設定、アクセス、利用状況の監視を行うことができます。
Azure Key Vaultは、ソフトウェアソフトウェアキーを使用し一般的な暗号化をサポートするStandardとHSM保護、高度なキータイプをサポートするPremiumの2つのサービスレベルがあります。海外等のコンプライアンスや高可用性を求める際にはPremiumの使用も検討しますが、通常のシークレットやキー管理等ではStandardで問題ないかと思います。
Azure Key Vaultでは、シークレットやキー等を管理するために以下の機能があります。
■アクセスポリシー
Key Vaultではシークレットやキーに対し、使用できるリソースやユーザー、権限を詳細に設定できます。例えばsecret1は仮想マシン・VM1から読み取りのみ許可するという設定ができます。アクセスポリシーを設定することで、必要なリソース・ユーザー等に制限できるため、シークレット等を安全に利用することができます。
また、アクセスポリシーで今回実施するDisk Encryptionや仮想マシンでの証明書の展開、ARMでのシークレットの展開、RBACのアクセス制御もアクセスポリシーで設定します。
■論理的な削除、消去保護
論理的な削除とは、Key Vault削除後に指定した期間であれば、Key VaultおよびKey Vaultに含まれる各種オブジェクト(シークレット、キー、証明書)を回復できる機能です。例えば、論理的な削除を7日に設定した場合、Key Vaultの削除を実施して7日経過まで、Key Vault及びKey Vaultに含まれる各種オブジェクトを回復することができます。また、Key Vaultには消去保護の機能もあり、保持期間を経過するまで各種オブジェクトの削除を制限することもできます。論理的な削除および消去保護により、シークレットやキー等の誤削除や悪意のある削除を防止できます。
論理的な削除はAzure PortalからKey Vaultを作成する場合には必須となり、一度有効化すると無効化へ変更できません。そのため、論理的な削除を無効化する場合は、Azure CLIかPowerShell等からオプションを指定してKey Vaultを作成する必要があります。
仮想マシンのDisk Encryptionとは
仮想マシンのDisk Encryptionとは、OSの暗号化機能を使用しOSやデータディスクの暗号化を行う機能です。WindowsではBitLockerを使用し、LinuxではDm-Cryptを使用し暗号化を行います。OSやデータディスクを暗号化することにより、仮想マシンのディスクを安全に利用することができます。
また、仮想マシンのディスクを暗号化しない場合、Microsoft Defender for Cloudにて暗号化されていないVMとして警告が表示されるため、仮想マシンのディスクに関しましては暗号化することを推奨します。
実施環境・構成
今回はAzure Cloud Shellを使用して以下の環境・構成を作成します。仮想マシンのOSはWindows Server 2019 Datacenterを使用します。

今回はDisk Encryptionを試す目的のため、Key Vaultのネットワーク制限等を省略してりますが、実際にKey Vaultを使用する際は特定のネットワークやリソースのみ使用できる状態にしましょう。
Disk Encryptionの要件
Windows VMでDisk Encryptionを実施するためには、以下の要件が必要となります。
- Basic、Aシリーズ以外の仮想マシン
- Windows Server 2008 R2 以降(クライアントOSはWindows 8以降)
- メモリが2GB以上であること
Windows VMの作成
初めに、Disk Encryptionを行うWindows VMの作成を行います。Windows VMに関するリソース作成を行うコマンドは以下の通りです。変数でKey Vaultの名前を設定していますが、Key Vaultの名前は一意である必要があるため、今回は「kdkwakaba-keyvault1」という名前に設定します。
# 変数設定
RESOURCE_GROUP="test-rg1"
VM_NAME="test-vm1"
USER_NAME="azureuser"
USER_PASSWORD="QAZ1Dr0wsS@p"
LOCATION="japaneast"
TAG_KEY="Department"
TAG_VALUE="Development"
# Key Vault名を設定
# Key Vault名は一意での名前が必要、重複すると作成時にエラーとなる
KV_NAME="kdkwakaba-keyvault1"
# リソースグループの作成
az group create \
-n $RESOURCE_GROUP \
-l $LOCATION \
--tags $TAG_KEY=$TAG_VALUE
# 仮想マシンの作成
# ImageはWindows Server 2019 Datacenterを指定
az vm create \
-n $VM_NAME \
-g $RESOURCE_GROUP \
--image win2019datacenter \
--admin-username $USER_NAME \
--admin-password $USER_PASSWORD \
--tags $TAG_KEY=$TAG_VALUE
Key Vaultの作成・設定
Windows VMの作成完了後、Key Vaultの作成・設定を行います。今回はKey Vault作成時に以下のオプションを設定します。
- サービスレベルでStandardを設定
- 論理的な削除を無効化
- アクセスポリシーでDisk Encryptionを許可
# Key Vaultの作成
az keyvault create \
-n $KV_NAME \
-g $RESOURCE_GROUP \
-l $LOCATION \
--sku standard \
--enable-soft-delete false \
--enabled-for-disk-encryption true \
--tags $TAG_KEY=$TAG_VALUE
Windows VMにDisk Encryptionを設定
Key Vaultの作成・設定完了後、Windows VMのDisk Encryptionを有効化しディスクの暗号化を行います。Disk Encryptionの有効化、ディスクの暗号化を行うコマンドは以下の通りです。
# 仮想マシンのDisk Encryptionを有効化
az vm encryption enable \
-n $VM_NAME \
-g $RESOURCE_GROUP \
--disk-encryption-keyvault $KV_NAME
# Disk Encryptionの確認
# encryptionSettingsのenableがtrueであり、値が設定されていれば成功
az vm encryption show \
-n $VM_NAME \
-g $RESOURCE_GROUP
リソースのクリーンアップ
確認後、今回作成したリソースをクリーンアップします。
# リソースのクリーンアップ
az group delete -n $RESOURCE_GROUP
まとめ
- Azure Key VaultはAzure上でシークレットや暗号化キー、証明書等を管理できるサービス
- アクセスポリシーを使用することで、キーコンテナのリソース制限、各オブジェクトの操作制限を行える
- 論理的な削除、消去保護により、意図しない削除や悪意のある削除から各オブジェクトを回復できる
- Disk Encryptionで仮想マシンのディスクを暗号化することにより、仮想マシンのデータを保護できる
- Disk Encryptionを設定するには、Key Vault側でDisk Encryption許可のアクセスポリシーが必要
参考資料
・Azure Key Vaultについて
https://docs.microsoft.com/ja-jp/azure/key-vault/general/overview
・Azure Key Vault Managed HSM とは
https://docs.microsoft.com/ja-jp/azure/key-vault/managed-hsm/overview
・Azure Key Vault の論理的な削除の概要
https://docs.microsoft.com/ja-jp/azure/key-vault/general/soft-delete-overview
・Windows VM 用の Azure Disk Encryption
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/disk-encryption-overview
・az keyvault create
https://docs.microsoft.com/ja-jp/cli/azure/keyvault?view=azure-cli-latest#az-keyvault-create