オフライン修復のために暗号化された Linux ディスクのロックを解除する

この記事では、オフライン修復のために Azure Disk Encryption (ADE) 対応 OS ディスクのロックを解除する方法について説明します。

Azure Disk Encryption は、Microsoft の保証済み Linux 仮想マシン (VM) に適用できます。 Linux VM で Azure Disk Encryption を有効にする基本的な要件を次に示します。

現象

OS ディスクで ADE が有効になっている場合は、修復 VM にディスクをマウントしようとすると、次のエラー メッセージが表示されることがあります。

mount: 間違った fs 型、無効なオプション、/dev/sda2 の不適切なスーパーブロック、コード ページまたはヘルパー プログラムが見つからない、またはその他のエラー

mount: 不明なファイルシステムの種類 'LVM2_member'

準備

オフライン修復のために暗号化された OS ディスクのロックを解除する前に、次のタスクを完了します。

  1. ディスクで ADE が有効になっていることを確認します
  2. OS ディスクで ADE バージョン 0 (デュアルパス暗号化) と ADE バージョン 1 (シングルパス暗号化) のどちらを使用するかを決定します。
  3. OS ディスクが管理されているか管理されていないかを判断します。
  4. 暗号化されたディスクのロックを解除する方法を選択します

ディスクで ADE が有効になっていることを確認する

この手順は、Azure portal、PowerShell、または Azure コマンド ライン インターフェイス (Azure CLI) で実行できます。

Azure portal

Azure portalで失敗した VM の [概要] ブレードを表示します。 [ディスク] の下に、次のスクリーンショットに示すように、Azure ディスク暗号化エントリが [有効] または [有効になっていない] として表示されます。

Azure portal の V M の概要ブレードのスクリーンショット。ディスクで A D E が有効になっていることを示しています。

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」を参照してください。

注:

ディスクで ADE が有効になっていない場合は、次の記事を参照して、修復 VM にディスクをアタッチする方法を確認します。修復 VM に OS ディスクを接続して Linux VM のトラブルシューティングを行います。

OS ディスクで ADE バージョン 0 (デュアルパス暗号化) と ADE バージョン 1 (シングルパス暗号化) のどちらを使用するかを判断する

VM のプロパティを開き、[拡張機能] を選択して [拡張機能] ブレードを開くと、Azure portalで ADE のバージョンを特定できます。 [ 拡張機能 ] ブレードで、 AzureDiskEncryptionForLinux のバージョン番号を表示します。

  • バージョン番号が の場合、ディスクは 0.*デュアルパス暗号化を使用します。
  • バージョン番号がまたはそれ以降のバージョンの場合、ディスクは 1.* シングルパス暗号化を使用します。

ディスクで ADE バージョン 0 (デュアルパス暗号化) を使用している場合は 、方法 3 を使用してディスクのロックを解除します。

OS ディスクが管理されているか管理されていないかを判断する

OS ディスクが管理されているかどうかがわからない場合は、「OS ディスクが管理されているか管理 されていないかを判断する」を参照してください。

OS ディスクがアンマネージド ディスクの場合は、 方法 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 ボリューム内のキー ファイルによって暗号化されたディスクのロックを解除する

暗号化されたディスクのロックを解除して手動でマウントするには、次の手順に従います。

  1. 新しい修復 VM を作成し、VM の作成時に暗号化されたディスクをこの VM にアタッチします。

    修復 VM を作成するときは、暗号化されたディスクをアタッチする必要があります。 これは、接続されたディスクが暗号化されていることをシステムが検出するためです。 そのため、Azure キー コンテナーから ADE キーをフェッチし、"BEK VOLUME" という名前の新しいボリュームを作成してキー ファイルを格納します。

  2. 修復 VM にログインし、暗号化されたディスクにマウントされているパーティションをマウント解除します

  3. BEK ボリューム内の ADE キー ファイルを特定します

  4. 暗号化された OS のブート パーティション内のヘッダー ファイルを特定します

  5. ADE キー ファイルとヘッダー ファイルを使用して、暗号化されたディスクのロックを解除します

  6. パーティションをマウントします( LVMRAW、LVM 以外)。

