Repository navigation
Conversation
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
db063a9 to
8dfbd78
Compare
a876a1a to
437619a
Compare
3da8000 to
5fbece5
Compare
5fbece5 to
1899b5b
Compare
96ba1b7 to
e0b6cec
Compare
b4c1940 to
b733887
Compare
b733887 to
8e6786b
Compare
8e6786b to
6dd2cbb
Compare
6dd2cbb to
85cba03
Compare
a78134c to
03c6d6e
Compare
|
Label |
|
Label |
Signed-off-by: Drew Newberry <[email protected]>
Signed-off-by: Drew Newberry <[email protected]>
Signed-off-by: Drew Newberry <[email protected]>
Signed-off-by: Drew Newberry <[email protected]>
Signed-off-by: Drew Newberry <[email protected]>
Signed-off-by: Drew Newberry <[email protected]>
Signed-off-by: Drew Newberry <[email protected]>
6b0466e to
16f61f5
Compare
Compatibility review (advisory)New or updated breaking changes; see the full report for all findings. 1. rust-sdk — No explicit risk acceptance foundGetSandboxProviderAccessToken adds a required get_sandbox_provider_access_token method to openshell_sdk::raw::proto::open_shell_server::OpenShell without a default implementation.
2. go-sdk — No explicit risk acceptance foundopenshellv1.OpenShellClient now requires GetSandboxProviderAccessToken in addition to its baseline method set.
3. typescript-sdk — No explicit risk acceptance foundRegeneration makes getSandboxProviderAccessToken mandatory on the injected Client<typeof OpenShell> accepted by SandboxClient and SandboxTemplateClient constructors.
Review details
Advisory review; publication gates are unchanged. |
|
Looks good to me! |
|
Team, I second @EmilienM's review by adding my personal feedback based on testing this PR on OpenShift. The biggest issue I am facing is the required On OpenShift, SPIRE is deployed via the SPIFFE/SPIRE operator (ZTWIM), which does not expose the admin socket outside the agent pod. Even if it did, mounting it via |
|
This pull request has had no activity for 14 days and is now marked stale. |
Signed-off-by: Taylor Mutch <[email protected]>
Preserve the shared supervisor pool and recovery implementation from main while wiring gateway-brokered sandbox identities into shared hosts. Refresh the public schema inventory, authentication fixtures, and affected test-workspace lockfiles. Signed-off-by: Taylor Mutch <[email protected]>
Signed-off-by: Taylor Mutch <[email protected]>
Signed-off-by: Taylor Mutch <[email protected]>
Signed-off-by: Taylor Mutch <[email protected]>
Signed-off-by: Taylor Mutch <[email protected]>
Signed-off-by: Taylor Mutch <[email protected]>
Signed-off-by: Taylor Mutch <[email protected]>
|
@akram Following up on the OpenShift deployment concern: commits 89aad0f and 17c8b7b switch this implementation to the SPIFFE Broker API over mTLS. The gateway obtains its own X.509-SVID through the CSI Workload API socket. It no longer mounts a hostPath or requires a supplemental group for SPIRE access. For sandbox issuance, it supplies the Sandbox CR UID from its persisted compute-runtime identity. SPIRE resolves and attests that object, checks the broker identity allowlist, and enforces scoped Kubernetes authorization through Local validation passed 36 Kubernetes conformance tests and all 8 Broker/provider-token tests, including credential renewal, abrupt supervisor takeover, and stale-session rejection. The Broker suite also passed against the retained Helm dev deployment. The gateway Pod specification passed server-side dry-run admission in a namespace enforcing Kubernetes Restricted Pod Security. OpenShift |
|
Following up on the compatibility advisory for the current head, 17c8b7b: We are keeping The Rust generated server-trait requirement and TypeScript injected-client/mock shape still need reviewer disposition: either mitigation or explicit acceptance of the source break. The current TypeScript SDK CI task passes all 206 tests, but that does not prove compatibility with downstream handwritten mocks or server implementations. The Go finding should be reevaluated against Please reevaluate these findings against the current API/SDK baseline. Keeping the RPC on this service is the proposed API placement; compatibility risk acceptance remains a separate review decision. |
Summary
Let the shared Kubernetes supervisor obtain provider tokens using each sandbox's stable SPIFFE identity. The gateway owns SPIRE access, JWT-SVIDs, intermediate credentials, and provider exchanges. The supervisor authenticates with the individual sandbox generation's JWT and receives only the final provider access token; workloads receive no SPIFFE socket or credentials.
Based on
main, which includes #4701 and #4702. The supervisor token authorizes only the private supervisor-initiated assignment stream over server-authenticated TLS. Provider-token requests require the individual sandbox's generation-bound credentials; no client mTLS or new Kubernetes authentication is introduced.Closes #4731
Changes
GetSandboxProviderAccessToken. The gateway verifies the signed session, persisted generation, credential epoch, token lineage, and active state. Attachment, endpoint, audience, and scopes come from trusted configuration.openshell-crypto; caller spelling cannot manufacture cache entries, and in-place subject rotation invalidates reuse.<prefix>/gateway/<gateway-id>/sandbox/<sandbox-id>from verified identity. Require the expected JWT-SVID and verify its signature, audience, and expiry against the agent's current trust bundle. Stop/start preserves identity; recreating the sandbox changes it.openshell-spire. Shared SPIFFE types, parsing helpers, stable identity mapping, andSandboxIdentityProviderlive in dependency-lightopenshell-spiffe, independently of core and SPIRE. The gateway broker uses that interface to request a verified stable sandbox identity, token, and expiry; startup selects the adapter through the existing configuration. Authorization, exchanges, and caching remain in the gateway.openshell.gateway.spiffe_delegation, mounting the private admin socket only on the gateway. Conditional Helm notes and deployment guidance cover hostPath admission exceptions, socket startup/permissions, chart-applied groups, and registration coverage for all eligible agents. E2E assertions handle malformed request IDs, all container classes, and retry duplicates.SPIRE trusts the gateway as a delegate. Operators provision registrations within the eligible agents' scope, using node aliases/sets or corresponding per-agent entries. The opt-in hostPath requires explicit admission permission; this does not make the mount compatible with unmodified Baseline/Restricted policy or restricted-v2 SCC. There is no automatic registration, supervisor HA, other-driver enablement, or validated Kata support. Already-issued provider bearer tokens retain their normal expiration.
Validation
-D warningsfor core, supervisor-network, server, and gateway, including servertest-support.mise run test:spire-delegation), exercising delegated identity selection and failure cases against a real local server and agent.The adapter extraction additionally passed all-target Clippy, the moved SPIFFE tests, 583 focused server tests, and its focused adapter test. The live SPIRE fixture passed four consecutive runs after adding a wait for delegate issuance. The combined stack passed 2,956 affected tests (22 skipped) and the Kubernetes SPIFFE E2E compile check.
Scope decisions from review
Per-request gateway authorization and subject dependency checks are intentional. Published docs remain deferred by maintainer direction; crate and deployment guidance cover this prototype. Replacing the bounded cache, consolidating broader authentication/driver-policy helpers, transparent lineage-rotation retries, generated upstream wire bindings, and promoting the SPIRE fixture into default CI are follow-ups, not changes claimed by this patch.
The shared SPIFFE extraction passed all tracked Cargo lockfile checks, all-target Clippy, nine moved SPIFFE tests, the adapter test, 43 core configuration tests, 100 supervisor token-grant tests, 581 focused server tests, and the live SPIRE fixture. The combined stack also passed 5,139 affected tests (29 skipped), all-target Clippy, and the Kubernetes SPIFFE E2E compile check. Configuration and identity formats are unchanged.