Consolidation stops being a slide when it becomes a data model.
Most security platforms are a drawer of tools that each keep their own findings and their own view of the world. Onam is built the opposite way: every engine, for every cloud, writes the same finding contract into one shared store, and everything reasons over one property graph. This paper explains that design and why it is the thing that makes cross-cloud attack paths, priced risk and painless extensibility possible.
The architectural claim is specific and testable: there are no per-engine report tables to reconcile. A gateway reads only from one canonical findings store; a per-tenant graph turns those findings and the assets they touch into nodes and typed edges. Adding a capability does not add a silo — it adds another writer to the same store.
Two tables come out of ingestion, and every capability in the platform depends on them.
Each cloud connects read-only and agentless (Whitepaper 01, §02). The pipeline runs four stages — enumeration → enrichment → normalisation → drift — and writes two things every capability depends on: an asset inventory and an asset-relationship table.
7 clouds plus SaaS collapse into one normalised identity space, covering 549 cloud services and 11,433 rule definitions.
Consolidation lives or dies on the schema.
Onam requires every engine to emit the same standardised finding, keyed consistently, so one table can hold results from posture, identity, data, workload, code and SaaS engines without translation.
| Field | Canonicalises | Why it matters |
|---|---|---|
| resource_uid | ARN vs OCID vs self-link | One identity for an asset across clouds |
| account_id | account vs subscription vs project | Ownership normalised across providers |
| finding_id | deterministic hash | Same issue → same ID on every rescan; stable history |
| tenant_id | not-null isolation key | Every row is tenant-scoped by construction |
| provider_metadata | provider-specific detail | Nothing is lost; specifics travel with the finding |
Because finding_id is deterministic, remediation tracking is reliable: a fixed issue auto-resolves on the next PASS and auto-closes after 30 days unseen, without a human reconciling IDs by hand.
The cloud documents its relationships. The graph adds the ones an attacker would use.
On top of the findings and relationships, Onam builds a per-tenant property graph. Assets are nodes; edges are typed — containment, attachment, IAM trust and network reachability — and catalog-driven derivers add the abuse edges an attacker would use.
The derivers are the important part. A cloud provider documents the relationships it intends; an attacker uses the ones that exist. The graph has to hold both.
29 engines write into the same store. That is the extensibility claim: a new capability is a new writer, not a new database, a new schema and a new reconciliation job. It is also why a posture finding and a runtime detection can appear on the same path — they were never in separate systems to begin with.
Adding a capability adds a writer to the same store — never another silo.