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

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.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を適用する手順を実践形式で解説します。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が必要になります。

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を組み合わせることもでき、その場合は二重の暗号化となります。

Azure Disk Encryptionを有効にする手順

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のサイズが対応しているか確認するには次のコマンドを使います。

# ADEをサポートするVMの一覧確認(japaneastの場合) # スキップ可能。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 \ --retention-days 7

実行例(出力の一部):

{ "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myDiskEncryptKV", "location": "japaneast", "name": "myDiskEncryptKV", "properties": { "enabledForDiskEncryption": true, "provisioningState": "Succeeded", "sku": { "family": "A", "name": "standard" } } }

enabledForDiskEncryption: 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接続が一時的に切断されます。適用前にスナップショットを取得しておくことを強く推奨します。

4. 暗号化の状態を確認する

再起動が完了したら、暗号化が正常に適用されたことを確認します。

# 暗号化の状態を確認する az vm encryption show \ --resource-group $RG \ --name $VM_NAME \ --query "disks[].statuses[].displayStatus" \ --output table

実行例(出力):

Column1 ----------- Encryption succeeded

Encryption succeeded が表示されれば、OSディスクへのADE適用が完了しています。

現場で通用する安全な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によるゲスト暗号化を適用できる点が差別化ポイントです。

トラブルシュート

「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に GetWrap KeyUnwrap 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

本記事のまとめ

やりたいこと コマンドまたは設定
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ではカバーしきれないゲスト暗号化の要件にも対応できます。

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

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

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

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

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

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

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

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

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

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。