Azure Key Vault を使用し、Windows VM のDisk Encryption を有効化する
今回はAzure 上でシークレットやパスワードなどの機密情報を管理できるサービス・Azure Key Vault を使い、Windows 仮想マシンの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 許可のアクセスポリシーが必要