Why Most AI Agents Still Have No Identity: Building Formal Access Control and Audit Trails for Autonomous Systems

Learn how to give AI agents cryptographic identities, enforce ABAC access policies, and build tamper-evident audit trails that satisfy SOC 2 and ISO 27001.

Over 40% of large enterprises now run autonomous AI agents in production. Those agents reach into CRM systems, cloud storage, financial platforms, and communication tools, executing multi-step decisions without a human in the loop. According to a 2026 Cloud Security Alliance whitepaper, 97% of organizations lack formal access controls for any of it.

That gap is not a configuration oversight. It is a structural failure. The identity and access management (IAM) infrastructure that governs every human employee simply does not fit autonomous software workloads. Agents do not log in. They do not clock out. They accumulate permissions over time, act on behalf of users they cannot cryptographically prove they represent, and leave behind event logs that a sufficiently motivated attacker can quietly edit. In 2026, this is one of the sharpest unsolved problems in enterprise security.

This article explains why the problem exists, what a proper technical solution looks like, and which compliance frameworks are now demanding you build one.


The Fundamental Mismatch: Human Identity vs. Agent Identity

Traditional IAM assumes a human is on one end of every session. A person authenticates, receives a session token, and the token expires when the session ends. The system maps actions to a person. Auditors can read the log and assign accountability to a named employee.

AI agents break every assumption in that model.

An agent operates as a persistent, asynchronous workload. It does not authenticate once and wait; it may spin up dozens of parallel sub-tasks, call external APIs across multiple cloud providers, and finish hours after any human last touched the workflow. It may act on behalf of a user without that user being aware of every individual action. And it accumulates permissions not through deliberate access requests but through organic workflow expansion: it needs read access today, write access next week, admin access next month, and no one has triggered a formal approval for any of it.

The Cloud Security Alliance describes this condition as a "non-human identity governance vacuum." The industry has no standardized way to bind agent actions to verifiable digital identities. That means you cannot reliably answer the three questions any security audit demands: Who initiated this action? Did this agent have permission? Can you prove it?

Static API keys and bearer tokens do not help here. They authenticate a credential, not an identity. They cannot express who delegated authority to the agent, what scope the delegation covers, or when the delegation expires. A stolen API key is indistinguishable from a legitimate one. That is not workload identity; it is a shared secret with no chain of custody.


Privilege Drift: The Slow Accumulation of Unauthorized Access

Even when teams start with the right intentions, agents tend to outgrow their initial permissions without anyone noticing. Production deployments in 2026 consistently exhibit a pattern practitioners call privilege drift: an agent provisioned with narrowly scoped read-only access to customer records quietly acquires write permissions for operational efficiency, then admin access to handle an incident, then access to a second data store that shares an authentication boundary with the first.

None of these individual decisions are malicious. Each one is a reasonable response to an immediate problem. Collectively, they produce an agent with far more access than anyone intended to grant, and the authorization model is never re-evaluated after the initial deployment.

IBM's 2025 Cost of a Data Breach Report found that 13% of organizations suffered breaches involving AI models or applications. The consistent thread was undetected scope creep: agents that held access they were never formally authorized to use.

The solution is continuous re-attestation. Agent roles must be reviewed not once at deployment but on a schedule, and ideally in response to detected permission changes. Audit trails that do not track permission evolution will miss months of unauthorized access even when they faithfully log every individual action.


Cryptographic Workload Identity: Moving Beyond Shared Secrets

The technical foundation for solving agent identity is cryptographic workload attestation. Rather than giving an agent a static secret it presents to prove who it is, the runtime environment attests to what the agent is: the code it runs, the environment it runs in, and the organizational policy that governs it. That attestation produces a short-lived cryptographic certificate the agent presents at every API boundary.

The industry standard for this is SPIFFE (Secure Production Identity Framework For Everyone), implemented via SPIRE. A SPIRE server issues SPIFFE Verifiable Identity Documents (SVIDs) to workloads after verifying their execution environment. SVIDs are X.509 certificates with short lifetimes, so a compromised credential becomes useless quickly, and the issuing authority can revoke them independently of any secret rotation.

Here is a minimal example of an agent retrieving its SPIFFE identity and presenting it at an API boundary:

import requests
from spiffe import WorkloadApiClient

def get_agent_credentials():
    """Retrieve a short-lived SVID from the local SPIRE agent socket."""
    with WorkloadApiClient() as client:
        svid = client.fetch_x509_svid()
        # spiffe_id is e.g. spiffe://org.example/agent/customer-workflow/prod
        return svid, svid.spiffe_id

