7.11. ブート測定のアテステーション用に Keylime を設定する
Keylime をブート測定のアテステーション用に設定すると、Keylime は、測定対象システム上のブートプロセスが、定義した状態と一致しているかどうかを確認します。
前提条件
Keylime コンポーネントが設定されているシステムへのネットワークアクセスがある。
- verifier
- 詳細は、「パッケージから Keylime verifier をデプロイする」 を参照してください。
- registrar
- 詳細は、「パッケージから Keylime registrar をデプロイする」 を参照してください。
- テナント
- 詳細は、「パッケージから Keylime テナントをデプロイする」 を参照してください。
- エージェント
- 詳細は、「パッケージから Keylime エージェントをデプロイする」 を参照してください。
- Unified Extensible Firmware Interface (UEFI) がエージェントシステムで有効になっている。
手順
Keylime エージェントが設定され実行されている監視対象システムに、
create_mb_refstate
スクリプトを含むpython3-keylime
パッケージをインストールします。# dnf -y install python3-keylime
監視対象システム上で、
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
スクリプトで生成されるポリシーは、システムの現在の状態に基づいており、非常に厳格です。カーネルの更新やシステムの更新を含め、システムに変更を加えると、ブートプロセスが変更され、システムはアテステーションに失敗します。
-
生成されたポリシーを、
keylime_tenant
ユーティリティーが設定されているシステムにコピーします。次に例を示します。# scp root@<agent_ip>:<./measured_boot_reference_state.json> <./measured_boot_reference_state.json>
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
コマンドを使用して、すでに登録されているエージェントの設定を変更できます。-
検証
監視対象システムを再起動し、エージェントのアテステーションが成功することを確認します。
# 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 Quote
かFailed
の場合、アテステーションは失敗し、次のようなコマンド出力が表示されます。{"<agent.uuid>": {"operational_state": "Invalid Quote", ... "ima.validation.ima-ng.not_in_allowlist", "attestation_count": 5, "last_received_quote": 1684150329, "last_successful_attestation": 1684150327}}
アテステーションが失敗した場合は、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}}