microsoft / microsoft/agent-governance-toolkit

[Feature]: Re-integrate Cedarling through the ACS v5 policy extension point

Open
#3,791 1 comment 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement triage
Dominant language
Python
Stars
6.3k
Forks
1.1k
Avg merge
5d 11h
Merged PRs (30d)
142

Description

Package

agentmesh-integrations

Problem Statement

Cedarling was removed in #3451 during the v4-to-v5 policy language switch. The old CedarlingBackend implemented the v4 ExternalPolicyBackend contract and imported agent_os.policies.BackendDecision; both are gone in v5, so the adapter had nothing left to plug into. It was not dropped on technical merit. ACS v5 added a custom policy extension point, agent_control_specification.PolicyDispatcher, but nothing uses it for Cedarling yet. The bundled Cedar dispatcher only handles permit/forbid, so signed policy stores, JWT/token-based principal resolution (multi-issuer, tokens passed per request), Cedar schema validation, and existing Cedarling policy stores deployed outside AGT have no path back.

How does this feature impact your work and what are you trying to achieve?

Agents that authorize against signed, multi-issuer Cedarling policy stores used cedarling-agentmesh before #3451. The v5 upgrade removed it, and the bundled dispatcher does not do token resolution or signed-store verification, so those policies cannot run in AGT today. The v5 PolicyDispatcher hook lets Cedarling run through the native runtime without patching AGT core.

Timeline

No response

Proposed Solution

• Add an opt-in package integrations/cedarling-acs/ with a CedarlingPolicyDispatcher implementing the v5 PolicyDispatcher protocol (evaluate(invocation) -> Mapping).
• Pass it as policy_dispatcher= to NativeRuntimeClient.from_path / from_url / from_manifest_chain; None keeps the bundled Cedar dispatcher, ours replaces it. No core change.
• Wrap cedarling-python in-process (HTTP mode stays removed) as an optional extra agt-integrations[cedarling] with a guarded import.
• Map the ACS invocation (principal, action, resource, context, tokens) to a Cedarling AuthorizeRequest; reuse the old adapter's _tool_to_cedar_action (snake_case to CamelCase Action) and per-request tokens shape.
• Map allow to a Cedarling permit; map deny to a forbid and to any error, missing cedarling-python, or malformed invocation (fail closed); an escalate the resolver refuses becomes a deny, same as the old adapter.
• Do not log JWTs. Keep Cedarling's signature/issuer checks and signed-store verification intact.

Alternatives Considered

No response

Priority

Nice to have

Contribution
  • I would be willing to submit a PR for this feature

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the v5 PolicyDispatcher protocol and the NativeRuntimeClient.from_path, from_url, and from_manifest_chain entry points. Use integrations/cedarling-acs/ and the old adapter's _tool_to_cedar_action as the stated integration boundaries. Done means an optional guarded cedarling-python dispatcher maps invocations correctly, preserves token and signed-store checks, and fails closed without logging JWTs.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
authorization, security
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.