Loading...

Azure Quick Links

  Found these guides useful? Help cover the next lab.

Azure Cloud Projects

Azure Databricks Enterprise Setup Part 1: Foundation & Governance

Deploying Azure Databricks correctly from day one is not optional in an enterprise setting — it's the difference between a governed, auditable data platform and an unmanaged sprawl of storage keys, ungoverned tables, and untraceable access. This guide walks through the foundational enterprise setup of Azure Databricks: provisioning the workspace, securing storage access through Managed Identities, and establishing Unity Catalog as the central governance layer for all data assets..

Task Details

1. Create Databricks workspace.

2. Create storage account with containers.

3. Create Access Connector for Databricks.

4. Grant the Access Connector's managed identity a role.

5. Enable admin account in the Databricks console.

6. Create metastore.

7. Create storage credential.

8. Create external location.

9. Create catalog.

*

Why This Matters

Before Unity Catalog existed, each Databricks workspace ran its own isolated Hive metastore, permissions were scattered per-workspace, storage credentials were often hardcoded into notebooks, and there was no consistent way to audit who accessed what data, when, or from where. That model doesn't hold up under enterprise security and compliance requirements.
The setup in this guide solves that by enforcing:

  • No embedded secrets - storage access flows through Managed Identity and Access Connectors, never storage account keys sitting in notebooks or config files.
  • Least-privilege by design - even the person who creates the metastore has no implicit rights; every privilege (like CREATE EXTERNAL LOCATION) must be explicitly granted and is fully auditable.
  • Centralized governance - one metastore per region, shared across workspaces, so access control and audit logging are consistent no matter which workspace a user connects from.
  • Scoped storage access - external locations ensure a credential can only touch the specific paths it's been explicitly authorized for, not an entire storage account.

*
Criticality

Getting this foundation wrong - or skipping steps like the managed identity role assignments or the metastore admin/permission grants - doesn't just cause setup errors (as seen throughout this guide:

NO_PARENT_EXTERNAL_LOCATION_FOR_PATH, could not be found, permission denials). It creates security and compliance gaps that are far harder to fix retroactively once catalogs, tables, and pipelines are already built on top of a poorly governed base.

This is why the setup order matters: identity and access boundaries must exist before any data lands in the platform, not layered on afterward. Everything in later phases - notebooks, SQL warehouses, ingestion pipelines, and fine-grained table permissions - depends on this foundation being correct.

*

Steps

Create a Databricks workspace.

