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 加密密钥,请执行以下步骤:
停止 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 数据库。If Looker was shutdown within the last minute, try again shortly, otherwise verify all nodes in the cluster are shut down."
设置 _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
:存储 AWSCMK_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 存储在环境变量中,还是存储在实例上的文件中:
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_DESTINATION
或 LKR_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