confidential-containers / guest-components

Confidential Containers Guest Tools and Components
Apache License 2.0
81 stars 87 forks source link

[RFC] Add mesh VPN support to the CDH #674

Open portersrc opened 1 month ago

portersrc commented 1 month ago

CoCo currently has no first-class support for securing the communication between enclaves. This responsibility has been left to the application, but CoCo could provide this optional feature. This RFC outlines what changes in the confidential data hub could support such a feature.

The following high-level diagram shows how this could work:

image

Orange nodes are where the main changes would be needed, including in the CDH. The main points are:

  1. A "mesh daemon", in this case Nebula [7], would provide the fundamental mesh support (peer discovery, establishing routes, encryption). It runs inside the guest VM. This would be packaged with guest-components.
  2. CDH must be enlightened with (a) general mesh setup support/structs and (b) specifically support to start a nebula mesh.
  3. If this option is enabled by the user/workload owner, then kata-agent would invoke the CDH's mesh setup at start.
  4. trustee must be able to supply any needed secrets for such a mesh [4].
  5. The encrypted mesh would co-exist alongside the untrusted kubernetes overlay network, and both would be exposed and usable by the workload pod.

Proposed changes to guest-components

External changes

Changes outside of guest-components that would be needed for this approach include:

Alternative designs and frameworks

Alternative designs that were considered, each with varying merits:

References

[1] August 15, 2024 community meeting with VPN talk [2] May 9, 2024 community meeting with VPN talk [3] guest-components PR 634 (query string support) [4] trustee Issue 396 (extend KBS with plugin and mesh plugin support) [5] trustee PR 451 (address 396) [6] Secure Comms for peer pods [7] Nebula docs

Xynnn007 commented 1 month ago

Great. Nice to see that CoCo stepped image, memory, and now we are conquering networking and storage...

Some questions at first glance

  1. How to ensure the availibility of the Nebula VPN daemon?
  2. Once initdata is handled, probably we do not need to do any change upon kata-agent?