Skip to main content

Domain Authorization

The Domain Authorization feature transitions domain security from a role-mapping model to a granular permission model within the Resource Authorization System (RAS). This change simplifies and unifies how access is granted to domains and their associated resources.

Feature Flag

This feature is controlled by the domainLevelBundleAuthorization feature flag and is available starting from IOMETE version 3.16.x. When enabled, it activates the new authorization flows and V2 API endpoints described in this guide. You can verify if this feature is enabled for your environment by checking the GET /api/v1/modules endpoint.

With this feature enabled, domain access is no longer managed through role assignments. Instead, permissions are granted directly to users or groups, providing more precise control over domain resources.

Key Conceptual Changes

1. Granular Permission Management

Previously, domain access and permissions were managed by creating Domain Roles and mapping them to users or groups. In the new flow, this role-mapping system is replaced by direct, granular permissions. This allows administrators to grant specific access rights (e.g., only "View Secrets" or only "Create Compute") without needing to manage complex role definitions.

2. Zero-Trust Default

When this feature is enabled, no default permissions are assigned to users or groups upon joining a domain. All access must be explicitly granted by the domain owner within the Resource Bundle interface or via API.

3. Flexible Ownership

Domain ownership is no longer restricted to individual users. A domain can now be owned by a User or a Group. Group ownership allows for collaborative management, where any member of the owning group can manage the domain and its permissions.


User Interface Changes

Domain Creation

The Domain Creation form now includes an Owner Type selection (User or Group). Administrators must select an owner at the time of creation. This owner is automatically granted full management rights over the domain and its associated Resource Bundle.

Create Domain with Owner | IOMETECreate Domain with Owner | IOMETE

Member Management

The "Members" tab within the domain view now directs administrators to the RAS permission interface. Instead of assigning roles, you now manage granular permissions (e.g., Create Compute, Manage Spark Settings) for each user or group.

Domain Members List | IOMETEDomain Members List | IOMETE

When adding or editing a member, you can select specific granular permissions:

Add Domain Member Permissions | IOMETEAdd Domain Member Permissions | IOMETE

API Migration Guide

For users managing permissions via API, the transition involves moving to V2 endpoints and adopting a two-step "Discovery and Action" flow.

1. Identity & Discovery

To manage domain-level permissions via API, you must first discover the bundleId associated with the domain. Permissions are managed on the Resource Bundle, not the Domain ID directly.

There are three primary ways to discover a domain's bundleId:

If you are managing domains you have access to, use the V2 user endpoint.

  • Endpoint: GET /api/v2/user
  • Action: Locate the domain in the domains array and extract the bundle.bundleId.
// GET /api/v2/user response snippet
{
"domains": [
{
"id": "marketing-dept",
"bundle": {
"bundleId": "7f2a8b3c-1234-5678-abcd-ef9012345678",
"isOwner": true
}
}
]
}

Administrators can fetch details for any specific domain to see its bundle information.

  • Endpoint: GET /api/v1/admin/domains/{domainId}
  • Action: Look for the bundle.bundleId field in the response.

Option C: Resource Bundle Search - Direct Lookup

You can search for the "Domain Bundle" directly using the domain ID.

  • Endpoint: GET /api/v1/bundles?domain={domainId}&bundleType=DOMAIN&scope=DOMAIN
  • Action: The response will return the specific bundle associated with that domain.

2. Domain Management (Admin)

Creating and updating domains requires the V2 admin endpoint to support the new ownership model.

  • Endpoint: POST /api/v2/admin/domains

Payload Structure:

{
"id": "marketing-dept",
"name": "Marketing Department",
"owner": {
"id": "marketing-leads-group",
"type": "GROUP"
}
}

3. Managing Permissions

Legacy member and role assignment endpoints are replaced by standard RAS Bundle APIs. Use the bundleId discovered in Step 1.

ActionLegacy Endpoint (V1)New Endpoint
List MembersGET /api/v1/domains/{id}/membersGET /api/v1/bundles/{bundleId}/members
Grant AccessPOST /api/v1/domains/{id}/membersPOST /api/v1/bundles/{bundleId}/permissions
Update/Revoke AccessPOST /api/v1/domains/{id}/membersPUT /api/v1/bundles/{bundleId}/permissions
Remove MemberDELETE /api/v1/domains/{id}/members/{mId}DELETE /api/v1/bundles/{bundleId}/permissions

Important Note on Revoking Permissions:

  • To modify or remove specific permissions (e.g., removing CREATE_COMPUTE but keeping VIEW), use the PUT endpoint with the updated list of permissions.
  • To completely remove a user or group from the bundle (revoking all access), use the DELETE endpoint.

Example: Granting Permissions (POST)

// POST /api/v1/bundles/{bundleId}/permissions
{
"actorId": "analysts-group",
"actorType": "GROUP",
"permissions": {
"DOMAIN": ["CREATE_SPARK_JOB", "CREATE_COMPUTE"]
}
}

Example: Updating/Revoking Specific Permissions (PUT)

// PUT /api/v1/bundles/{bundleId}/permissions
{
"actorId": "analysts-group",
"actorType": "GROUP",
"assetType": "DOMAIN",
"permissions": ["CREATE_SPARK_JOB"]
}

4. Available Domain Permissions

To see all available permissions for a specific asset type, you can use the following API:

  • Endpoint: GET /api/v1/bundles/assetTypes/DOMAIN/permissions

The following granular permissions are available for the DOMAIN asset type (subject to change, use the API for the latest available permissions):

PermissionDescription
CREATE_COMPUTECreate compute clusters within the domain.
CREATE_SPARK_JOBCreate and manage Spark jobs.
MANAGE_MARKETPLACEManage marketplace integrations.
VIEW_DATA_CATALOGAccess and view the data catalog.
MANAGE_DATA_CATALOGManage data catalog settings and metadata.
VIEW_SPARK_SETTINGSView domain-specific Spark configuration.
MANAGE_SPARK_SETTINGSUpdate domain-specific Spark configuration.
VIEW_SECRETSAccess secret values.
MANAGE_SECRETSCreate, update, and delete domain secrets.
LIST_SECRETSList available secrets without viewing values.
LIST_SHARED_WORKSHEETView shared SQL worksheets.
MANAGE_SHARED_WORKSHEETmove,delete,create folders and worksheets under shared SQL worksheets.
MANAGE_GIT_REPOConfigure and manage Git repository integrations.
EXPORT_SQL_EDITORExport results from the SQL editor.
MANAGE_ACCESS_TOKENManage personal or service account access tokens.
CREATE_RESOURCE_BUNDLECreate new Resource Bundles within the domain.
VIEW_DATA_PRODUCTView data products.
MANAGE_DATA_PRODUCTCreate and manage data products.

Summary of Changes

FeatureLegacy Flow (Flag OFF)New Flow (Flag ON)
Permission ModelDomain Roles & Member MappingsRAS Resource Bundle Permissions
OwnershipIndividual User onlyUser or Group
Default AccessDefault roles assigned to membersExplicit grant required (Zero Trust)
DiscoveryUse Domain ID directlyDiscover bundleId via /api/v2/user
Identity API/api/v1/user/api/v2/user
Domain Admin API/api/v1/admin/domains/api/v2/admin/domains