Google Distributed Cloud (GDC) 空气隔离设备在未提供外部 HSM 的情况下,使用 Linux Unified Key Setup (LUKS) 来加密磁盘上的数据。在 4 个数据驱动器之上创建 RAID5 阵列,并在 RAID5 阵列之上创建单个 LUKS 设备。LUKS KEK 是随机生成的,可以轮换。
本文档介绍了轮换 LUKS KEK 的步骤,这些步骤必须针对以下情况执行:
- 定期安排的 KEK 轮替。
- KEK 泄露。
准备工作
请完成以下步骤:
- 确认您符合笔记本电脑前提条件。
- 确保您能以根用户身份登录这三个节点。
轮替 KEK
Google Distributed Cloud (GDC) 气隙式设备系统利用部署在节点 bm01 和 bm02(通常没有 GPU)上的双节点 NetApp ONTAP Select (OTS) 集群。每个节点都配备了 4 个专用数据驱动器,这些驱动器配置为 RAID5 阵列,以增强冗余。在每个 RAID5 阵列之上分层放置一个 LUKS 加密设备,以确保数据安全。
LUKS 加密 KEK 存储在位于 /etc/luks
的启动磁盘上。轮替 LUKS KEK 需要轮替两个节点上的 LUKS 加密,以确保整个集群的安全性。如需执行常规 KEK 轮替,或者 KEK 已泄露,请在 bm01 和 bm02 上重复执行以下步骤:
以根用户身份登录到节点。
确保 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_KEY
将
RAID_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_KEY
将
NEW_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 设备在启动后仍可打开。节点恢复后,您可以继续执行这些步骤。