def call_protected_api(endpoint: str, payload: dict):
    svid, spiffe_id = get_agent_credentials()
    # Present the SVID as the mTLS client certificate.
    # The server verifies the SPIFFE ID, not a static API key.
    response = requests.post(
        endpoint,
        json=payload,
        cert=(svid.cert_chain_pem, svid.private_key_pem),
        verify=svid.trust_bundle_pem,
    )
    return response

The key difference from API key authentication: the server cryptographically verifies that the caller is a workload with a specific SPIFFE ID, issued by a trusted SPIRE authority, running in an attested environment. No static secret is transmitted. No long-lived credential can be exfiltrated and reused elsewhere.


Delegation Chains: Proving Who an Agent Acts For

Workload identity solves the "who is this agent" problem. Delegation solves the "who authorized this agent to act on whose behalf" problem, which matters enormously for compliance.

When an agent takes an action on behalf of a user, the audit trail needs to reflect the full chain: the original user, the system that delegated authority to the agent, and the specific scope of that delegation. OAuth 2.0 Token Exchange (RFC 8693) was designed for exactly this. It defines an act claim that preserves the delegation chain across hops.

import requests

def exchange_token_for_agent_delegation(
    user_token: str, agent_jwt: str, scope: str
) -> str:
    """
    Exchange a user's access token for a delegated agent token.
    The resulting token carries an `act` claim identifying the agent.
    agent_jwt must be a signed JWT representing the agent's identity
    (not a bare ID string), as required by RFC 8693.
    """
    response = requests.post(
        "https://auth.example.com/oauth/token",
        data={
            "grant_type": "urn:ietf:params:oauth:grant-type:token-exchange",
            "subject_token": user_token,
            "subject_token_type": "urn:ietf:params:oauth:token-type:access_token",
            "actor_token": agent_jwt,
            "actor_token_type": "urn:ietf:params:oauth:token-type:jwt",
            "scope": scope,
            # The resulting token will contain:
            # { "sub": "user@example.com", "act": { "sub": "agent:customer-workflow" } }
        },
    )
    return response.json()["access_token"]

Any downstream service receiving this token can read the act claim and know both who the original user is and which agent is acting on their behalf. If something goes wrong, the audit trail traces back through the entire chain without relying on the agent's own claims about itself.


Attribute-Based Access Control: Authorization That Fits Dynamic Workflows

Role-based access control (RBAC) assigns permissions to roles and assigns roles to identities. It is simple and auditable, but it fails for agents because agent workflows are highly contextual. An agent should be allowed to read a customer record when it is processing a support ticket for that customer, not when it is running an unrelated billing workflow. RBAC cannot express that distinction. It can only say "this agent has the customer-data-reader role" and grant access in all contexts equally.

