AzureのManaged DiskはデフォルトでSSE(Server-Side Encryption)が有効です。しかしSSEはAzureの基盤側での暗号化であり、コンプライアンス要件や社内規定によっては「ゲストOS内部でのディスク暗号化」が求められることがあります。それを実現するのがAzure Disk Encryption(ADE)です。
この記事では、azコマンドを使ってLinux VMのOSディスクにAzure Disk Encryptionを適用する手順を実践形式で解説します。Key Vaultの作成から暗号化の確認、スナップショットによる事前バックアップ、よくあるエラーへの対処まで一気通貫でカバーします。AWS EBSボリューム暗号化との設計上の違いも比較します。想定環境:Ubuntu 22.04 LTS / RHEL 9.4。
この記事のポイント
・ Azure Disk Encryption(ADE)はdm-cryptでゲストOS内からディスクを暗号化する
・ SSEとADEは暗号化レイヤーが異なり、要件次第で組み合わせも可能
・ az vm encryption enable コマンドでKey Vaultを指定して適用できる
・ AWS EBSはインフラ側暗号化のみ。ゲストOSレベルのADEに相当する機能はない
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
AzureのディスクはなぜデフォルトでSSEがかかっているのか
AzureのManaged Diskには、作成した瞬間からSSE(Server-Side Encryption)が自動的に有効になっています。SSEはAzureのストレージ基盤がデータをAES-256で暗号化して保存する仕組みで、VM側からは何も設定しなくても常時動作しています。暗号化鍵の管理方法には2種類あります。
・PMK(Platform-Managed Key):Microsoftが鍵を管理する。デフォルト設定で追加コストなし。
・CMK(Customer-Managed Key):Key Vaultに保管した自社の鍵を使う。Disk Encryption Setと組み合わせて利用する。
SSEだけで多くの要件は満たせますが、「OSが読めるレベルで暗号化されているか」「dm-cryptによるデバイスレベルの暗号化が必要か」を問われる場合は、ゲストOS内で動作するAzure Disk Encryptionが必要になります。
なお、SSEとADEの中間に位置する「ホスト暗号化(Encryption at Host)」というオプションも存在します。これはVMホスト(物理サーバー)のレベルでキャッシュも含めた全データを暗号化する方式で、GDPR等のコンプライアンス要件を満たしつつADEより設定コストを抑えたい場合の選択肢になります。ただし、ADEほど厳密なゲストOS内部での暗号化は行われないため、要件に応じて選択してください。
Azure Disk EncryptionとSSEの違いを整理する
| 比較軸 | SSE(Server-Side Encryption) | ADE(Azure Disk Encryption) |
|---|---|---|
| 暗号化レイヤー | Azureストレージ基盤(ホスト側) | ゲストOS内(dm-crypt/BitLocker) |
| 有効化の操作 | デフォルト有効(設定不要) | az vm encryption enable で明示的に設定 |
| 鍵の保管先 | Microsoftが管理(PMK)またはKey Vault(CMK) | Key Vault(必須) |
| VMからの見え方 | OSからは透過的(暗号化を意識しない) | ブロックデバイスが暗号化されて見える |
| サポートするVM | 全Managed Disk | 対応VMシリーズのみ(Aシリーズ等は非対応) |
| コスト | 追加コストなし(PMK) | Key Vaultのトランザクション費用 |
どちらを選ぶか迷った場合は次の判断基準を参考にしてください。
・コンプライアンス要件がSSE+PMKで満足できる → そのままで問題なし
・「ゲストOSがディスクを見ても暗号化されていること」が必要 → ADE一択
・鍵管理を自社で持ちつつSSEのみで対応したい → SSE+CMK(Disk Encryption Set使用)
Azure Disk Encryptionを有効にする手順
0. 事前にOSディスクのスナップショットを取得する
ADEの適用中はVMが再起動し、処理に失敗するとOSが起動しなくなるリスクがあります。作業前に必ずスナップショットを取得してください。# 変数を設定する RG="myResourceGroup" VM_NAME="myLinuxVM" # OSディスクのIDを取得する OS_DISK_ID=$(az vm show --resource-group $RG --name $VM_NAME --query "storageProfile.osDisk.managedDisk.id" --output tsv) # スナップショットを作成する az snapshot create --resource-group $RG --name "${VM_NAME}-os-snapshot-$(date +%Y%m%d)" --source $OS_DISK_ID # 作成確認 az snapshot list --resource-group $RG --query "[].{name:name, state:provisioningState}" --output table
provisioningState が Succeeded になったことを確認してから次の手順に進んでください。1. 前提を確認する
ADEを適用する前に以下の要件を確認してください。・VMのサイズ制限:Aシリーズ(A1など)は非対応。B、D、E、Fシリーズなどを使うこと
・OSのサポート:RHEL 7.2以上、Ubuntu 16.04以上、Debian 9以上など(一部バージョンは非対応)
・Key Vaultとの同一リージョン:VMとKey VaultはAzureの同じリージョンに作成する
VMのサイズが対応しているか確認するには次のコマンドを使います。
# VMのサイズを確認する az vm show --resource-group myResourceGroup --name myLinuxVM --query hardwareProfile.vmSize --output tsv # 出力例 Standard_D2s_v3
2. Key Vaultを暗号化対応で作成する
ADE専用のKey Vaultを作成します。既存のKey Vaultを使う場合でも、--enabled-for-disk-encryption フラグが必要です。# 変数を設定する(環境に合わせて変更する) RG="myResourceGroup" LOCATION="japaneast" KV_NAME="myDiskEncryptKV" # Key Vaultを作成する(ADEフラグと誤削除防止を有効にする) az keyvault create --resource-group $RG --name $KV_NAME --location $LOCATION --enabled-for-disk-encryption true --enable-soft-delete true --retention-days 7
{ "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myDiskEncryptKV", "location": "japaneast", "name": "myDiskEncryptKV", "properties": { "enabledForDiskEncryption": true, "enableSoftDelete": true, "provisioningState": "Succeeded", "sku": { "family": "A", "name": "standard" } } }
enabledForDiskEncryption: true になっていることを確認します。【Tips】
--enable-soft-delete true を付けると、誤って鍵を削除した際に設定した保持期間(上記は7日)内で復元できます。本番環境では合わせて --enable-purge-protection true も指定することを推奨します。ただし、一度有効化すると無効化できないため注意が必要です。3. Linux VMにDisk Encryptionを適用する
az vm encryption enable でVMのOSディスクに暗号化を適用します。VMが稼働中のまま実行でき、内部でdm-cryptが動作します。# 変数を設定する VM_NAME="myLinuxVM" # OSディスクに暗号化を適用する(--volume-type OS でOSディスクのみ対象) az vm encryption enable --resource-group $RG --name $VM_NAME --disk-encryption-keyvault $KV_NAME --volume-type OS
--volume-type OS:OSディスクのみを暗号化する。データディスクも含める場合は All を指定する・実行後、VMが自動で再起動します(暗号化処理のため5分程度かかる)
【注意】ADE適用中はVMへのSSH接続が一時的に切断されます。適用前のスナップショット取得(手順0)を必ず実施してください。
【Tips】鍵暗号化鍵(KEK: Key Encryption Key)を使ってADEの暗号化鍵自体を保護するセキュリティ強化構成も可能です。KEKを使う場合は
--key-encryption-key オプションでKey Vault内のキー名を指定します。4. 暗号化の状態を確認する
再起動が完了したら、暗号化が正常に適用されたことを確認します。# 暗号化の状態を確認する az vm encryption show --resource-group $RG --name $VM_NAME --query "disks[].statuses[].displayStatus" --output table
Column1 ----------- Encryption succeeded
Encryption succeeded が表示されれば、OSディスクへのADE適用が完了しています。Key VaultのIDや鍵の詳細も含めて確認したい場合は
--output json を使います。# 詳細な暗号化情報を確認する az vm encryption show --resource-group $RG --name $VM_NAME --output json
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。
AWS EBSボリューム暗号化との設計の違い
AWSのEBSボリューム暗号化は、AzureのSSEに近い仕組みです。ADE(ゲストOS内のdm-crypt暗号化)に直接対応するAWSのマネージドサービスはありません。| 比較軸 | Azure ADE | AWS EBSボリューム暗号化 |
|---|---|---|
| 暗号化レイヤー | ゲストOS(dm-crypt) | EBSストレージ基盤(ホスト側) |
| 鍵の管理サービス | Azure Key Vault | AWS KMS |
| 有効化の手順 | az vm encryption enable(Key Vault設定+コマンド1本) | --encrypted オプション指定、またはアカウント全体デフォルト有効 |
| 既存ボリュームへの適用 | 稼働中VMにも適用可能 | スナップショット経由で再作成が必要 |
| VMからの見え方 | ブロックデバイスが暗号化されて見える | インスタンスからは透過的 |
| ゲスト暗号化の代替 | ADE(マネージド) | LUKS(手動設定) |
az vm encryption enableという単一コマンドでdm-cryptによるゲスト暗号化を適用できる点が差別化ポイントです。また、Azureの場合は稼働中のVMに対してもADEを適用できるのに対し、AWSでは既存のEBSボリュームを暗号化するにはスナップショットから暗号化済みボリュームを再作成する必要があります。マルチクラウド環境でのセキュリティポリシーを統一する際はこの運用上の差異を把握しておくことが重要です。
トラブルシュート
「The managed disk is not supported for disk encryption」が出た場合
VMのサイズがADEに対応していない可能性があります。az vm resize でサポートサイズに変更するか、対応サイズのVMに再作成してください。Aシリーズ(A0~A7)はADE非対応です。「The Key Vault is not enabled for disk encryption」が出た場合
Key VaultのenabledForDiskEncryptionフラグが有効になっていない状態です。既存のKey Vaultに対してフラグを有効にするには以下を実行します。az keyvault update --resource-group $RG --name $KV_NAME --enabled-for-disk-encryption true
暗号化後にSSH接続ができなくなった場合
ADE適用後の再起動で鍵のアンロックに失敗するケースがあります。Azure Portalの「シリアルコンソール」からブート状況を確認してください。Key VaultのアクセスポリシーでVMのマネージドIDにGet・Wrap Key・Unwrap Key の権限があることを確認します。# Key VaultのアクセスポリシーにVMのマネージドIDを追加する VM_PRINCIPAL_ID=$(az vm show --resource-group $RG --name $VM_NAME --query identity.principalId --output tsv) az keyvault set-policy --resource-group $RG --name $KV_NAME --object-id $VM_PRINCIPAL_ID --key-permissions get wrapKey unwrapKey --secret-permissions get list
暗号化後にVMが起動しなくなった場合
手順0で取得したスナップショットからOSディスクを復元してください。# スナップショットからマネージドディスクを再作成する SNAP_NAME="${VM_NAME}-os-snapshot-YYYYMMDD" # 実際のスナップショット名に変更する az disk create --resource-group $RG --name "${VM_NAME}-os-restored" --source $SNAP_NAME # VMを停止(deallocate)してOSディスクを差し替える az vm deallocate --resource-group $RG --name $VM_NAME az vm update --resource-group $RG --name $VM_NAME --os-disk "${VM_NAME}-os-restored" az vm start --resource-group $RG --name $VM_NAME
本記事のまとめ
| やりたいこと | コマンドまたは設定 |
|---|---|
| 事前スナップショットを取得する | az snapshot create --source OS_DISK_ID |
| ADEに対応したKey Vaultを作成する | az keyvault create --enabled-for-disk-encryption true |
| VMのOSディスクにADEを適用する | az vm encryption enable --disk-encryption-keyvault KV_NAME --volume-type OS |
| OSとデータディスク両方を暗号化する | az vm encryption enable --disk-encryption-keyvault KV_NAME --volume-type All |
| 暗号化の状態を確認する | az vm encryption show --resource-group RG --name VM_NAME |
| Key VaultにADEフラグを後から追加する | az keyvault update --enabled-for-disk-encryption true |
Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます