This document defines the security posture of agent-control-plane as an embedded governance layer.
- App boundary (outside control plane): caller authentication and authorization.
- Control plane boundary (inside app runtime): policy/risk/approval/budget/kill-switch decisions.
- Execution boundary: side-effecting tools/services called only after governance decisions.
- Session state and lifecycle transitions.
- Approval tickets and scope constraints.
- Budget counters and thresholds.
- Event log integrity and replayability.
- Agent identity attribution in decisions/events.
- Unknown or unregistered operation/tool invocation
- Control: fail-closed mapping (
ActionName.UNKNOWN,UnknownAppEventPolicy.RAISE), policy denial path.
- Budget abuse/runaway execution
- Control: pre-check + atomic budget increment and budget-deny handling.
- Unauthorized high-risk action
- Control: policy tiering + approval gate for manual review.
- Runaway or compromised runtime
- Control: scoped kill switch (
session,agent,system,budgetsemantics).
- Lost auditability during failures
- Control: state-bearing events fail closed; non-state-bearing telemetry may buffer.
- Authenticate every caller at the app edge (OIDC/JWT/service credentials).
- Authorize every action before constructing control-plane proposals.
- Propagate principal identity to
agent_idand correlation metadata. - Prefer explicit deny/fail-closed defaults for unknown events/tools.
Token budget enforcement and model access policy introduce additional trust considerations:
- Identity spoofing for budget bypass
- Control:
IdentityContext(user/org/team) must be populated from authenticated principal at the app boundary, never from untrusted client input. Budget configs match on identity fields — a spoofeduser_idcould consume another user's budget or bypass restrictions.
- Budget config tampering
- Control:
TokenBudgetConfigcreation should be restricted to admin/operator roles. Budget configs are persisted viaAsyncTokenBudgetRepository— protect write paths with authorization checks at the host boundary.
- Model access policy bypass
- Control:
ModelGovernor.check_access()is a sync pre-routing check. Host apps must invoke it before routing; the control plane does not auto-enforce it. Skipping the check bypasses model tier restrictions.
- Cost attribution integrity
- Control:
TokenUsage.estimated_cost_usdis caller-provided. Host apps should compute cost from authoritative LLM billing data, not from client-reported values. Inaccurate cost reporting undermines budget enforcement.
- Cross-identity budget leakage
- Control: identity matching uses subset semantics (an org-level config matches any user in that org). Ensure budget configs are scoped appropriately — an overly broad config (e.g., only
org_idset) applies to all users in that org.
- Identity provider management (OIDC provider, key rotation, SSO lifecycle).
- Network perimeter controls, secret management platforms, endpoint protection.
- Hosted control-plane operations.