7.3. 将 Keylime verifier 部署为容器
Keylime 验证器对系统完整性执行初始和定期检查,并支持使用代理安全地 bootstrap 加密密钥。您可以将 Keylime 验证器配置为容器,而不是 RPM 方法,而主机上无需有任何二进制文件或软件包。容器部署提供更好的隔离、模块化和 Keylime 组件的可重复性。
启动容器后,会使用默认的配置文件部署 Keylime 验证器。您可以使用一个或多个以下方法自定义配置:
- 将包含配置文件的目录挂载到容器上。这在所有 RHEL 9 版本中提供。
- 直接在容器上修改环境变量。这在 RHEL 9.3 及更新版本中提供。修改环境变量会覆盖配置文件中的值。
前提条件
-
podman
软件包及其依赖项已安装在系统上。 可选:您可以访问 Keylime 保存验证器中数据的数据库。您可以使用以下数据库管理系统:
- SQLite (默认)
- PostgreSQL
- MySQL
- MariaDB
- 您有来自您的证书颁发机构的有效密钥和证书。
流程
可选:安装
keylime-verifier
软件包,以访问配置文件。您可以配置没有此软件包的容器,但这可能更容易修改软件包提供的配置文件。# dnf install keylime-verifier
通过在
/etc/keylime/verifier.conf.d/
目录中创建一个新的.conf
文件,来将验证器绑定到所有可用 IP 地址上,例如:/etc/keylime/verifier.conf.d/00-verifier-ip.conf
,其内容如下:[verifier] ip = *
-
另外,您还可以使用
port
选项更改验证器的端口默认值8881
。
-
另外,您还可以使用
可选:为代理列表配置 verifier 的数据库。默认配置使用验证器的
/var/lib/keylime/cv_data.sqlite/
目录中的 SQLite 数据库。您可以通过在/etc/keylime/verifier.conf.d/
目录中创建一个新的.conf
文件来定义一个不同的数据库,例如:/etc/keylime/verifier.conf.d/00-db-url.conf
,其内容如下:[verifier] database_url = <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>
将
<protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>
替换为数据库的 URL,如postgresql://verifier:UQ?nRNY9g7GZzN7@198.51.100.1/verifierdb
。确保您使用的凭证对 Keylime 有权限,以创建数据库结构。
将证书和密钥添加到验证器(verifier)中。您可以让 Keylime 生成它们,或使用现有的密钥和证书生成它们:
-
使用默认
tls_dir = generate
选项,Keylime 在/var/lib/keylime/cv_ca/
目录中为验证器、注册器和租户生成新证书。 要在配置中加载现有的密钥和证书,请在验证器配置中定义其位置。证书必须可以被运行 Keylime 进程的
keylime
用户访问。在
/etc/keylime/verifier.conf.d/
目录中创建一个新的.conf
文件,例如:/etc/keylime/verifier.conf.d/00-keys-and-certs.conf
,其内容如下:[verifier] tls_dir = /var/lib/keylime/cv_ca server_key = </path/to/server_key> server_cert = </path/to/server_cert> trusted_client_ca = ['</path/to/ca/cert1>', '</path/to/ca/cert2>'] client_key = </path/to/client_key> client_cert = </path/to/client_cert> trusted_server_ca = ['</path/to/ca/cert3>', '</path/to/ca/cert4>']
注意使用绝对路径定义密钥和证书位置。或者,相对路径是从
tls_dir
选项中定义的目录解析的。
-
使用默认
在防火墙中打开端口:
# firewall-cmd --add-port 8881/tcp # firewall-cmd --runtime-to-permanent
如果您使用其他端口,请将
8881
替换为.conf
文件中定义的端口号。运行容器:
$ podman run --name keylime-verifier \ -p 8881:8881 \ -v /etc/keylime/verifier.conf.d:/etc/keylime/verifier.conf.d:Z \ -v /var/lib/keylime/cv_ca:/var/lib/keylime/cv_ca:Z \ -d \ -e KEYLIME_VERIFIER_SERVER_KEY_PASSWORD=<passphrase1> \ -e KEYLIME_VERIFIER_CLIENT_KEY_PASSWORD=<passphrase2> \ registry.access.redhat.com/rhel9/keylime-verifier
-
-p
选项在主机和容器上打开默认端口8881
。 -v
选项为目录创建到容器的绑定挂载。-
使用
Z
选项,Podman 使用私有未共享标签标记内容。这意味着只有当前容器可以使用私有卷。
-
使用
-
-d
选项在后台运行分离的容器。 -
选项
-e KEYLIME_VERIFIER_SERVER_KEY_PASSWORD=<passphrase1>
定义服务器密钥密码短语。 -
选项
-e KEYLIME_VERIFIER_CLIENT_KEY_PASSWORD=<passphrase2>
定义客户端密钥密码短语。 -
您可以使用选项
-e KEYLIME_VERIFIER_<ENVIRONMENT_VARIABLE>=<value>
,使用环境变量覆盖配置选项。要修改附加选项,请为每个环境变量单独插入-e
选项。有关环境变量及其默认值的完整列表,请参阅 Keylime 环境变量。
-
验证
检查容器是否正在运行:
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 80b6b9dbf57c registry.access.redhat.com/rhel9/keylime-verifier:latest keylime_verifier 14 seconds ago Up 14 seconds 0.0.0.0:8881->8881/tcp keylime-verifier
后续步骤
其他资源
- 有关 Keylime 组件的更多信息,请参阅 Keylime 是如何工作的。
- 有关配置 Keylime 验证器的更多信息,请参阅 配置 Keylime 验证器。
-
有关
podman run
命令的更多信息,请参阅系统中的podman-run (1)
手册页。