Como mudar as chaves de criptografia do Looker

O Looker usa a criptografia AES-256 Galois/Counter Mode (GCM) para criptografar dados internamente. Cada item de dados é criptografado usando uma chave de dados exclusiva e contém um envelope de criptografia assinado e com versão para garantir a verificação. Esse modo exige o uso de uma chave mestra do cliente (CMK) externa. A CMK é usada para derivar, criptografar e descriptografar a chave de criptografia de chaves (KEK), que, por sua vez, é usada para derivar, criptografar e descriptografar chaves de dados.

Instalações hospedadas pelo cliente que usam a criptografia legada precisam migrar os bancos de dados internos para a criptografia AES-256 GCM. As novas instalações hospedadas pelo cliente precisam ser configuradas para a criptografia AES-256 GCM. Consulte a página de documentação Como usar a criptografia AES-256 GCM para ver instruções sobre como migrar ou configurar a instalação hospedada pelo cliente para a criptografia AES-256 GCM.

Se você quiser mudar a CMK ou passar de uma configuração baseada em chave local para uma configuração do AWS KMS (ou vice-versa), crie uma nova CMK e redefina a chave da criptografia AES-256 GCM.

A troca de chave é feita off-line, o que significa que a instância do Looker precisa ser encerrada. Para instâncias de Looker agrupadas, todos os nós do cluster precisam ser encerrados.

A nova chave invalida todo o cache no disco do Looker, incluindo o cache de resultados de consulta. Como resultado, depois de concluir uma nova chave e iniciar a instância, os bancos de dados do cliente podem ter uma carga maior do que o normal.

Para refazer a chave de criptografia AES-256 GCM, siga estes procedimentos:

  1. Parar o Looker e criar um backup completo
  2. Definir as variáveis de ambiente _SOURCE e _DESTINATION
  3. Executar o comando rekey
  4. Definir novas variáveis de ambiente
  5. Iniciar o Looker

Parar o Looker e criar um backup completo

Execute os comandos a seguir:

cd looker
./looker stop
tar -zcvf /tmp/looker-pre-encrypt.tar.gz  /home/lookerops/looker --exclude=.cache --exclude=log --exclude=.tmp --exclude=.snapshots --exclude=looker.jar --exclude=authorized_keys --exclude=dr-log --exclude=core

Se você estiver executando um banco de dados MySQL externo para armazenar dados do aplicativo do Looker, faça backup do banco de dados separadamente. Se o banco de dados for uma instância do MySQL, tire um snapshot. O banco de dados é relativamente pequeno, então isso deve levar apenas alguns minutos.

Se o Looker estiver agrupado, pare todos os nós antes de continuar:

cd looker
./looker stop

Se algum nó ainda estiver em execução quando você emitir o comando rekey, ele vai falhar com a mensagem "Há outros nós ativos conectados a este banco de dados do Looker de back-end. Se o Looker foi encerrado no último minuto, tente novamente em breve. Caso contrário, verifique se todos os nós do cluster estão encerrados."

Defina as variáveis de ambiente _SOURCE e _DESTINATION.

Quando sua instância do Looker foi inicialmente migrada ou configurada para criptografia AES-256 GCM, uma ou mais variáveis de ambiente foram criadas para indicar onde o Looker pode encontrar sua CMK. Essas variáveis variam de acordo com o uso do AWS KMS.

A operação de troca de chave usa outras variáveis de ambiente, com base no uso atual do AWS KMS e se você vai usar o AWS KMS após a operação de troca de chave. As variáveis de ambiente com o sufixo _SOURCE indicam onde o Looker pode encontrar sua CMK no momento, e as variáveis de ambiente com o sufixo _DESTINATION indicam onde o Looker pode encontrar sua CMK após a operação de rechave.

Como definir variáveis _SOURCE

Execute um dos procedimentos a seguir, dependendo se a configuração atual usa o AWS KMS.

Se você estiver usando o AWS KMS

Se você configurou a criptografia inicialmente usando o AWS KMS, criou uma ou ambas as seguintes variáveis de ambiente:

  • LKR_AWS_CMK: armazena o CMK_alias da AWS.
  • LKR_AWS_CMK_EC: uma variável opcional que define o contexto de criptografia usado com os keystores do AWS KMS.

