[Feat] Restrict Iron credential requests to allowed origins - #2673
Draft
roomote-roomote[bot] wants to merge 2 commits into
Draft
roomote-roomote[bot] wants to merge 2 commits into
roomote-roomote[bot] wants to merge 2 commits into
Conversation
Contributor
Contributor
Author
|
Fixed the port-zero allowlist finding and restored the SDK Session-egress integration fixture in |
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.
What changed
R_SESSION_EGRESS_ALLOWED_ORIGINS, a bounded JSON list of canonical exact HTTPS origins for Iron-backed Session egress. Empty or unset configuration denies all destinations.rses_substitute remains bound to one grant and one origin even when a workload uses several allowed origins.Why this change was made
Owner approval already constrained each substitute to one exact origin, but deployments had no independent list of destinations permitted to use Iron credential substitution. This adds that operator ceiling without widening one credential across several sites or turning Session egress into sandbox-wide network policy.
Impact
Only requests that present an Iron Session-egress substitute are affected. The separate HTTP integration broker and unrelated outbound requests are unchanged. Tightening the list immediately denies existing substitutes at the next authorization boundary; newly disallowed grants receive no new substitute.
Validation
@roomote/apiSession-egress test: 56 passed against the real test database, including empty-list denial, withheld issuance, two exact origins with distinct substitutes, non-default port binding, and live policy tightening without credential release.@roomote/envtest: 90 passed, including canonical default-port handling, explicit port-zero rejection, and rejection of unsafe or ambiguous list entries.@roomote/sdkSession-egress integration test: 14 passed against the real test database after configuring its synthetic origins explicitly.@roomote/compute-providersworker-env test: 24 passed.bash build.sh test: passed the actual pinned Iron pipeline under Go race detection using generated synthetic PKI/credentials and local TLS servers. The allowed fixture observes the substituted credential; the denied fixture fails if its upstream is contacted, and redirect destinations are stripped and not followed.bash build.sh vet,bash build.sh build, andbin/session-egress-gateway version: passed at pinned Iron commit2393dd175a8c419153fb49917fdeceb94cd9ed59.pnpm lint:fast,pnpm check-types:fast,pnpm knip, docs validation/link checking, Compose overlay test, and repository pre-push gates passed.The Iron fixture executes the real pinned gateway with a local authorization double; the API test executes the real authorization/database path separately. This does not claim a full Roomote-created Docker sandbox, cloud-provider, or live external-service run.
A full local
pnpm testrun advanced past the original SDK failure but reported one unrelated Brain count assertion from the newly advanceddevelopbase; that exact test passes when run alone.