ディスク暗号鍵をローテーションする

Google Distributed Cloud(GDC)エアギャップ アプライアンスは、外部 HSM が提供されていない場合、LUKS(Linux Unified Key Setup)を使用してディスク上のデータを暗号化します。4 つのデータドライブの上に RAID5 アレイが作成され、RAID5 アレイの上に単一の LUKS デバイスが作成されます。LUKS KEK はランダムに生成され、ローテーションできます。

このドキュメントでは、次の操作で実行する必要がある LUKS KEK のローテーションの手順について説明します。

  • 定期的にスケジュールされた KEK のローテーション。
  • KEK の漏えい。

始める前に

次の手順を行います。

  1. ノートパソコンの前提条件を満たしていることを確認します。
  2. 3 つのノードに root ユーザーとしてログインできることを確認します。

KEK をローテーションする

Google Distributed Cloud(GDC)のエアギャップ アプライアンス システムは、ノード bm01 と bm02 にデプロイされた 2 ノードの NetApp ONTAP Select(OTS)クラスタを利用します(通常は GPU なし)。各ノードには、冗長性を高めるために RAID5 アレイとして構成された 4 つの専用データ ドライブがあります。データ セキュリティを確保するため、各 RAID5 アレイの上に単一の LUKS 暗号化デバイスがレイヤ化されています。

LUKS 暗号化 KEK は、/etc/luks にあるブートディスクに保存されます。LUKS KEK をローテーションするには、クラスタ全体のセキュリティを維持するために、両方のノードで LUKS 暗号化をローテーションする必要があります。KEK の定期的なローテーションを行う場合、または KEK が公開されている場合は、bm01 と bm02 の両方で次の手順を繰り返します。

  1. root ユーザーとしてノードにログインします。

  2. RAID デバイスが存在することを確認し、RAID_DEVICE のフルパスを取得します。

    ll /dev/md
    
  3. 古い LUKS 鍵ファイルが存在することを確認し、OLD_KEY のフルパスを取得します。

    ll /etc/luks
    
  4. 古い KEK をキースロット 1 に追加して、キースロット 0 と 1 の両方に同じ KEK が含まれるようにします。

    cryptsetup luksAddKey RAID_DEVICE OLD_KEY --key-slot 1 --key-file OLD_KEY
    

    RAID_DEVICEOLD_KEY は、前の手順で取得したパスに置き換えます。

  5. キー スロット 0 から古い KEK を削除します。

    cryptsetup luksKillSlot RAID_DEVICE 0 --key-file OLD_KEY
    
  6. 新しい KEK を生成し、新しい鍵ファイル NEW_KEY に保存します。

    dd if=/dev/urandom of=NEW_KEY bs=512 count=1
    chmod u=r,go-rwx NEW_KEY
    

    NEW_KEY は、新しいキーファイルのフルパスに置き換えます。

  7. 新しい KEK をキースロット 0 に追加します。

    cryptsetup luksAddKey RAID_DEVICE NEW_KEY --key-slot 0 --key-file OLD_KEY
    
  8. マシン起動時またはシャットダウン時に LUKS デバイスを開閉するように永続構成を設定します。

    DEVICE_UUID=$(cryptsetup luksUUID RAID_DEVICE)
    echo "luksrd5 UUID=${DEVICE_UUID} NEW_KEY luks,discard" > /etc/crypttab
    
  9. キースロット 1 から古い KEK を削除します。

    cryptsetup luksKillSlot RAID_DEVICE 1 --key-file NEW_KEY
    
  10. 新しい KEK が機能していることを確認します。

    cryptsetup luksDump --dump-master-key RAID_DEVICE --key-file NEW_KEY
    
  11. 古い KEK が機能しなくなったことを確認します。

    cryptsetup luksDump --dump-master-key RAID_DEVICE --key-file OLD_KEY
    
  12. 古い KEK を削除します。

    rm OLD_KEY
    

ローテーションが完了する前にノードが再起動された場合でも、起動後に LUKS デバイスを開くことができます。ノードが復元されたら、手順を再開できます。