Skip to main content

Prefix-based access control

Estuary's authorization model is built around prefixes. By default, your organization gets a single top-level prefix (e.g. acmeCo/) and all users and tasks operate within it with broad access. For organizations that need stronger isolation — between environments, regions, or teams — you can configure access at sub-prefix granularity.

This guide explains the four layers that control access, and walks through three common configurations.

The four layers

Full isolation between sub-prefixes requires configuring all four layers:

LayerWhat it controlsConfigured via
User grantsWhich prefixes a user can create, modify, or view tasks inWeb app (Admin > Access Grants > Organization Membership) or CLI
Role grantsWhich collections a task can read from or write toWeb app (Admin > Access Grants > Data Sharing) or CLI
Storage mappingsWhere collection data is physically storedWeb app (Admin > Storage Mappings)
Data plane accessWhich data planes tasks can run onEstuary support (no self-service UI)

A note on grants

User and role grants are additive — a more specific grant cannot restrict a broader one. If acmeCo/ has write access to acmeCo/, then a user or task in acmeCo/staging/ inherits that access regardless of what grants you add at the sub-prefix level. To restrict access, you must delete the broader grant and replace it with narrower ones.

Storage mappings and data plane access work differently — they use longest-prefix-match, so sub-prefix entries do take precedence over parent entries for those layers.


Scenario 1: Default (single prefix)

Every new organization starts with this setup. All users and tasks share a single prefix with no isolation.

LayerBehaviourDefault configuration
User grantsAll users can create and modify tasks anywhere in the prefixUsers are granted admin to acmeCo/
Role grantsAll tasks can read and write any collection in the prefixacmeCo/acmeCo/ (write)
acmeCo/ops/acmeCo/ (read, for task logs)
Storage mappingsAll collections stored in the same locationSingle mapping at acmeCo/
Data plane accessAll tasks run on the same data planeSingle data plane at acmeCo/

This works well for small teams where isolation is not needed.


Scenario 2: Environment isolation with cross-read access

Two sub-prefixes — acmeCo/dev/ and acmeCo/prod/ — where dev tasks can read from prod collections (e.g. for testing pipelines against real data), but dev users cannot create or modify prod tasks.

LayerBehaviourConfiguration
User grantsDev users can only create or modify tasks in acmeCo/dev/; prod users are scoped to acmeCo/prod/Dev team: admin to acmeCo/dev/
Prod team: admin to acmeCo/prod/
Role grantsDev tasks can read prod collections but cannot write to them; prod tasks are fully isolated from devDelete acmeCo/ → acmeCo/ (write)
Add acmeCo/dev/ → acmeCo/dev/ (write)
Add acmeCo/dev/ → acmeCo/prod/ (read)
Add acmeCo/prod/ → acmeCo/prod/ (write)
Storage mappingsDev and prod collection data is stored separatelyCreate mappings for acmeCo/dev/ and acmeCo/prod/; parent mapping can be kept as fallback or removed
Data plane accessBoth environments share the same compute resourcesNo changes needed if sharing a single data plane — tasks inherit via longest-prefix-match

Scenario 3: Full isolation between sub-prefixes

Two completely separate sub-prefixes — acmeCo/EU/ and acmeCo/US/ — with separate storage and data planes. User A can administer both; User B can only administer acmeCo/US/.

LayerBehaviourConfiguration
User grantsUser A can administer both regions; User B can only administer USUser A: admin to acmeCo/EU/ and acmeCo/US/
User B: admin to acmeCo/US/ only
Role grantsEU and US tasks cannot access each other's collectionsDelete acmeCo/ → acmeCo/ (write)
Add acmeCo/EU/ → acmeCo/EU/ (write)
Add acmeCo/US/ → acmeCo/US/ (write)
Storage mappingsCollection data is physically separated by regionCreate acmeCo/EU/ → EU bucket
Create acmeCo/US/ → US bucket
Remove parent acmeCo/ mapping to prevent cross-region fallback
Data plane accessTasks run on region-specific computeContact Estuary support to create per-sub-prefix data plane grants and remove the parent acmeCo/ data plane grant
note

Data plane visibility for sub-prefix-only users is currently limited in some parts of the UI due to an ongoing migration. If a sub-prefix user cannot see their assigned data plane, contact Estuary support to verify the grant is in place.


Limitations

  • Private links cannot be restricted to sub-prefixes. Preventing acmeCo/prod/ and acmeCo/dev/ tasks from connecting to the same private database requires separate data planes — there is no per-prefix private link scoping.
  • Data plane grants have no self-service UI — contact Estuary support to configure them.