Attribute-Based Access Control (ABAC) evaluates access decisions based on a policy that considers four dimensions simultaneously: attributes of the subject (the agent's verified identity), the resource (which dataset or API endpoint), the action being attempted (read vs. write vs. delete), and the environment (time of day, active workflow, user context). The policy engine evaluates all four at the moment of every request.

A policy expressed in a representative ABAC policy language might look like this:

policy "agent-customer-record-access" {
  effect = "allow"

  condition {
    subject.spiffe_id matches "spiffe://example.org/agent/support/*"
    action.type       == "read"
    resource.type     == "customer_record"
    environment.active_workflow.type      == "support_ticket"
    environment.active_workflow.customer_id == resource.customer_id
    environment.timestamp within subject.delegation.valid_window
  }
}

This policy grants access only when all six conditions hold simultaneously. The agent must be a support workflow agent, performing a read, inside an active support ticket workflow, accessing the record for the specific customer that ticket belongs to, and within its delegated time window. Achieving equivalent specificity with RBAC would require dozens of narrowly scoped roles that become unmanageable in practice.


Audit Trails as Cryptographic Proof, Not Event Logs

Most organizations log agent actions. Very few can prove those logs have not been tampered with.

A standard event log records what happened, but it provides no cryptographic guarantee about when the record was written, whether it has been altered since, or whether the authorization that governed the action was actually applied. For regulatory compliance under frameworks like SOC 2 Type II, ISO/IEC 27001:2022, and NIST's emerging AI agent guidance, "we have logs" is no longer sufficient. Auditors want tamper-evident evidence that controls were applied correctly.

The 2026 AgentBound research paper formalizes this concept as governance receipts. Every agent action generates a signed receipt that binds together the action itself, the governing policy evaluated, the authorization artifact that permitted it, and the outcome. Critically, the receipt is signed with a key controlled by the issuing authority rather than the agent, so the agent cannot forge a receipt for an action that was never authorized.

A skeleton implementation demonstrates the structure:

import hashlib
import json
import time
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding

def generate_governance_receipt(
    action: dict,
    policy_evaluated: dict,
    authorization_token: str,
    outcome: str,
    signing_key,
) -> dict:
    """
    Generate a tamper-evident receipt for one agent action.
    signing_key should be an RSA private key held by the issuing authority,
    not by the agent itself.
    """
    receipt_body = {
        "action": action,
        "policy_evaluated": policy_evaluated,
        "authorization_token_hash": hashlib.sha256(
            authorization_token.encode()
        ).hexdigest(),
        "outcome": outcome,
        "issued_at": int(time.time()),
    }

    canonical = json.dumps(receipt_body, sort_keys=True).encode()
    signature = signing_key.sign(canonical, padding.PKCS1v15(), hashes.SHA256())

    return {
        "receipt": receipt_body,
        "signature": signature.hex(),
    }

An auditor can later replay this receipt: re-evaluate the recorded policy against the recorded action, verify the signature against the authority's public key, and confirm independently that the agent's action was authorized at the time. This is non-repudiation. It is proof, not testimony.


Observability Is the Prerequisite

None of the above mechanisms provide value if no one is watching. Shadow AI (deploying agents outside of central monitoring) is the baseline condition for most organizations today. Enterprise AI surveys in 2026 consistently rank observability among the top priorities for IT leaders, yet agents continue to be deployed without appearing in asset inventories or security dashboards.

Comprehensive agent observability means instrumenting the entire lifecycle: initialization (what identity was issued, which policies were loaded), execution (every tool call, API request, and data access), outcome (what was produced, what was modified), and termination (what permissions are released). Platforms like AgentOps capture this telemetry and expose it for real-time anomaly detection. An agent that starts accessing data outside its normal workflow pattern triggers an alert before it becomes a breach.

This is the operational foundation. Cryptographic identity and ABAC policies are only as effective as the observability layer that confirms they are being applied.


Compliance Frameworks Are Now Requiring This

Until recently, AI agent governance was advisory at best. That changed in 2026.

Singapore's Model AI Governance Framework for Agentic AI (January 2026) and NIST's AI Agent Standards Initiative (February 2026) are among the first formal regulatory efforts to close the governance gap. Both frameworks explicitly require formal delegation chains, human oversight mechanisms, continuous monitoring, and retained audit trails. Compliance standards that now apply to production agent deployments include SOC 2 Type II (CC6 controls), ISO/IEC 27001:2022 Annex A, ISO/IEC 42001:2023, NIST SP 800-207 (Zero Trust Architecture), and the OWASP Top 10 for Agentic Applications.

Organizations that pass a SOC 2 audit in late 2026 will need to demonstrate that their agents have verifiable identities, that access is governed by formally evaluated policies, and that actions are recorded in tamper-evident logs. Asserting "our agents are well-behaved" is not an answer. Producing a cryptographic governance receipt that an independent auditor can verify is.


A Practical Implementation Sequence

For teams moving from no controls to defensible governance, the order of operations matters.

Start with observability. You cannot govern what you cannot see. Deploy agent telemetry before investing in identity infrastructure, so you know what agents actually do and what permissions they actually use. This also reveals existing privilege drift before it becomes a breach.

Then replace static secrets with cryptographic workload identity. Adopt SPIFFE/SPIRE for any agent workload that calls internal APIs, and implement OAuth 2.0 Token Exchange for any agent that acts on behalf of a user. This eliminates shared secrets and establishes the identity foundation on which everything else depends.

Then replace RBAC with ABAC for agent authorization. Map the contextual conditions your workflows actually require, express them as policies, and evaluate them at every access decision. This is the step where privilege drift becomes structurally impossible rather than merely discouraged.

Finally, implement governance receipts for any action with compliance or audit significance. Start with the highest-risk categories: data writes, financial transactions, external communications. Expand coverage from there.

This is not a six-month project requiring a large team. Scoped carefully, the first two steps can be completed in weeks and provide immediate, measurable risk reduction.


Conclusion

The agent deployment wave is not slowing down. Governance infrastructure must catch up, and the technical tools to do so exist today. SPIFFE provides cryptographic workload identity. OAuth 2.0 Token Exchange preserves delegation chains across multi-hop workflows. ABAC policies express the contextual access constraints that static roles cannot. Cryptographic governance receipts produce tamper-evident proof that controls were applied.

Together, these components transform AI agents from ungoverned black boxes into managed, auditable assets.

The organizations that build governance infrastructure now will pass their audits and contain their blast radius when something inevitably goes wrong. The ones that wait will be explaining the breach instead.

Subscribe to Marvin G6 | Engineering, AI & Automation

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe