Como mudar as chaves de criptografia do Looker

O Looker usa a criptografia no modo Galois/Counter Mode (GCM) AES-256 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 controle de versões 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 as 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 AES-256 GCM. Consulte a página de documentação Uso da criptografia GCM AES-256 para obter instruções sobre como migrar ou configurar sua instalação hospedada pelo cliente para criptografia GCM AES-256.

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

O rekeying é feito off-line, ou seja, 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. Defina 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 deve levar apenas alguns minutos.

Se o Looker estiver em cluster, interrompa 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 no cluster foram encerrados."

Defina as variáveis de ambiente _SOURCE e _DESTINATION

Quando sua instância do Looker foi migrada ou configurada para criptografia do GCM AES-256, uma ou mais variáveis de ambiente foram criadas para indicar onde o Looker pode encontrar o CMK. Essas variáveis serão diferentes se você estiver usando o KMS da AWS.

A operação de rekey usa variáveis de ambiente adicionais, dependendo se você está usando o AWS KMS e se você vai usar o AWS KMS após a operação de rekey. 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 novas variáveis a seguir 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 inicialmente a criptografia usando um KMS diferente da AWS, criou uma das variáveis de ambiente a seguir, dependendo se a CMK é armazenada em uma variável de ambiente ou em um arquivo na instância:

  • LKR_MASTER_KEY_ENV: se você armazenar sua 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 sua 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 a seguinte 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 rechaveamento.

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ê terá a opção de usar as variáveis LKR_MASTER_KEY_FILE_DESTINATION ou LKR_MASTER_KEY_ENV_DESTINATION para especificar o destino do CMK.

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

export LKR_MASTER_KEY_FILE_DESTINATION=<path_to_new_key_file>

Ou, se você quiser armazenar sua 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 variáveis de ambiente a seguir 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