Skip to content

Admit service certificates with separate sampler Session ownership - #16357

Merged
agentydragon merged 2 commits into
agentydragon:develfrom
agentydragon-agent:agent/service-svid-sampler
Nov 14, 2026
Merged

agentydragon merged 2 commits into
agentydragon:develfrom
agentydragon-agent:agent/service-svid-sampler

Conversation

@agentydragon-agent

@agentydragon-agent agentydragon-agent commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Admit exactly configured service SVIDs on the sampler listener, alongside existing bearer accounts. Persist service-owned Sessions using the actual SPIFFE ID in a separate column; the authenticated service never becomes a ServiceAccount UID and cannot reopen an account-owned Session. The schema addition supports overlapping legacy writers.

Rebased PR head: 25619ca36759b7f2373fe0cb9a4a5155e06e3411. This PR targets devel because cross-fork native stacks are unsupported. It reuses #16333’s optional TLS listener, adding client trust before any manifest enables it.

Stage 3 only. This deliberately leaves out caller switches, production settings, ownership transfer, outbound History/LLM authentication changes and bearer/RBAC removal. In particular, stage 4 must explicitly handle existing account-owned Sessions rather than map a service to an account UID. The overview diagram records the optional service edge.

Validation: pre-commit and commit hooks passed. RPC and Session-store tests passed in ca8830c5, including exact service denial, mixed bearer rejection and separate ownership. Isolated bbr test passed for //agentplane/central_sampler/internal/rpc:unit_test, //agentplane/central_sampler/internal/sessionstore:sessionstore_test, //agentplane/central_sampler/internal/settings:settings_test, and //agentplane/central_sampler:settings (invocation). Deployment coverage is recorded below.

Rollback: before enabling service callers, revert this receiver commit; leave the additive migration applied. Existing account-owned Sessions remain readable by prior images. After service-owned Sessions exist, do not revert to an old binary without a reviewed ownership cutover; the migration down path refuses to orphan them. Check retained Sessions and continuation after rollout.

Deployment suite bbr test //agentplane/system_tests/suites/mcp:test_services passed (https://app.buildbuddy.io/invocation/b49f4760-c385-4be6-85b7-236af088de77).

Rollout gate: no new certificate-path or service-allowlist manifest setting until #16359 merges and the receiver images are pinned.

Inactive service defaults are omitted from rendered settings. bbr test //agentplane/central_sampler:settings //cluster/cdk8s:test_generate_manifests passed (https://app.buildbuddy.io/invocation/d2ddfa23-2fcc-4176-8a44-45ad959f6d3a).

Questions for Claude

Stage 4 needs an explicit ownership cutover for existing sampler Sessions; no implicit service→ServiceAccount UID mapping is introduced.

@github-actions

github-actions Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Visual review for 25619ca3

No visual artifacts were available from the Bazel CI run.

Open the CI run for the complete test results or to request a manual rerun.

@agentydragon-agent
agentydragon-agent force-pushed the agent/service-svid-sampler branch 2 times, most recently from 3a580a2 to 8c2b9e5 Compare November 14, 2026 07:00
@agentydragon
agentydragon enabled auto-merge (squash) November 14, 2026 07:06
auto-merge was automatically disabled November 14, 2026 07:27

Head branch was pushed to by a user without write access

@agentydragon-agent
agentydragon-agent force-pushed the agent/service-svid-sampler branch from 8c2b9e5 to d718c2c Compare November 14, 2026 07:27
@agentydragon-agent
agentydragon-agent force-pushed the agent/service-svid-sampler branch from d718c2c to 25619ca Compare November 14, 2026 07:50
@agentydragon
agentydragon merged commit aeb19da into agentydragon:devel Nov 14, 2026
10 checks passed
agentydragon pushed a commit that referenced this pull request Nov 14, 2026
…16358)

Add exact service SVID allowlists for LLM ModelConfig reads and Central
Sampler inference delegation. The sampler must supply a typed effective
Identity and Session envelope; live UID verification and the Identity’s
egress grants remain authoritative. A service certificate carries
neither a synthetic account nor Pod proof, and failed certificate
verification cannot select a bearer fallback.

Rebased PR head: `958c9417080866e425fa72e8195c479f0f4f28c3`. This PR
targets devel because cross-fork native stacks are unsupported.

Stage 3 only. Deliberately excludes production settings, the sampler’s
`auth.mode: agentplane_ingress` caller switch, other caller TLS changes,
and TokenReview/RBAC removal. Those wait for receiver image pins.
Staging’s existing bearer mode continues during this stage. The overview
includes optional service edges.

Validation: pre-commit and commit hooks passed. Isolated `bbr test
//agentplane/llm_ingress:ingress_test //agentplane/llm_ingress:settings`
passed (real TLS peer/delegation tests, exact caller denial, effective
Identity/Session, stale UID and bearer ambiguity). Deployment suite
coverage is recorded below.

Rollback: revert before enabling service callers; after caller
migration, first restore compatible caller images/settings. Existing
bearer/workload admission remains available at this stage. Check
ModelConfig discovery and ordinary inference after rollout.

Isolated `bbr test //agentplane/llm_ingress:ingress_test
//agentplane/llm_ingress:settings` passed
(https://app.buildbuddy.io/invocation/ff86e46a-7863-4843-a78a-19815e3c2aa1).
Deployment suite `bbr test
//agentplane/system_tests/suites/mcp:test_services` passed
(https://app.buildbuddy.io/invocation/16dc4905-93cc-4c45-bc49-9fb33e486584).

Rollout gate: no new certificate-path or service-allowlist manifest
setting until #16359 merges and the receiver images are pinned.

Inactive service defaults are omitted from rendered settings. `bbr test
//agentplane/llm_ingress:settings
//cluster/cdk8s:test_generate_manifests` passed
(https://app.buildbuddy.io/invocation/19584d67-2eb9-41cc-9e33-fbfdb3960e32).

## Questions for Claude

Before stage 4, verify staging central Sessions retain execution
Identity name and UID required by typed LLM delegation. No fallback to
bearer is permitted if that proof is absent.

Rebased after #16354 and #16357 merged; the only conflict was in
`system_overview.md`. Both merged diagrams and the LLM authentication
edge are preserved. Scoped pre-commit and `git diff --check` passed;
receiver code is unchanged by this rebase.

---------

Co-authored-by: agentydragon-agent <260791330+agentydragon-agent@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants