8.11. ブート測定アテステーションのための Keylime のデプロイ

Keylime をブート測定のアテステーション用に設定すると、Keylime は、測定対象システム上のブートプロセスが、定義した状態と一致しているかどうかを確認します。

前提条件

手順

  1. Keylime エージェントが設定され実行されている監視対象システムに、create_mb_refstate スクリプトを含む python3-keylime パッケージをインストールします。

    # dnf -y install python3-keylime
  2. 監視対象システム上で、create_mb_refstate スクリプトを使用して、システムの現在の状態を測定したブートログからポリシーを生成します。

    # /usr/share/keylime/scripts/create_mb_refstate /sys/kernel/security/tpm0/binary_bios_measurements <./measured_boot_reference_state.json>
    • <./measured_boot_reference_state.json> を、スクリプトが生成されたポリシーを保存するパスに置き換えます。
    • UEFI システムでセキュアブートが有効になっていない場合は、--without-secureboot 引数を渡します。

      重要

      create_mb_refstate スクリプトで生成されるポリシーは、システムの現在の状態に基づいており、非常に厳格です。カーネルの更新やシステムの更新を含め、システムに変更を加えると、ブートプロセスが変更され、システムはアテステーションに失敗します。

  3. 生成されたポリシーを、keylime_tenant ユーティリティーが設定されているシステムにコピーします。次に例を示します。

    # scp root@<agent_ip>:<./measured_boot_reference_state.json> <./measured_boot_reference_state.json>
  4. Keylime テナントが設定されているシステムで、keylime_tenant ユーティリティーを使用してエージェントをプロビジョニングします。

    # keylime_tenant -c add -t <agent_ip> -u <agent_uuid> --mb_refstate <./measured_boot_reference_state.json> --cert default
    • <agent_ip> は、エージェントの IP アドレスに置き換えます。
    • <agent_uuid> は、エージェントの UUID に置き換えます。
    • <./measured_boot_reference_state.json> を、ブート測定ポリシーへのパスに置き換えます。

    ランタイム監視と一緒にブート測定を設定する場合は、keylime_tenant -c add コマンドを入力するときに両方のユースケースのオプションをすべて指定します。

    注記

    # keylime_tenant -c delete -t <agent_ip> -u <agent_uuid> コマンドを使用して、Keylime によるノードの監視を停止できます。

    keylime_tenant -c update コマンドを使用して、すでに登録されているエージェントの設定を変更できます。

検証

  1. 監視対象システムを再起動し、エージェントのアテステーションが成功することを確認します。

    # keylime_tenant -c cvstatus -u <agent_uuid>
    ...
    {"<agent.uuid>": {"operational_state": "Get Quote"..."attestation_count": 5
    ...

    <agent_uuid> は、エージェントの UUID に置き換えます。

    operational_state の値が Get Quote で、attestation_count が 0 以外の場合、このエージェントのアテステーションは成功しています。

    Operational_state の値が Invalid QuoteFailed の場合、アテステーションは失敗し、次のようなコマンド出力が表示されます。

    {"<agent.uuid>": {"operational_state": "Invalid Quote", ... "ima.validation.ima-ng.not_in_allowlist", "attestation_count": 5, "last_received_quote": 1684150329, "last_successful_attestation": 1684150327}}
  2. アテステーションが失敗した場合は、verifier ログで詳細を表示します。

    # journalctl -u keylime_verifier
    {"d432fbb3-d2f1-4a97-9ef7-75bd81c00000": {"operational_state": "Tenant Quote Failed", ... "last_event_id": "measured_boot.invalid_pcr_0", "attestation_count": 0, "last_received_quote": 1684487093, "last_successful_attestation": 0}}