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 requer o uso de uma chave mestra do cliente (CMK, na sigla em inglês) 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.

As instalações hospedadas pelo cliente que usam criptografia legada precisam migrar os bancos de dados internos para a criptografia GCM AES-256. Novas instalações hospedadas pelo cliente precisam configurar suas instalações para criptografia do GCM AES-256. 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 em cluster do Looker, todos os nós do cluster precisam ser encerrados.

O rekeying invalida todo o cache do Looker no disco, incluindo o cache de resultados da consulta. Como resultado, depois de concluir uma rechaveação e iniciar a instância, os bancos de dados do cliente poderão ter uma carga maior que o normal.

Para recuperar a criptografia do GCM AES-256, execute os seguintes procedimentos:

  1. Parar o Looker e criar um backup completo
  2. Defina as variáveis de ambiente _SOURCE e _DESTINATION
  3. Execute 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 de aplicativos 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 posteriormente o comando rekey, ele vai falhar e mostrar a mensagem "Há outros nós ativos conectados a este banco de dados de back-end do Looker. 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 serão diferentes se você estiver usando o KMS da AWS.

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 atualmente, e as variáveis de ambiente com o sufixo _DESTINATION indicam onde o Looker pode encontrar sua CMK após a operação de rekeying.

Como definir variáveis _SOURCE

Execute um dos procedimentos a seguir caso sua configuração atual use o AWS KMS.

Se você estiver usando o AWS KMS

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

  • 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 KMS da AWS.

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 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, armazenará o caminho e o nome do arquivo que a contém.

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 sua 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 rekeying.

A nova configuração vai usar o AWS KMS

Se a nova configuração usar o AWS KMS, crie as variáveis de ambiente a seguir 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>

A 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

Defina 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ê migrou de uma chave armazenada localmente para o AWS KMS ou do AWS KMS para uma chave armazenada localmente, terá variáveis de ambiente da configuração anterior desnecessá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ê migrou 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