轮替磁盘加密密钥

Google Distributed Cloud (GDC) 空气隔离设备在未提供外部 HSM 的情况下,使用 Linux Unified Key Setup (LUKS) 来加密磁盘上的数据。在 4 个数据驱动器之上创建 RAID5 阵列,并在 RAID5 阵列之上创建单个 LUKS 设备。LUKS KEK 是随机生成的,可以轮换。

本文档介绍了轮换 LUKS KEK 的步骤,这些步骤必须针对以下情况执行:

  • 定期安排的 KEK 轮替。
  • KEK 泄露。

准备工作

请完成以下步骤:

  1. 确认您符合笔记本电脑前提条件
  2. 确保您能以根用户身份登录这三个节点。

轮替 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 上重复执行以下步骤:

  1. 以根用户身份登录到节点。

  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 设备在启动后仍可打开。节点恢复后,您可以继续执行这些步骤。