Red Hat Training

A Red Hat training course is available for RHEL 8

11.12. 部署高可用性 NBDE 系统

Tang 提供两种构建高可用性部署的方法:

客户端冗余(推荐)
客户端应配置为绑定到多个 Tang 服务器。在此设置中,每个 Tang 服务器都有自己的密钥,客户端可以通过联系这些服务器的子集来进行解密。Clevis 已通过其 sss 插件支持此工作流。红帽建议在高可用性部署中使用这个方法。
密钥共享
出于冗余目的,可以部署多个 Tang 实例。要设置第二个或后续的实例,请安装 tang 软件包,并通过 SSH 将密钥目录复制到新主机上。请注意,红帽不推荐此方法,因为共享密钥会增加关键威胁的风险,需要额外的自动化基础架构。

11.12.1. 使用 Shamir 的 Secret Sharing 的高可用性 NBDE

Shamir 的 Secret 共享(SSS)是一种加密方案,可将机密划分为多个唯一部分。要重建 secret,需要一些部分。该数字称为阈值,SSS 也被称为阈值方案。

Clevis 提供 SSS 实施。它创建了密钥,并将其分为若干个片段。每个片段都使用另一个 pin 进行加密,包括递归 SSS。另外,您可以定义阈值 t。如果 NBDE 部署至少解密了 t 个 片段,则会恢复加密密钥,解密过程会成功。当 Clevis 检测到比阈值中指定的更少的部分时,它会打印错误消息。

11.12.1.1. 示例 1:两个 Tang 服务器冗余

当至少有两个 Tang 服务器之一可用时,以下命令解密 LUKS 加密设备:

# clevis luks bind -d /dev/sda1 sss '{"t":1,"pins":{"tang":[{"url":"http://tang1.srv"},{"url":"http://tang2.srv"}]}}'

上一命令使用以下配置方案:

{
    "t":1,
    "pins":{
        "tang":[
            {
                "url":"http://tang1.srv"
            },
            {
                "url":"http://tang2.srv"
            }
        ]
    }
}

在此配置中,SSS 阈值 t 设置为 1,如果至少有两个列出的 tang 服务器中有一台,clevis luks bind 命令可以成功重建 secret。

11.12.1.2. 示例 2:Tang 服务器中的共享 secret 和 TPM 设备

tang 服务器和 tpm2 设备都可用时,以下命令成功解密 LUKS 加密设备:

# clevis luks bind -d /dev/sda1 sss '{"t":2,"pins":{"tang":[{"url":"http://tang1.srv"}], "tpm2": {"pcr_ids":"0,1"}}}'

SSS threshold 't' 设置为 '2' 的配置方案现在是:

{
    "t":2,
    "pins":{
        "tang":[
            {
                "url":"http://tang1.srv"
            }
        ],
        "tpm2":{
            "pcr_ids":"0,1"
        }
    }
}

其它资源

  • Tang(8) (章节 高可用性)、c levis(1)Shamir 的 Secret Sharing部分)和 clevis-encrypt-sss(1) man page