Cómo migrar a la encriptación AES-256 GCM

Looker usa la encriptación AES-256 Galois/Counter Mode (GCM) para encriptar los datos sensibles que se almacenan de forma interna, incluidos los siguientes:

  • Copias de seguridad de la base de datos interna de Looker
  • Información de conexión de la base de datos y el servicio
  • Información de autenticación del usuario
  • Valores de atributos de usuario
  • Datos del cliente almacenados en caché o listos para la entrega

Para obtener una lista detallada de los datos que encripta Looker, abre una solicitud de asistencia.

Los datos se encriptan con una clave de datos única y contienen un sobre de encriptación firmado y con versión para garantizar la verificación. Este modo requiere el uso de una clave principal de cliente (CMK) externa. La CMK se usa para derivar, encriptar y desencriptar la clave de encriptación de claves (KEK), que, a su vez, se usa para derivar, encriptar y desencriptar claves de datos.

La encriptación solo se usa para la base de datos y la caché internas de Looker. La encriptación de Looker no afecta de ninguna manera las bases de datos de los clientes. Además, solo los datos estáticos (datos almacenados en el disco) se encriptan de esta manera.

Las instalaciones alojadas por el cliente pueden usar sus propias cuentas de AWS KMS o sus propios sistemas de administración de claves personalizados. Todas las claves de datos y la KEK se encriptan y se usan de forma interna en la instalación de Looker alojada por el cliente. Si no usas AWS KMS, la CMK externa se debe mantener de forma segura.

Las instalaciones existentes alojadas por el cliente que quieran usar la encriptación de GCM deben migrar de la encriptación heredada a la nueva encriptación de GCM. Las nuevas instalaciones alojadas por el cliente requieren una configuración adicional para la encriptación de GCM.

Sigue los procedimientos de las siguientes secciones en orden.

Detén Looker y crea una copia de seguridad completa

Si estás migrando a encriptación de GCM desde una instancia de Looker existente, asegúrate de crear una copia de seguridad completa en caso de que haya un problema con la migración de encriptación. Si instalas una instancia nueva de Looker, omite esta sección.

Si usas la base de datos interna de Looker:

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

Si ejecutas una base de datos de MySQL externa para almacenar datos de la aplicación de Looker, crea una copia de seguridad de la base de datos por separado. Si la base de datos es una instancia de MySQL, toma una instantánea. La base de datos es relativamente pequeña, por lo que solo debería tardar unos minutos. Luego, detén Looker.

Si Looker está agrupado en clústeres, asegúrate de detener todos los nodos antes de continuar:

cd looker
./looker stop

Si algún nodo sigue en ejecución cuando más adelante emitas el comando de migración, este fallará y se mostrará el siguiente mensaje: “Hay otros nodos activos conectados a esta base de datos de backend de Looker. Si se cerró Looker en el último minuto, vuelve a intentarlo en breve. De lo contrario, verifica que todos los nodos del clúster estén apagados”.

Genera una CMK

Si usas AWS KMS, crea una CMK con la consola de administración de AWS o la API.

Si no usas AWS KMS, genera una CMK de 32 bytes en Base64. Puedes almacenar la CMK en una variable de entorno o en un archivo.

  • Para generar la CMK y almacenarla en una variable de entorno, puedes usar el siguiente comando:

    openssl rand -base64 32
    

    Después de generar la CMK, cópiala y usa el siguiente comando para almacenarla en la variable de entorno LKR_MASTER_KEY_ENV (donde <CMK_value> es la CMK que generaste con el comando anterior):

    export LKR_MASTER_KEY_ENV=<CMK_value>
    

    Si Looker está agrupado, ejecuta el comando anterior en cada nodo del clúster.

  • Para generar y almacenar la CMK en un archivo, puedes usar el siguiente comando (donde <path_to_CMK_file> es la ruta de acceso y el nombre de archivo para almacenar la CMK):

    openssl rand -base64 32 > <path_to_key_file>
    

Después de generar el archivo de CMK, establece los permisos del archivo de clave como de solo lectura para el usuario actual:

chmod 0400 <path_to_key_file>

Después de generar una CMK, asegúrate de almacenarla en una ubicación segura y permanente antes de continuar. Si pierdes la CMK después de encriptar la base de datos interna, es posible que pierdas tu instancia.

Crea una función de IAM de AWS

Si no usas AWS KMS, omite esta sección.

Si usas AWS KMS, Looker recomienda que crees un rol de IAM nuevo que sea único para tu CMK y lo adjuntes a tu instancia de Looker.

A continuación, se muestra un ejemplo de un rol de IAM que contiene los permisos mínimos necesarios para tu CMK:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "kms:GenerateRandom",
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:Generate*",
            ],
            "Resource": "arn:aws:kms:*:*:key/*"
        }
    ]
}

Configura variables de entorno

Si usas AWS KMS, configura la variable de entorno AWS_REGION en tu región de AWS y la variable de entorno LKR_AWS_CMK en el alias de tu CMK:

export AWS_REGION=<AWS_region>
export LKR_AWS_CMK=alias/<CMK_alias>

De manera opcional, también puedes establecer la variable de entorno LKR_AWS_CMK_EC para configurar un contexto de encriptación de AWS personalizado. Si no configuras esta variable de entorno, Looker usará el contexto de encriptación predeterminado, la cadena Looker_Encryption_Context.

export LKR_AWS_CMK_EC=<My_Encryption_Context>

Si no usas AWS KMS y almacenas tu CMK en un archivo, configura la variable de entorno LKR_MASTER_KEY_FILE en la ruta de acceso del archivo de la CMK:

export LKR_MASTER_KEY_FILE=<path_to_key_file>

Si no usas AWS KMS y almacenas tu CMK en una variable de entorno, configura la variable de entorno LKR_MASTER_KEY_ENV con el valor de la CMK:

export LKR_MASTER_KEY_ENV=<CMK_value>

Si Looker está agrupado en clústeres, ejecuta el comando anterior en cada nodo del clúster.

Encripta la base de datos interna

Si quieres migrar una instancia existente de Looker a encriptación de GCM, migra la base de datos interna de Looker y, luego, inicia Looker:

java -jar looker.jar migrate_encryption
./looker  start

Si tu instancia de Looker se inicia con las opciones de inicio -d <db.yaml> o --internal-db-creds=<db.yaml>, que proporcionan una ruta de acceso a un archivo YAML con las credenciales de tu base de datos, deberás incluir la misma opción con el comando java -jar looker.jar migrate_encryption.

Por ejemplo, java -jar looker.jar migrate_encryption -d /path/file.

Si instalas una instancia nueva de Looker, el proceso de encriptación comenzará cuando la inicies.

El proceso de encriptación suele tardar menos de un minuto. Una vez que se inicie Looker, puedes verificar la nueva encriptación buscando GCM en el registro de Looker:

grep GCM log/looker.log

2018-10-29 22:42:20.279 +0000 [INFO|007d0|crypt] :: Starting migration from AES-128-CBC Legacy to AES-GCM-256
2018-10-29 22:42:20.468 +0000 [INFO|007d0|db:looker] :: (0.000152s) INSERT INTO "SETTING" ("KEY", "VALUE") VALUES

Soluciona problemas

En esta sección, se enumeran algunos errores comunes y sus soluciones:

  • No se pudo encontrar la tarea "migrate_encryption": Actualiza tu instancia de Looker a Looker 6.4.

  • Looker no se puede iniciar porque falta el almacén de claves de respaldo: Looker no puede encontrar la CMK. Verifica que la ruta de CMK en la variable de entorno LKR_MASTER_KEY_FILE sea correcta.

  • Looker no se puede iniciar porque el tamaño de la clave maestra no es válido. Debe ser de 32 bytes, pero es X: La CMK debe tener exactamente 32 bytes de longitud.

  • Looker no se puede iniciar porque el permiso del archivo de clave de copia de seguridad debe ser 0400, pero es XXX: El archivo CMK debe ser de solo lectura con un valor chmod de 0400.