Recrie as variáveis de ambiente:

export LKR_AWS_CMK=alias/<CMK_alias>
export LKR_AWS_CMK_EC=<encryption_context>

Em seguida, crie as variáveis _SOURCE. Defina as seguintes variáveis com o sufixo _SOURCE:

export LKR_AWS_CMK_SOURCE=alias/<CMK_alias>
export LKR_AWS_CMK_EC_SOURCE=<encryption_context>

Se você não estiver usando o AWS KMS

Se você configurou a criptografia inicialmente usando um KMS diferente da AWS, criou uma das seguintes variáveis de ambiente, dependendo de onde você armazenar a CMK:

  • LKR_MASTER_KEY_ENV: se você armazenar a CMK em uma variável de ambiente, ela será armazenada.
  • LKR_MASTER_KEY_FILE: se você armazenar a CMK em um arquivo, o caminho e o nome do arquivo que contém a CMK serão armazenados.

Recrie a variável de ambiente usada na configuração:

export LKR_MASTER_KEY_FILE=<path_to_key_file>

Ou:

export LKR_MASTER_KEY_ENV=<CMK_value>

Em seguida, crie a variável _SOURCE.

Se você armazenar a CMK em um arquivo, crie esta variável:

export LKR_MASTER_KEY_FILE_SOURCE=<path_to_key_file>

Se você armazenar o CMK em uma variável de ambiente, crie a seguinte variável:

export LKR_MASTER_KEY_ENV_SOURCE=<CMK_value>

Como definir variáveis _DESTINATION

Execute um dos procedimentos a seguir, dependendo se você vai usar o AWS KMS após a operação de troca de chave.

Sua nova configuração vai usar o AWS KMS

Se a nova configuração usar o AWS KMS, crie as seguintes variáveis de ambiente para indicar o novo local do CMK:

export LKR_AWS_CMK_DESTINATION=alias/<new_CMK_alias>
export LKR_AWS_CMK_EC_DESTINATION=<new_encryption_context>

Sua nova configuração não vai usar o AWS KMS

Se a nova configuração não usar o AWS KMS, você pode usar as variáveis LKR_MASTER_KEY_FILE_DESTINATION ou LKR_MASTER_KEY_ENV_DESTINATION para especificar o destino da CMK.

Se você quiser armazenar o CMK em um arquivo, emita o seguinte comando:

export LKR_MASTER_KEY_FILE_DESTINATION=<path_to_new_key_file>

Ou, se você quiser armazenar a CMK usando uma variável de ambiente, emita o seguinte comando:

export LKR_MASTER_KEY_ENV_DESTINATION=<CMK_value>

Execute o comando rekey.

Use o comando a seguir:

./looker rekey

Se a instância do Looker começar com as opções de inicialização -d <db.yaml> ou --internal-db-creds=<db.yaml>, que fornecem um caminho para um arquivo YAML com as credenciais do banco de dados, será necessário incluir a mesma opção com o comando rekey.

Por exemplo, java -jar looker.jar rekey -d /path/file/db.yaml

Definir novas variáveis de ambiente

Defina uma ou mais das seguintes variáveis de ambiente conforme apropriado para a nova configuração.

Se a nova configuração usar o AWS KMS:

export LKR_AWS_CMK=alias/<new_CMK_alias>
export LKR_AWS_CMK_EC=<new_encryption_context>

Se a nova configuração não usar o AWS KMS e você armazenar a CMK em uma variável de ambiente:

export LKR_MASTER_KEY_ENV=<CMK_value>

Se a nova configuração não usar o AWS KMS e você armazenar a CMK em um arquivo:

export LKR_MASTER_KEY_FILE=<path_to_CMK_file>

Se você tiver mudado de uma chave armazenada localmente para o AWS KMS ou do AWS KMS para uma chave armazenada localmente, vai ter variáveis de ambiente da configuração anterior que não são necessárias. Exclua as variáveis de ambiente antigas.

Se você mudou de uma chave armazenada localmente para o AWS KMS:

unset LKR_MASTER_KEY_FILE

Se você mudou do AWS KMS para uma chave armazenada localmente:

unset LKR_AWS_CMK
unset LKR_AWS_CMK_EC

Iniciar o Looker

Use o comando a seguir:

./looker start