Rota las claves de encriptación de disco

El dispositivo aislado de Google Distributed Cloud (GDC) usa Linux Unified Key Setup (LUKS) para encriptar datos en los discos cuando no se proporciona un HSM externo. Se crea un array RAID5 sobre las 4 unidades de datos y se crea un solo dispositivo LUKS sobre el array RAID5. La KEK de LUKS se genera de forma aleatoria y se puede rotar.

En este documento, se describen los pasos para rotar la KEK de LUKS que se deben realizar en los siguientes casos:

  • Rotación de KEK programada periódicamente.
  • Exposición de la KEK

Antes de comenzar

Completa los siguientes pasos:

  1. Verifica que cumplas con los requisitos de la laptop.
  2. Asegúrate de poder acceder a los tres nodos como usuario raíz.

Rota la KEK

El sistema de dispositivos aislados de Google Distributed Cloud (GDC) utiliza un clúster de dos nodos de NetApp ONTAP Select (OTS) implementado en los nodos bm01 y bm02 (por lo general, sin GPUs). Cada nodo posee 4 unidades de datos dedicadas configuradas como un arreglo RAID5 para una mayor redundancia. Se coloca un solo dispositivo encriptado con LUKS sobre cada array RAID5 para garantizar la seguridad de los datos.

La KEK de encriptación de LUKS se almacena en el disco de arranque ubicado en /etc/luks. Rotar la KEK de LUKS requiere rotar la encriptación de LUKS en ambos nodos para mantener la seguridad en todo el clúster. Para realizar una rotación de KEK normal o si la KEK está expuesta, repite los siguientes pasos en bm01 y bm02:

  1. Accede al nodo como usuario raíz.

  2. Asegúrate de que exista el dispositivo RAID y obtén la ruta de acceso completa de RAID_DEVICE.

    ll /dev/md
    
  3. Asegúrate de que exista el archivo de claves LUKS anterior y obtén la ruta de acceso completa OLD_KEY.

    ll /etc/luks
    
  4. Agrega la KEK anterior a la ranura de clave 1, de modo que las ranuras de clave 0 y 1 tengan la misma KEK.

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

    Reemplaza RAID_DEVICE y OLD_KEY por las rutas de acceso de los pasos anteriores.

  5. Quita la KEK anterior de la ranura de clave 0.

    cryptsetup luksKillSlot RAID_DEVICE 0 --key-file OLD_KEY
    
  6. Genera una nueva KEK y almacénala en el nuevo archivo de claves NEW_KEY.

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

    Reemplaza NEW_KEY por la ruta de acceso completa al nuevo archivo de claves.

  7. Agrega la nueva KEK a la ranura de clave 0.

    cryptsetup luksAddKey RAID_DEVICE NEW_KEY --key-slot 0 --key-file OLD_KEY
    
  8. Establece la configuración persistente para abrir o cerrar el dispositivo LUKS cuando se inicie o apague la máquina.

    DEVICE_UUID=$(cryptsetup luksUUID RAID_DEVICE)
    echo "luksrd5 UUID=${DEVICE_UUID} NEW_KEY luks,discard" > /etc/crypttab
    
  9. Quita la KEK anterior de la ranura de clave 1.

    cryptsetup luksKillSlot RAID_DEVICE 1 --key-file NEW_KEY
    
  10. Verifica que la nueva KEK funcione.

    cryptsetup luksDump --dump-master-key RAID_DEVICE --key-file NEW_KEY
    
  11. Verifica que la KEK anterior ya no funcione.

    cryptsetup luksDump --dump-master-key RAID_DEVICE --key-file OLD_KEY
    
  12. Quita la KEK anterior.

    rm OLD_KEY
    

Si se reinicia un nodo antes de que se complete la rotación, el dispositivo LUKS se puede abrir después del inicio. Puedes reanudar los pasos después de que el nodo vuelva a estar disponible.