8.3. Keylime verifier をコンテナーとして設定する

Keylime verifier は、システム整合性の初期チェックと定期チェックを実行し、エージェントを使用した暗号化鍵のセキュアなブートストラップをサポートします。Keylime verifier は、ホスト上にバイナリーやパッケージがなくても、RPM 方式ではなくコンテナーとして設定できます。コンテナーとしてデプロイすることにより、Keylime コンポーネントの分離性、モジュール性、再現性が向上します。

コンテナーを起動すると、Keylime verifier がデフォルトの設定ファイルとともにデプロイされます。次の 1 つ以上の方法を使用して設定をカスタマイズできます。

  • 設定ファイルを含むホストのディレクトリーをコンテナーにマウントします。これは、RHEL 9 のすべてのバージョンで使用できます。
  • コンテナーで環境変数を直接変更します。これは、RHEL 9.3 以降のバージョンで使用できます。環境変数を変更すると、設定ファイルの値がオーバーライドされます。

前提条件

  • podman パッケージとその依存関係がシステムにインストールされている。
  • オプション: Keylime が verifier からのデータを保存するデータベースにアクセスできる。次のデータベース管理システムのいずれかを使用できます。

    • SQLite (デフォルト)
    • PostgreSQL
    • MySQL
    • MariaDB
  • 認証局からの有効な鍵と証明書がある。

手順

  1. オプション: 設定ファイルにアクセスするには、keylime-verifier パッケージをインストールします。このパッケージがなくてもコンテナーを設定することはできますが、パッケージに付属する設定ファイルを変更する方が簡単な場合があります。

    # dnf install keylime-verifier
  2. /etc/keylime/verifier.conf.d/ ディレクトリーに新しい .conf ファイル (例: /etc/keylime/verifier.conf.d/00-verifier-ip.conf) を作成し、次の内容を記述して、verifier をすべての使用可能な IP アドレスにバインドします。

    [verifier]
    ip = *
    • 必要に応じて、port オプションを使用して、verifier のポートをデフォルト値 8881 から変更することもできます。
  3. オプション: エージェントのリスト用に verifier のデータベースを設定します。デフォルトの設定では、verifier の /var/lib/keylime/cv_data.sqlite ディレクトリーにある SQLite データベースを使用します。/etc/keylime/verifier.conf.d/ ディレクトリーに次の内容の新しい .conf ファイル (/etc/keylime/verifier.conf.d/00-db-ip.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 がデータベース構造を作成するための権限があることを確認してください。

  4. verifier に証明書と鍵を追加します。Keylime にそれらを生成させることも、既存の鍵と証明書を使用することもできます。

    • デフォルトの tls_dir =generate オプションを使用すると、Keylime は verifier、registrar、およびテナントの新しい証明書を /var/lib/keylime/cv_ca/ ディレクトリーに生成します。
    • 既存の鍵と証明書を設定にロードするには、verifier 設定でそれらの場所を定義します。

      注記

      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 オプションで定義されたディレクトリーから解決されます。

  5. ファイアウォールでポートを開きます。

    # firewall-cmd --add-port 8881/tcp
    # firewall-cmd --runtime-to-permanent

    別のポートを使用する場合は、8881.conf ファイルで定義されているポート番号に置き換えます。

  6. コンテナーを実行します。

    $ 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 verifier の設定の詳細は、「Keylime verifier の設定」 を参照してください。
  • podman run コマンドの詳細は、podman-run(1) man ページを参照してください。