7.5. 将 Keylime registrar 部署为容器
注册器是包含一个所有代理的数据库的 Keylime 组件,它托管可信平台模块(TPM)提供商的公钥。在注册器的 HTTPS 服务接受 TPM 公钥后,它提供一个接口来获取这些公钥,以检查引用。您可以将 Keylime 注册器配置为一个容器,而不是 RPM 方法,在主机上无需任何二进制文件或软件包。容器部署提供更好的隔离、模块化和 Keylime 组件的可重复性。
启动容器后,会使用默认配置文件部署 Keylime 注册器。您可以使用一个或多个以下方法自定义配置:
- 将包含配置文件的目录挂载到容器上。这在所有 RHEL 9 版本中提供。
- 直接在容器上修改环境变量。这在 RHEL 9.3 及更新版本中提供。修改环境变量会覆盖配置文件中的值。
前提条件
-
podman
软件包及其依赖项已安装在系统上。 可选:您可以访问 Keylime 保存注册器中数据的数据库。您可以使用以下数据库管理系统:
- SQLite (默认)
- PostgreSQL
- MySQL
- MariaDB
- 您有来自您的证书颁发机构的有效密钥和证书。
流程
可选:安装
keylime-registrar
软件包,以访问配置文件。您可以配置没有此软件包的容器,但这可能更容易修改软件包提供的配置文件。# dnf install keylime-registrar
通过在
/etc/keylime/registrar.conf.d/
目录中创建一个新的.conf
文件,来将注册器绑定到所有可用的 IP 地址,例如/etc/keylime/registrar.conf.d/00-registrar-ip.conf
,其内容如下:[registrar] ip = *
-
可选,使用
port
选项更改 Keylime 代理连接的端口。默认值为8890
。 -
可选,使用
tls_port
选项更改 Keylime 租户连接的 TLS 端口。默认值为8891
。
-
可选,使用
可选:为代理列表配置注册数据库。默认配置使用 registrar 的
/var/lib/keylime/reg_data.sqlite
目录中的 SQLite 数据库。您可以在/etc/keylime/registrar.conf.d/
目录中创建一个新的.conf
文件,例如:/etc/keylime/registrar.conf.d/00-db-url.conf
,其内容如下:[registrar] database_url = <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>
将
<protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>
替换为数据库的 URL,如postgresql://registrar:EKYX-bqY2?#raXm@198.51.100.1/registrardb
。确保您使用的凭证对 Keylime 有权限,以创建数据库结构。
在注册器中添加证书和密钥:
-
您可以使用默认配置,并将密钥和证书加载到
/var/lib/keylime/reg_ca/
目录中。 或者,您可以在配置中定义密钥和证书的位置。在
/etc/keylime/registrar.conf.d/
目录中创建一个新的.conf
文件,例如:/etc/keylime/registrar.conf.d/00-keys-and-certs.conf
,其内容如下:[registrar] tls_dir = /var/lib/keylime/reg_ca server_key = </path/to/server_key> server_cert = </path/to/server_cert> trusted_client_ca = ['</path/to/ca/cert1>', '</path/to/ca/cert2>']
注意使用绝对路径定义密钥和证书位置。或者,您可以在
tls_dir
选项中定义目录,并使用相对于该目录的路径。
-
您可以使用默认配置,并将密钥和证书加载到
在防火墙中打开端口:
# firewall-cmd --add-port 8890/tcp --add-port 8891/tcp # firewall-cmd --runtime-to-permanent
如果您使用其他端口,请将
8890
或8891
替换为.conf
文件中定义的端口号。运行容器:
$ podman run --name keylime-registrar \ -p 8890:8890 \ -p 8891:8891 \ -v /etc/keylime/registrar.conf.d:/etc/keylime/registrar.conf.d:Z \ -v /var/lib/keylime/reg_ca:/var/lib/keylime/reg_ca:Z \ -d \ -e KEYLIME_REGISTRAR_SERVER_KEY_PASSWORD=<passphrase1> \ registry.access.redhat.com/rhel9/keylime-registrar
-
-p
选项打开主机和容器上的默认端口8890
和8881
。 -v
选项为目录创建到容器的绑定挂载。-
使用
Z
选项,Podman 使用私有未共享标签标记内容。这意味着只有当前容器可以使用私有卷。
-
使用
-
-d
选项在后台运行分离的容器。 -
选项
-e KEYLIME_VERIFIER_SERVER_KEY_PASSWORD=<passphrase1>
定义服务器密钥密码短语。 -
您可以使用选项
-e KEYLIME_REGISTRAR_<ENVIRONMENT_VARIABLE>=<value>
,使用环境变量覆盖配置选项。要修改附加选项,请为每个环境变量单独插入-e
选项。有关环境变量及其默认值的完整列表,请参阅 第 7.12 节 “Keylime 环境变量”。
-
验证
检查容器是否正在运行:
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07d4b4bff1b6 localhost/keylime-registrar:latest keylime_registrar 12 seconds ago Up 12 seconds 0.0.0.0:8881->8881/tcp, 0.0.0.0:8891->8891/tcp keylime-registrar
其他资源
- 有关 Keylime 组件的更多信息,请参阅 第 7.1 节 “Keylime 的工作原理”。
- 有关配置 Keylime 注册器的更多信息,请参阅 第 7.4 节 “从软件包部署 Keylime registrar”。
-
有关
podman run
命令的更多信息,请参阅系统中的podman-run (1)
手册页。