You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This issue will cover #1010, which is a ticket for external tracking on the RFD 605 board. At the risk of being redundant, I'm creating a fresh issue to outline our design of an mvp attestation path in propolis-server and track incremental progress/PRs.
MVP Design Overview
We need a starting implementation of VM attestation as per RFD 605. (This is the relevant part of the RFD for us.)
The basic idea here is:
a guest submits a 32-byte piece of data for attestation over a known attestation port
on the propolis side of the port, propolis runs a "socket server" thread that can respond to attestation requests
as part of the attestation process, we need additional qualifying_data tying the instance to this particular request. For our mvp targeting R19, that is only the hash of the instance boot disk, and its instance UUID.
on instance start, propolis will hash the boot disk to be used in the qualifying data. This has two implications for our design: (1) that the boot disk is read-only ([nexus] create read-only disks from images or snapshots omicron#9731) and (2) that the boot disk must be hashed before we can start responding to attestation requests. As such, the socket server will fast-fail requests until the boot disk is hashed, so as to neither make instance start times obscenely long nor respond to attestation requests until we have the boot digest ready.
propolis-server attests the data provided by the guest, along with the qualifying data, via the interfaces in oxidecomputer/vm-attest-proto
We've largely been incrementally developing this feature in propolis-standalone, which allowed us to prove out the socket server and upstack consumers (i.e., software in a guest instance) without needing a whole control plane or even just sled-agent. This has been extremely useful for development and iterating quickly. For the real feature, we need support in propolis-server as well.
First we'll get propolis-standalone support merged, which will allow continued development and testing with propolis-standalone and allow us to start moving common code for -standalone and -server into lib/.
We have the following standalone PRs in progress from work so far:
For the propolis-server side, we need to do the following (these items may be broken up or combined into PRs depending on how it makes sense to land things):
commonize socket server code for use by both server and standalone in lib/
This issue will cover #1010, which is a ticket for external tracking on the RFD 605 board. At the risk of being redundant, I'm creating a fresh issue to outline our design of an mvp attestation path in propolis-server and track incremental progress/PRs.
MVP Design Overview
We need a starting implementation of VM attestation as per RFD 605. (This is the relevant part of the RFD for us.)
The basic idea here is:
qualifying_datatying the instance to this particular request. For our mvp targeting R19, that is only the hash of the instance boot disk, and its instance UUID.Incremental Work
We've largely been incrementally developing this feature in propolis-standalone, which allowed us to prove out the socket server and upstack consumers (i.e., software in a guest instance) without needing a whole control plane or even just sled-agent. This has been extremely useful for development and iterating quickly. For the real feature, we need support in propolis-server as well.
First we'll get propolis-standalone support merged, which will allow continued development and testing with propolis-standalone and allow us to start moving common code for -standalone and -server into lib/.
We have the following standalone PRs in progress from work so far:
For the propolis-server side, we need to do the following (these items may be broken up or combined into PRs depending on how it makes sense to land things):
dice_verifier::Attestimpl to propolis-server: verifier: add sled-agent implementation for Attest dice-util#347