修復 VM を作成する

  1. 暗号化された OS ディスクのスナップショットを取得します

  2. スナップショットからディスクを作成する。 新しいディスクの場合は、修復する問題のある VM と同じ場所と可用性ゾーンを選択します。

  3. 次のガイドラインに基づく VM を作成します。

    • Azure Marketplaceで、障害が発生した VM に使用された修復 VM と同じイメージを選択します。 (OS のバージョンは同じである必要があります)。
    • VM に少なくとも 8 GB のメモリを割り当てるサイズを選択します。
    • この新しい VM を、手順 2 で作成した新しいディスクに使用したのと同じリソース グループ、リージョン、可用性設定に割り当てます。
  4. 仮想マシンの作成ウィザードの [ディスク] ページで、新しいディスク (スナップショットから作成した) をデータ ディスクとしてアタッチします。

重要

暗号化設定は VM の作成時にのみ検出されるため、VM の作成時にディスクを接続してください。 これにより、ADE キー ファイルを含むボリュームを VM に自動的に追加できます。

暗号化されたディスクにマウントされているパーティションのマウントを解除する

  1. 修復 VM が作成されたら、修復 VM に SSH 接続し、適切な資格情報を使用してログインし、アカウントをルートに昇格します。

    sudo -s 
    
  2. lsblk コマンドを使用して、接続されているデバイスを一覧表示します。 出力には、複数のアタッチされたディスクが表示されます。 これらのディスクには、アクティブな OS ディスクと暗号化されたディスクが含まれます。 任意の順序で表示できます。

  3. 次の情報を使用して、暗号化されたディスクを特定します。

    • ディスクには複数のパーティションがあります
    • ディスクには、ルート ディレクトリ ("/") が、そのパーティションのマウント ポイントとして一覧表示されません。
    • ディスクは、スナップショットから作成したときに示したサイズと一致します。

    次の例では、出力は "sdd" が暗号化されたディスクであることを示しています。 これは、複数のパーティションを持ち、"/" をマウントポイントとして一覧表示しない唯一のディスクです。

    最初の例に関する画像

  4. ファイル システムにマウントされている暗号化されたデータ ディスク上のパーティションのマウントを解除します。 たとえば、前の例では、"/boot/efi"* と "/boot" の両方をマウント解除する必要があります。

    umount /boot/efi 
    
    umount /boot 
    

ADE キー ファイルを特定する

