Alternar chaves de criptografia de disco

O appliance isolado do Google Distributed Cloud (GDC) usa o Linux Unified Key Setup (LUKS) para criptografar dados em discos quando um HSM externo não é fornecido. Uma matriz RAID5 é criada com base nas quatro unidades de dados, e um único dispositivo LUKS é criado com base na matriz RAID5. A KEK do LUKS é gerada aleatoriamente e pode ser substituída.

Este documento descreve as etapas para fazer a rotação da KEK do LUKS, que precisa ser realizada para:

  • rotação de KEKs programada regularmente.
  • Exposição de KEK.

Antes de começar

Siga estas etapas:

  1. Verifique se você atende aos pré-requisitos de laptop.
  2. Verifique se você pode fazer login nos três nós como usuário raiz.

Alternar KEK

O sistema de appliance isolado do Google Distributed Cloud (GDC) usa um cluster NetApp ONTAP Select (OTS) de dois nós implantado nos nós bm01 e bm02 (normalmente sem GPUs). Cada nó tem quatro unidades de dados dedicadas configuradas como uma matriz RAID5 para aumentar a redundância. Um único dispositivo criptografado com LUKS é colocado em cima de cada matriz RAID5 para garantir segurança de dados.

A KEK de criptografia LUKS é armazenada no disco de inicialização localizado em /etc/luks. A rotação da KEK do LUKS exige a rotação da criptografia do LUKS nos dois nós para manter a segurança em todo o cluster. Para fazer uma rotação regular da KEK ou se ela for exposta, repita as etapas a seguir em bm01 e bm02:

  1. Faça login no nó como usuário raiz.

  2. Verifique se o dispositivo RAID existe e receba o caminho completo RAID_DEVICE.

    ll /dev/md
    
  3. Verifique se o arquivo de chave LUKS antigo existe e extraia o caminho completo OLD_KEY.

    ll /etc/luks
    
  4. Adicione a KEK antiga ao slot de chave 1 para que os slots 0 e 1 tenham a mesma KEK.

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

    Substitua RAID_DEVICE e OLD_KEY pelos caminhos das etapas anteriores.

  5. Remova a KEK antiga do slot de chave 0.

    cryptsetup luksKillSlot RAID_DEVICE 0 --key-file OLD_KEY
    
  6. Gere uma nova KEK e armazene-a no novo arquivo de chave NEW_KEY.

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

    Substitua NEW_KEY pelo caminho completo do novo arquivo de chave.

  7. Adicione a nova KEK ao slot de chave 0.

    cryptsetup luksAddKey RAID_DEVICE NEW_KEY --key-slot 0 --key-file OLD_KEY
    
  8. Defina a configuração persistente para abrir ou fechar o dispositivo LUKS na inicialização ou no desligamento da máquina.

    DEVICE_UUID=$(cryptsetup luksUUID RAID_DEVICE)
    echo "luksrd5 UUID=${DEVICE_UUID} NEW_KEY luks,discard" > /etc/crypttab
    
  9. Remova a KEK antiga do slot de chave 1.

    cryptsetup luksKillSlot RAID_DEVICE 1 --key-file NEW_KEY
    
  10. Verifique se a nova KEK está funcionando.

    cryptsetup luksDump --dump-master-key RAID_DEVICE --key-file NEW_KEY
    
  11. Verifique se a KEK antiga não está mais funcionando.

    cryptsetup luksDump --dump-master-key RAID_DEVICE --key-file OLD_KEY
    
  12. Remova a KEK antiga.

    rm OLD_KEY
    

Se um nó for reinicializado antes da conclusão da rotação, o dispositivo LUKS ainda poderá ser aberto após a inicialização. Você pode retomar as etapas depois que o nó voltar.