How do you spot an attacker reading too much data?
Least privilege is not always enough: sometimes you have to decide whether each access is still legitimate at the moment it happens.
An ordinary morning at CorgiBOX
CorgiBOX keeps its customer information in an in-house application: identity, contract, support history, but also detailed personal data and billing records. Alice works in support. Her role gives her read access to customer files, which is perfectly normal — that is her job.
That morning, her account is compromised. The attacker signs in, clears MFA with a stolen session, opens one file, then a second. Then twenty. Then a hundred. Then a thousand. Nothing is technically abnormal: the account is valid, the session is valid, the entitlement is genuinely granted, and the access path is the usual one.
So at what point does this behaviour become abnormal? The answer is neither "they should have enabled MFA" nor "they should have taken away Alice's right to read many records". An attacker does not always need to obtain a right they do not have: they can simply abuse a perfectly legitimate one, far faster and far more broadly than intended.
Authentication is not authorization
Authentication answers a trust question: who are you, and how much confidence do I have in this login? Authorization answers another one: what can you do? A modern architecture can go one step further and ask whether this identity should be able to perform this action, on this resource, in this context, right now.
Having correctly authenticated Alice at 8:40 am does not mean everything her session does at 9:15 am should remain allowed. MFA still matters; it simply does not address this problem.
Identity governance does not disappear either — quite the opposite. It governs identities, roles, entitlements, segregation of duties, movers, recertification and the full lifecycle. Does Alice really belong to the support team? Does her role cover this population of customers? Is that entitlement still justified? Those answers are essential, but a theoretical right is not enough to settle every decision at the moment of the action.
What can feed an access decision
A fine-grained decision does not only look at "role = support". It combines several dimensions, some of which change from one minute to the next.
- 01
The entitlement itself
Role, entitlement, authorised population, and above all the actual relationship between the user and the resource: does Alice handle this customer, or is she opening a file she has never interacted with?
- 02
Access context
Known device or not, origin, network, time of day, environment, and the authentication level obtained at login.
- 03
Resource sensitivity
A public FAQ and a detailed billing record do not call for the same access conditions. Data classification is part of the decision.
- 04
Risk
Flagged session, compromised device, anomaly raised by a security tool, SOC alert, recent significant change on the account.
- 05
Behaviour
Unusually fast navigation, a run of unrelated objects, an endpoint never used before, a clear break with the person's habits.
- 06
Volume
Number of objects read, number of distinct objects, calls per unit of time, exported volume. The most visible signal — and the most misleading in isolation.
Volume is a signal. On its own, it is not proof of an attack.
PDP, PEP, PIP, PAP — in one minute
Four acronyms show up as soon as externalised authorization is on the table. No need to memorise them: just look at who does what.
The PAP is where policies are administered: which rules do we want to apply? The PDP is the engine that makes the decision from policies, attributes and context. The PEP sits on the real path of the action — application, API, API gateway, access management component, bastion — it asks the PDP and applies the answer. The PIP supplies the information the decision needs: identity, role, organisation, resource characteristics, risk level, business attributes.
Application, API, API gateway, access management, bastion…
Central policies, attributes, context
- IGAIdentity · Role · Entitlements · SoD
- Access managementSession · Authentication level · Login context
- BusinessRecord owner · Relationship · Sensitivity · Classification
- SecuritySession risk · SOC signals · Device posture
- UsageFrequency · Volume · History · Recent behaviour
Back to Alice
Alice calls "GET /customers/12345". The enforcement point on that path can send the decision engine far more than her role.
Alice's role is still valid in the first six lines. It is the combination with the last three that changes how the call reads.
subject = alice
role = support
action = read
resource = customer/12345
customer.region = FR-IDF
customer.classification = personal-data
authentication.level = strong
device.trust = managed
session.risk = high
customersViewedLast5Min = 487
behaviourDeviation = highThis block is an illustrative representation of information that may feed a decision, not the syntax of any particular product.
The authorization engine does not invent behaviour
An important point: deploying a PDP does not create a behavioural engine. For anyone to know that Alice opened 487 records in five minutes, something must have computed that number. Depending on the estate it comes from the application itself, the API gateway, a telemetry layer, the SOC, a detection engine, an anti-fraud platform or an internal scoring service.
The chain is straightforward: detection produces or enriches a signal, the PDP weighs that signal against policies and business context, the PEP applies the decision on the real action.
Detecting an anomaly and deciding what an identity may still do are two different functions. The point is being able to connect them.
A richer answer than a plain block
Reducing authorization to permit / deny closes a lot of useful doors. Depending on what the enforcement point can do, the same decision can be expressed in several ways.
- Allow, deny, or allow with a narrower scope
- Block export, mask certain fields
- Ask a human for step-up authentication, require an approval
- Apply rate limiting on the API
- Raise an alert and trigger a SOC response
The PDP decides; the PEP still has to be able to apply that decision. That is a design criterion, not an integration detail.
PERMIT read customer
IF
subject.role == "support"
AND customer.region IN subject.allowedRegions
AND session.authenticationLevel >= requiredLevel
AND session.risk < HIGH
AND behaviour.customerViews5min < adaptiveThreshold
OTHERWISE
restrict
OR step-up
OR denyIllustrative pseudo-policy: this is no product's syntax. The point is to move away from "if (user.isAdmin)" scattered across business code.
Axiomatics, a concrete example of a PDP
Ariovis works with Axiomatics on fine-grained, dynamic authorization. In a target architecture, that kind of engine plays the PDP role: policies are centralized, decisions are made in real time, and identity governance becomes one of the information sources feeding the decision — identities, role model, rules, governance attributes.
The application no longer simply checks that Alice has the Support role: it delegates a sharper question, whether Alice may read this file, with this session, in this context. Legacy applications and SaaS that cannot adapt keep receiving classic entitlements; modern applications delegate progressively more. It is a trajectory, not a switch.
Then the nightly batch shows up
Every night, CorgiBOX runs a financial reconciliation job, "corgibox-fiscal-reconciliation". To do its work it reads 100,000 invoices. If the rule had been "more than 1,000 reads = attack", CorgiBOX would raise a security incident every single night, and the finance team would quickly learn to ignore the alerts.
Massive access can be perfectly legitimate. Tiny access can be extremely suspicious. Context makes the difference.
The batch is an identity, not an exception
Service accounts are not estate anomalies you tolerate for lack of a better option. They are non-human identities, to be governed and controlled like the others — with different attributes.
In that context, 83,421 reads are perfectly normal. And nobody would think of asking this batch to approve a notification on its phone: trust factors for a non-human identity live elsewhere — workload identity, certificate or cryptographic mechanism, appropriate credential, origin, environment, scheduler, calling application, destination, usage pattern.
subject.type = workload
subject.id = fiscal-reconciliation
action = read
resource.type = invoice
environment = production
scheduler = nightly-finance
currentTime = 02:17
destination = finance-datalake
recordsRead = 83421
behaviourDeviation = normalA technical identity may need an enormous volume of data without needing enormous rights on everything, everywhere, all the time.
The interesting scenario: the attacker compromises the batch
Now assume the attacker steals the service account credential. Technically, the account is still valid. They try to use it for something else: call another API, read another repository, reach HR data, change destination, run in the middle of the afternoon.
Here, 150 requests are enough to step outside the expected pattern. The PDP can check that this account calls the expected resources, from the expected context, inside the expected window, with the expected actions and destinations. Compromising the batch does not automatically give the attacker a free pass.
subject.id = fiscal-reconciliation
action = read
resource.type = employee-directory
currentTime = 14:37
destination = unknown
behaviourDeviation = criticalThe credential is valid; the usage no longer is.
Alice — compromised human account
487 records in 5 minutes
- Legitimate role
- Valid session
- Unusual origin
- High session risk
- Unusual scope
Challenge, restrict or deny depending on policy
Finance batch — legitimate
100,000 invoices
- Expected workload
- Expected time window
- Expected API
- Expected destination
- Normal behaviour
Allowed
Compromised batch
Only 150 requests
- 2:37 pm
- HR API
- New destination
- New usage
- Critical behaviour deviation
Deny or trigger a security response
Volume is one signal among others.
What this changes for lateral movement
A compromised service account should not turn into a universal identity able to query everything technically reachable from the machine. When sensitive paths have enforcement points and rely on dynamic policy, this strongly reduces the opportunities for abuse and lateral movement across the resources actually covered by that policy.
The nuance matters. An authorization architecture does not protect a resource that bypasses the PDP, an unprotected API, direct database access or a technical path left open. That is precisely why, on a Zero Trust trajectory, an API gateway is often a relevant enforcement point for non-human identities: the batch calls the gateway, the gateway asks the PDP, and the question is no longer only "is the token valid?" but "may this technical identity perform this action on this API, in this context?". It is one pattern, not the only possible architecture.
IAM strategy and Zero TrustAccess management and CIAMPrivileged access management
Where to start, without a big bang
No organisation externalises 100% of its authorization overnight, and that is not a goal in itself. The existing foundation — identity governance and access management — already provides control over identities, roles, entitlements, authentication and sessions.
Fine-grained authorization then comes in on the few cases where it genuinely changes something: sensitive data access, a critical business API, a financial operation, a very powerful service account, an AI agent, an administrative action. Modern applications delegate progressively more decisions, and some organisations do aim for much broader externalisation over time. You start where the value justifies the complexity.
Security Meets Business
A security policy that blocked every identity reading a lot of data would stop CorgiBOX within one night. The business needs batches, integrations, migrations, backups and bulk processing. That is exactly why security has to understand the business precisely enough to tell expected mass usage from fraudulent usage.
The goal is not to arbitrarily constrain the business in order to secure it. The goal is to express legitimate usage precisely enough to recognise faster when it stops being legitimate.
The right question
Alice genuinely holds the Support entitlement. The batch genuinely holds massive rights on invoices. So the question is not who reads the most.
It is whether this access remains consistent with the identity, the resource, the action, the context, the behaviour and the level of risk we have decided to accept.
Design fine-grained, dynamic authorization
Your roles say who can access an application. We can help you decide what an identity may actually do at the moment of each action: priority use cases, policy model, enforcement points, signals to connect.