暗号化されたディスクのロックを解除するには、キー ファイルとヘッダー ファイルの両方が必要です。 キー ファイルは BEK ボリュームに格納され、ヘッダー ファイルは暗号化された OS ディスクのブート パーティションにあります。

  1. BEK ボリュームであるパーティションを決定します。

    lsblk -fs | grep -i bek 
    

    次の出力例は、sdb1 が BEK ボリュームであることを示しています。

    >sdb1  vfat   BEK VOLUME      04A2-FE67 
    

    BEK ボリュームが存在しない場合は、暗号化されたディスクをアタッチして修復 VM を再作成します。 BEK ボリュームがまだ自動的にアタッチされない場合は、 方法 3 を試して BEK ボリュームを取得してください。

  2. "/mnt" フォルダーの下に "azure_bek_disk" という名前のディレクトリを作成します。

    mkdir /mnt/azure_bek_disk 
    
  3. BEK ボリュームを "/mnt/azure_bek_disk" ディレクトリにマウントします。 たとえば、sdb1 が BEK ボリュームの場合は、次のコマンドを入力します。

    mount /dev/sdb1 /mnt/azure_bek_disk 
    
  4. 使用可能なデバイスをもう一度一覧表示します。

    lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT  
    

    メモ: BEK ボリュームであると判断したパーティションが "/mnt/azure_bek_disk" にマウントされていることがわかります。

  5. "/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" キー ファイルと共に使用して、暗号化されたディスクのロックを解除します。

  1. 次のコマンドを使用して、使用可能なディスクとパーティションの選択した属性を表示します。

    lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
    
  2. 暗号化されたディスクで、OS パーティション (ルート パーティション) を特定します。 これは、暗号化されたディスク上の最大のパーティションです。 前の出力例では、OS パーティションは "sda4" です。このパーティションは、unlock コマンドを実行するときに指定する必要があります。

  3. ファイル構造のルート ディレクトリ ("/") で、暗号化されたディスクのルート パーティションをマウントするディレクトリを作成します。 ディスクのロックが解除されたら、後でこのディレクトリを使用します。 修復 VM のアクティブな OS パーティションと区別するには、"investigateroot" という名前を付けます。

    mkdir /{investigateboot,investigateroot}
    
  4. 暗号化されたディスクで、ヘッダー ファイルを含むブート パーティションを特定します。 暗号化されたディスクでは、ブート パーティションは、LABEL 列または PARTLABEL 列に値を表示しない 2 番目に大きいパーティションです。 前の出力例では、暗号化されたディスクのブート パーティションは "sda2" です。

  5. 手順 4 で特定したブート パーティションを /investigateboot/ ディレクトリにマウントします。 次の例では、暗号化されたディスクのブート パーティションは sda2 です。 ただし、システム上の場所が異なる場合があります。

    mount /dev/sda2 /investigateboot/ 
    

    パーティションのマウントが失敗し、"間違った fs の種類、無効なオプション、不適切なスーパーブロック" のエラー メッセージが返される場合は、次の例のようにコマンドを mount -o nouuid 使用してやり直してください。

    mount -o nouuid /dev/sda2 /investigateboot/ 
    
  6. /investigateboot/ ディレクトリ内のファイルを一覧表示します。 "luks" サブディレクトリには、ディスクのロックを解除するために必要なヘッダー ファイルが含まれています。

  7. /investigateboot/luks/ ディレクトリ内のファイルを一覧表示します。 ヘッダー ファイルの名前は "osluksheader" です。

    ls -l /investigateboot/luks 
    

ADE キー ファイルとヘッダー ファイルを使用してディスクのロックを解除する

  1. コマンドを cryptsetup luksOpen 使用して、暗号化されたディスク上のルート パーティションのロックを解除します。 たとえば、暗号化された OS を含むルート パーティションへのパスが /dev/sda4 で、ロック解除されたパーティションに "osencrypt" という名前を割り当てる場合は、次のコマンドを実行します。

    cryptsetup luksOpen --key-file /mnt/azure_bek_disk/LinuxPassPhraseFileName --header /investigateboot/luks/osluksheader /dev/sda4 osencrypt 
    
  2. ディスクのロックを解除したら、暗号化されたディスクのブート パーティションを /investigateboot/ ディレクトリからマウント解除します。

    umount /investigateboot/ 
    

    メモ: このパーティションは後で別のディレクトリにマウントする必要があります。

    次の手順では、ロックを解除したパーティションをマウントします。 パーティションのマウントに使用する方法は、ディスクによって使用されるデバイス マッパー フレームワーク (LVM または LVM 以外) によって異なります。

  3. デバイス情報とファイル システムの種類を一覧表示します。

    lsblk -o NAME,FSTYPE 
    

    ロック解除されたパーティションと割り当てた名前が表示されます (この例では、その名前は "osencrypt" です)。

ロック解除されたパーティションをマウントし、chroot 環境に入ります (LVM のみ)

