Skip to content

Posture export to control towers

Posture export (modules/posture-export) is the engine’s outbound posture surface: a single read-only endpoint a control tower polls to enrich its own inventory with the engine’s ground-truth access graph, least-privilege drift, discovered inventory and security posture. It is the “integrate, not compete” side of the platform — it never emits identity (that is inbound, owned by governance), only posture, and it changes nothing.

One route, GET /v1/m/posture/export, gated by posture:export:read and pinned to a single tenant scope. The response is a neutral JSON document assembled inside one audited transaction with three projections:

  • inventory — active discovered entities (kind, ref, status, signal sources, hosts, first/last seen, occurrence count), optionally filtered by ?kind=.
  • posture_drift — the reconciled least-privilege drift: observed-but-not- permitted accesses, plus unused-grant and inventory-grant counts.
  • findings — security findings projected as refs and a detail_hash only, filterable by ?severity= floor and ?category=.

Every export is minimal-data — refs, hashes and relations only, never a raw payload or secret — and a defensive redact pass scrubs every free-form field. The export itself moves data off-box, so it self-audits to the ledger with the real principal in the same transaction as the reads.

PARTIAL. The export action is live and audited; what is not verified is the other end. The ingest formats of the named towers — Microsoft Agent 365 and ServiceNow AI Control Tower — have no primary-source API the engine could validate against, so this is an honest neutral-JSON projection a tower pulls (or an operator routes through a configured sink), explicitly NOT a working native push. Each response carries that provenance note inline.

Per-request caps bound inventory, drift and findings; a partial export reports its own truncation flags and is never labelled authoritative.