8.5. 将 Keylime 注册器配置为容器

注册器是包含一个所有代理的数据库的 Keylime 组件,它托管可信平台模块(TPM)提供商的公钥。在注册器的 HTTPS 服务接受 TPM 公钥后,它提供一个接口来获取这些公钥,以检查引用。您可以将 Keylime 注册器配置为一个容器,而不是 RPM 方法,在主机上无需任何二进制文件或软件包。容器部署提供更好的隔离、模块化和 Keylime 组件的可重复性。

启动容器后,会使用默认配置文件部署 Keylime 注册器。您可以使用一个或多个以下方法自定义配置:

  • 将包含配置文件的目录挂载到容器上。这在所有 RHEL 9 版本中提供。
  • 直接在容器上修改环境变量。这在 RHEL 9.3 及更新版本中提供。修改环境变量会覆盖配置文件中的值。

前提条件

  • podman 软件包及其依赖项已安装在系统上。
  • 可选:您可以访问 Keylime 保存注册器中数据的数据库。您可以使用以下数据库管理系统:

    • SQLite (默认)
    • PostgreSQL
    • MySQL
    • MariaDB
  • 您有来自您的证书颁发机构的有效密钥和证书。

流程

  1. 可选:安装 keylime-registrar 软件包,以访问配置文件。您可以配置没有此软件包的容器,但这可能更容易修改软件包提供的配置文件。

    # dnf install keylime-registrar
  2. 通过在 /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
  3. 可选:为代理列表配置注册数据库。默认配置使用 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 有权限,以创建数据库结构。

  4. 在注册器中添加证书和密钥:

    • 您可以使用默认配置,并将密钥和证书加载到 /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 = &lt;/path/to/server_key&gt;
      server_cert = &lt;/path/to/server_cert&gt;
      trusted_client_ca = ['&lt;/path/to/ca/cert1&gt;', '&lt;/path/to/ca/cert2&gt;']
      注意

      使用绝对路径定义密钥和证书位置。或者,您可以在 tls_dir 选项中定义目录,并使用相对于该目录的路径。

  5. 在防火墙中打开端口:

    # firewall-cmd --add-port 8890/tcp --add-port 8891/tcp
    # firewall-cmd --runtime-to-permanent

    如果您使用其他端口,请将 88908891 替换为 .conf 文件中定义的端口号。

  6. 运行容器:

    $ 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=&lt;passphrase1&gt; \
      registry.access.redhat.com/rhel9/keylime-registrar
    • -p 选项打开主机和容器上的默认端口 88908881
    • -v 选项为目录创建到容器的绑定挂载。

      • 使用 Z 选项,Podman 使用私有未共享标签标记内容。这意味着只有当前容器可以使用私有卷。
    • -d 选项在后台运行分离的容器。
    • 选项 -e KEYLIME_VERIFIER_SERVER_KEY_PASSWORD=<passphrase1> 定义服务器密钥密码短语。
    • 您可以使用选项 -e KEYLIME_REGISTRAR_<ENVIRONMENT_VARIABLE>=<value> ,使用环境变量覆盖配置选项。要修改附加选项,请为每个环境变量单独插入 -e 选项。有关环境变量及其默认值的完整列表,请参阅 第 8.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

其他资源