Como mudar as chaves de criptografia do Looker

O Looker usa a criptografia AES-256 Galois/Counter Mode (GCM) para criptografar os dados internamente. Cada item de dados é criptografado com uma chave de dados exclusiva e contém um envelope de criptografia assinado e com controle de versão para garantir a verificação. Esse modo exige 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 AES-256 do GCM. As novas instalações hospedadas pelo cliente precisam configurar as instalações para a criptografia AES-256 do GCM. Consulte a página de documentação Como usar a criptografia AES-256 GCM para instruções sobre como migrar ou configurar sua instalação hospedada pelo cliente para a criptografia AES-256 GCM.

Se você quiser mudar seu CMK ou migrar de uma configuração baseada em chave local para uma configuração do AWS KMS (ou vice-versa), crie um novo CMK e reprograme a criptografia AES-256 do GCM.

A rekeying é feita off-line, ou seja, a instância do Looker precisa ser desligada. Para instâncias em cluster do Looker, todos os nós do cluster precisam ser encerrados.

A rechave vai invalidar todo o cache do Looker no disco, incluindo o cache de resultados de consultas. Como resultado, depois de concluir uma nova chave e iniciar a instância, os bancos de dados do cliente poderão ter uma carga maior do que o normal.

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

  1. Interromper 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

Interromper 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 externo do MySQL para armazenar os dados do app 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 o comando rekey posteriormente, ele vai falhar com a mensagem "Há outros nós ativos conectados a este banco de dados de back-end do Looker. Se o Looker tiver sido encerrado no último minuto, tente de novo em breve. Caso contrário, verifique se todos os nós no 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 a criptografia GCM AES-256, uma ou mais variáveis de ambiente foram criadas indicando onde o Looker pode encontrar seu CMK. Essas variáveis serão diferentes se você estiver usando o AWS KMS.

A operação de rechaveamento usa outras variáveis de ambiente, dependendo se você está usando o AWS KMS e o AWS KMS após a operação. As variáveis de ambiente com o sufixo _SOURCE indicam onde o Looker pode encontrar seu CMK atualmente. Já as variáveis com o sufixo _DESTINATION indicam onde o Looker pode encontrar seu CMK após a operação de rekeying.

Como definir variáveis _SOURCE

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

Se você estiver usando o AWS KMS

Se você configurou inicialmente a criptografia usando o AWS KMS, 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 acima:

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 novas 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 seguintes variáveis de ambiente, dependendo do armazenamento da CMK em uma variável de ambiente ou em um arquivo na instância:

  • LKR_MASTER_KEY_ENV: se você armazenar seu CMK em uma variável de ambiente, ele será armazenado.
  • LKR_MASTER_KEY_FILE: se você armazenar seu CMK em um arquivo, isso vai armazenar o caminho e o nome do arquivo que contém o CMK.

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 o 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

Siga um dos procedimentos a seguir dependendo se você vai usar o AWS KMS após a operação de rechave.

A 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>

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 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 seu 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, você precisará 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 variáveis de ambiente a seguir conforme apropriado para sua 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 o 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 o 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, terá variáveis de ambiente desnecessárias da configuração anterior. Exclua as variáveis de ambiente antigas.

Se você tiver migrado 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