Governance in practice · Part 3

Forrester's six AEGIS domains, and what closes each

Forrester's AEGIS names six domains of guardrail for agentic AI. Which of them close while one process holds the connection, and what closes the rest of each.

11 min read

governance platformoff the path: before the call and after it
response cachea hit never reaches the provider
clientkey · model · body · tool call
one pass, while the connection is openidentity, body, tool, verdict, recorddecideredactmeterrecord
a model or a tool serverwhatever the agent reached for
recordthe decision, signed; never the prompt
detectorcalled out to with a string
A framework names six domains. One request crosses most of them in a single pass, because that is the only moment identity, content and action are all still decidable.

AEGIS is Forrester’s framework for securing agentic AI: Agentic AI Enterprise Guardrails for Information Security, written for the CISO who has just been handed responsibility for agent traffic. It names six domains of control, from governance and identity through to zero trust, and says what has to be true in each. It names no component and no vendor.

That silence is the framework working. Where a control becomes true is an architecture question, and it has a different answer per architecture.

Our answer is that most of what AEGIS asks for can only be enforced by a process holding the connection at the moment the request is made. A control upstream of that moment constrains what the code was likely to do. A control downstream of it describes what already happened. For the traffic that existed before agents the six domains had six owners and six budgets, and for a prompt and a tool call they collapse onto one moment.

What AEGIS changes

The framework’s move is to say that the object of security is now intent.

Infrastructure is something drawn in advance. A vendor was assessed, an integration was scoped, an agreement named the data categories. Intent is typed fresh, by anyone, thousands of times a day, and an agent acting on it reaches a tool nobody put in the diagram. The other two ideas follow. Least agency says an agent should hold the smallest reach that lets it finish. Continuous assurance says the check runs while the work runs.

Both are statements about a moment. Neither is discharged by a document, and neither is discharged by a component reading a copy of the traffic afterwards.

One request, and the domains it crosses

An agent has decided to issue a refund, and the call is on its way to a tool server.

The credential arrives first. A token from your identity provider is verified against an audience that names the gateway, and two principals come out of it: the agent, which is the workload or the client the token was issued to, and the person it is acting for. They stay separate for the rest of the request. Identity is settled before any content has been read.

The body is read next. The arguments of the tool call are scanned the way a prompt is scanned, because personal data travels in tool arguments more often than anywhere else, and a span that matches is rewritten in the pass that found it. 83 identifier types, 51 of them checksum-validated, 19 kinds of credential. The rewriting is the part that makes it a control.

Then the call itself. One rule reads the server, the method, the tool by name, its arguments and both principals in a single condition. A refund above five hundred with no person behind the agent is refused before the server hears about it. When the tool call is the attack surface, the argument is the payload, and this is where application security for an agent actually happens.

The injection check that read the body ran on a model loaded into the gateway’s own process, so the verdict cost a function call and no round trip. That is the runtime, and the detection content in it is somebody else’s. The decision it produced goes to your collector, which is threat management up to the point where a person has to read it.

Nothing in any of that inherited a permission from the request before it. Identity was presented, the rule was evaluated for this request, and a refusal stopped the call. Zero trust as behaviour.

What comes out is one signed record: the rule that decided, the spans a redaction rewrote, the control identifiers the rule named, chained to the record before it and signed by the node that made it. That record is what the governance programme reads.

The domains close together because this is the only moment identity, content and action are in the same place.

Three layers, and what each decides

A request meets three policies here, written in two languages, and they decide different things.

Access rules decide whether the call may be made at all. One CEL condition over one request at one hop, reading who is calling and what the call is: the model and the route at an LLM hop, the server, the method, the tool by name and its arguments at an MCP hop. Deployment-wide rules run first and a profile’s own rules run after them and can only narrow. A deny at the deployment level is final, and an allow there ends that list without skipping the profile’s, so a permissive profile is no way to opt out of an org-wide rule. A condition that cannot be evaluated refuses the request, because a deny rule that a large enough argument list could switch off is not a deny rule.

Guardrail rules decide what to do about what is in the content. The detectors annotate a request, and CEL over those annotations rewrites a span, refuses the call or lets it through.

The Cedar policy decides who may change either of those. It is the admin plane, it denies by default, and it never sees a request body. Roles come from a claim your identity provider sets, so a change to a rule is attributed to a person and lands in the same trail as the decisions that rule goes on to make. There is no shared admin secret to hold.

A Cedar policy cannot read a request. An access rule cannot authorize an API call. Each one stays small enough to be right.

The six AEGIS domains

Forrester’s own advice for assembling a stack is to start from the control gap, trace it to the technology categories that close it, and check what the tools you already run cover. The third column is written for that. It names what closes the rest of each domain, and in every row some of it is not us.

Under each domain name is how much of it is ours. Held is work done while one process holds the connection. Through is work done on something we do not own. Theirs is a domain that belongs to somebody else, where the most we do is feed it.

