7.11. ブート測定のアテステーション用に Keylime を設定する
Keylime をブート測定のアテステーション用に設定すると、Keylime は、測定対象システム上のブートプロセスが、定義した状態と一致しているかどうかを確認します。
前提条件
Keylime コンポーネントが設定されているシステムへのネットワークアクセスがある。
- verifier
- 詳細は、「パッケージから Keylime verifier をデプロイする」 を参照してください。
- registrar
- 詳細は、「パッケージから Keylime registrar をデプロイする」 を参照してください。
- テナント
- 詳細は、「パッケージから Keylime テナントをデプロイする」 を参照してください。
- エージェント
- 詳細は、「パッケージから Keylime エージェントをデプロイする」 を参照してください。
- Unified Extensible Firmware Interface (UEFI) がエージェントシステムで有効になっている。
手順
Keylime エージェントが設定され実行されている監視対象システムに、
keylime-policyツールを含むpython3-keylimeパッケージをインストールします。dnf -y install python3-keylime
# dnf -y install python3-keylimeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 監視対象システムで、
keylime-policyツールを使用して、システムの現在の状態を測定したブートログからポリシーを生成します。keylime-policy create measured-boot --eventlog-file /sys/kernel/security/tpm0/binary_bios_measurements --output <./measured_boot_reference_state.json>
# keylime-policy create measured-boot --eventlog-file /sys/kernel/security/tpm0/binary_bios_measurements --output <./measured_boot_reference_state.json>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<./measured_boot_reference_state.json>は、keylime-policyによって生成されるポリシーが保存されるパスに置き換えます。 UEFI システムでセキュアブートが有効になっていない場合は、
--without-secureboot引数を渡します。重要keylime-policyによって生成されるポリシーは、システムの現在の状態に基づいており、非常に厳格です。カーネルの更新やシステムの更新を含め、システムに変更を加えると、ブートプロセスが変更され、システムはアテステーションに失敗します。
-
生成されたポリシーを、
keylime_tenantユーティリティーが設定されているシステムにコピーします。次に例を示します。scp root@<agent_ip>:<./measured_boot_reference_state.json> <./measured_boot_reference_state.json>
# scp root@<agent_ip>:<./measured_boot_reference_state.json> <./measured_boot_reference_state.json>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Keylime テナントが設定されているシステムで、
keylime_tenantユーティリティーを使用してエージェントをプロビジョニングします。keylime_tenant --command add --targethost <agent_ip> --uuid <agent_uuid> --mb_refstate <./measured_boot_reference_state.json> --cert default
# keylime_tenant --command add --targethost <agent_ip> --uuid <agent_uuid> --mb_refstate <./measured_boot_reference_state.json> --cert defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
<agent_ip>は、エージェントの IP アドレスに置き換えます。 -
<agent_uuid>は、エージェントの UUID に置き換えます。 -
<./measured_boot_reference_state.json>を、ブート測定ポリシーへのパスに置き換えます。
ランタイム監視と一緒にブート測定を設定する場合は、
keylime_tenant --command addコマンドを入力するときに両方のユースケースのオプションをすべて指定します。注記# keylime_tenant --command delete --targethost <agent_ip> --uuid <agent_uuid>コマンドを使用して、Keylime によるノードの監視を停止できます。keylime_tenant --command updateコマンドを使用して、すでに登録されているエージェントの設定を変更できます。-
検証
監視対象システムを再起動し、エージェントのアテステーションが成功することを確認します。
keylime_tenant --command cvstatus --uuid <agent_uuid>
# keylime_tenant --command cvstatus --uuid <agent_uuid> ... {"<agent.uuid>": {"operational_state": "Get Quote"..."attestation_count": 5 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow <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}}{"<agent.uuid>": {"operational_state": "Invalid Quote", ... "ima.validation.ima-ng.not_in_allowlist", "attestation_count": 5, "last_received_quote": 1684150329, "last_successful_attestation": 1684150327}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow アテステーションが失敗した場合は、verifier ログで詳細を表示します。
journalctl -u keylime_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}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow