AI Agent Identity
AI agents, service accounts, MCP clients, and CI/CD runners are non-human identities (NHIs). They often carry long-lived credentials without continuous re-validation. Control Core verifies NHI context on every request at the Bouncer and surfaces discovered workloads in Observe → Agent Access Controls (/observe/nhi).
Control Core is not an identity directory. Enrollment, credential rotation, and lifecycle stay with your IAM, SPIRE, or NHI management platform. Any system can push portable attributes through the generic PIP API; Rego controls decide allow, deny, and mask.
Agent Access Controls UI (~5 min)
- Open the Control Plane and navigate to Observe → Agent Access Controls (
/observe/nhi). - Review the Discovery Inbox for first-seen NHIs (
observedstatus). - Profile each identity: set identity type, declared scopes, and privilege score.
- Mark identities profiled or governed when ready to enforce controls.
- Enable NHI control templates under Controls → Templates → AI Security.
| Status | Meaning |
|---|---|
| observed | First seen in Bouncer traffic — appears in Discovery Inbox |
| profiled | Operator classified the identity; attributes stored in PIP |
| governed | Access control bound; Rego templates enforce on every request |
Troubleshooting: If the inbox stays empty, confirm traffic flows through a registered Bouncer and that
NHI_AUTO_DISCOVERYis not set tofalse. Check Bouncer logs for NHI resolution events. Full reference: /troubleshooting.
Identity signals Rego reads
| Signal | Source | Control use |
|---|---|---|
input.subject.nhi.id | SPIFFE ID (XFCC), JWT sub / client_id / azp, or x-cc-agent-id | Portable subject key |
input.subject.nhi.source | Trust tier: spiffe | jwt | header | Weight enforcement by trust |
input.subject.nhi.identity_type_hint | Derived from resolution path | Classify workload class |
data.pip.nhi_attributes[subject_key] | NHI registry + POST /v1/pip/subject-attributes | Privilege score, scopes, status |
SPIFFE / SPIRE workload identity (~10 min)
For cryptographic workload identity, deploy SPIRE alongside the Bouncer. Short-lived X.509 SVIDs rotate automatically; The Bouncer reads certificates via SDS.
- Enable SPIRE in your Helm overlay (
global.spire.enabled: true) or Compose profile. - Confirm the Bouncer presents a SPIFFE ID in outbound mTLS and forwards XFCC to the policy engine input.
- Author controls that require
input.subject.nhi.source == "spiffe"for high-privilege agent paths.
See Cryptographic workload identity and SPIRE / SPIFFE for install and attestation details.
Troubleshooting: If
controlcore.spiffe_idis missing from audit or trace attributes, verify the SPIRE Agent socket is mounted and the Bouncer registered with SPIRE. Logs may showMTLS_AGENT_UNAVAILABLE. See mTLS enforcement.
Sync attributes from your IAM / NHI directory
Any vendor can push portable attributes without a Control Core SDK:
curl -sS -X POST "$CONTROL_PLANE/v1/pip/subject-attributes" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"subject_key": "spiffe://example.internal/ns/prod/sa/billing-agent",
"attributes": [
{"name": "privilege_score", "value": 3},
{"name": "identity_type", "value": "orchestrator_agent"},
{"name": "declared_scopes", "value": ["read:invoices", "tools/read"]}
]
}'
Verification
After profiling an NHI and enabling a template:
- Send agent traffic through the protecting Bouncer.
- Confirm the identity appears as governed in
/observe/nhi. - Review audit events for allow/deny decisions referencing the NHI subject key.
Next steps
- Continuous NHI verification — full lifecycle and Rego examples
- Agent framework connectors — Agentforce, Foundry, LangChain via one Bouncer
- AI Gateway — route and guard agent egress traffic
- Workload identity (SPIFFE/SPIRE) — deployment runbook