Conversation
|
This works for us. The four properties are all things we can report honestly from a gVisor or microVM backend, and moving the Landlock and seccomp detail into the sandbox backend behind an opaque backend_audit is a cleaner split than what I suggested in the issue. Thanks for turning it around so quickly! |
f08322e to
6b74564
Compare
3ae8408 to
8c187a6
Compare
elezar
left a comment
There was a problem hiding this comment.
The backend-neutral direction looks right, and the host-side revalidation preserves the important fail-closed behavior. I would like to see the following addressed before merge:
-
Please make the evidence-to-guarantee mapping explicit. OuterFenceGuarantees::confirmed currently turns any non-empty native evidence into all four guarantees, including revocation verification and fail-closed controller loss. The Docker, Podman, Kubernetes, and VM evidence validators check narrower configuration facts. Please either document and test why those facts establish every projected guarantee, or represent and validate the additional native evidence explicitly. This avoids allowing future drivers to accidentally promote weak evidence into stronger common claims.
-
Please add negative tests around RemoteBound::confirm, which is the new security-critical trust boundary. At minimum, exercise invalid backend audit evidence, a property projection that does not match valid audit evidence, and mismatched outer-fence generation/digest. Each case should demonstrate that confirmation fails before Ready is constructed or the credential monitor starts. The existing component-level validation tests do not exercise this assembled path.
-
This changes persisted and serialized BoundaryConfig and SandboxRuntimeDescriptor data from driver_fence to outer_fence. Protocol compatibility is not required here, but the responsible commit must use a Conventional Commit breaking marker/footer and state the operator impact: sandbox state created by earlier versions cannot be decoded and affected sandboxes must be recreated after upgrade.
Non-blocking: OpenShellSandboxAuditEvidence is specifically the native-Linux seccomp/Landlock evidence schema. NativeLinuxSandboxAuditEvidence in a Linux/native adapter module would make the intended ownership clearer as gVisor and other adapters are added.
The OpenShift capability/seccomp contradiction remains separate follow-up work; this PR correctly moves that restriction out of the shared interface but does not resolve it for the native Linux backend.
8c187a6 to
228f644
Compare
|
Addressed the requested changes in
Validation: |
|
The per-guarantee projection is better than what it replaced, and the negative tests on One question before this settles, because it decides something on our side. Less clear to me is the delegated case in #3362, where the backend brings its own boundary and its own egress enforcement. Is the outer fence still the compute driver's, with the backend reporting only the four properties? Or would a backend that owns the network path be expected to establish the outer fence guarantees itself? It changes which of the four we have to prove and where the evidence comes from, so I would rather build against the answer than guess. |
I think we can be flexible here. Today all our compute drivers own the network fence.
Yes. If Substrate for example, owns the network path, a substrate backend must establish and prove all four guarantees. The supervisor only cares that all four guarantees are proven and bound to the sandbox generation. It should not care whether that evidence came from a compute driver or a delegated backend. The current Does this work for you? I don't have a strong opinion here yet. If we find that there is a better stance to take we can update the thinking. |
|
Clarified the ownership model in
I also renamed |
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Require each compute driver to map its native evidence to individual outer-fence guarantees, and reject incomplete projections before a boundary becomes ready. Exercise the assembled remote confirmation path for invalid audit, property, generation, and digest evidence. BREAKING CHANGE: BoundaryConfig and SandboxRuntimeDescriptor use outer_fence projections rather than the earlier driver_fence representation. State written by earlier builds cannot be decoded; operators must stop and recreate affected sandboxes after upgrading. Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
22b1529 to
828118e
Compare
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Summary
Replace Linux- and driver-specific confirmation schemas in the shared isolation interface with backend-neutral enforcement properties. The common contract describes the guarantees every backend must establish. The component that owns an enforcement mechanism also owns and validates its native evidence.
Related Issue
Closes #3361
Changes
Operator impact
This is an intentional serialized-state break.
BoundaryConfigandSandboxRuntimeDescriptornow useouter_fenceprojections rather than the earlierdriver_fencerepresentation, so state created by older builds cannot be decoded. Operators must stop and recreate affected sandboxes after upgrading.Testing
mise run pre-commitcargo test -p openshell-isolation-interface --test backend_conformancecargo test -p openshell-sandbox-backendChecklist