オフライン修復のために暗号化された Linux ディスクのロックを解除する
適用対象: ✔️ Linux VM
この記事では、オフライン修復のために Azure Disk Encryption (ADE) 対応 OS ディスクのロックを解除する方法について説明します。
Azure Disk Encryption は、Microsoft の動作保証済み Linux 仮想マシン (VM) に適用できます。 Linux VM で Azure Disk Encryption を有効にする基本的な要件を次に示します。
- Azure Key Vault
- Azure CLI または Windows PowerShell コマンドレット
- Device-mapper (DM)-Crypt
現象
OS ディスクで ADE が有効になっている場合、修復 VM にディスクをマウントしようとすると、次のエラー メッセージが表示されることがあります。
mount: 間違った fs 型、無効なオプション、/dev/sda2 の不適切なスーパーブロック、コード ページまたはヘルパー プログラムが見つからない、またはその他のエラー
mount: 不明なファイルシステムの種類 'LVM2_member'
準備
オフライン修復のために暗号化された OS ディスクのロックを解除する前に、次のタスクを完了します。
- ディスクで ADE が有効になっていることを確認します。
- OS ディスクで ADE バージョン 0 (デュアルパス暗号化) または ADE バージョン 1 (シングルパス暗号化)を使用しているかどうかを確認します。
- OS ディスクが管理されているか管理されていないかを判断します。
- 暗号化されたディスクのロックを解除する方法を選択。
ディスクで ADE が有効になっていることを確認する
この手順は、Azure portal、PowerShell、または Azure コマンド ライン インターフェイス (Azure CLI) で実行できます。
Azure portal
Azure portal で、失敗した VM の Overview ブレードを表示します。 Diskの下に、次のスクリーンショットに示すように、Azure disk encryption エントリは Enabled または Not Enabled として表示されます。
PowerShell
Get-AzVmDiskEncryptionStatus
コマンドレットを使用して、VM の OS ボリュームまたはデータ ボリュームが ADE を使用して暗号化されているかどうかを判断できます。 次の出力例は、OS ボリュームで ADE 暗号化が有効になっていることを示しています。
Get-AzVmDiskEncryptionStatus -ResourceGroupName "ResourceGroupName" -VMName "VmName"
Get-AzureRmDiskEncryptionStatus
コマンドレットの詳細については、「Get-AzVMDiskEncryptionStatus (Az.Compute)を参照してください。
Azure CLI
az vm encryption show
コマンドを使用して、VM ディスクで ADE が有効になっているかどうかを確認できます。
az vm encryption show --name MyVM --resource-group MyResourceGroup --query "disks[].encryptionSettings[].enabled"
az vm encryption show
コマンドの詳細については、「az vm encryption showを参照してください。
Note
ディスクで ADE が有効になっていない場合は、修復 VM にディスクを接続する方法については、次の記事を参照してください。 OS ディスクを修復 VM に接続して Linux VM をトラブルシューティングする。
OS ディスクで ADE バージョン 0 (デュアルパス暗号化) と ADE バージョン 1 (シングルパス暗号化) のどちらを使用するかを判断する
AZURE portal で ADE のバージョンを識別するには、VM のプロパティを開き、 Extensions を選択して Extensions ブレードを開きます。 Extensions ブレードで、AzureDiskEncryptionForLinux のバージョン番号を表示します。
- バージョン番号が
0.*
されている場合、ディスクはデュアルパス暗号化を使用します。 - バージョン番号が
1.*
またはそれ以降のバージョンの場合、ディスクはシングルパス暗号化を使用します。
ディスクで ADE バージョン 0 (デュアルパス暗号化) を使用している場合は、 Method 3 を使用してディスクのロックを解除します。
OS ディスクが管理されているか管理されていないかを判断する
OS ディスクが管理されているかアンマネージドであるかがわからない場合は、「 OS ディスクが管理されているか管理されていないか」を参照してください。
OS ディスクがアンマネージド ディスクの場合は、 Method 3 の手順に従ってディスクのロックを解除します。
暗号化されたディスクのロックを解除する方法を選択します
暗号化されたディスクのロックを解除するには、次のいずれかの方法を選択します。
- ディスクが ADE バージョン 1 を使用して管理および暗号化されており、インフラストラクチャと会社のポリシーでパブリック IP アドレスを修復 VM に割り当てることができるようにする場合は、 Method 1: az vm repair コマンドを使用して暗号化されたディスクのロックを自動的に解除します。
- ディスクが ADE バージョン 1 を使用して管理および暗号化されているのに、インフラストラクチャまたは会社のポリシーでパブリック IP アドレスを修復 VM に割り当てできない場合は、 Method 2: BEK ボリューム内のキー ファイルによって暗号化されたディスクのロックを解除します。 この方法を選択するもう 1 つの理由は、Azure でリソース グループを作成するためのアクセス許可がない場合です。
- これらの方法のいずれかが失敗した場合、またはディスクが ADE バージョン 1 (デュアルパス暗号化) を使用してアンマネージドまたは暗号化されている場合は、 Method 3 の手順に従ってディスクのロックを解除します。
方法 1: az vm repair コマンドを使用して暗号化されたディスクのロックを自動的に解除する
この方法では、 az vm repair コマンドを使用して、修復 VM を自動的に作成し、失敗した Linux VM の OS ディスクをその修復 VM に接続し、暗号化されている場合はディスクのロックを解除します。 この方法では、修復 VM にパブリック IP アドレスを使用する必要があり、ADE キーがラップ解除されているか、キー暗号化キー (KEK) を使用してラップされているかに関係なく、暗号化されたディスクのロックが解除されます。
この自動化された方法を使用して VM を修復するには、「 Azure Virtual Machine 修復コマンドを使用して Linux VM を修復するの手順に従います。
インフラストラクチャと会社のポリシーでパブリック IP アドレスを割り当てることができない場合、または az vm repair
コマンドでディスクのロックが解除されない場合は、次の方法に進みます。
方法 2: BEK ボリューム内のキー ファイルによって暗号化されたディスクのロックを解除する
暗号化されたディスクのロックを解除して手動でマウントするには、次の手順に従います。
新しい修復 VM を作成し、VM の作成時に暗号化されたディスクをこの VM に接続します。
修復 VM を作成するときは、暗号化されたディスクを接続する必要があります。 これは、接続されているディスクが暗号化されていることをシステムが検出するためです。 そのため、Azure キー コンテナーから ADE キーをフェッチし、"BEK VOLUME" という名前の新しいボリュームを作成してキー ファイルを格納します。
パーティション ( LVM、 RAW、LVM 以外) をマウント。
修復 VM を作成する
スナップショットからディスクを作成します。 新しいディスクの場合は、修復する問題のある VM の場所と可用性ゾーンと同じ場所と可用性ゾーンを選択します。
次のガイドラインに基づいて VM を作成します。
- Azure Marketplace で、障害が発生した VM に使用された修復 VM と同じイメージを選択します。 (OS のバージョンは同じである必要があります)。
- VM に少なくとも 8 GB のメモリを割り当てるサイズを選択します。
- この新しい VM を、手順 2 で作成した新しいディスクに使用したのと同じリソース グループ、リージョン、および可用性設定に割り当てます。
仮想マシンの作成ウィザードの Disks ページで新しいディスク (スナップショットから作成したディスク) をデータ ディスクとしてアタッチします。
重要
暗号化設定は VM の作成時にのみ検出されるため、VM の作成時に必ずディスクを接続してください。 これにより、ADE キー ファイルを含むボリュームを VM に自動的に追加できます。
暗号化されたディスクにマウントされているパーティションのマウントを解除する
修復 VM が作成されたら、修復 VM に SSH 接続し、適切な資格情報を使用してログインし、アカウントをルートに昇格します。
sudo -s
lsblk コマンドを使用して、接続されているデバイスを一覧表示します。 出力には、複数の接続されたディスクが表示されます。 これらのディスクには、アクティブな OS ディスクと暗号化されたディスクが含まれます。 任意の順序で表示できます。
次の情報を使用して、暗号化されたディスクを識別します。
- ディスクには複数のパーティションがあります
- ディスクには、ルート ディレクトリ ("/") は、そのパーティションのマウント ポイントとして一覧表示されません。
- ディスクは、スナップショットから作成したときに指定したサイズと一致します。
次の例では、出力は "sdd" が暗号化されたディスクであることを示しています。 これは、複数のパーティションがあり、マウント ポイントとして "/" を一覧表示しない唯一のディスクです。
ファイル システムにマウントされている暗号化されたデータ ディスク上のパーティションのマウントを解除します。 たとえば、前の例では、"/boot/efi"* と "/boot" の両方のマウントを解除する必要があります。
umount /boot/efi umount /boot
ADE キー ファイルを識別する
暗号化されたディスクのロックを解除するには、キー ファイルとヘッダー ファイルの両方が必要です。 キー ファイルは BEK ボリュームに格納され、ヘッダー ファイルは暗号化された OS ディスクのブート パーティションにあります。
BEK ボリュームであるパーティションを決定します。
lsblk -fs | grep -i bek
次の出力例は、sdb1 が BEK ボリュームであることを示しています。
>sdb1 vfat BEK VOLUME 04A2-FE67
BEK ボリュームが存在しない場合は、暗号化されたディスクを接続して修復 VM を再作成します。 BEK ボリュームがまだ自動的にアタッチされない場合は、方法 3 をして BEK ボリュームを取得します。
"/mnt" フォルダーの下に "azure_bek_disk" という名前のディレクトリを作成します。
mkdir /mnt/azure_bek_disk
"/mnt/azure_bek_disk" ディレクトリに BEK ボリュームをマウントします。 たとえば、sdb1 が BEK ボリュームの場合は、次のコマンドを入力します。
mount /dev/sdb1 /mnt/azure_bek_disk
使用可能なデバイスをもう一度一覧表示します。
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
注: BEK ボリュームであると判断したパーティションが "/mnt/azure_bek_disk" にマウントされていることがわかります。
"/mnt/azure_bek_disk/" ディレクトリの内容を表示します。
ls -l /mnt/azure_bek_disk
出力に次のファイルが表示されます (ADE キー ファイルは "LinuxPassPhraseFileName" です)。
>total 1 -rwxr-xr-x 1 root root 148 Aug 4 01:04 CRITICAL_DATA_WARNING_README.txt -r-xr-xr-x 1 root root 172 Aug 4 01:04 LinuxPassPhraseFileName
暗号化された VM に複数のディスクが接続されている場合、複数の "LinuxPassPhraseFileName" が表示されることがあります。 "LinuxPassPhraseFileName" は、論理ユニット番号 (LUN) と同じ順序でディスクの数に従って列挙されます。
ヘッダー ファイルを識別する
暗号化されたディスクのブート パーティションには、ヘッダー ファイルが含まれています。 このファイルを "LinuxPassPhraseFileName" キー ファイルと共に使用して、暗号化されたディスクのロックを解除します。
次のコマンドを使用して、使用可能なディスクとパーティションの選択した属性を表示します。
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
暗号化されたディスクで、OS パーティション (ルート パーティション) を特定します。 これは、暗号化されたディスク上で最大のパーティションです。 前の出力例では、OS パーティションは "sda4" です。このパーティションは、unlock コマンドを実行するときに指定する必要があります。
ファイル構造のルート ディレクトリ ("/") に、暗号化されたディスクのルート パーティションをマウントするディレクトリを作成します。 このディレクトリは、後でディスクのロックが解除された後で使用します。 修復 VM のアクティブな OS パーティションと区別するには、"investigateroot" という名前を付けます。
mkdir /{investigateboot,investigateroot}
暗号化されたディスクで、ヘッダー ファイルを含むブート パーティションを特定します。 暗号化されたディスクでは、ブート パーティションは LABEL 列または PARTLABEL 列に値を表示しない 2 番目に大きいパーティションです。 前の出力例では、暗号化されたディスクのブート パーティションは "sda2" です。
手順 4 で識別したブート パーティションを /investigateboot/ ディレクトリにマウントします。 次の例では、暗号化されたディスクのブート パーティションは sda2 です。 ただし、システム上の場所が異なる場合があります。
mount /dev/sda2 /investigateboot/
パーティションのマウントが失敗し、"間違った fs の種類、無効なオプション、無効なスーパーブロック" エラー メッセージが返される場合は、次の例のように、
mount -o nouuid
コマンドを使用して再試行してください。mount -o nouuid /dev/sda2 /investigateboot/
/investigateboot/ ディレクトリ内のファイルを一覧表示します。 "luks" サブディレクトリには、ディスクのロックを解除するために必要なヘッダー ファイルが含まれています。
/investigateboot/luks/ ディレクトリ内のファイルを一覧表示します。 ヘッダー ファイルの名前は "osluksheader" です。
ls -l /investigateboot/luks
ADE キー ファイルとヘッダー ファイルを使用してディスクのロックを解除する
cryptsetup luksOpen
コマンドを使用して、暗号化されたディスク上のルート パーティションのロックを解除します。 たとえば、暗号化された OS を含むルート パーティションへのパスが /dev/sda4 で、ロック解除されたパーティションに "osencrypt" という名前を割り当てる場合は、次のコマンドを実行します。cryptsetup luksOpen --key-file /mnt/azure_bek_disk/LinuxPassPhraseFileName --header /investigateboot/luks/osluksheader /dev/sda4 osencrypt
ディスクのロックを解除したら、暗号化されたディスクのブート パーティションを /investigateboot/ ディレクトリからマウント解除します。
umount /investigateboot/
注: 後でこのパーティションを別のディレクトリにマウントする必要があります。
次の手順では、ロックを解除したパーティションをマウントします。 パーティションのマウントに使用する方法は、ディスクで使用されるデバイス マッパー フレームワーク (LVM または LVM 以外) によって異なります。
デバイス情報とファイル システムの種類を一覧表示します。
lsblk -o NAME,FSTYPE
ロック解除されたパーティションと割り当てた名前が表示されます (この例では、その名前は "osencrypt" です)。
- "LVM_member" などの LVM パーティションについては、「
LVM パーティションのマウント RAW または非 LVMを参照してください。 - LVM 以外のパーティションについては、「 LVM 以外のパーティションをマウントするを参照してください。
- "LVM_member" などの LVM パーティションについては、「
ロック解除されたパーティションをマウントし、chroot 環境に入ります (LVM のみ)
ディスクで LVM デバイス マッパー フレームワークを使用する場合は、ディスクをマウントして chroot 環境に入るために追加の手順を実行する必要があります。 暗号化されたディスクと共に chroot ツールを使用するには、ロック解除されたパーティション ("osencrypt") とその論理ボリュームを rootvg という名前のボリューム グループとして認識する必要があります。 ただし、既定では、修復 VM の OS パーティションとその論理ボリュームは、rootvg という名前のボリューム グループに既に割り当てられます。 続行する前に、この競合を解決する必要があります。
pvs
コマンドを使用して、LVM 物理ボリュームのプロパティを表示します。 次の例のように、ロック解除されたパーティション ("/dev/mapper/osencrypt") と別のデバイスが重複する汎用一意識別子 (UUID) を使用していることを示す警告メッセージが表示されることがあります。 または、rootvg に割り当てられた 2 つのパーティションが表示される場合があります。Note
chroot ユーティリティを使用して論理ボリュームにアクセスできるように、ロック解除されたパーティション ("osencrypt") のみを rootvg ボリューム グループに割り当てる必要があります。 この問題を解決するには、パーティションを別のボリューム グループに一時的にインポートし、そのボリューム グループをアクティブにします。 次に、現在の rootvg ボリューム グループの名前を変更します。 chroot 環境に入った後でのみ、暗号化されたディスクのボリューム グループの名前を "rootvg" に変更します。
ロック解除されたパーティションの割り当て (例)
新しくロック解除されたパーティションを新しいボリューム グループにインポートします。 この例では、新しいボリューム グループに "rescuemevg" という名前を一時的に付ける必要があります。 新しくロック解除されたパーティションを新しいボリューム グループにインポートします。 この例では、新しいボリューム グループに "rescuemevg" という名前を一時的に付ける必要があります。
新しいボリューム グループをアクティブにします。
vgimportclone -n rescuemevg /dev/mapper/osencrypt vgchange -a y rescuemevg
古い rootvg ボリューム グループの名前を変更します。 この例では、"oldvg" という名前を使用します。
vgrename rootvg oldvg
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
を実行して、使用可能なデバイスを確認します。 これで、割り当てた名前で両方のボリューム グループが一覧表示されます。重複する UUID を使用せずに、rescuemevg/rootlv 論理ボリュームを /investigateroot/ ディレクトリにマウントします。
umount /investigateboot mount -o nouuid /dev/rescuemevg/rootlv /investigateroot/
これで、障害が発生した VM のルート パーティションのロックが解除され、マウントされ、ルート パーティションにアクセスして問題をトラブルシューティングできるようになります。 詳細については、「 ファイルシステム エラーによる Linux 仮想マシンのブートに関する問題をトラブルシューティングするを参照してください。
ただし、トラブルシューティングに chroot ユーティリティを使用する場合は、次の手順に従って続行します。
重複する UUID を使用せずに、暗号化されたディスクのブート パーティションをディレクトリ /investigateroot/boot/ にマウントします。 (暗号化されたディスクのブート パーティションは、パーティション ラベルが割り当てられていない 2 番目に大きいことに注意してください)。現在の例では、暗号化されたディスクのブート パーティションは sda2 です。
mount -o nouuid /dev/sda2 /investigateroot/boot
暗号化されたディスクの EFI システム パーティションを /investigateroot/boot/efi ディレクトリにマウントします。 このパーティションは、そのラベルで識別できます。 現在の例では、EFI システム パーティションは sda1 です。
mount /dev/sda1 /investigateroot/boot/efi
暗号化されたディスクのボリューム グループ内の残りのマウントされていない論理ボリュームを "/investigateroot/" のサブディレクトリにマウントします。
mount -o nouuid /dev/mapper/rescuemevg-varlv /investigateroot/var mount -o nouuid /dev/mapper/rescuemevg-homelv /investigateroot/home mount -o nouuid /dev/mapper/rescuemevg-usrlv /investigateroot/usr mount -o nouuid /dev/mapper/rescuemevg-tmplv /investigateroot/tmp mount -o nouuid /dev/mapper/rescuemevg-optlv /investigateroot/opt
暗号化されたディスク上のマウントされたルート パーティションに Active Directory を変更します。
cd /investigateroot
次のコマンドを入力して、chroot 環境を準備します。
mount -t proc proc proc mount -t sysfs sys sys/ mount -o bind /dev dev/ mount -o bind /dev/pts dev/pts/ mount -o bind /run run/
chroot 環境を入力します。
chroot /investigateroot/
grub と initramfs の競合や考えられる問題を回避するために、rescuemevg ボリューム グループの名前を "rootvg" に変更します。 initramfs を再生成するときは、同じ名前付け規則を維持します。 vg 名が変更されたため、復旧 VM で作業します。 再起動しても役に立たなくなります。 復旧 VM は一時的な VM と見なす必要があります。
vgrename rescuemevg rootvg
chroot 環境での問題のトラブルシューティングを行います。 たとえば、ログを読み取ったり、スクリプトを実行したりできます。 詳細については、chroot 環境での Perform の修正を参照してください。
ロック解除されたディスクをマウントし、chroot 環境に入ります (RAW/LVM 以外)
ファイル構造のルート ディレクトリ ("/") に、暗号化されたディスクのルート パーティションをマウントするディレクトリを作成します。 このディレクトリは、後でディスクのロックが解除された後で使用します。 修復 VM のアクティブな OS パーティションと区別するには、"investigateroot" という名前を付けます。
mkdir /{investigateboot,investigateroot}
新しくロック解除されたパーティション ("osencrypt") を /investigateroot/ ディレクトリにマウントします。
mount /dev/mapper/osencrypt /investigateroot/
パーティションのマウントが失敗し、"間違った fs の種類、無効なオプション、不適切なスーパーブロック" エラー メッセージが返される場合は、mount
-o nouuid
コマンドを使用して再試行してください。mount -o nouuid /dev/mapper/osencrypt /investigateroot/
/investigateroot/ ディレクトリの内容を表示して、マウントされたパーティションのロックが解除されたことを確認します。
ls /investigateroot/
障害が発生した VM のルート パーティションのロックが解除され、マウントされたので、ルート パーティションにアクセスして問題のトラブルシューティングを行うことができます。 詳細については、「 ファイルシステム エラーによる Linux 仮想マシンのブートの問題をトラブルシューティングする...」を参照してください。
ただし、トラブルシューティングに chroot ユーティリティを使用する場合は、次の手順に進みます。
コマンド
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
を使用して、使用可能なデバイスを確認します。 暗号化されたディスク上のブート パーティションを、ラベルが割り当てられていない 2 番目に大きいパーティションとして識別します。次の例のように、暗号化されたディスク上のブート パーティションを "/investigateroot/boot/" ディレクトリにマウントします。
mount /dev/sdc2 /investigateroot/boot/
暗号化されたディスク上のマウントされたルート パーティションに Active Directory を変更します。
cd /investigateroot
次のコマンドを入力して、chroot 環境を準備します。
mount -t proc proc proc mount -t sysfs sys sys/ mount -o bind /dev dev/ mount -o bind /dev/pts dev/pts/ mount -o bind /run run/
chroot 環境を入力します。
chroot /investigateroot/
chroot 環境での問題のトラブルシューティングを行います。 ログを読み取ったり、スクリプトを実行したりできます。 詳細については、chroot 環境での Perform の修正を参照してください。
方法 3: ディスクを再暗号化してキー ファイルを取得し、暗号化されたディスクのロックを解除する
修復 VM を作成し、ロックされたディスクのコピーを修復 VM にアタッチします。
- マネージド ディスクについては、「 マネージド OS ディスクを修復 VM に接続して Linux VM をトラブルシューティングするを参照してください。
- 非管理対象ディスクの場合は、Storage Explorer を使用して、影響を受ける VM の OS ディスクのコピーを作成します。 詳細については、「 オフライン修復のために非管理対象ディスクを VM にアタッチするを参照してください。
暗号化されたディスクをデータ ディスクとして修復 VM に接続したら、元の VM で使用した Key Vault と Key Encrypted キー (KEK) を使用して、このデータ ディスクを再暗号化します。 このプロセスでは、修復 VM で BKE キー ファイルを使用して、BEK ボリュームが自動的に生成され、マウントされます。 ADE 拡張機能によってデータ ディスク上のブート セクターが暗号化される可能性があるため、 EncryptFormatAll オプションを使用しないでください。
元の VM がラップされた BEK によって暗号化 場合、次のコマンドを実行します。
az vm encryption enable -g "resource group" --name "VMName" --disk-encryption-keyvault "keyvault" --key-encryption-key "kek" --volume-type "data"
元の VM が BEK によって暗号化されている場合は、次のコマンドを実行します。
az vm encryption enable -g "resource group" --name "VMName" --disk-encryption-keyvault "keyvault" --volume-type "data"
disk-encryption-keyvault と key-encryption-key の値を確認するには、次のコマンドを実行します。
az vm encryption show --name "OriginalVmName" --resource-group "ResourceGroupName"
次の表で、出力内の値を見つけます。 keyEncryptionKey値が空白の場合、VM は BEK によって暗号化されます。
パラメーター 出力の値 example disk-encryption-keyvault diskEncryptionKey:id /subscriptions/deb73ff9-0000-0000-0000-0000c7a96d37/resourceGroups/Thomas/providers/Microsoft.KeyVault/vaults/ContosoKeyvault key-encryption-key keyEncryptionKey:KeyURI https://ContosoKeyvault.vault.azure.net/keys/mykey/00000000987145a3b79b0ed415fa0000
次のコマンドを実行して、新しいディスクが接続されているかどうかを確認します。
lsblk -f
新しいディスクが接続されている場合は、
BEK ボリューム内の ADE キー ファイルを確認 に移動し、指定された手順に従ってディスクのロックを解除します。
次のステップ
VM への接続で問題が発生した場合は、「 Azure VM への SSH 接続をトラブルシューティングするを参照してください。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。