Google Distributed Cloud(GDC)エアギャップ アプライアンスは、外部 HSM が提供されていない場合、LUKS(Linux Unified Key Setup)を使用してディスク上のデータを暗号化します。4 つのデータドライブの上に RAID5 アレイが作成され、RAID5 アレイの上に単一の LUKS デバイスが作成されます。LUKS KEK はランダムに生成され、ローテーションできます。
このドキュメントでは、次の操作で実行する必要がある LUKS KEK のローテーションの手順について説明します。
- 定期的にスケジュールされた KEK のローテーション。
- KEK の漏えい。
始める前に
次の手順を行います。
- ノートパソコンの前提条件を満たしていることを確認します。
- 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 の両方で次の手順を繰り返します。
root ユーザーとしてノードにログインします。
RAID デバイスが存在することを確認し、
RAID_DEVICEのフルパスを取得します。ll /dev/md古い LUKS 鍵ファイルが存在することを確認し、
OLD_KEYのフルパスを取得します。ll /etc/luks古い KEK をキースロット 1 に追加して、キースロット 0 と 1 の両方に同じ KEK が含まれるようにします。
cryptsetup luksAddKey RAID_DEVICE OLD_KEY --key-slot 1 --key-file OLD_KEYRAID_DEVICEとOLD_KEYは、前の手順で取得したパスに置き換えます。キー スロット 0 から古い KEK を削除します。
cryptsetup luksKillSlot RAID_DEVICE 0 --key-file OLD_KEY新しい KEK を生成し、新しい鍵ファイル
NEW_KEYに保存します。dd if=/dev/urandom of=NEW_KEY bs=512 count=1 chmod u=r,go-rwx NEW_KEYNEW_KEYは、新しいキーファイルのフルパスに置き換えます。新しい KEK をキースロット 0 に追加します。
cryptsetup luksAddKey RAID_DEVICE NEW_KEY --key-slot 0 --key-file OLD_KEYマシン起動時またはシャットダウン時に LUKS デバイスを開閉するように永続構成を設定します。
DEVICE_UUID=$(cryptsetup luksUUID RAID_DEVICE) echo "luksrd5 UUID=${DEVICE_UUID} NEW_KEY luks,discard" > /etc/crypttabキースロット 1 から古い KEK を削除します。
cryptsetup luksKillSlot RAID_DEVICE 1 --key-file NEW_KEY新しい KEK が機能していることを確認します。
cryptsetup luksDump --dump-master-key RAID_DEVICE --key-file NEW_KEY古い KEK が機能しなくなったことを確認します。
cryptsetup luksDump --dump-master-key RAID_DEVICE --key-file OLD_KEY古い KEK を削除します。
rm OLD_KEY
ローテーションが完了する前にノードが再起動された場合でも、起動後に LUKS デバイスを開くことができます。ノードが復元されたら、手順を再開できます。