輪替磁碟加密金鑰

如果沒有提供外部 HSM,Google Distributed Cloud (GDC) 氣隙裝置會使用 Linux Unified Key Setup (LUKS) 加密磁碟上的資料。 系統會在 4 個資料硬碟上建立 RAID5 陣列,並在 RAID5 陣列上建立單一 LUKS 裝置。LUKS KEK 是隨機產生,且可以輪替。

本文說明如何輪替 LUKS KEK,適用於:

  • 定期排定的 KEK 輪替作業。
  • KEK 曝光。

事前準備

操作步驟如下:

  1. 確認符合筆電先決條件
  2. 確認您能以根使用者身分登入這三個節點。

輪替 KEK

Google Distributed Cloud (GDC) 氣隙裝置系統會使用部署在節點 bm01 和 bm02 的雙節點 NetApp ONTAP Select (OTS) 叢集 (通常不含 GPU)。每個節點都有 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 裝置仍可在啟動後開啟。節點恢復後,即可繼續執行步驟。