6.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-keylime
Copy 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 default
Copy 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