更改 Looker 的加密密钥

Looker 使用 AES-256 伽罗瓦/计数器模式 (GCM) 加密在内部加密数据。每项数据都使用唯一的数据密钥进行加密,并包含经过签名且具有版本号的加密信封,以保证验证。此模式需要使用外部客户主密钥 (CMK)。CMK 用于派生、加密和解密密钥加密密钥 (KEK),而 KEK 又用于派生、加密和解密数据密钥。

使用旧版加密的客户托管安装必须将其内部数据库迁移到 AES-256 GCM 加密。新客户托管的安装需要配置其安装以使用 AES-256 GCM 加密。有关迁移或配置客户托管安装以使用 AES-256 GCM 加密的说明,请参阅使用 AES-256 GCM 加密文档页面。

如果您想更改 CMK,或者想从基于本地密钥的配置改为 AWS KMS 配置(或相反),可以通过创建新的 CMK 并重新为 AES-256 GCM 加密设置密钥来实现。

重新加密是在线下进行的,这意味着必须关闭 Looker 实例。对于集群化 Looker 实例,必须关闭集群的所有节点。

重新设置密钥会使整个 Looker 磁盘缓存失效,包括查询结果缓存。因此,在您完成重新加密并启动实例后,客户端数据库的负载可能会高于平常。

要更新 AES-256 GCM 加密的密钥,请执行以下步骤:

  1. 停止 Looker 并创建完整备份
  2. 设置 _SOURCE_DESTINATION 环境变量
  3. 运行 rekey 命令
  4. 设置新的环境变量
  5. 启动 Looker

停止 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

如果您运行的是用于存储 Looker 应用数据的外部 MySQL 数据库,请单独备份该数据库。如果数据库是 MySQL 实例,请截取快照。由于数据库相对较小,因此应该只需要几分钟时间。

如果 Looker 是集群的,请务必先停止每个节点,然后再继续操作:

cd looker
./looker stop

如果您稍后发出 rekey 命令时仍有任何节点在运行,该命令将失败,并显示以下消息:“有其他实时节点连接到此后端 Looker 数据库。如果 Looker 在最后一分钟内关停,请稍后重试,否则请验证集群中的所有节点都已关停。”

设置 _SOURCE_DESTINATION 环境变量

在 Looker 实例最初迁移到 AES-256 GCM 加密或配置为使用 AES-256 GCM 加密时,系统会创建一个或多个环境变量,用于指明 Looker 可以从何处找到您的 CMK。这些变量取决于您是否使用 AWS KMS。

密钥更新操作会使用额外的环境变量,具体取决于您当前是否正在使用 AWS KMS,以及您在密钥更新操作后是否会使用 AWS KMS。带有后缀 _SOURCE 的环境变量表示 Looker 当前可在何处找到您的 CMK,带有后缀 _DESTINATION 的环境变量表示 Looker 可在执行密钥更新操作后在何处找到您的 CMK。

设置 _SOURCE 变量

根据您的当前配置是否使用 AWS KMS,执行以下某个过程。

如果您目前使用的是 AWS KMS

如果您最初使用 AWS KMS 配置了加密,则会创建以下一个或两个环境变量:

  • LKR_AWS_CMK:存储 AWS CMK_alias
  • LKR_AWS_CMK_EC:可选变量,用于定义与 AWS KMS 密钥库一起使用的加密上下文。

重新创建环境变量:

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

然后创建 _SOURCE 变量。设置以下带有 _SOURCE 后缀的新变量:

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

如果您当前未使用 AWS KMS

如果您最初使用 AWS 以外的 KMS 配置加密,则根据 CMK 是将 CMK 存储在环境变量还是实例上的文件中,并创建了以下某个环境变量:

  • LKR_MASTER_KEY_ENV:如果您将 CMK 存储在环境变量中,那么这会存储您的 CMK。
  • LKR_MASTER_KEY_FILE:如果您将 CMK 存储在一个文件中,则系统会存储 CMK 所在文件的路径和文件名。

重新创建用于您的配置的环境变量:

export LKR_MASTER_KEY_FILE=<path_to_key_file>

或:

export LKR_MASTER_KEY_ENV=<CMK_value>

然后创建 _SOURCE 变量。

如果您将 CMK 存储在文件中,请创建以下变量:

export LKR_MASTER_KEY_FILE_SOURCE=<path_to_key_file>

如果您将 CMK 存储在环境变量中,请创建以下变量:

export LKR_MASTER_KEY_ENV_SOURCE=<CMK_value>

设置 _DESTINATION 变量

根据您是否会在重新生成密钥操作后使用 AWS KMS,执行以下任一过程。

您的新配置将使用 AWS KMS

如果新配置将使用 AWS KMS,请创建以下环境变量来指示新 CMK 位置:

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

您的新配置将不会使用 AWS KMS

如果您的新配置不使用 AWS KMS,您可以选择使用 LKR_MASTER_KEY_FILE_DESTINATIONLKR_MASTER_KEY_ENV_DESTINATION 变量指定 CMK 目标。

如果您想将 CMK 存储在文件中,请发出以下命令:

export LKR_MASTER_KEY_FILE_DESTINATION=<path_to_new_key_file>

或者,如果您要使用环境变量存储 CMK,可发出以下命令:

export LKR_MASTER_KEY_ENV_DESTINATION=<CMK_value>

运行 rekey 命令

请发出以下命令:

./looker rekey

如果您的 Looker 实例以 -d <db.yaml>--internal-db-creds=<db.yaml> 启动选项开头,这些选项提供包含数据库凭据的 YAML 文件的路径,您需要在 rekey 命令中添加相同的选项。

例如 java -jar looker.jar rekey -d /path/file/db.yaml

设置新的环境变量

根据您的新配置,设置一个或多个以下环境变量。

如果新配置使用 AWS KMS:

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

如果您的新配置未使用 AWS KMS,并且您将 CMK 存储在环境变量中,请执行以下操作:

export LKR_MASTER_KEY_ENV=<CMK_value>

如果您的新配置不使用 AWS KMS,并且您将 CMK 存储在文件中,请执行以下操作:

export LKR_MASTER_KEY_FILE=<path_to_CMK_file>

如果您从本地存储的密钥迁移到 AWS KMS 或从 AWS KMS 迁移到本地存储的密钥,则之前配置中的环境变量将是不必要的。删除旧环境变量。

如果您从本地存储的密钥改用 AWS KMS,请执行以下操作:

unset LKR_MASTER_KEY_FILE

如果您已从 AWS KMS 迁移到本地存储的密钥:

unset LKR_AWS_CMK
unset LKR_AWS_CMK_EC

启动 Looker

请发出以下命令:

./looker start