AzureのDisk EncryptionでLinux VMのOSディスクを暗号化する方法|azコマンドによる設定とAWS EBSとの違い

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Azure > AzureのDisk EncryptionでLinux VMのOSディスクを暗号化する方法|azコマンドによる設定とAWS EBSとの違い
「Linux VMのセキュリティ要件でディスク暗号化が必須になったが、どこから手を付ければいいか分からない」「AzureのManaged Diskは暗号化済みと聞いたが、それで要件を満たせるのか判断できない」——こうした疑問を持つLinuxエンジニアは少なくありません。

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に相当する機能はない


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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のトランザクション費用
ADEは「OSが起動している状態から見ても暗号化されている」ことを要件とする場合に選択します。SSEとADEを組み合わせることもでき、その場合は二重の暗号化となります。

どちらを選ぶか迷った場合は次の判断基準を参考にしてください。

・コンプライアンス要件が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(手動設定)
AWSで「ゲストOS内部でのディスク暗号化」が必要な場合は、LUKSを手動で設定する方法が一般的です。Azureは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

事前スナップショットがあれば、ADE適用失敗のリカバリーは数分で完了します。

本記事のまとめ

やりたいこと コマンドまたは設定
事前スナップショットを取得する 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のDisk Encryptionを使えば、コンプライアンス要件の高い環境でもLinux VMのディスクをゲストOSレベルで暗号化できます。SSEと組み合わせることで二重の暗号化も実現でき、AWS EBSではカバーしきれないゲスト暗号化の要件にも対応できます。作業前のスナップショット取得とKey Vaultのアクセスポリシーをしっかり設定しておけばリカバリーも容易です。まずは検証環境で手順を通してから、本番環境に適用することを推奨します。

Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。