更改 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

如果您运行外部 MySQL 数据库来存储 Looker 应用数据,请单独备份该数据库。如果数据库是 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