ディスクで LVM デバイス マッパー フレームワークを使用する場合は、ディスクをマウントして chroot 環境に入る追加の手順を実行する必要があります。 暗号化されたディスクと共に chroot ツールを使用するには、ロック解除されたパーティション ("osencrypt") とその論理ボリュームを rootvg という名前のボリューム グループとして認識する必要があります。 ただし、既定では、修復 VM の OS パーティションとその論理ボリュームは、rootvg という名前のボリューム グループに既に割り当てられます。 続行する前に、この競合を解決する必要があります。

  1. コマンドを pvs 使用して、LVM 物理ボリュームのプロパティを表示します。 次の例のように、ロック解除されたパーティション ("/dev/mapper/osencrypt") と別のデバイスが重複するユニバーサル一意識別子 (UUID) を使用していることを示す警告メッセージが表示される場合があります。 または、rootvg に割り当てられた 2 つのパーティションが表示される場合があります。

    注:

    ロック解除されたパーティション ("osencrypt") のみを rootvg ボリューム グループに割り当てて、chroot ユーティリティを使用してその論理ボリュームにアクセスできるようにします。 この問題を解決するには、パーティションを別のボリューム グループに一時的にインポートし、そのボリューム グループをアクティブにします。 次に、現在の rootvg ボリューム グループの名前を変更します。 chroot 環境に入った後にのみ、暗号化されたディスクのボリューム グループの名前を "rootvg" に変更します。

ロック解除されたパーティションの割り当て (例)

  1. 新しくロック解除されたパーティションを新しいボリューム グループにインポートします。 この例では、新しいボリューム グループに "rescuemevg" という名前を一時的に付ける必要があります。 新しくロック解除されたパーティションを新しいボリューム グループにインポートします。 この例では、新しいボリューム グループに "rescuemevg" という名前を一時的に付ける必要があります。

  2. 新しいボリューム グループをアクティブにします。

    vgimportclone -n rescuemevg /dev/mapper/osencrypt
    vgchange -a y rescuemevg
    
  3. 古い rootvg ボリューム グループの名前を変更します。 この例では、"oldvg" という名前を使用します。

    vgrename rootvg oldvg 
    
  4. を実行 lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT して、使用可能なデバイスを確認します。 これで、割り当てた名前で両方のボリューム グループが一覧表示されます。

  5. 重複する UUID を使用せずに、rescuemevg/rootlv 論理ボリュームを /investigateroot/ ディレクトリにマウントします。

    umount /investigateboot
    mount -o nouuid /dev/rescuemevg/rootlv /investigateroot/ 
    

    これで、障害が発生した VM のルート パーティションのロックが解除され、マウントされ、ルート パーティションにアクセスして問題のトラブルシューティングを行えるようになります。 詳細については、「 ファイルシステム エラーによる Linux 仮想マシンのブートに関する問題のトラブルシューティング」を参照してください。

    ただし、トラブルシューティングに chroot ユーティリティを使用する場合は、次の手順に従って続行します。

  6. 重複する UUID を使用せずに、暗号化されたディスクのブート パーティションをディレクトリ /investigateroot/boot/ にマウントします。 (暗号化されたディスクのブート パーティションは、パーティション ラベルが割り当てられていない 2 番目に大きいことに注意してください)。現在の例では、暗号化されたディスクのブート パーティションは sda2 です。

    mount -o nouuid /dev/sda2 /investigateroot/boot
    
  7. 暗号化されたディスクの EFI システム パーティションを /investigateroot/boot/efi ディレクトリにマウントします。 このパーティションは、そのラベルで識別できます。 現在の例では、EFI システム パーティションは sda1 です。

    mount /dev/sda1 /investigateroot/boot/efi
    
  8. 暗号化されたディスクのボリューム グループ内の残りのマウントされていない論理ボリュームを、"/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
    
  9. 暗号化されたディスク上のマウントされたルート パーティションに Active Directory を変更します。

    cd /investigateroot
    
  10. 次のコマンドを入力して、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/
    
  11. chroot 環境を入力します。

    chroot /investigateroot/
    
  12. grub と initramfs の競合や考えられる問題を回避するために、rescuemevg ボリューム グループの名前を "rootvg" に変更します。 initramfs を再生成するときは、同じ名前付け規則を保持します。 vg 名が変更されたため、レスキュー VM で作業します。 再起動しても役に立たなくなります。 レスキュー VM は一時的な VM と見なす必要があります。

    vgrename rescuemevg rootvg
    
  13. chroot 環境の問題のトラブルシューティングを行います。 たとえば、ログを読み取ったり、スクリプトを実行したりできます。 詳細については、「 chroot 環境で修正を実行する」を参照してください。

  14. chroot を終了し、OS ディスクをスワップします

ロック解除されたディスクをマウントし、chroot 環境に入ります (RAW/LVM 以外)

  1. ファイル構造のルート ディレクトリ ("/") で、暗号化されたディスクのルート パーティションをマウントするディレクトリを作成します。 ディスクのロックが解除されたら、後でこのディレクトリを使用します。 修復 VM のアクティブな OS パーティションと区別するには、"investigateroot" という名前を付けます。

    mkdir /{investigateboot,investigateroot}
    
  2. 新しくロック解除されたパーティション ("osencrypt") を /investigateroot/ ディレクトリにマウントします。

    mount /dev/mapper/osencrypt /investigateroot/ 
    

    パーティションのマウントが失敗し、"間違った fs の種類、不適切なオプション、不適切なスーパーブロック" というエラー メッセージが返される場合は、mount -o nouuid コマンドを使用して再試行してください。

    mount -o nouuid /dev/mapper/osencrypt /investigateroot/ 
    
  3. /investigateroot/ ディレクトリの内容を表示して、マウントされたパーティションのロックが解除されていることを確認します。

    ls /investigateroot/ 
    
  4. 障害が発生した VM のルート パーティションのロックが解除され、マウントされたので、ルート パーティションにアクセスして問題のトラブルシューティングを行うことができます。 詳細については、「 ファイルシステム エラーによる Linux 仮想マシンのブートに関する問題のトラブルシューティング」を参照してください。

    ただし、トラブルシューティングに chroot ユーティリティを使用する場合は、次の手順に進みます。

  5. コマンド lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT を使用して、使用可能なデバイスを確認します。 暗号化されたディスク上のブート パーティションを、ラベルが割り当てられていない 2 番目に大きいパーティションとして識別します。

  6. 次の例のように、暗号化されたディスク上のブート パーティションを "/investigateroot/boot/" ディレクトリにマウントします。

    mount /dev/sdc2 /investigateroot/boot/ 
    
  7. 暗号化されたディスク上のマウントされたルート パーティションに Active Directory を変更します。

    cd /investigateroot 
    
  8. 次のコマンドを入力して、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/ 
    
  9. chroot 環境を入力します。

    chroot /investigateroot/ 
    
  10. chroot 環境の問題のトラブルシューティングを行います。 ログを読み取るか、スクリプトを実行できます。 詳細については、「 chroot 環境で修正を実行する」を参照してください。

  11. chroot を終了し、OS ディスクをスワップします

方法 3: ディスクを再暗号化してキー ファイルを取得し、暗号化されたディスクのロックを解除する

  1. 修復 VM を作成し、ロックされたディスクのコピーを修復 VM にアタッチします。

  2. 暗号化されたディスクをデータ ディスクとして修復 VM にアタッチした後、元の VM に使用したKey Vaultキーとキー暗号化キー (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-keyvaultkey-encryption-key の値を確認するには、次のコマンドを実行します。

      az vm encryption show --name "OriginalVmName" --resource-group "ResourceGroupName"
      

      次の表で、出力内の値を見つけます。 keyEncryptionKey の値が空白の場合、VM は BEK によって暗号化されます。

      パラメーター 出力の値
      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
  3. 次のコマンドを実行して、新しいディスクが接続されているかどうかをチェックします。

    lsblk -f
    

    新しいディスクが接続されている場合は、[ BEK ボリューム内の ADE キー ファイルを識別する] に移動し、指定された手順に従ってディスクのロックを解除します。

次の手順

VM への接続に問題がある場合は、「 Azure VM への SSH 接続のトラブルシューティング」を参照してください。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。