docs: EP-1270 Authorization (access control) design proposal#2075
Open
davidkarlsen wants to merge 2 commits into
Open
docs: EP-1270 Authorization (access control) design proposal#2075davidkarlsen wants to merge 2 commits into
davidkarlsen wants to merge 2 commits into
Conversation
Contributor
Author
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a new Enhancement Proposal (EP-1270) documenting a design for introducing fine-grained authorization (access control) in KAgent, centered on CEL-based policy evaluation while preserving the existing auth.Authorizer seam for pluggable implementations.
Changes:
- Introduces EP-1270 documenting current authorization gaps and the proposed CEL-based default authorizer.
- Specifies a policy model, decision context, and rollout strategy (opt-in, fail-closed, cached compilation).
- Outlines operational considerations (list filtering, A2A gating) and an initial test plan.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
430afb4 to
c86e289
Compare
Proposes a real Authorizer to replace the open-by-default NoopAuthorizer: CEL-based, in-process, behind the existing auth.Authorizer interface, with per-resource policy on the Agent CR compiled via reconciliation and a default-deny model. Builds on the stalled prototypes in kagent-dev#1766 and kagent-dev#1370. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: David J. M. Karlsen <david@davidkarlsen.com>
Address PR review: ProxyAuthenticator only populates Principal.Claims for direct user calls; the agent-call path (X-Agent-Name) sets User/Agent but not Claims. Qualify the Background statement and strengthen Open Question kagent-dev#5 — a claims-only fail-closed policy would deny internal agent/M2M traffic, so the model needs an agent-identity match or a separate M2M lane. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: David J. M. Karlsen <david@davidkarlsen.com>
c86e289 to
a5366a4
Compare
Contributor
Author
|
@dimetron PTAL? |
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.
Summary
Adds an Enhancement Proposal for authorization (access control) in KAgent — issue #1270.
Today the controller ships with
NoopAuthorizer, so once a user is authenticated they can list, invoke, edit and delete every Agent, ModelConfig and ToolServer across every namespace. Enabling OIDC (#1293) gives authentication but no access control. This EP proposes the fine-grained authorization that EP-476 explicitly deferred.Approach
The earlier #1270 discussion stalled on a design tension: an opinionated in-process RBAC engine vs. a pluggable extension point. The EP proposes CEL as the resolution — it's both:
cel-gois already in our module graph), andclaims/verb/resource, so groups are one option among many and the project isn't married to one engine.The
auth.Authorizerinterface stays the seam, so an external/OPA authorizer (#1370) remains pluggable. Per-resource policy lives on the Agent CR, compiled via reconciliation (cached, validated ontostatus.conditions), enforced centrally. Builds on the stalled prototypes in #1766 (per-agent annotation + list filtering + A2A gating) and #1370 (external authorizer interface) rather than starting over.Design comment that led here: #1270 (comment)
Status
provisional— following the "merge early and iterate" guidance in the EP template. High-level direction is the goal; details (per-resource carrier, policy-combining semantics, default-deny behavior) are flagged as Open Questions /UNRESOLVEDfor discussion.Looking for a maintainer sponsor and a directional 👍 on "CEL as the default, behind the existing interface."
/cc @EItanya @peterj
🤖 Generated with Claude Code