fix(kubernetes): bind bootstrap to runtime identity - #3531
Conversation
|
🌿 Preview your docs: https://nvidia-preview-pr-3531.docs.buildwithfern.com/openshell |
drew
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
This security fix is project-valid and the documentation covers the changed operator behavior, but two lifecycle gaps can leave supported sandboxes unavailable or inconsistent.
Action required: address both blocking findings and add the requested upgrade and compensation regression coverage.
Blocking findings:
GATOR-76107d20-01: migrate or safely establish durable bindings for sandboxes created before this change.GATOR-76107d20-02: compensate when binding validation or persistence fails after a driver create or start succeeds.
Carried findings:
- None
Gator metadata
- Validation: Repository-admin-authored security fix with architecture and operator documentation
- Docs: Fern and architecture documentation updated
- Checks: Current-head branch checks are still running; pipeline handoff is deferred until review findings are resolved
- E2E: Kubernetes lifecycle and authentication coverage will be required after review resolution
- Head SHA:
76107d20b9faf337ba9b14002f96f00303047f9e - Base SHA:
cb6e88acb7fda83cd4355330b24dab1196105729 - Merge base SHA:
251f77e2b8f6c8d1a81236e3eea7b9f2cee6f728 - Patch ID:
ebfaac05b638c0a01a7eeb4da1a0c5962970e781 - Gator payload:
10 - Review mode:
initial - Previous reviewed SHA: none
- Review budget exhausted: no
- Maintainer decision required: no
- Next state:
gator:in-review
BlockedThanks @johntmyers. I see the new commit intended to address the lifecycle-compensation finding, and @drew has explicitly waived the backward-compatibility requirement. I cannot complete the follow-up review because this head now conflicts with Next action: @johntmyers, update the branch to resolve the merge conflict. Gator will review the author-only delta and the remaining compensation obligation on the resulting head. Gator metadata
|
d98501c to
160b87a
Compare
drew
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
Thanks @johntmyers. I checked the rebased compensation update: the start rollback and its regression coverage now address that half of the lifecycle finding, and @drew's backward-compatibility waiver remains honored. The create path still has one reachable form of the existing compensation obligation.
Action required: make backend deletion best-effort even when the persistence failure also prevents recording the Deleting transition, and add the persistent-store-failure regression case.
Blocking findings:
- No new blocking findings.
Carried findings:
GATOR-76107d20-02— Create compensation can still stop before backend deletion. After the driver successfully creates a runtime, a binding-store outage can also makebegin_sandbox_delete_with_initial_snapshotfail. The current path returns before callingDeleteSandbox, leaving a live, unauthenticable backend while the API reports failure. Release the global guard and attempt the idempotent backend deletion even when the durable cleanup transition cannot be stored. Verify with a store trigger that rejects all post-insert payload updates and assert that deletion is still invoked.
Gator metadata
- Validation: Repository-admin-authored security fix following the private disclosure process
- Docs: Fern and architecture documentation updated
- Checks: Current-head branch checks are still running; pipeline handoff remains deferred while the carried finding is open
- E2E: Kubernetes lifecycle and authentication coverage is required after review resolution; test workflows have not been dispatched
- Head SHA:
160b87a2b2ff233bb56180205d43e32df234c802 - Base SHA:
96c08f111b7ccf3d048a876c23e724014babb585 - Merge base SHA:
96c08f111b7ccf3d048a876c23e724014babb585 - Patch ID:
62ecb14cad698bfb2323f87c54d095678255555e - Gator payload:
10 - Review mode:
follow_up - Previous reviewed SHA:
76107d20b9faf337ba9b14002f96f00303047f9e - Review budget exhausted: no
- Maintainer decision required: no
- Next state:
gator:in-review
|
Label |
|
Label |
PR Review StatusThanks @johntmyers. I reviewed the latest cleanup commit and confirmed that backend deletion is now attempted even when the durable Action required: a maintainer must open workflow run 35666878864 and choose Re-run all jobs so the newly applied Blocking findings:
Carried findings:
Gator metadata
|
Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>
Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>
Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>
Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>
b47d0c1 to
dcd5f18
Compare
PR Review StatusThanks @johntmyers. I reviewed the author-only delta after the rebase and lifecycle-race update in critical-only mode. The previously resolved compensation finding and the maintainer's backward-compatibility waiver remain intact, and no newly introduced Critical defect was found. Blocking findings:
Carried findings:
Gator metadata
|
Reviewed head This PR addresses the original UUID-only bootstrap check using the plan's durable-binding alternative: create/start return a runtime identity, the gateway persists it, and bootstrap requires an exact match. Retaining ServiceAccount authentication is a valid design choice. Two gaps remain:
The compensation tests, capability rejection, documentation, and skill updates are useful. Please add regression coverage for namespace/CR continuity across restart and for the actual authentication chain through provider access, including rejection of credentials from an obsolete runtime. At the time of review, Kubernetes smoke, managed/operator workspace, and external-driver CI had passed; broader Rust checks were still running. The recorded backward-compatibility waiver is honored and is not a finding. Validation was static code review; no local tests or live exploit reproduction were performed. |
Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>
PR Review StatusThanks @drew. I checked the namespace/CR continuity and obsolete-session concerns you raised against @johntmyers's latest author-only delta. Restart now requires one resource matching the persisted namespace and CR UID, while issued supervisor credentials are generation-bound and rejected after runtime replacement. The critical-only review found no newly introduced Critical defect. Blocking findings:
Carried findings:
Gator metadata
|
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
PR Review StatusThanks @drew. I reviewed your runtime-binding capability refactor on the latest head in critical-only mode. The earlier backward-compatibility waiver and resolved lifecycle-compensation finding remain intact, and no newly introduced Critical defect was found. The PR cannot return to approval yet: the current-head Action required: a maintainer must open workflow run 35683511049 and choose Re-run all jobs. Gator will inspect the rerun and diagnose any repeatable failure. Blocking findings:
Carried findings:
Gator metadata
|
Monitoring CompleteMonitoring is complete because this PR has merged. Final status: the required Branch Checks and E2E gate succeeded before merge, and no code-review blockers remained. The Kubernetes HA and credential-driver jobs were optional and skipped. I removed the active Gator metadata
|
Summary
Strengthens compute-driver bootstrap authorization by correlating authenticated workloads with the durable runtime identity recorded during provisioning and restart.
Related Issue
No public issue. This change follows the private disclosure process documented in
SECURITY.md.Changes
Testing
mise run pre-commitpassescargo test -p openshell-server auth::compute_driver::testscargo test -p openshell-server grpc::auth_rpc::tests::issue_cargo test -p openshell-driver-kubernetes(228 tests)Checklist