This guide describes the end-to-end flow to produce and integrate Policy v2 artifacts into the MigTD image.
- Tools:
- MigTD collateral generator: tools/migtd-collateral-generator/readme.md
- ServTD collateral generator: tools/servtd-collateral-generator/readme.md
- Policy generator: tools/migtd-policy-generator/readme.md
- JSON signer: tools/json-signer/readme.md
Fetch platform collaterals:
cargo build -p migtd-collateral-generator
./target/debug/migtd-collateral-generator -o config/collateral_production_fmspc.json
# or pre-production:
# ./target/debug/migtd-collateral-generator -o config/collateral_pre_production_fmspc.json --pre-productionThe output JSON feeds the policy generator.
Sign the ServTD identity and ServTD TCB mapping JSON:
cargo build -p json-signer
# Example: sign the ServTD identity with private key (in PKCS8) and output signed JSON
./target/debug/json-signer --sign --name tdIdentity --private-key /path/to/pkcs8 --input /path/to/td_identity.json --output td_identity_signed.json
# Example: sign the ServTD TCB mapping with private key (in PKCS8) and output signed JSON
./target/debug/json-signer --sign --name tdTcbMapping --private-key /path/to/pkcs8 --input /path/to/tcb_mapping.json --output tcb_mapping_signed.jsonProduce ServTD identity and TCB mapping collateral bundle:
cargo build -p servtd-collateral-generator
./target/debug/servtd-collateral-generator --identity /path/to/td_identity_signed.json --identity-chain /path/to/identity_issuer_chain.pem --mapping /path/to/tcb_mapping_signed.json --mapping-chain /path/to/identity_issuer_chain.pem -o servtd_collateral.jsonResult: servtd_collateral.json (contains signed td identity and tcb mapping, and their issuer chains).
Generate a policy v2 JSON referencing:
- Attestation collaterals (from step 1)
- Signed ServTD collateral (from step 2)
- Base Policy Data (without collaterals and ServTD collateral)
cargo build -p migtd-policy-generator
./target/debug/migtd-policy-generator v2 \
--policy-data /path/to/policy_data.json \
--collaterals /path/to/collateral.json \
--servtd-collateral /path/to/servtd_collateral.json \
-o policy_v2.jsonSign the policy:
cargo build -p json-signer
./target/debug/json-signer --sign --name policyData --private-key /path/to/pkcs8 --input /path/to/policy_v2.json --output policy_v2_signed.jsonResult: policy_v2_signed.json (contains policyData and its signature).
Place artifacts where the build expects them (e.g. under config/templates):
config/templates/
policy_v2_signed.json
policy_issuer_chain.pem
Build image (with option --policy-v2):
cargo image --policy-v2 \
--policy config/templates/policy_v2_signed.json \
--policy-issuer-chain config/templates/policy_issuer_chain.pemDuring startup:
- Policy issuer chain is measured (see measurement flow in src/migtd/src/bin/migtd/main.rs).
- Policy integrity is verified with issuer chain and measured by RTMR and event log (
RawPolicyData::verifyin src/policy/src/v2/policy.rs). - Collaterals are used for quote verification and TCB evaluation.
bash sh_script/key_gen.sh
cargo clean
cargo image --policy-v2 \
--policy config/templates/policy_v2_signed.json \
--policy-issuer-chain key/migtd_issuer_chain.pem
pushd tools/migtd-hash
cargo build
popd
./target/debug/migtd-hash --manifest config/servtd_info.json \
--image target/release/migtd.bin \
--policy-v2 \
--update-tcb-mapping config/templates/tcb_mapping.json
bash sh_script/build_policy_v2.sh [preprod/prod]
cargo image --policy-v2 \
--policy config/templates/policy_v2_signed.json \
--policy-issuer-chain key/migtd_issuer_chain.pem
- Platform collaterals ->
collateral_*.json - ServTD collateral -> sign ->
servtd_collateral_signed.json - Policy generator ->
policy_v2.json-> sign ->policy_v2_signed.json - Build image with signed policy + issuer chain ->
cargo image --policy-v2 --policy config/templates/policy_v2_signed.json --policy-issuer-chain config/templates/policy_issuer_chain.pem