← Back to Blogus

How Grant Is Being Used to Centralize IAM Visibility

7 min read
Ale Heredia
grant-platformidentitymigrationopen-sourceannouncement

When we wrote that migrating identity and access to Grant is now easy, CDM Import & Export already did its job—a portable permission graph you could move between systems. The friction was elsewhere: Grant enforced access only through roles and groups. So when an external system mapped a user straight to a permission—no role, no group—we had to invent synthetic roles and groups just to carry that grant. It worked, but it filled projects with noise and entities nobody asked for. Grant v1.4 removes that compromise.

The headline is not a single feature. It is that migrating into Grant now works consistently—we run the same pipeline against multiple environments and get the same predictable result every time. And the more legacy data we port, the clearer the real value becomes: Grant is turning into a central place to see and reason about access across sources that were never designed to talk to each other.

What is new in Grant v1.4

This release is small to read and big in practice. Three changes matter most for migration work:

FeatureWhat it gives you
Direct permission relationshipsGrant now supports flexible assignment paths: user to permission, user to group, and role to permission—not only the classic role-then-group chain. You model access the way your source system actually expressed it.
Email identity importsImport external IAMs keyed by email identity, so teams can bring users from an existing provider without inventing new identifiers up front.
Keyword user searchFind users by keyword across more than the native name field, which matters a lot once a project holds hundreds of imported users.

The most important detail is what did not change: the new permission flexibility arrived without changing the CDM import sync-jobs contract. Pipelines built against the previous payload keep working. We added expressiveness to the model without forcing a rewrite of the integration—exactly the kind of stability you want when a migration is already in flight.

Full reference lives in the Grant docs and the CDM Import & Export guide.

Migration that is proven, not hopeful

A migration you run once is a script. A migration you can run again and again with the same outcome is infrastructure. Getting to the second kind is what v1.4 unlocked for us.

Our approach is a straightforward ETL that ends at Grant's sync-jobs API:

  1. Extract the current state of identity and access from our existing IAM data sources.
  2. Stage the raw extract in object storage so every run has an inspectable, shareable checkpoint between steps.
  3. Transform the legacy model into Grant's CDM (SyncProjectInput)—mapping users, roles, groups, and permissions, including the new direct relationships where the source needs them.
  4. Load the CDM document into a Grant project through an import sync job.

The whole thing runs as an orchestrated, managed step-function-style workflow. A couple of design choices are what make it trustworthy rather than just functional:

  • Dry-run first. Every run can execute end to end in a dry-run mode that transforms and validates without writing to Grant. We only flip to a real load once the transformed CDM looks right.
  • Idempotent re-runs. Because imports operate on CDM-managed rows and capture a rollback snapshot before applying, re-running a sync converges to the same state instead of piling up duplicates. A failed load rolls back inside its transaction.
%% width: desktop-45 mobile-80
flowchart TD
  subgraph Sources["Legacy IAM sources"]
    S1[Auth datastore]
    S2[Account datastore]
  end

  EX[Extract]
  ST[(Staging<br/>object storage)]
  TF[Transform<br/>legacy to CDM]
  DR{Dry run?}
  LD[Load<br/>sync-jobs API]
  G[Grant project<br/>unified RBAC]

  S1 --> EX
  S2 --> EX
  EX --> ST
  ST --> TF
  TF --> DR
  DR -->|Yes| OK[Validate only]
  DR -->|No| LD
  LD --> G

We have run this pipeline across three of our development environments. Same code, same contract, same shape of result each time—which is the whole point. Proving consistency on development data is how we earn the confidence to point it at production later.

The real lesson: Grant as a central hub for IAM

Here is the part we did not fully appreciate until we were elbow-deep in legacy data: the value of this work is not the one-time migration. It is that Grant becomes a neutral, inspectable hub—think of it as an IAM data lake—where access from many sources can land, be compared, and be reasoned about in one model.

Because everything passes through the CDM, the same machinery that moves data in also moves it out and between systems:

CapabilityWhy it matters once data is centralized
ConsolidateMultiple sources express access in one canonical model, so "who can do what" is answerable in one place instead of across many dashboards.
Migrate in and outImport is not a trap. Export produces the same CDM document, so leaving or duplicating an environment is a workflow, not a rescue project.
Plan transitionsA staged, dry-run-first pipeline lets you preview a cutover, compare against the source, and converge incrementally—domain by domain.
Review driftRe-importing and diffing snapshots turns "did anything change?" into a routine check rather than an audit scramble.

Portable, inspectable authorization is the thing most identity tooling does not give you. Centralizing it is what makes everything downstream—audit, convergence, eventually SSO—tractable.

What it looks like in Grant

Once a sync job finishes, the project's Import/Export view is where operators confirm what happened. The screenshots below walk through a completed import.

Job summary — A completed import in replace mode, versioned and tracked as a background job.

Grant import job summary card showing a completed import in replace mode

Job overview — Lifecycle status, operation, mode, and the rollback snapshot captured just before the sync ran.

Grant import job overview with status, mode, and rollback snapshot details

Import result — Counters recorded when the import completed: roles and groups created, role/group/permission links, project users ensured, and user roles assigned.

Grant import result counters for roles, groups, permissions, and users

Users, searchable — The imported users land in the project and are now findable by keyword via search_document, not just by name.

Grant project users grid with keyword search

Those counters—hundreds of permission links, project users ensured, roles assigned—are a single import job's output. That is the difference between clicking through a UI for a week and running a pipeline that finishes in minutes.

What comes next

The path from here is the arc we sketched in the migration post: from visualize to converge to authenticate centrally. With repeatable migration proven on development data and the CDM contract stable across v1.4, the next steps are scheduling syncs without surprising operators and beginning to converge duplicate roles across sources.

If you are evaluating Grant after the launch post, the exercise that taught us the most is small: export a project to CDM, edit the JSON, and re-import with merge to watch external keys and direct relationships behave. Try it on demo.grantjs.org, read the CDM Import & Export guide, and tell us on GitHub what your IAM data lake should look like.

Comments

Comments are provided via Giscus (GitHub). Enable them in your cookie preferences to load the discussion widget.