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 数据库。如果 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
:存储 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 是将 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