Skip to content

Recipe: triage least-privilege drift

Goal: turn the drift result — the gap between what agents may do and what they are observed doing — into decisions, on a cadence, until the diff is quiet.

Terminal window
curl -ks "$BASE/v1/m/accessmap/drift" \
-H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" | python3 -m json.tool

(Or in HCL, for review in a PR: the Terraform data source olivares_access_edges with include_drift = truemanage as code.)

The result has three classes, and they are different problems:

ClassMeaningThe question to ask
Unexpected accessobserved, but no grant covers itis this a missing grant, or a real violation?
Unused grantgranted, never observed exercisedwhy does this permission exist?
Reconciliation pendingobserved, but the agent↔identity link is unresolvedan identity problem, not (yet) a security one

Unexpected access — read the edge’s honesty axes before acting:

  • attribution_tier: firm + coverage_tier: clean is the highest-quality finding you will get: a specific identity touched a specific resource and the store’s own audit classified it. Decide: if legitimate, declare the grant (policy or binding) so the map reflects intent; if not, revoke the underlying access and treat it as an incident.
  • approximate attribution means the access happened but the who is a shared credential. Do not burn an investigation on “which agent was it” — the durable fix is per-agent identity, and until then the edge honestly says what it cannot prove.
  • An edge resting only on an mcp_annotation hint is not evidence — the hint is untrusted by spec. Corroborate with an observed source before deciding anything.

Unused grants are over-provisioning found for free: each one is a candidate revocation, with the caveat that absence of observation is only meaningful where coverage exists — check the resource’s coverage tier before celebrating (tiered coverage).

Reconciliation pending routes to the identity backlog: wire or fix the roster source that should bind that credential, and the edge resolves on the next pass.

Make the decision where it is governed: declare grants as code (Terraform) or via the governed API, gate the risky direction behind an approval, and let the ledger record who decided what. Then re-pull the drift: reconciled edges drop out of the diff — only genuine gaps remain. That convergence is the whole point; the demo estate shows it in miniature (quickstart).

In the console, the Access map’s Permitted vs observed panel is this recipe rendered live.

Drift triage works as a short weekly loop plus an alert path for the high-signal class (firm + clean unexpected writes). Route those findings to your on-call via a notification destination rather than waiting for the weekly pass.