Context
mcp-kubernetes PR #498 introduces the pure-projector M2M design (impersonateUser + impersonateGroups). As the config surface has grown across muster, mcp-oauth, and mcp-kubernetes, the three-way auth flow setup has become hard to discover and document coherently.
Problem
Operators configuring the full M2M or OBO flow need to wire:
- muster — trusted issuer entry:
issuer, jwksURL, allowedClaims, allowedActors (OBO) or impersonateUser / impersonateGroups (M2M)
- mcp-oauth — ActorDelegationPolicy, GrantedSubject, audience enforcement
- mcp-kubernetes —
ImpersonateUser, ImpersonateGroups, routing vs gate semantics
The relationship between these three layers is not obvious. Specifically:
- Why
AllowedClaims.sub (routing glob) exists alongside ImpersonateUser (exact gate) on the same entry
- When to use M2M vs OBO vs SSO passthrough
- What the cluster RBAC prerequisites are (prompt 04 in the M2M plan binds the group)
Proposed improvements
Related
- mcp-kubernetes#498 (M2M projector, this branch)
- mcp-oauth (ActorDelegationPolicy, GrantedSubject)
Context
mcp-kubernetes PR #498 introduces the pure-projector M2M design (
impersonateUser+impersonateGroups). As the config surface has grown across muster, mcp-oauth, and mcp-kubernetes, the three-way auth flow setup has become hard to discover and document coherently.Problem
Operators configuring the full M2M or OBO flow need to wire:
issuer,jwksURL,allowedClaims,allowedActors(OBO) orimpersonateUser/impersonateGroups(M2M)ImpersonateUser,ImpersonateGroups, routing vs gate semanticsThe relationship between these three layers is not obvious. Specifically:
AllowedClaims.sub(routing glob) exists alongsideImpersonateUser(exact gate) on the same entryProposed improvements
AllowedClaims.subcan be derived fromImpersonateUserfor M2M entries, eliminating the redundant field (see mcp-kubernetes#498 discussion)AllowedClaims.subandImpersonateUserto different valuesRelated