Repository navigation
Conversation
mtalvi
marked this pull request as ready for review
October 18, 2026 14:25
mtalvi
requested review from
Hadar301,
LinoyBitan1 and
sauagarwa
and removed request for
sauagarwa
October 18, 2026 16:24
mtalvi
force-pushed
the
codex/vm-root-credential-isolation
branch
from
October 25, 2026 10:26
aa035c1 to
6473cf0
Compare
mtalvi
force-pushed
the
codex/vm-root-credential-isolation
branch
from
October 25, 2026 15:20
3c3a0ff to
cb7e558
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related ticket: APPENG-6602
Summary
Provider API keys previously reached workspace VM disks and gateway database files, alongside reusable admin mTLS material. This PR keeps live provider keys in namespace Secrets consumed by an in-cluster credential proxy. VMs and sandboxes receive metadata and nonsecret credential markers instead of the keys.
Gateway CA signing happens in tmpfs, and the CA private key is removed before the gateway starts. Each installer apply creates a temporary admin identity, trusts its CA for that run, and removes both the trust anchor and runtime files afterward.
What changed
saw-credential-proxy, a restricted, non-root Go service. It accepts allowlisted HTTPS destinations on port 443, checks CONNECT/SNI/Host consistency, verifies upstream TLS, and replaces bound markers with provider keys. Invalid markers or bindings fail closed; projected key rotations are read on subsequent requests.-metacompanion Secrets and wires gateway/sandbox traffic through the proxy. GitOps and quickstart bindings follow the active providers, including the NVIDIAbuildalias, optional web search, and additional OpenAI/Anthropic providers.XDG_CONFIG_HOMEduring apply, waits for client-CA hot reload, and uses a nonadminsaw-relayidentity for background connections. Preserves the separate JWT signing bundle required by OpenShell0.1.2-rhaiv.6and supplies a user-owned public proxy CA for rootless Podman/SELinux mounts.Rebased onto #135
Rebased onto main
0d4935band adapted credential isolation to typed provider configuration:cuda_model;provideris optional. Named credentials each receive a distinct marker and require their own permitted proxy binding.provideruses the union of its binding's allowed provider hosts. Settingprovidernarrows that scope.url. Keyed custom endpoints require HTTPS on port 443 with publicly trusted TLS; other ports and service-CA trust are tracked in #137. HTTP is suitable only for keyless endpoints./sandbox. Gateway CA changes remain a separate migration that recreates the sandbox without preserving files. Restore handles image-owned read-only files while retaining the archive on any verification failure.Validation
At head
11a5ff2(rebased onto0d4935b):cluster-8rmt4, using the separatepr123-cluster-testbranch and a digest-pinned native proxy build.modelandcuda_modelvalues. A deployment-owned custom HTTPS endpoint worked through the proxy; the deployed installer refused keyed:8443.make test-credential-isolationcheck and equivalent live checks passed. The guest returned candidate hashes; comparison with the real key stayed local. No provider key was found, metadata-only mounts and proxy readiness were verified, and apply temporarily added then removed its admin CA and runtime directory. Automatic approval review blocked the standard script because it sends provider-key bytes into the guest; the replacement sent no target key, digest, or key length to the VM.credential_unavailablein supervisor diagnostics. The fixture received no agent chat request. Tracked in #138; keyless HTTP sandbox inference is not claimed as validated.Earlier live validation also passed the 35 NetworkPolicy checks and normal-owner CLI/TUI access. A dummy Brave key was used with web search disabled; no live web search was attempted. An OpenAI-compatible stub was used for the HTTP test; actual vLLM serving was not tested. Optional MCP checks and browser SSO login were not completed.
Deployment and security notes
defaults.openshellSaw.credentialProxy.imagefor GitOps orCREDENTIAL_PROXY_IMAGEfor quickstart. Pinning the published default image is a post-merge follow-up./sandboxthrough archive/restore. Missing or changed gateway CA trust requires recreation that wipes/sandbox. Rotate provider keys that previously reached a VM; seedocs/credential-isolation.mdfor the migration procedure.docs/credential-isolation.md.