DomainWhile the connection is openWhat closes the rest
Governance, Risk and Compliancetheirs Nothing about the programme is decided here. Every record carries the control identifiers the rule named, and a change to a rule is recorded with the person who made it, so the decision and the rule behind it can both be found later. A governance platform: the register, the intake workflow, the model cards, the binder.
Identity and Access Managementthrough A token that names us in its audience is verified, and the agent and the person it acts for stay separate principals at every hop. An access rule decides on both, and a team's own profile can narrow that decision and never loosen it. Your identity provider. It issues and we mint nothing, so every decision reads what it vouched for.
Data Security and Privacyheld Detectors annotate the request and the response, and a guardrail rule decides what happens to what they found. The address that finds a span is the address that changes it. Data sitting in your stores. Finding it there is a data security posture tool's job.
Application Security and DevSecOpsheld An agent's tool calls are its attack surface, and an access rule reads the tool by name and its arguments out of the body before the call reaches the server. The rules are YAML in the same pipeline as the rest of your infrastructure, and a condition that cannot be evaluated refuses the request. The agent's own code and its dependencies, which is the application security you already run.
Threat Management and Security Operationsthrough Detection models run in our own process, and the decision lands in your collector as it is made. The detection content is somebody else's, and so is the team reading those decisions at three in the morning.
Zero Trust Architectureheld No call inherits a permission from the one before it. Identity is presented at the door, the rule is evaluated for that request, and a refusal stops the call. The admin plane that could change that rule denies by default. The network and the workload identity underneath. A gateway is one enforcement point in an estate that has others.

How an AEGIS domain reaches the record

A control identifier is an opaque string a rule carries and the gateway never reads. Put aegis:iam on a rule and every decision that rule makes carries it onto the record, exactly the way eu-ai-act:art-50 does. A decision made at half past two on a Tuesday can be found a year later by the control it served, which is what the governance domain’s row above is for.

There is no AEGIS mode, and the word appears nowhere in the code. Which domain a rule discharges is your security team’s reading, and whether it is discharged is your assessor’s finding. A vendor who tells you a framework is satisfied has handed you a reading you will inherit without being told when it goes wrong.

Where the boundary falls

Identity is the row to press on. The gateway is a resource server: it verifies a token that names it in the audience and it mints nothing. A product claiming both enforcement and identity is describing an identity provider.

Threat management is the same shape at the other end. What we own is the runtime and the decision, and most of the checkpoints loaded into it are other people’s. The people reading those decisions at three in the morning are yours.

If something else already holds the connection

An API gateway with an AI plugin, or another AI gateway, is in the same position on the path and can do much of this. The question worth putting to any of them, and to us, is what comes out the other side.

A log is a record a system keeps about itself, in a store that system controls. Ours is chained to the record before it on that node and signed with that node’s key, and kirto-gate audit verify reads a trail and reports every record that was altered, removed from the middle, moved or forged, by sequence number. That is a check somebody who trusts neither the gateway nor the store can run.

The second difference is how narrow a refusal can be. One rule reads the tool by name, its arguments, the agent and the person behind it in a single condition, so a call is refused on what it would do and on who is behind it at once.

What least agency costs to claim

Least agency is the sentence worth pressing on, so here is where ours stops.

An agent and the person behind it are separate principals in every rule at every hop, and a rule can narrow on either. A chain is not represented. One agent and one person per request, so a call that went agent to sub-agent to tool names the caller and not the delegation that produced it. Scopes are requested per configured credential, so an agent can be given less reach at a tool server and cannot be given less reach at the third step of a chain than at the first.

And no rule can require that the outbound credential was exchanged at the upstream’s issuer. That exchange is configuration, and no variable in the policy vocabulary names it, so it is a deployment property and not a decidable one.

Three gaps on our own axis, and they are worth more written down than argued about.

When this is the wrong answer

If the AI traffic is one application in one language with no agent talking to a tool, the SDK your governance platform ships sees almost everything a gateway would and is already joined to the binder. That stops working at the first service that does not embed it, and until then it is the cheaper answer.

If nobody outside the organisation will ever verify one of these records, the signing is a cost with no reader, and the prevention half of this stands on its own. Most of the framework is still worth doing. Some of it is not worth doing with us.

Sources, as of 22 September 2026

AEGIS is Forrester's, and the six domain names and the three principles above are theirs: Introducing AEGIS, read 21 September 2026. Nothing here is endorsed by Forrester, and the mapping is ours.

Forrester's guidance on assembling a stack from the controls, and the advice to start from the control gap: Turn AEGIS Controls Into An Agentic AI Security Stack, published 21 August 2026, read 21 September 2026.

Gate, per the docs and the gateway's own configuration of 22 September 2026: an access rule's condition reads key, agent and user at every hop, and each hop adds its own variables, so an MCP rule reads server, method, name and args on top of them. A rule naming a variable its hop does not declare is refused when it is written, and an unguarded read of an args field is refused for the same reason. Deployment-wide access rules are the mandatory layer and a profile's own rules can only narrow them; on_error defaults to fail_closed. Admin authorization is a separate Cedar policy over the admin API, denying by default, whose schema the admin API serves for cedar validate. Coverage is 83 identifier types with 51 checksum-validated and 19 credential kinds, generated from the binary. Detection runs on a runtime loaded in the gateway process, with a remote path for models that want a GPU. Records are ed25519-signed and chained per node, and kirto-gate audit verify reports anything altered, removed, moved, forged or cut short.

All posts