1. Go to Azure Portal → Create a resource → Azure Databricks, then fill in:

  • Subscription: your active subscription
  • Resource group: create or select one (e.g. Databricks) to organize all related resources
  • Workspace name: e.g. Databricks_workspace
  • Region: choose the region matching where your metastore will live (e.g. Canada Central)
  • Pricing Tier: Trial (Premium) for testing, or Premium/Standard for production
  • Workspace type: select Hybrid - required for custom compute and connecting your own Azure storage/networking (Serverless uses Databricks-managed storage and isn't available on Trial tier)
  • Managed Resource Group name: auto-generated name for the hidden resource group Databricks uses internally for its infrastructure

*

Create a storage account with containers.

Provide secure, scalable storage for Databricks data, files, and workloads. e.g., metastore, raw, curated - the actual ADLS Gen2 storage Databricks will read/write.

1. Go to Azure Portal → Create a resource → Storage account, then fill in:

  • Subscription: same subscription as the workspace
  • Resource group: same one used for Databricks (e.g. Databricks), to keep related resources together
  • Storage account name: e.g. azuredatabrick0storage (must be globally unique)
  • Region: same region as your Databricks workspace (e.g. Canada Central) — critical, since storage and compute/metastore must be region-aligned
  • Primary service: Azure Blob Storage or Azure Data Lake Storage
  • Performance: Standard (sufficient for most scenarios)
    Redundancy: Locally redundant storage (LRS) — lowest-cost option, fine for dev/test

Click Next to proceed to the Advanced tab, where you'll enable hierarchical namespace (required for ADLS Gen2) before creating.

*

*

2. Create two containers: metastore and raw

  • Go to your storage account → Containers → Add container

*

*

Create Access Connector for Databricks

To enable Databricks to securely access Azure Storage using managed identity, eliminating the need to store or manage storage account access keys while providing controlled access to data.

  1. Search for "Access connector for Azure Databricks," then fill up the details and click "Review and create"

*

Grant the Access Connector's managed identity a role.

This step is easy to miss but required, or every later step throws permission errors.

To authorize the Access Connector’s managed identity to access the required Azure Storage resources, allowing Databricks to securely read and write data without using storage account keys.

1. Go to your storage account.

Access Control (IAM) → Add role assignment

*

2. Add 3 roles to the managed identity of the Databricks access connector.

On the storage account → Access Control (IAM) → Add role assignment → Job function roles tab, search for and select each role one at a time:

  • Storage Account Contributor → manages the storage account itself (metadata, configuration)
  • Storage Blob Data Contributor → read/write files
  • Storage Queue Data Contributor → required for Event Grid/Auto Loader file notification

Click Next after selecting a role, then on the Members tab choose Managed identity → select your Access Connector (e.g. databticksaccessconnector) → Review + assign.

Note: Repeat this full process for each of the 3 roles individually - Azure requires a separate role assignment per role..

*

3. Assign the managed identity as the member

On the Members tab:

  • Under Assign access to, select Managed identity
  • Click + Select members
  • In the panel that opens, choose your Subscription
  • Under Managed identity, filter by Access Connector for Azure Databricks
  • Select your connector (e.g. databticksaccessconnector) from the list, then click Select

Click Review + assign to finalize.

Note: Repeat this Members step for each of the 3 roles (Storage Account Contributor, Storage Blob Data Contributor, Storage Queue Data Contributor).

*

*

Enable admin account in Databricks console.

1. Enable account admin to your user in Account console

Login as Entra Id user at http://accounts.azuredatabricks.net/login

*

*

2. Enable Account Admin to your Databricks user.

Go to user management, then select/add the user.

*

*

3. In the Databricks portal, you will see the Manage account option available.

*

4. In the Databricks console, delete the auto-created metastore and create a new one.

Replace the automatically created metastore with a properly configured Unity Catalog metastore, giving centralized control over data, permissions, and governance across the Databricks workspace.

*

Create metastore.

Metastore is the top-level governance boundary (one per region) holding all catalogs, permissions, and audit logs, shareable across workspaces.

1. Open the Databricks portal and launch the Databricks workspace.

2. Define your Access connector for the Databricks resource ID.

From the Azure portal, go to Access Connector for Databricks and copy Resource ID

3. Provide ADLS gen2 path (you created with storage account) and Access connector for Databricks resource ID

  • Format: abfss://Container-name@storage_account_name.dfs.core.windows.net/
  • Example: abfss://metastore@azuredatabrick0storage.dfs.core.windows.net/
  • Access connector for Databricks resource ID: /subscriptions/XXX/resourceGroups/Databricks/providers/Microsoft.Databricks/accessConnectors/databticksaccessconnector

4. Assign metastore to workspace

From the Account Console → Catalog → your metastore → Workspaces tab, click Assign to workspace. In the dialog, select the workspace(s) that should use this metastore (e.g. Databricks_workspace), then click Assign.

5. Enable Unity Catalog

Unity Catalog is Databricks' centralized data governance layer that sits on top of everything else you've built - it's not a separate step, it's the overarching system that the metastore, external locations, and catalogs all belong to.

Create storage credentials

That's the step that actually grants permission - everything before it just creates resources, but nothing can talk to storage until an identity is explicitly authorized.

1. Connect your Databricks managed identity to the catalog.

Get your Azure Access Connector ID and create new credential for the managed identity and fill out the details

  • Go to Catalog → External Data → Credentials → Create credential, then fill in:
  • Credential type: Storage Credential
  • Credential Type: Azure Managed Identity
  • Credential name: e.g. my_credential
  • Access connector ID: paste the resource ID of your Access Connector (from Azure Portal → Access Connector for Databricks → Overview → Resource ID)
  • User assigned managed identity ID: leave blank unless using a user-assigned identity instead of the connector's system-assigned one

Click Create.

Note: This wraps the Access Connector's managed identity inside Unity Catalog so it can be referenced by name in storage credentials and external locations, instead of embedding raw resource IDs everywhere.

*

2. Assign “CREATE EXTERNAL LOCATION” permission to your user.

Unity Catalog enforces least privilege even for its own creator, so storage access is always explicitly traceable rather than inherited by default.

In Catalog Explorer, click the gear icon (⚙) next to the Catalog panel to open the settings menu, then click on the Metastore name (e.g. azuredatabicks_metastore) to open its details.

3. Go to the Permissions tab → Grant → select your user → check CREATE EXTERNAL LOCATION → Confirm.

Note: This grants explicit permission to register new external locations - required even for the metastore's own creator, since Unity Catalog enforces least privilege by default rather than assuming implicit rights.

Create external location.

External location pairs that storage credential with a specific path (e.g. raw container) so UC will allow reads/writes there.

Note: Specific storage path a credential is allowed to touch, enforcing least-privilege access.

1. Go to Catalog → Create → Create an external location

2. Give your location a name and provide other details.

  • External location name: ext_metastore
  • Starage type: Azure Data Lake Storage
  • Format URL: abfss://Container-name@storage_account_name.dfs.core.windows.net/
  • Example: abfss://metastore@azuredatabrick0storage.dfs.core.windows.net/
  • Storage credentials: my_credetial (created in step 7)

Note: Repeat step 8 for the raw container as well

3. Under Advanced Options, if you select 'Automatic', then the storage queue and event subscription will be automatically created. " (Event grid)

4. Test the connection

5. It creates an Event Grid subscription and a Storage Queue automatically.

Create catalog → schema → table

The actual data namespace and RBAC layer where you grant access to users/groups.

With the metastore, storage credential, and external locations in place, catalog creation is now straightforward. If no external location is specified, the catalog automatically inherits the metastore's root storage location for managed tables - no manual wiring required for standard use cases. External locations only need to be selected explicitly when a catalog's managed data should live in a different container, or when working with external (unmanaged) tables pointing at specific paths.
This completes the enterprise governance foundation. From here, the platform is ready for the next phase: notebooks, SQL warehouses, and data pipelines - will be covered in Part 2.

1. Create a catalog

2. Specify the catalog name and type, and select the external location and sub/path

Conclusion

This guide covers the initial enterprise-level foundation required before any data engineering work can begin in Azure Databricks: provisioning the workspace, establishing secure storage access through Managed Identity and Access Connectors, and standing up Unity Catalog governance (metastore, storage credentials, external locations, and catalogs).

With this foundation in place, the environment is now ready for the next phase — building out actual workloads on top of it, including:

  • Notebooks - interactive development and data exploration
  • SQL Warehouses - for BI tooling and SQL-based analytics
  • Jobs & Pipelines - scheduled and orchestrated data workflows
  • Auto Loader / Event Grid - driven ingestion - automated pipelines reacting to new files landing in the raw container
  • Fine-grained access control - grants at the table/schema level for specific users and groups as real data lands in the catalog

This document will be followed by a Part 2 guide covering that workload layer.

Written by Kirill.A - Azure & Cybersecurity Consultant at AntusNet

  Found these guides useful? Help cover the next lab.

➤ Want more? Browse all our Azure implementation guides.

Need help implementing secure Azure solutions?

Contact us for a free consultation.