Skip to content

Design an external authorization decision provider seam (bring your IAM/policy) #279

Description

@dgenio

Goal

Make Weaver Kernel usable as an execution-enforcement point without requiring teams to replace the identity / authorization system they already trust.

Target relationship:

authenticated principal / workload
        ↓
external or native policy decision
        ↓
Weaver Kernel
(bind authority → verify → execute → bounded result → ActionTrace)

The built-in policy engine remains first-class and dependency-free. This issue defines a narrow provider seam; it does not add hard dependencies on Cedar, OpenFGA, Auth0, OAP or any other vendor/project.

Why

Trying to win organization-wide policy authoring is strategically unnecessary. Mature IAM/policy systems already own principal/resource/action/context semantics for many adopters. Kernel's differentiated job should be enforcement at the mediated agent-action boundary plus scoped authority and evidence.

The architecture should therefore be able to accept a decision produced elsewhere while preserving Kernel's invariants.

Design requirements

Define a small protocol conceptually equivalent to:

class AuthorizationDecisionProvider(Protocol):
    def evaluate(
        self,
        *,
        principal: Principal,
        capability: Capability,
        request: CapabilityRequest,
        context: Mapping[str, Any],
    ) -> PolicyDecision: ...

The final API need not use this exact signature.

The seam must preserve:

  • stable allow / deny / ask semantics where supported;
  • reason codes / explanation mapping;
  • constraints that are subsequently signed into the Kernel grant;
  • policy/decision identity or digest for ActionTrace evidence;
  • deterministic fail-closed behavior on provider errors / malformed decisions;
  • no external system receiving raw tool results merely to make a pre-action decision;
  • native DefaultPolicyEngine behavior unchanged for standalone users.

Interoperability spike

Before making the provider API stable, implement two tiny adapters/examples with different policy models, selected to test the abstraction rather than endorse vendors. For example:

  • one principal/action/resource/context policy engine (Cedar/OpenFGA-style); and
  • one agent-specific signed decision/artifact system (OAP-style), if its contract is stable enough.

Adapters can live under examples/experimental code initially.

The goal is to learn whether one neutral decision shape can faithfully carry what Kernel needs.

Security questions

The design note must answer:

Non-goals

Acceptance criteria

Sequencing

Medium priority until Gate 0 (#278) provides external evidence. This is the strategic hedge against betting Kernel adoption on any single policy ecosystem.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions