Only this pageAll pages
Powered by GitBook
Couldn't generate the PDF for 573 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

SaaS

Loading...

Configure

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Remove an Amazon Redshift Connection

Delete your Amazon Redshift connection

To delete the host,

  1. Click Data in the navigation menu and select Connections.

  2. Click the overflow menu in the Actions column and select Delete Connection.

  3. Click Delete Host again to confirm.

Amazon Redshift

Learn about Immuta's integrations for Amazon Redshift

Immuta offers two integrations for Amazon Redshift:

  • : In this integration, Immuta uses to configure the integration and register data objects in a single step. Once data is registered, Immuta can enforce access controls on that data.

  • : In this integration, Immuta generates policy-enforced views in your configured Redshift schema for tables registered as Immuta data sources. The integration is configured separately from data source registration.

Immuta Documentation - SaaS

Use Immuta to provision governed access to data.

Apply policy-driven controls and automated workflows to deliver secure, consistent access for users and AI agents.

Amazon Redshift Spectrum Integration

Learn about how Immuta generates policy-enforced views in your Amazon Redshift Spectrum environment to govern your data

In this integration, Immuta generates policy-enforced views in your configured Amazon Redshift schema for tables registered as Immuta data sources.

This guide outlines how to integrate Amazon Redshift Spectrum with Immuta.

: This guide describes the design of the integration and policy enforcement.

Accessing Data

Learn how end users can access policy-enforced data in Databricks Unity Catalog

Once data is registered through the Databricks Unity Catalog connection, you will access your data through your Databricks queries as you normally would. If you are subscribed to the data source, Immuta grants you access to the data in Databricks.

When you submit a query, the Databricks Unity Catalog client submits the SQL query to Databricks, which then processes the query and determines what data your group is allowed to see. Then, Databricks queries the database and returns the query results to the Databricks Unity Catalog client, which then returns policy-enforced data to you.

The diagram below illustrates how Immuta, Databricks, and Databricks Untiy Catalog client interact to access data.

Query Databricks Unity Catalog securables exactly how you normally would in Databricks. Because grants are managed through groups and data policies are managed through UDFs, there is no additional setup required from the data consumers.

Amazon Redshift integration
connections
Amazon Redshift Spectrum integration

Getting started

How-to guide

Reference guide

Configure an Amazon Redshift Spectrum integration
Amazon Redshift Spectrum integration overview

Configure Immuta

Explore Immuta

Cover

1 - Connect your data platform

Before you can create policies or share data products, Immuta must be connected to your data platform to manage controls and grant access.

Cover

2 - Add metadata and users

For automated policies, tag data and use those tags in policy. Tag your data by connecting Immuta to data catalogs you already use or run identification.

Cover

3 - Organize data into domains

Just like your organization compartmentalizes ownership of data to different teams and within different platforms, your data in Immuta should be organized into domains.

Request app

The Immuta request app offers a solution for request and approve workflows. Use the data marketplace to share data products, or configure it with your data catalog to receive and manage data access requests.

Govern app

The Immuta govern app offers a data governance solution for multi-platform architectures. Use policies to manage access control on your data with comprehensive audit on actions within Immuta and queries on your data.

Configuration

Connect your data, metadata, and users.

Developer guides

Interact with Immuta through the Immuta CLI and API.

Querying data

Reference Guides

Reference Guides

How-to Guides

Reference Guides

Reference Guides

Reference Guides

Manage Amazon Redshift Connection Settings

Manage Amazon Redshift integration and connection settings

Run object sync

  1. Navigate to the connection or connection-backed object.

  2. Click Run Object Sync.

Edit the connection details

  1. Click the Edit button in the Connection details box.

  2. Edit the field you want:

    1. SSL Mode

    2. Authentication Method: If you are editing the authentication method to be a different system account user, .

  3. Select Validate, and once the validation is successful, select Save.

  1. Click the Edit button in the Object Sync settings box.

  2. Opt to enable or disable object sync.

  3. Opt to update the Start Time and Run Frequency from the dropdown menus.

  4. Opt for all data objects to be scanned despite the policy sync setting using the checkbox.

  1. Click the Edit button in the Object settings box.

  2. Opt to enable or disable Policy Synchronization: When policy sync is enabled, all child objects will be represented by Immuta data sources and policies will be applied to the data sources.

  3. Opt to Add Users and Groups as data owners:

Security and Compliance

Understand the authentication methods and audit features supported by the Amazon Redshift integration to ensure you are meeting your organization's security and compliance needs

Immuta offers several features to provide security for your users and to prove compliance and monitor for anomalies.

Authentication

Registering the connection

The Amazon Redshift connection supports username and password authentication to register a connection. The credentials provided must be for an account with the permissions listed in the Register an Amazon Redshift connection guide. Passwords hashed using MD5 are unsupported for authentication.

Identity providers for user authentication

The built-in Immuta IAM can be used as a complete solution for authentication and user entitlement. However, you can connect your existing identity management provider to Immuta to use that system for authentication and user entitlement instead.

Each of the supported identity providers includes a specific set of configuration options that enable Immuta to communicate with the IAM system and map the users, permissions, groups, and attributes into Immuta.

See the Identity managers guide for a list of supported providers and details.

See the Amazon Redshift integration reference guide for details about mapping user accounts to Immuta.

Auditing and compliance

Immuta provides governance reports so that data owners and governors can monitor users' access to data and detect anomalies in behavior.

Immuta governance reports allow users with the GOVERNANCE Immuta permission to use a natural language builder to instantly create reports that delineate user activity across Immuta. These reports can be based on various entity types, including users, groups, projects, data sources, purposes, policy types, or connection types.

See the page for a list of report types and guidance.

Protecting Data

Learn how Immuta enforces policies directly on data in your Amazon Redshift environment

In the Amazon Redshift integration, Immuta administers Amazon Redshift privileges on data registered in Immuta. Then, Immuta users who have been granted access to the data sources can query them.

The sequence diagram below outlines the events that occur when an Immuta user who is subscribed to a data source queries it in Amazon Redshift.

Registering a connection

The Amazon Redshift integration is configured and data is registered through connections, an Immuta feature that allows administrators to register data objects in a technology through a single connection to make data registration more scalable for your organization.

Once the Amazon Redshift connection is registered, you can author subscription and data policies in Immuta to enforce access controls.

See the Amazon Redshift integration reference guide for more details about registering a connection.

Protecting data

After data is registered in Immuta, you can author subscription and data policies in Immuta to enforce access controls.

When a subscription policy is applied to a data source, users who meet the conditions of the policy will be automatically subscribed to the data source. Immuta creates roles for those users (if an Immuta-generated role for them does not already exist) and grants Amazon Redshift privileges to that role. Once a data policy is applied to a data source, Immuta generates a masking or row-level policy in Amazon Redshift and attaches that policy to the data object it applies to.

Consider the following example that illustrates how Immuta enforces a subscription policy that only allows users in the analysts group to access the yellow-table. When this policy is authored and applied to the data source, Immuta issues a SQL statement in Amazon Redshift that grants the SELECT privilege on yellow-table to users registered in Immuta that are part of the analysts group.

In the image above, the user in the analysts group accesses yellow-table, while the user who is a part of the research group is denied access.

See the or the for guidance on applying policies to a data source. See the Amazon Redshift integration page for details about the .

Getting Started with the Amazon Redshift Spectrum Integration

Learn how to best implement Immuta with Amazon Redshift Spectrum in your data ecosystem

The how-to guides linked on this page illustrate how to integrate Amazon Redshift Spectrum with Immuta. See the for information about the Amazon Redshift Spectrum integration.

1

Connect your technology

These guides provide instructions on getting your data set up in Immuta for the Request and Govern apps.

  1. : Configure an Amazon Redshift Spectrum integration with Immuta so that Immuta can create policy-protected views for your users to query.

Protecting Data

Learn how Immuta enforces subscription policies on data registered in the Glue Data Catalog

In the AWS Lake Formation integration, Immuta orchestrates Lake Formation access controls on data registered in the Glue Data Catalog. Then, Immuta users who have been granted access to the Glue Data Catalog table or view can query it using one of these analytic engines:

  • Amazon Athena

  • Amazon EMR Spark

Remove a Databricks Unity Catalog Connection

Delete your Databricks Unity Catalog connection

To delete the host,

  1. Click Data in the navigation menu and select Connections.

  2. Click the overflow menu in the Actions column and select Delete Connection.

  3. Download the cleanup script from the modal.

Accessing Data

Learn how end users can access policy-enforced data in Amazon Redshift

Once data is registered through the Amazon Redshift connection, you will access your data through Amazon Redshift as you normally would. If you are subscribed to the data source, Immuta grants you access to the data in Amazon Redshift.

When you submit a query, the SQL client submits the query to Amazon Redshift, which then processes the query and determines what data your role is allowed to see. Then, Amazon Redshift queries the database and returns the query results to the SQL client, which then returns policy-enforced data to you.

The diagram below illustrates how Immuta, Amazon Redshift, and the SQL client interact when a user queries data registered in Immuta.

Because subscription policies are managed through roles, you must be acting under the role Immuta creates for you (immuta_<username>) to get access to the data sources you are subscribed to.

Accessing Data in Google BigQuery

Learn how end users can access policy-enforced data in Google BigQuery

Once data is registered through the Google BigQuery viewless connection, you will access your data through your Google BigQuery client as you normally would. If you are subscribed to the data source, Immuta grants you access to the data in Google BigQuery.

When you submit a query, the Google BigQuery client submits the SQL query to Google BigQuery, which then processes the query and determines what data you are allowed to see. Then, Google BigQuery returns the query results to the client, which then returns policy-enforced data to you.

The diagram below illustrates how Immuta, the Google BigQuery, and the Google BigQuery client interact to access data.

Oracle

Learn about how you can register data from Oracle

The Oracle integration allows you to register data from Oracle in Immuta.

: This guide describes the design and components of the integration.

MariaDB

Learn about how you can register data from MariaDB

The MariaDB integration allows you to register data from MariaDB in Immuta.

: This guide describes the design and components of the integration.

MySQL

Learn about how you can register data from MySQL

The MySQL integration uses connections to register data from MySQL in Immuta.

: This guide describes the design and components of the integration.

  • Click Delete Connection again to confirm.

  • Navigate to Databricks Unity Catalog and run the cleanup script in your environment to remove the Immuta-managed groups and policies.

  • Cleanup script

    You must run the cleanup script to completely remove Immuta-managed items from your environment. Until you manually run the cleanup script in your Databricks Unity Catalog environment, Immuta-managed groups and Immuta policies will still exist in Databricks Unity Catalog.

    Click Save.

    Start typing in the text box and select the user or group from the dropdown.
  • Click Add Owners.

  • Click Save.

  • Edit the object sync settings

    Edit the object settings

    grant the new system user the required permissions
    Governance report types

    Immuta policies will not be automatically enforced in Oracle

    While you can author and apply subscription and data policies on Oracle data sources within Immuta, these policies will not be enforced natively in the Oracle platform.

    To use this integration, contact your Immuta representative.

    How-to guide

    Reference guide

    Register an Oracle connection
    Oracle integration reference guide

    Immuta policies will not be automatically enforced in MariaDB

    While you can author and apply subscription and data policies on MariaDB data sources within Immuta, these policies will not be enforced natively in the MariaDB platform.

    To use this integration, contact your Immuta representative.

    How-to guide

    Reference guide

    Register a MariaDB connection
    MariaDB integration reference guide

    Immuta policies will not be automatically enforced in MySQL

    While you can author and apply subscription and data policies on MySQL data sources within Immuta, these policies will not be enforced natively in the MySQL platform.

    To use this integration, contact your Immuta representative.

    How-to guide

    Reference guide

    Register a MySQL connection
    MySQL integration reference guide

    Querying data

    After a user subscribes to a data source, Immuta issues GRANT statements that assign a role and object privileges to that user in Amazon Redshift. Amazon Redshift then stores that role in an internal system catalog, and when a user submits a query to the SQL client, Amazon Redshift returns the data the user's role is allowed to see. The SQL client then returns that data to the user.

    How-to Guides

    Google BigQuery

    Learn about Immuta's integrations for Google BigQuery

    Immuta offers two integrations for Google BigQuery:

    • Google BigQuery viewless integration: In this integration, Immuta uses connections to configure the integration and manage access controls on base tables in Google BigQuery.

    • Google BigQuery view-based integration: When Google BigQuery data sources are registered after the integration is configured, Immuta creates and manages views for each data source registered. Users can then query policy-protected data in Google BigQuery as secure views within the Immuta-created dataset.

    Reference Guides

    How-to Guides

    Subscription policies page
    Data policies page
    supported policy types
    After a user subscribes to a data source, Immuta issues GRANT statements that assign a role and object privileges to that user in Amazon Redshift. Amazon Redshift then stores that role in an internal system catalog, and when a user submits a query to the SQL client, Amazon Redshift returns the data the user's role is allowed to see. The SQL client then returns that data to the user.

    Register Amazon Redshift Spectrum data sources: This will register your data objects into Immuta and allow you to start dictating access through access requests or global policies.

  • Organize your data sources into domains and assign domain permissions to accountable teams: Use domains to segment your data and assign responsibilities to the appropriate team members. These domains will then be used to manage permissions for publishing data products, authoring policies, and managing audit.

  • 2

    Register your users

    These guides provide instructions on getting your users set up in Immuta for the Request and Govern apps.

    1. Connect an IAM: Bring the IAM your organization already uses and allow Immuta to register your users for you.

    2. Map external user IDs from Redshift to Immuta: Ensure the user IDs in Immuta, Redshift, and your IAM are aligned so that the right policies impact the right users.

    3

    Start using the Request app

    These guides provide instructions on using the Request app for the first time.

    1. Publish a data product: Once you register your data and users, you can immediately start publishing data products.

    2. Request access to a data product: Users must then request access to your data products in the Request app.

    3. : To grant access to a data product and its data sources, respond to the access request.

    4

    Add data metadata

    These guides provide instructions on getting your data metadata set up in Immuta for the Govern app.

    1. Connect an external catalog: Bring the external catalog your organization already uses and allow Immuta to continually sync your tags with your data sources for you.

    2. Run identification: Identification allows you to automate data tagging using identifiers that detect certain data patterns.

    5

    Start using the Govern app

    These guides provide instructions on using the Govern app for the first time.

    1. Author a global subscription policy: Once you add your data metadata to Immuta, you can immediately create policies that utilize your tags and apply to your tables. Subscription policies can be created to dictate access to data sources.

    2. Author a global data policy: Data metadata can also be used to create data policies that apply to data sources as they are registered in Immuta. Data policies dictate what data a user can see once they are granted access to a data source. Using catalog and identification tags you can create proactive policies, knowing that they will apply to data sources as they are added to Immuta with the automated tagging.

    3. : Once you have your data sources and users, and policies granting them access, you can set up audit export. This will export the audit logs from policy changes and tagging updates.

    reference guide
    Configure your Amazon Redshift Spectrum integration

    Amazon Redshift Spectrum

    The sequence diagram below outlines the events that occur when an Immuta user who is subscribed to a data source submits a query in their AWS analytic engine.

    If a user is automatically subscribed to the data source by a policy, Immuta creates a Lake Formation tag for that user and data source they are subscribed to. If the user is manually added to a data source by the data owner, Immuta grants direct access to the table in Lake Formation.

    See the AWS Lake Formation documentation for more details about Lake Formation access controls.

    AWS Lake Formation is configured and data is registered through connections, an Immuta feature that allows administrators to register data objects in a technology through a single connection to make data registration more scalable for your organization.

    Once the Lake Formation connection is registered, you can author policies in Immuta to orchestrate Lake Formation access controls.

    See the AWS Lake Formation reference guide for more details about registering a connection.

    After Glue Data Catalog views and tables are registered in Immuta, you can author subscription policies in Immuta to orchestrate Lake Formation access controls. Once a subscription policy is applied, users can be subscribed to data sources in the following ways:

    • Manually subscribed: If a data owner manually adds a user to the data source, Immuta issues a grant directly to the data object in AWS.

    • Automatically subscribed through policy logic: When a policy is applied to a data source, users who meet the conditions of the policy will be automatically subscribed to the data source. Then, Immuta generates a Lake Formation tag and applies it to the corresponding data object in AWS and grants subscribers access to that tag, which in turn grants them access to the data. See the AWS Lake Formation reference guide for details about this process.

    Consider the following example that illustrates how Immuta enforces a subscription policy that only allows users in the analysts group to access the yellow-table. When this policy is authored and applied to the data source, Immuta generates a Lake Formation (LF) tag that is applied to the Glue Data Catalog yellow-table and permissions on that tag are granted to all AWS users (registered in Immuta) that are part of the analysts group.

    In the image above, the user in the analysts group accesses yellow-table, while the user who is a part of the research group is denied access.

    See the Author a subscription policy page for guidance on applying a subscription policy to a data source. See the Subscription policy access types page for details about the subscription policy types supported and permissions Immuta grants on securables registered as Immuta data sources.

    Registering a connection

    Protecting data

    Databricks Spark

    Learn about how you can register data from the Databricks legacy Hive metastore and govern access to that data

    This integration enforces policies on Databricks securables registered in the legacy Hive metastore. Once these securables are registered as Immuta data sources, users can query policy-enforced data on Databricks clusters.

    The guides in this section outline how to integrate Databricks Spark with Immuta.

    This getting started guide outlines how to integrate Databricks with Immuta.

    How-to guides

    • Configure a Databricks Spark integration: Configure the Databricks Spark integration.

    • Manually update your Databricks cluster: Manually update your cluster to reflect changes in the Immuta init script or cluster policies.

    • : Register a Databricks library with Immuta as a trusted library to avoid Immuta security manager errors when using third-party libraries.

    • : Raise the caching on-cluster and lower the cache timeouts for the Immuta web service to allow use of project UDFs in Spark jobs.

    • : Run R and Scala spark-submit jobs on your Databricks cluster.

    • : Access DBFS in Databricks for non-sensitive data.

    • : Resolve errors in the Databricks Spark configuration.

    • : This guide describes the design and components of the integration.

    • : This guide provides an overview of the Immuta features that provide security for your users and Databricks clusters and that allow you to prove compliance and monitor for anomalies.

    • : This guide provides an overview of registering Databricks securables and protecting them with Immuta policies.

    • : This guide provides an overview of how Databricks users access data registered in Immuta.

    Protecting Data

    Learn how Immuta enforces policies on data in your Databricks Lakebase environment

    In the Databricks Lakebase integration, Immuta administers PostgreSQL privileges on data registered in Immuta. Then, Immuta users who have been granted access to the tables can query them with policies enforced.

    The sequence diagram below outlines the events that occur when an Immuta user who is subscribed to a data source queries it in PostgreSQL.

    Registering a connection

    Databricks Lakebase is configured and data is registered through connections, an Immuta feature that allows administrators to register data objects in a technology through a single connection to make data registration more scalable for your organization.

    Once the Databricks Lakebase connection is registered, you can author subscription policies in Immuta to enforce access controls.

    See the Databricks Lakebase connection reference guide for more details about registering a connection.

    Protecting data

    After tables are registered in Immuta, you can author subscription policies in Immuta to enforce access controls.

    When a policy is applied to a data source, users who meet the conditions of the policy will be automatically subscribed to the data source. Then, Immuta issues a SQL statement in PostgreSQL that grants the SELECT privilege to users on those tables.

    Consider the following example that illustrates how Immuta enforces a subscription policy that only allows users in the analysts group to access to yellow-table. When this policy is authored and applied to the data source, Immuta issues a SQL statement in PostgreSQL that grants the SELECT privilege on yellow-table to users (registered in Immuta) that are part of the analysts group.

    In the image above, the user in the analysts group accesses yellow-table, while the user who is a part of the research group is denied access.

    See the for guidance on applying a subscription policy to a data source. See the page details about the subscription policy types supported and PostgreSQL privileges Immuta grants on tables registered as Immuta data sources.

    Manually Update Your Databricks Cluster

    Manually update your Databricks cluster to reflect changes in cluster policies or the Immuta init script

    If a Databricks cluster needs to be manually updated to reflect changes in the Immuta init script or cluster policies, you can remove and set up your integration again to get the updated policies and init script.

    1. Log in to Immuta as an Application Admin.

    2. Click the App Settings icon in the navigation menu and scroll to the Integration Settings section.

    3. Your existing Databricks Spark integration should be listed here; expand it and note the configuration values. Now select Remove to remove your integration.

    4. Click Add Integration and select Databricks Integration to add a new integration.

    5. Enter your Databricks Spark integration settings again as configured previously.

    6. Click Add Integration to add the integration, and then select Configure Cluster Policies to set up the updated cluster policies and init script.

    7. Select the cluster policies you wish to use for your Immuta-enabled Databricks clusters.

    8. Automatically push cluster policies and the init script (recommended) or manually update your cluster policies.

      • Automatically push cluster policies

        1. Select Automatically Push Cluster Policies and enter your privileged Databricks access token. This token must have privileges to write to cluster policies.

    9. Restart any Databricks clusters using these updated policies for the changes to take effect.

    AWS Lake Formation

    Learn about how you can register data from the Glue Data Catalog and enforce object-level access controls on data queried by Amazon Athena, Amazon EMR Spark, and Amazon Redshift Spectrum

    Public preview: This feature is available to all accounts.

    In the Lake Formation integration, Immuta orchestrates Lake Formation access controls on data registered in the Glue Data Catalog. Then, Immuta users who have been granted access to the Glue Data Catalog table or view can query it using one of these analytic engines:

    • Amazon Athena

    • Amazon EMR Spark

    • Amazon Redshift Spectrum

    This getting started guide outlines how to integrate AWS Lake Formation with Immuta.

    • : This guide describes the design and components of the integration.

    • : This guide provides an overview of the Immuta features that provide security for your users and that allow you to prove compliance and monitor for anomalies.

    • : This guide provides an overview of how to protect AWS securables with Immuta policies.

    • : This guide provides an overview of how AWS users access data registered in Immuta.

    Migrating to Unity Catalog

    Move your data to Unity Catalog and re-register those securables in Immuta so Immuta can administer Unity Catalog access controls

    When you enable Unity Catalog, Immuta automatically migrates your existing Databricks data sources in Immuta to reference the legacy hive_metastore catalog to account for Unity Catalog's three-level hierarchy. New data sources will reference the Unity Catalog metastore you create and attach to your Databricks workspace.

    Because the hive_metastore catalog is not managed by Unity Catalog, existing data sources in the hive_metastore cannot have Unity Catalog access controls applied to them. Data sources in the Hive Metastore must be managed by the Databricks Spark integration.

    To allow Immuta to administer Unity Catalog access controls on that data, move the data to Unity Catalog and re-register those tables in Immuta by completing the steps below. If you don't move all data before configuring the integration, metastore magic will protect your existing data sources throughout the migration process.

    1. Ensure that all Databricks clusters that have Immuta installed are stopped and the Immuta configuration is removed from the cluster. Immuta-specific cluster configuration is no longer needed with the Databricks Unity Catalog integration.

    2. Move all data into Unity Catalog before configuring Immuta with Unity Catalog. Existing data sources will need to be re-created after they are moved to Unity Catalog and the Unity Catalog integration is configured.

    3. .

    Install a Trusted Library

    Install a third-party library as trusted to enable that library's code to bypass the Immuta security manager

    1. In the Databricks Clusters UI, install your third-party library .jar or Maven artifact with Library Source Upload, DBFS, DBFS/S3, or Maven. Alternatively, use the Databricks libraries API.

    2. In the Databricks Clusters UI, add the IMMUTA_SPARK_DATABRICKS_TRUSTED_LIB_URIS property as a Spark environment variable and set it to your artifact's URI. To specify more than one trusted library, comma delimit the URIs:

    For Maven artifacts, the URI is maven:/<maven_coordinates>, where <maven_coordinates> is the Coordinates field found when clicking on the installed artifact on the Libraries tab in the Databricks Clusters UI. Here's an example of an installed artifact:

    In this example, you would add the following Spark environment variable:

    For jar artifacts, the URI is the Source field found when clicking on the installed artifact on the Libraries tab in the Databricks Clusters UI. For artifacts installed from DBFS or S3, this ends up being the original URI to your artifact. For uploaded artifacts, Databricks will rename your .jar and put it in a directory in DBFS. Here's an example of an installed artifact:

    In this example, you would add the following Spark environment variable:

    1. Once you've finished making your changes, restart the cluster.

    2. Once the cluster is up, execute a command in a notebook. If the trusted library installation is successful, you should see driver log messages like this:

    Accessing Data

    Learn how end users can access policy-enforced data using Amazon Athena, Amazon EMR Spark, or Amazon Redshift Spectrum

    Once data is registered through the AWS Lake Formation connection, you will access your data in one of these AWS analytic engines as you normally would:

    • Amazon Athena

    • Amazon EMR Spark

    • Amazon Redshift Spectrum

    If you are subscribed to the data source, Immuta either directly grants you access to the resource through Lake Formation or generates and assigns a Lake Formation tag to that resource to grant you access. See the for details about how policies are enforced.

    When you submit a query, the analytic engine requests metadata from Glue Data Catalog, which then queries Lake Formation to determine what data you are allowed to see. Then, the analytic engine requests temporary access from Lake Formation, retrieves the data from S3, and filters the data to return policy-enforced data to you.

    The diagram below illustrates how the analytic engine interacts with Glue Data Catalog and Lake Formation to access data.

    Databricks Spark Integration Configuration

    Learn how the Databricks Spark integration works to govern data access

    The Databricks Spark integration is one of two integrations Immuta offers for Databricks.

    In this integration, Immuta installs an Immuta-maintained Spark plugin on your Databricks cluster. When a user queries data that has been registered in Immuta as a data source, the plugin injects policy logic into the plan Spark builds so that the results returned to the user only include data that specific user should see.

    The reference guides in this section are written for Databricks administrators who are responsible for setting up the integration, securing Databricks clusters, and setting up users:

    • Installation and compliance: This guide includes information about what Immuta creates in your Databricks environment and securing your Databricks clusters.

    • : Consult this guide for information about customizing the Databricks Spark integration settings.

    • : Consult this guide for information about connecting data users and setting up user impersonation.

    • : This guide provides a list of Spark environment variables used to configure the integration.

    • : This guide describes ephemeral overrides and how to configure them to reduce the risk that a user has overrides set to a cluster (or multiple clusters) that aren't currently up.

    Security and Compliance

    Understand the authentication methods and audit features supported by the AWS Lake Formation integration to ensure you are meeting your organization's security and compliance needs

    Immuta offers several features to provide security for your users and to prove compliance and monitor for anomalies.

    Authentication

    Registering the connection

    The Lake Formation integration supports the following authentication methods to register a connection:

    • Access using AWS IAM role (recommended): Immuta will assume this role when interacting with the AWS API. This option allows you to provide Immuta with an IAM role from your AWS account that is granted a trust relationship with Immuta's IAM role. Immuta will assume this IAM role from Immuta's AWS account in order to perform any operations in your AWS account.

    • Access using access key and secret access key: These credentials are used temporarily by Immuta to register the connection.

    Identity providers for user authentication

    The built-in Immuta IAM can be used as a complete solution for authentication and user entitlement. However, you can connect your existing identity management provider to Immuta to use that system for authentication and user entitlement instead.

    Each of the supported identity providers includes a specific set of configuration options that enable Immuta to communicate with the IAM system and map the users, permissions, groups, and attributes into Immuta.

    See the for a list of supported providers and details.

    See the for details about user provisioning and mapping AWS user accounts to Immuta.

    Immuta provides governance reports so that data owners and governors can monitor users' access to data and detect anomalies in behavior.

    Immuta governance reports allow users with the GOVERNANCE Immuta permission to use a natural language builder to instantly create reports that delineate user activity across Immuta. These reports can be based on various entity types, including users, groups, projects, data sources, purposes, policy types, or connection types.

    See the page for a list of report types and guidance.

    Azure Synapse Analytics

    Learn about how Immuta generates policy-enforced views in your Azure Synapse Analytics Dedicated SQL pool to govern your data

    In this integration, Immuta generates policy-enforced views in a schema in your configured Azure Synapse Analytics Dedicated SQL pool for tables registered as Immuta data sources.

    This guide outlines how to integrate Azure Synapse Analytics with Immuta.

    How-to guide

    Azure Synapse Analytics configuration: Configure the integration in Immuta.

    Reference guide

    Azure Synapse Analytics integration reference guide: This guide describes the design and components of the integration.

    Accessing Data

    Learn how end users can access policy-enforced data in Databricks Lakebase through PostgreSQL

    Once data is registered through the Databricks Lakebase connection, you will access your data as you normally would through the PostgreSQL connection. If you are subscribed to the data source, Immuta grants you access to the data through a PostgreSQL role.

    When you submit a query through the PostgreSQL connection, the PostgreSQL client submits the SQL query to the PostgreSQL server, which then processes the query and determines what data your role is allowed to see. Then, the PostgreSQL server queries the database and returns the query results to the PostgreSQL client, which then returns policy-enforced data to you.

    The diagram below illustrates how Immuta, the PostgreSQL server, and PostgreSQL client interact to access data.

    Accessing Data

    Learn how end users can access policy-enforced data in PostgreSQL

    Once data is registered through the PostgreSQL connection, you will access your data through your PostgreSQL client as you normally would. If you are subscribed to the data source, Immuta grants you access to the data in PostgreSQL.

    When you submit a query, the PostgreSQL client submits the SQL query to the PostgreSQL server, which then processes the query and determines what data your role is allowed to see. Then, the PostgreSQL server queries the database and returns the query results to the PostgreSQL client, which then returns policy-enforced data to you.

    The diagram below illustrates how Immuta, the PostgreSQL server, and PostgreSQL client interact to access data.

    Amazon Redshift Integration

    Learn about how you can register data from Amazon Redshift and govern access to that data

    This page describes the recommended workflow for setting up Immuta with . Following these steps connects your Amazon Redshift environment, registers users, ingests metadata, and enables automated governance through global policies and access requests.

    To complete this workflow, ensure you have:

    • Access to an Amazon Redshift account and the permissions required to configure the connection

    • An Immuta application administrator who can register the connection

    For the recommended implementation described on this page, you should also have:

    Register an Amazon Redshift Connection

    Register your Amazon Redshift data and map your user accounts into Immuta

    The user registering the connection must have the permissions below.

    • APPLICATION_ADMIN Immuta permission

    • The Amazon Redshift user registering the connection must be a superuser or have the following Amazon Redshift privileges:

    Getting Started with AWS Lake Formation

    Learn how to best implement Immuta with AWS Lake Formation in your data ecosystem

    The how-to guides linked on this page illustrate how to use AWS Lake Formation with Immuta. See the for information about the AWS Lake Formation integration.

    1

    Connect your technology

    These guides provide instructions on getting your data set up in Immuta for the Request and Govern apps.

    1. : Using a single setup process, connect AWS Lake Formation to Immuta. This will register your data objects in Immuta and allow you to start dictating access through access requests or global policies.

    Getting Started with Databricks Lakebase

    Learn how to best implement Immuta with Databricks Lakebase in your data ecosystem

    The how-to guides linked on this page illustrate how to use Databricks Lakebase with Immuta. See the reference guide for information about the Databricks Lakebase integration.

    1

    Connect your technology

    These guides provide instructions on getting your data set up in Immuta for the Request and Govern apps.

    1. : Using a single setup process, connect Databricks Lakebase to Immuta. This will register your data objects in Immuta and allow you to start dictating access through access requests or global policies.

    Databricks Unity Catalog

    Learn how Databricks can enforce Immuta policies automatically across data in your Unity Catalog metastore

    The how-to guides linked on this page illustrate how to integrate Databricks Unity Catalog with Immuta. See the for information about the Databricks Unity Catalog integration.

    Requirements:

    • Unity Catalog and attached to a Databricks workspace. Immuta supports configuring a single metastore for each configured integration, and that metastore may be attached to multiple Databricks workspaces.

    • Unity Catalog enabled on your Databricks cluster or SQL warehouse. All SQL warehouses have Unity Catalog enabled if your workspace is attached to a Unity Catalog metastore.

    Getting Started with Azure Synapse Analytics

    Learn how to best implement Immuta with Azure Synapse Analytics in your data ecosystem

    The how-to guides linked on this page illustrate how to integrate Azure Synapse Analytics with Immuta. See the for information about the Azure Synapse Analytics integration.

    Requirement: A running Dedicated SQL pool

    1

    Connect your technology

    These guides provide instructions on getting your data set up in Immuta for the Request and Govern apps.

    Getting Started with Databricks Spark

    Learn how to best implement Immuta with Databricks Spark in your data ecosystem

    The how-to guides linked on this page illustrate how to integrate Databricks Spark with Immuta.

    Requirements

    • If Databricks Unity Catalog is enabled in a Databricks workspace, you must use an when you set up the Databricks Spark integration to create an Immuta-enabled cluster.

    • If Databricks Unity Catalog is not enabled in your Databricks workspace, you must disable Unity Catalog in your Immuta tenant before proceeding with your configuration of Databricks Spark:

    Databricks Lakebase

    Learn about how you can register data from Databricks Lakebase and govern access to that data

    The Databricks Lakebase integration registers data from Databricks Lakebase in Immuta and enforces subscription policies on that data.

    This getting started guide outlines how to connect Databricks Lakebase to Immuta.

    • : This guide describes the design and components of the integration.

    • : This guide provides an overview of the Immuta features that provide security for your users and that allow you to prove compliance and monitor for anomalies.

    Project UDFs Cache Settings

    Lower the web service cache timeout settings of project UDFs

    This page outlines the configuration for setting up project UDFs, which allow users to set their current project in Immuta through Spark. For details about the specific functions available and how to use them, see the .

    1. Lower the web service cache timeout in Immuta:

      1. Click the App Settings icon and scroll to the HDFS Cache Settings section.

    Security and Compliance

    Understand the authentication methods and audit features supported by the Databricks Lakebase integration to ensure you are meeting your organization's security and compliance needs

    Immuta offers several features to provide security for your users and to prove compliance and monitor for anomalies.

    The Databricks Lakebase connection supports OAuth machine-to-machine (M2M) authentication to register a connection.

    The Databricks Lakebase connection authenticates as a Databricks identity and generates an OAuth token. Immuta then uses that token as a password when connecting to PostgreSQL. To enable secure, automated machine-to machine access to the database instance, the connection must obtain an OAuth token using a Databricks service principal. See the for more details.

    The built-in Immuta IAM can be used as a complete solution for authentication and user entitlement. However, you can connect your existing identity management provider to Immuta to use that system for authentication and user entitlement instead.

    Each of the supported identity providers includes a specific set of configuration options that enable Immuta to communicate with the IAM system and map the users, permissions, groups, and attributes into Immuta.

    See the for a list of supported providers and details.

    Manage Databricks Unity Catalog Connection Settings

    Manage Databricks Unity Catalog integration and connection settings

    1. Navigate to the connection or connection-backed object.

    2. Click Run Object Sync.

    1. Click the Edit button in the Connection details box.

    Security and Compliance in Google BigQuery

    Understand the authentication methods and audit features supported by the Google BigQuery viewless integration to ensure you are meeting your organization's security and compliance needs

    Immuta offers several features to provide security for your users and to prove compliance and monitor for anomalies.

    The Google BigQuery viewless integration supports the following authentication method to register a connection:

    • GCP service account key file: This is the private key file generated when you to use to connect to Google BigQuery. These credentials are used by Immuta to register the connection and maintain state between Immuta and Google BigQuery.

    The built-in Immuta IAM can be used as a complete solution for authentication and user entitlement. However, you can connect your existing identity management provider to Immuta to use that system for authentication and user entitlement instead.

    Each of the supported identity providers includes a specific set of configuration options that enable Immuta to communicate with the IAM system and map the users, permissions, groups, and attributes into Immuta.

    PostgreSQL

    Learn about how you can register data from PostgreSQL and enforce object-level access controls on that data

    In the PostgreSQL integration, Immuta registers data from PostgreSQL and enforces subscription policies on that data.

    This getting started guide outlines how to integrate PostgreSQL with Immuta.

    • : This guide describes the design and components of the integration.

    • : This guide provides an overview of the Immuta features that provide security for your users and that allow you to prove compliance and monitor for anomalies.

    Protecting Data

    Learn how Immuta enforces policies on data in your PostgreSQL environment

    In the PostgreSQL integration, Immuta administers PostgreSQL privileges on data registered in Immuta. Then, Immuta users who have been granted access to the tables can query them with policies enforced.

    The sequence diagram below outlines the events that occur when an Immuta user who is subscribed to a data source queries it in PostgreSQL.

    PostgreSQL is configured and data is registered through , an Immuta feature that allows administrators to register data objects in a technology through a single connection to make data registration more scalable for your organization.

    Once the PostgreSQL connection is registered, you can author subscription policies in Immuta to enforce access controls.

    See the for more details about registering a connection.

    After tables are registered in Immuta, you can author subscription policies in Immuta to enforce access controls.

    When a policy is applied to a data source, users who meet the conditions of the policy will be

    Select
    Apply Policies
    to push the cluster policies and init script again.
  • Click Save and Confirm to deploy your changes.

  • Manually update cluster policies

    1. Download the init script and the new cluster policies to your local computer.

    2. Click Save and Confirm to save your changes in Immuta.

    3. Log in to your Databricks workspace with your administrator account to set up cluster policies.

    4. Get the path you will upload the init script (immuta_cluster_init_script_proxy.sh) to by opening one of the cluster policy .json files and looking for the defaultValue of the field init_scripts.0.dbfs.destination. This should be a DBFS path in the form of dbfs:/immuta-plugin/hostname/immuta_cluster_init_script_proxy.sh.

    5. Click Data in the left pane to upload your init script to DBFS to the path you found above.

    6. To find your existing cluster policies you need to update, click Compute in the left pane and select the Cluster policies tab.

    7. Edit each of these cluster policies that were configured before and overwrite the contents of the JSON with the new cluster policy JSON you downloaded.

  • Respond to an access request
    Configure audit

    Getting started with AWS Lake Formation

    How-to guide

    Reference guides

    Register an AWS Lake Formation connection
    AWS Lake Formation
    Security and compliance
    Protecting data
    Accessing data
    Register a Unity Catalog connection
    Customizing the integration
    Setting up users
    Spark environment variables
    Ephemeral overrides

    Auditing and compliance

    Identity managers guide
    AWS Lake Formation reference guide
    Governance report types

    Reference guides

    Install a trusted library
    Project UDFs cache settings
    Run R and Scala spark-submit jobs on Databricks
    DBFS access
    Troubleshooting
    Databricks Spark integration configuration
    Security and compliance
    Registering and protecting data
    Accessing data
    Getting started
    Getting started

    Protecting data: This guide provides an overview of how to protect securables with Immuta policies.

  • Accessing data: This guide provides an overview of how Databricks Lakebase users access data registered in Immuta.

  • Public preview: This integration is available to all accounts that request to enable it for their tenant. Contact your Immuta representative to enable it.

    Getting started with Databricks Lakebase

    How-to guide

    Reference guides

    Register a Databricks Lakebase connection
    Databricks Lakebase integration
    Security and compliance
    Lower the Cache TTL of HDFS user names (ms) to 0.
  • Click Save.

  • Raise the cache timeout on your Databricks cluster: In the Spark environment variables section, set the IMMUTA_CURRENT_PROJECT_CACHE_TIMEOUT_SECONDS and IMMUTA_PROJECT_CACHE_TIMEOUT_SECONDS to high values (like 10000).

    Note: These caches will be invalidated on cluster when a user calls immuta.set_current_project, so they can effectively be cached permanently on cluster to avoid periodically reaching out to the web service.

  • Use project UDFs in Databricks Spark

    Currently, caches are not all invalidated outside of Databricks because Immuta caches information pertaining to a user's current project. Consequently, this feature should only be used in Databricks.

    Use Project UDFs (Databricks) page

    Protecting data: This guide provides an overview of how to protect securables with Immuta policies.

  • Accessing data: This guide provides an overview of how PostgreSQL users access data registered in Immuta.

  • Public preview: This integration is available to all accounts that request to enable it for their tenant. Contact your Immuta representative to enable it.

    Getting started with PostgreSQL

    How-to guide

    Reference guides

    Register a PostgreSQL connection
    PostgreSQL integration
    Security and compliance
    Protecting data page
    When users submit a query against a data source they are subscribed to, the analytic engine requests metadata from Glue Data Catalog, which then queries Lake Formation to determine what data the user is allowed to see. Then, the analytic engine requests temporary access from Lake Formation, retrieves the data from S3, and filters the data to return policy-enforced data to the user.
    Author a subscription policy page
    Subscription policy access types
    After a user subscribes to a data source, Immuta issues GRANT statements that assign a role and object privileges to that user in PostgreSQL. PostgreSQL then stores that role in an internal system catalog, and when a user submits a query to the PostgreSQL client, PostgreSQL returns the data the user's role is allowed to see. The PostgreSQL client then returns that data to the user.
    See the Databricks Lakebase integration reference guide for details about user provisioning and mapping user accounts to Immuta.

    Immuta provides governance reports so that data owners and governors can monitor users' access to data and detect anomalies in behavior.

    Immuta governance reports allow users with the GOVERNANCE Immuta permission to use a natural language builder to instantly create reports that delineate user activity across Immuta. These reports can be based on various entity types, including users, groups, projects, data sources, purposes, policy types, or connection types.

    See the Governance report types page for a list of report types and guidance.

    Authentication

    Registering the connection

    Identity providers for user authentication

    Databricks OAuth machine-to-machine (M2M) authentication page
    Identity managers guide

    Auditing and compliance

    See the Identity managers guide for a list of supported providers and details.

    See the Google BigQuery viewless integration reference guide for details about user provisioning and mapping user accounts to Immuta.

    Immuta provides governance reports so that data owners and governors can monitor users' access to data and detect anomalies in behavior.

    Immuta governance reports allow users with the GOVERNANCE Immuta permission to use a natural language builder to instantly create reports that delineate user activity across Immuta. These reports can be based on various entity types, including users, groups, projects, data sources, purposes, policy types, or connection types.

    See the Governance report types page for a list of report types and guidance.

    Authentication

    Registering the connection

    Identity providers for user authentication

    create a Google Cloud service account and role for Immuta

    Auditing and compliance

    The coordinate field includes the following Maven coordinate: com.github.immuta.hadoop.immuta-spark-third-party-maven-lib-test:2020-11-17-144644.
    The source field includes the following URI: dbfs:/immuta/bstabile/jars/immuta-spark-third-party-lib-test.jar.
    IMMUTA_SPARK_DATABRICKS_TRUSTED_LIB_URIS=maven:/com.github.immuta.hadoop.immuta-spark-third-party-maven-lib-test:2020-11-17-144644
    IMMUTA_SPARK_DATABRICKS_TRUSTED_LIB_URIS=maven:/my.group.id:my-package-id:1.2.3
    TrustedLibraryUtils: Successfully found all configured Immuta configured trusted libraries in Databricks.
    TrustedLibraryUtils: Wrote trusted libs file to [/databricks/immuta/immutaTrustedLibs.json]: true.
    TrustedLibraryUtils: Added trusted libs file with 1 entries to spark context.
    TrustedLibraryUtils: Trusted library installation complete.
    IMMUTA_SPARK_DATABRICKS_TRUSTED_LIB_URIS=dbfs:/immuta/bstabile/jars/immuta-spark-third-party-lib-test.jar

    An enterprise identity provider

  • Identified owners or stewards for your major data domains

  • An understanding of the metadata maintained in your external catalog, if you use one

  • 1

    Connect your Amazon Redshift environment

    1. An application administrator will register the Amazon Redshift connection to allow Immuta to discover databases, schemas, and tables in Amazon Redshift. As object sync runs, Immuta creates corresponding data sources that can be governed through policies or access requests.

    2. After registering the connection, organize your data into domains. Domains assign ownership of data to the appropriate teams and determine who can manage policies, identification, audit, and access workflows for those data sources.

    Once your data sources are registered in Immuta and organized into domains, you can apply policy to them.

    lightbulb

    Start by registering a select Amazon Redshift business domain by . Once your implementation is established, you can onboard additional data sources using the same governance model.

    2
    1. and configure SSO so that users can authenticate with their existing credentials and be automatically registered in Immuta.

      1. If your identity provider supports SCIM, . These attributes can then be used when authoring policies so access automatically changes as the user information in the IAM is synced with Immuta.

    2. After your identity provider is configured, . This ensures that policies written in Immuta are enforced for the correct users when they query data in Amazon Redshift.

    Once your users are registered and mapped to their Amazon Redshift identities, any policies that apply to data sources will be enforced for those users.

    3

    Metadata allows you to author policies that automatically apply across your Amazon Redshift environment instead of managing individual tables and columns.

    1. If your organization already maintains metadata in an external catalog, so Immuta continuously synchronizes tags, classifications, and descriptions.

    2. You can also . Identification is recommended for all deployments and is especially useful if you do not maintain an external catalog.

    Once your data sources are tagged in Immuta, you can author global policies based on those tags. These policies can apply automatically as additional data sources are registered through object sync and tagged.

    4

    Once users and metadata are available, begin authoring global policies that automatically protect your data.

    1. to automatically grant access to users who meet the required conditions. You can also use subscription policies to enforce organization-wide requirements, such as limiting access to users with specific attributes or training before access can be granted.

    2. to mask sensitive columns or filter rows based on metadata such as catalog or identification tags.

    Author global policies using metadata and user attributes instead of individual Amazon Redshift objects or users. This allows the same policies to automatically apply as new data is registered and users are synchronized into Immuta.

    5

    Subscription policies can automatically grant access when users meet the required conditions. For access that requires review, configure the .

    1. A governance user will and attach them to assets so users can request access to Amazon Redshift data from .

    2. Data stewards can then , and Immuta automatically provisions access when requests are approved.

    Once access requests are configured, users can request access from your external catalog, and Immuta will route the request for review and provision access when it is approved.

    6

    After your data, users, and policies are configured, .

    Audit records provide visibility into policy evaluations, access requests, policy changes, and metadata updates, allowing your organization to monitor how data is accessed and governed across your Amazon Redshift environment.

    After completing this workflow, your Amazon Redshift environment is ready for automated governance. From here you can continue configuring advanced features, refining policies, and onboarding additional Amazon Redshift data sources. See the Amazon Redshift integration reference guide for architecture details, platform behavior, and additional configuration options.

    Before you begin

    Amazon Redshift
    lightbulb

    Completing this workflow typically requires coordination among an Immuta application administrator, an Amazon Redshift administrator, an identity administrator, governance users, and data stewards.

    Next steps

    CREATEDB
  • CREATE USER

  • sys:secadmin role

  • USAGE on all databases and schemas that contain data you want to register

  • The following privileges WITH GRANT OPTION on objects registered in Immuta:

    • DELETE

    • INSERT

    • SELECT

    • TRUNCATE

    • UPDATE

  • For descriptions and explanations of privileges Immuta needs to enforce policies and maintain state in Amazon Redshift, see the Amazon Redshift integration reference guide.

    Enable Amazon Redshift masking on data objects Immuta will protect using the ALTER TABLE command with the MASKING ON clause.

    See the Amazon Redshift documentation for details.

    1. Create a new database user in Redshift to serve as the Immuta system account. Immuta will use this system account continuously to crawl the connection.

    2. Grant this account the following Redshift privileges:

      • USAGE on all databases and schemas that contain data you want to register

      • CREATE ROLE

      • sys:secadmin role

      • The following privileges WITH GRANT OPTION on objects registered in Immuta:

        • DELETE

        • INSERT

    1. Create a new role in Amazon Redshift called immuta_exemption.

    2. Grant any users who should be exempt from Immuta data policies to this role.

    1. In your Amazon Redshift environment, create an Immuta database that Immuta can use to connect to your Amazon Redshift instance to register the connection and maintain state with Amazon Redshift.

      Having this separate database for Immuta prevents custom ETL processes or jobs deleting the database you use to register the connection, which would break the connection.

    2. In Immuta, click database Data and select Connections in the navigation menu.

    3. Click the + Add Connection button.

    4. Select the Amazon Redshift tile.

    5. Enter the connection information:

      1. Display Name: This is the name of your new connection. This name will be used in the API (connectionKey), in data source names from the host, and on the connections page. Avoid the use of periods (.) or

    6. Enter the username and password of the .

    7. Click Next.

      1. Opt to Enable Object Sync, which will keep your connection objects up to date with your Redshift environment.

        1. Select the Start Time for when the first object sync job will run each day.

    8. Click Save connection.

    9. Copy the provided script and run it in Redshift as a user with the privileges .

    10. Click Validate Connection.

    11. If the connection is successful, click Finish. If there are any errors, check the connection details and credentials to ensure they are correct and try again.

    Permissions

    Prerequisites

    Create the database user

    Register the connection

    MD5 unsupported

    Passwords hashed using MD5 are unsupported for authentication.

    Organize your data sources into domains and assign domain permissions to accountable teams: Use domains to segment your data and assign responsibilities to the appropriate team members. These domains will then be used to manage permissions to publish data policies, author policies, view audit, and manage identification.

    2

    Register your users

    These guides provide instructions on getting your users set up in Immuta for the Request and Govern apps.

    1. Connect an IAM: Bring the IAM your organization already uses and allow Immuta to register your users for you.

    2. Map external user IDs from AWS to Immuta: Ensure the user IDs in Immuta, AWS, and your IAM are aligned so that the right policies impact the right users.

    3

    Start using the Request app

    These guides provide instructions on using the Request app for the first time.

    1. Set up a request form for your assets: Once you register your data, assets will appear in the Request app where you can attach request forms.

    2. Add access request links to your catalog: After you set up request forms, you can put access request links in your catalog for your data consumers to click. This will take them to the Request app to fill out the request form to request access to data.

    3. : To grant access to data, data stewards will respond to the access request.

    4

    Add data metadata

    These guides provide instructions on getting your data metadata set up in Immuta for the Govern app.

    1. Connect an external catalog: Bring the external catalog your organization already uses and allow Immuta to continually sync your tags with your data sources for you.

    2. Run identification: Identification allows you to automate data tagging using identifiers that detect certain data patterns.

    5

    Start using the Govern app

    These guides provide instructions on using the Govern app for the first time.

    1. Author a global subscription policy: Once you add your data metadata to Immuta, you can immediately create policies that utilize your tags and apply to your tables. Subscription policies can be created to dictate access to data sources.

    2. Configure audit: Once you have your data sources and users, and policies granting them access, you can set up audit export. This will export the audit logs from policy changes and tagging updates.

    Public preview: This feature is available to all accounts.

    reference guide
    Register your AWS Lake Formation connection

    Organize your data sources into domains and assign domain permissions to accountable teams: Use domains to segment your data and assign responsibilities to the appropriate team members. These domains will then be used to manage permissions for publishing data products, authoring policies, viewing audit and managing identification.

    2

    Register your users

    These guides provide instructions on getting your users set up in Immuta for the Request and Govern apps.

    1. Connect an IAM: Bring the IAM your organization already uses and allow Immuta to register your users for you.

    2. Map external user IDs to Immuta: Ensure the user IDs in Immuta and your data platform are aligned so that the right policies impact the right users. This step can be completed during initial configuration of your IAM or after it has been connected to Immuta.

    3

    Start using the Request app

    These guides provide instructions on using the Request app for the first time.

    1. Set up a request form for your assets: Once you register your data, assets will appear in the Request app where you can attach request forms.

    2. Add access request links to your catalog: After you set up request forms, you can put access request links in your catalog for your data consumers to click. This will take them to the Request app to fill out the request form to request access to data.

    3. : To grant access to data, data stewards will respond to the access request.

    4

    Add data metadata

    These guides provide instructions on getting your data metadata set up in Immuta for the Govern app.

    1. Connect an external catalog: Bring the external catalog your organization already uses and allow Immuta to continually sync your tags with your data sources for you.

    2. Run identification: Identification allows you to automate data tagging using identifiers that detect certain data patterns.

    5

    Start using the Govern app

    These guides provide instructions on using the Govern app for the first time.

    1. Author a global subscription policy: Once you add your data metadata to Immuta, you can immediately create policies that utilize your tags and apply to your tables. Subscription policies can be created to dictate access to data sources.

    2. Configure audit: Once you have your data sources and users, and policies granting them access, you can set up audit export. This will export the audit logs from policy changes and tagging updates.

    Public preview: This integration is available to all accounts that request to enable it for their tenant. Contact your Immuta representative to enable it.

    Register your Databricks Lakebase connection
    1

    Connect your technology

    These guides provide instructions on getting your data set up in Immuta for the Request and Govern apps.

    1. Register your Databricks Unity Catalog connection: Using a single setup process, connect Databricks Unity Catalog to Immuta. This will register your data objects into Immuta and allow you to start dictating access through access requests or global policies.

    2. Organize your data sources into domains and assign domain permissions to accountable teams: Use domains to segment your data and assign responsibilities to the appropriate team members. These domains will then be used to manage permissions for publishing data products, authoring policies, viewing audit and managing identification.

    2

    Register your users

    These guides provide instructions on getting your users set up in Immuta for the Request and Govern apps.

    1. Connect an IAM: Bring the IAM your organization already uses and allow Immuta to register your users for you.

    2. Map external user IDs from Databricks to Immuta: Ensure the user IDs in Immuta, Databricks, and your IAM are aligned so that the right policies impact the right users.

    3

    Start using the Request app

    These guides provide instructions on using the Request app for the first time.

    1. Set up a request form for your assets: Once you register your data, assets will appear in the Request app where you can attach request forms.

    2. Add access request links to your catalog: After you set up request forms, you can put access request links in your catalog for your data consumers to click. This will take them to the Request app to fill out the request form to request access to data.

    3. : To grant access to data, data stewards will respond to the access request.

    4

    Add data metadata

    These guides provide instructions on getting your data metadata set up in Immuta for the Govern app.

    1. Connect an external catalog: Bring the external catalog your organization already uses and allow Immuta to continually sync your tags with your data sources for you.

    2. Run identification: Identification allows you to automate data tagging using identifiers that detect certain data patterns.

    5

    Start using the Govern app

    These guides provide instructions on using the Govern app for the first time.

    1. Author a global subscription policy: Once you add your data metadata to Immuta, you can immediately create policies that utilize your tags and apply to your tables. Subscription policies can be created to dictate access to data sources.

    2. Author a global data policy: Data metadata can also be used to create data policies that apply to data sources as they are registered in Immuta. Data policies dictate what data a user can see once they are granted access to a data source. Using catalog and identification tags you can create proactive policies, knowing that they will apply to data sources as they are added to Immuta with the automated tagging.

    3. : Once you have your data sources and users, and policies granting them access, you can set up audit export. This will export the audit logs from user queries, policy changes, and tagging updates.

    reference guide
    metastore created
    : Configure an Azure Synapse Analytics integration with Immuta so that Immuta can create policy protected views for your users to query.
  • Register Azure Synapse Analytics data sources: This will register your data objects into Immuta and allow you to start dictating access through access requests or global policies.

  • Organize your data sources into domains and assign domain permissions to accountable teams: Use domains to segment your data and assign responsibilities to the appropriate team members. These domains will then be used to manage permissions for publishing data products, authoring policies, and managing audit.

  • 2

    Register your users

    These guides provide instructions on getting your users set up in Immuta for the Request and Govern apps.

    1. Connect an IAM: Bring the IAM your organization already uses and allow Immuta to register your users for you.

    2. Map external user IDs from Azure Synapse Analytics to Immuta: Ensure the user IDs in Immuta, Azure Synapse Analytics, and your IAM are aligned so that the right policies impact the right users.

    3

    Start using the Request app

    These guides provide instructions on using the Request app for the first time.

    1. Publish a data product: Once you register your data and users, you can immediately start publishing data products.

    2. Request access to a data product: Users must then request access to your data products in the Request app.

    3. : To grant access to a data product and its data sources, respond to the access request.

    4

    Add data metadata

    These guides provide instructions on getting your data metadata set up in Immuta for the Govern app.

    1. Connect an external catalog: Bring the external catalog your organization already uses and allow Immuta to continually sync your tags with your data sources for you.

    5

    Start using the Govern app

    These guides provide instructions on using the Govern app for the first time.

    1. Author a global subscription policy: Once you add your data metadata to Immuta, you can immediately create policies that utilize your tags and apply to your tables. Subscription policies can be created to dictate access to data sources.

    2. Author a global data policy: Data metadata can also be used to create data policies that apply to data sources as they are registered in Immuta. Data policies dictate what data a user can see once they are granted access to a data source. Using catalog tags you can create proactive policies, knowing that they will apply to data sources as they are added to Immuta with the automated tagging.

    3. : Once you have your data sources and users, and policies granting them access, you can set up audit export. This will export the audit logs from policy changes and tagging updates.

    reference guide
    Configure your Azure Synapse Analytics integration

    Navigate to the App Settings page and click Integration Settings.

  • Uncheck the Enable Unity Catalog checkbox.

  • Click Save.

  • 1

    Connect your technology

    These guides provide instructions for getting your data set up in Immuta.

    1. Configure your Databricks Spark integration.

    2. Register Databricks securable objects in Immuta as data sources.

    3. : Use domains to segment your data and assign responsibilities to the appropriate team members. These domains will then be used in policies, audit, and identification.

    2

    Register your users

    These guides provide instructions on setting up your users in Immuta.

    1. : Connect the IAM your organization already uses and allow Immuta to register your users for you.

    2. : Ensure the user IDs in Immuta, Databricks, and your IAM are aligned so that the right policies impact the right users.

    3

    Add data metadata

    These guides provide instructions on getting your data metadata set up in Immuta for use in policies.

    1. : Connect the external catalog your organization already uses and allow Immuta to continually sync your tags with your data sources for you.

    2. : Identification allows you to automate data tagging using identifiers that detect certain data patterns.

    4

    Protect and monitor data access

    These guides provide instructions on authoring policies and auditing data access.

    • : Once you add your data metadata to Immuta, you can immediately create policies that utilize your tags and apply to your tables. Subscription policies can be created to dictate access to data sources.

    • : Data metadata can also be used to create data policies that apply to data sources as they are registered in Immuta. Data policies dictate what data a user can see once they are granted access to a data source. Using catalog and identification tags you can create proactive policies, knowing that they will apply to data sources as they are added to Immuta with the automated tagging.

    Immuta cluster policy

    Edit the field you want:

    1. Host

    2. Port

    3. HTTP Path

    4. Immuta System Catalog

    5. HTTP Proxy settings

    6. Authentication Method: If you are editing the authentication method to be a different service principal, grant the new service account the .

  • Select Validate, and once the validation is successful, select Save.

    1. Click the Edit button in the Audit settings box.

    2. Opt to enable or disable Query Audit: If you enable audit, ensure the system account has the required permissions for audit.

    3. Select Validate, and once the validation is successful, select Save.

    1. Click the Edit button in the Object Sync settings box.

    2. Use the dropdown to select a new Start Time or Run Frequency.

    3. Select Save.

    1. Click the Edit button in the Data object settings box.

    2. Opt to enable or disable Policy Sync: When policy sync is enabled, all child objects will be represented by Immuta data sources and policies will be applied to the data sources.

    3. Opt to Add Users and Groups as data owners:

      1. Start typing in the text box and select the user or group from the dropdown.

      2. Click Add Owners.

    4. Click Save.

    Run object sync

    Edit the connection details

    Edit the audit settings

    Edit the object sync

    Edit the data object settings

    automatically subscribed to the data source
    . Then, Immuta issues a SQL statement in PostgreSQL that grants the SELECT privilege to users on those tables.

    Consider the following example that illustrates how Immuta enforces a subscription policy that only allows users in the analysts group to access the yellow-table. When this policy is authored and applied to the data source, Immuta issues a SQL statement in PostgreSQL that grants the SELECT privilege on yellow-table to users (registered in Immuta) that are part of the analysts group.

    In the image above, the user in the analysts group accesses yellow-table, while the user who is a part of the research group is denied access.

    See the Author a subscription policy page for guidance on applying a subscription policy to a data source. See the Subscription policy access types page for details about the subscription policy types supported and PostgreSQL privileges Immuta grants on tables registered as Immuta data sources.

    Registering a connection

    Protecting data

    connections
    PostgreSQL integration reference guide
    After a user subscribes to a data source, Immuta issues GRANT statements that assign a role and object privileges to that user in PostgreSQL. PostgreSQL then stores that role in an internal system catalog, and when a user submits a query to the PostgreSQL client, PostgreSQL returns the data the user's role is allowed to see. The PostgreSQL client then returns that data to the user.

    Troubleshooting Databricks Spark

    Troubleshoot common errors with the Databricks Spark integration

    This page provides guidelines for troubleshooting issues with the Databricks Spark integration and resolving Py4J security and Databricks trusted library errors.

    Debugging the integration

    For easier debugging of the Databricks Spark integration, follow the recommendations below.

    • Enable cluster init script logging:

      • In the cluster page in Databricks for the target cluster, navigate to Advanced Options -> Logging.

      • Change the Destination from NONE to DBFS and change the path to the desired output location. Note: The unique cluster ID will be added onto the end of the provided path.

    • View the Spark UI on your target Databricks cluster: On the cluster page, click the Spark UI tab, which shows the Spark application UI for the cluster. If you encounter issues creating Databricks data sources in Immuta, you can also view the JDBC/ODBC Server portion of the Spark UI to see the result of queries that have been sent from Immuta to Databricks.

    The validation and debugging notebook is designed to be used by or under the guidance of an Immuta support professional. Reach out to your Immuta representative for assistance.

    1. Import the notebook into a Databricks workspace by navigating to Home in your Databricks instance.

    2. Click the arrow next to your name and select Import.

    3. Once you have executed commands in the notebook and populated it with debugging information, export the notebook and its contents by opening the File menu, selecting Export, and then selecting DBC Archive.

    • Error Message: py4j.security.Py4JSecurityException: Constructor <> is not allowlisted

    • Explanation: This error indicates you are being blocked by Py4J security rather than the Immuta Security Manager. Py4J security is strict and generally ends up blocking many ML libraries.

    • Solution: Turn off Py4J security on the offending cluster by setting IMMUTA_SPARK_DATABRICKS_PY4J_STRICT_ENABLED=false in the environment variables section. Additionally, because there are limitations to the security mechanisms Immuta employs on-cluster when Py4J security is disabled, ensure that all users on the cluster have the same level of access to data, as users could theoretically see (policy-enforced) data that other users have queried.

    Check the driver logs for details. Some possible causes of failure include

    • One of the Immuta-configured trusted library URIs does not point to a Databricks library. Check that you have configured the correct URI for the Databricks library.

    • For trusted Maven artifacts, the URI must follow this format: maven:/group.id:artifact-id:version.

    • Databricks failed to install a library. Any Databricks library installation errors will appear in the Databricks UI under the Libraries tab.

    Security and Compliance

    Understand the authentication methods and audit features supported by the Databricks Unity Catalog integration to ensure you are meeting your organization's security and compliance needs

    Authentication methods

    Registering the connection

    The Databricks Unity Catalog integration supports the following authentication methods to register a connection. The credentials provided must be for an account with the permissions listed in the Register a Databricks Unity Catalog connection guide.

    • Personal access token (PAT)

    • OAuth machine-to-machine (M2M)

    Identity providers for user authentication

    The built-in Immuta IAM can be used as a complete solution for authentication and user entitlement. However, you can connect your existing identity management provider to Immuta to use that system for authentication and user entitlement instead.

    Each of the supported identity providers includes a specific set of configuration options that enable Immuta to communicate with the IAM system and map the users, permissions, groups, and attributes into Immuta.

    See the for a list of supported providers and details.

    See the for details about user provisioning and mapping user accounts to Immuta.

    Immuta provides auditing features and governance reports so that data owners and governors can monitor users' access to data and detect anomalies in behavior.

    You can view the information in these audit logs on or export the full audit logs to S3 and ADLS for long-term backup and processing with log data processors and tools. This capability fosters convenient integrations with log monitoring services and data pipelines.

    See the for details about these capabilities and how they work with the Databricks Unity Catalog integration.

    Immuta uses Databricks tables from the system catalog to understand the queries users make and present them in the query audit logs.

    The audit ingest is set when and can be scoped to only ingest specific workspaces if needed. The default ingest frequency is every 24 hours, but this can be configured to a different frequency on the . Additionally, audit ingestion can be manually requested at any time from the Immuta audit page. When manually requested, it will only search for new queries that were created since the last query that had been audited. The job is run in the background, so the new queries will not be immediately available.

    See the for details about the contents of the logs and an example of the resulting audit record.

    Immuta governance reports allow users with the GOVERNANCE Immuta permission to use a natural language builder to instantly create reports that delineate user activity across Immuta. These reports can be based on various entity types, including users, groups, projects, data sources, purposes, policy types, or connection types.

    See the page for a list of report types and guidance.

    Getting Started with PostgreSQL

    Learn how to best implement Immuta with PostgreSQL in your data ecosystem

    Public preview: This integration is available to all accounts that request to enable it for their tenant. Contact your Immuta representative to enable it.

    The how-to guides linked on this page illustrate how to use PostgreSQL with Immuta. See the reference guide for information about the PostgreSQL integration.

    1

    Connect your technology

    These guides provide instructions on getting your data set up in Immuta for the Request and Govern apps.

    1. Register your PostgreSQL connection: Using a single setup process, connect PostgreSQL to Immuta. This will register your data objects in Immuta and allow you to start dictating access through access requests or global policies.

    2. : Use domains to segment your data and assign responsibilities to the appropriate team members. These domains will then be used to manage permissions for publishing data products, authoring policies, viewing audit and managing identification.

    2

    Register your users

    These guides provide instructions on getting your users set up in Immuta for the Request and Govern apps.

    1. : Bring the IAM your organization already uses and allow Immuta to register your users for you.

    2. : Ensure the user IDs in Immuta and your data platform are aligned so that the right policies impact the right users. This step can be completed during initial configuration of your IAM or after it has been connected to Immuta.

    3

    Start using the Request app

    These guides provide instructions on using the for the first time.

    1. : Once you register your data, assets will appear in the Request app where you can attach request forms.

    2. : After you set up request forms, you can put access request links in your catalog for your data consumers to click. This will take them to the Request app to fill out the request form to request access to data.

    4

    Add data metadata

    These guides provide instructions on getting your data metadata set up in Immuta for the Govern app.

    1. : Bring the external catalog your organization already uses and allow Immuta to continually sync your tags with your data sources for you.

    2. : Identification allows you to automate data tagging using identifiers that detect certain data patterns.

    5

    Start using the Govern app

    These guides provide instructions on using the Govern app for the first time.

    1. : Once you add your data metadata to Immuta, you can immediately create policies that utilize your tags and apply to your tables. Subscription policies can be created to dictate access to data sources.

    2. : Once you have your data sources and users, and policies granting them access, you can set up audit export. This will export the audit logs from policy changes and tagging updates.

    Delta Lake API

    Learn how to use Spark SQL to achieve the same functionality as the Delta Lake API

    When using Delta Lake, the API does not go through the normal Spark execution path. This means that Immuta's Spark extensions do not provide protection for the API. To solve this issue and ensure that Immuta has control over what a user can access, the Delta Lake API is blocked.

    Spark SQL can be used instead to give the same functionality with all of Immuta's data protections.

    Requests

    Below is a table of the Delta Lake API with the Spark SQL that may be used instead.

    Delta Lake API
    Spark SQL

    See here for a complete list of the .

    When a table is created in a project workspace, you can merge a different Immuta data source from that workspace into that table you created.

    1. .

    2. Create a temporary view of the Immuta data source you want to merge into that table.

    3. Use that temporary view as the data source you add to the project workspace.

    4. Run the following command:

    DBFS Access

    Enable DBFS access in Databricks for non-sensitive data

    This page outlines how to enable access to DBFS in Databricks for non-sensitive data. Databricks administrators should place the desired configuration in the Spark environment variables.

    DBFS FUSE mount

    This Databricks feature mounts DBFS to the local cluster filesystem at /dbfs. Although disabled when using process isolation, this feature can safely be enabled if raw, unfiltered data is not stored in DBFS and all users on the cluster are authorized to see each other’s files. When enabled, the entirety of DBFS essentially becomes a scratch path where users can read and write files in /dfbs/path/to/my/file as though they were local files.

    DBFS FUSE mount limitation: This feature cannot be used in environments with E2 Private Link enabled.

    For example,

    %sh echo "I'm creating a new file in DBFS" > /dbfs/my/newfile.txt

    In Python,

    %python
    with open("/dbfs/my/newfile.txt", "w") as f:
      f.write("I'm creating a new file in DBFS")

    Note: This solution also works in R and Scala.

    Enable DBFS FUSE mount

    To enable the DBFS FUSE mount, set this configuration in the Spark environment variables: IMMUTA_SPARK_DATABRICKS_DBFS_MOUNT_ENABLED=true.

    Scratch paths will work when performing arbitrary remote filesystem operations with fs magic or Scala dbutils.fs functions. For example,

    To support %fs magic and Scala DBUtils with scratch paths, configure

    To use dbutils in Python, set this configuration: immuta.spark.databricks.py4j.strict.enabled=false.

    This section illustrates the workflow for getting a file from a remote scratch path, editing it locally with Python, and writing it back to a remote scratch path.

    1. Get the file from remote storage:

    2. Make a copy if you want to explicitly edit localScratchFile, as it will be read-only and owned by root:

    3. Write the new file back to remote storage:

    Ephemeral Overrides

    Learn about how Immuta uses ephemeral overrides to determine which cluster compute to use when connecting to Databricks for maintenance operations

    In the context of the Databricks Spark integration, Immuta uses the term ephemeral to describe data sources where the associated compute resources can vary over time. This means that the compute bound to these data sources is not fixed and can change. All Databricks data sources in Immuta are ephemeral.

    Ephemeral overrides are specific to each data source and user. They effectively bind cluster compute resources to a data source for a given user. Immuta uses these overrides to determine which cluster compute to use when connecting to Databricks for various maintenance operations.

    The operations that use the ephemeral overrides include

    • Visibility checks on the data source for a particular user. These checks assess how to apply row-level policies for specific users.

    • Stats collection triggered by a specific user.

    • Validating a custom WHERE clause policy against a data source. When owners or governors create custom WHERE clause policies, Immuta uses compute resources to validate the SQL in the policy. In this case, the ephemeral overrides for the user writing the policy are used to contact a cluster for SQL validation.

    • High cardinality column detection. Certain advanced policy types (e.g., minimization) in Immuta require a high cardinality column, and that column is computed on data source creation. It can be recomputed on demand and, if so, will use the ephemeral overrides for the user requesting computation.

    An ephemeral override request can be triggered when a user queries the securable corresponding to a data source in a Databricks cluster with the Spark plug-in configured. The actual triggering of this request depends on the .

    Ephemeral overrides can also be set for a data source in the Immuta UI by navigating to a data source page, clicking on the data source actions button, and selecting Ephemeral overrides from the dropdown menu.

    Ephemeral override requests made from a cluster for data sources and users where ephemeral overrides were set in the UI will not be successful.

    If ephemeral overrides are never set (either through the user interface or the cluster configuration), the system will continue to use the connection details directly associated with the data source, which are set during .

    Ephemeral overrides can be problematic in environments that have a dedicated cluster to handle maintenance activities, since ephemeral overrides can cause these operations to execute on a different cluster than the dedicated one.

    To reduce the risk that a user has overrides set to a cluster (or multiple clusters) that aren't currently up, complete one of the following actions:

    • Direct all clusters' HTTP paths for overrides to a cluster dedicated for metadata queries using the .

    • Disable ephemeral overrides completely by setting the to false.

    Protecting Data in Google BigQuery

    Learn how Immuta enforces policies on data in your Google BigQuery environment

    In the Google BigQuery integration, Immuta administers Google BigQuery privileges on data registered in Immuta. Then, Immuta users who have been granted access to the tables can query them with policies enforced.

    The sequence diagram below outlines the events that occur when an Immuta user who is subscribed to a data source queries it in Google BigQuery.

    Registering a connection

    The Google BigQuery viewless integration is configured and data is registered through connections, an Immuta feature that allows administrators to register data objects in a technology through a single connection to make data registration more scalable for your organization.

    Once the Google BigQuery viewless connection is registered, you can author subscription policies in Immuta to enforce access controls.

    See the Google BigQuery viewless integration reference guide for more details about registering a connection.

    Protecting data

    After objects are registered in Immuta, you can author subscription policies or row-level data policies in Immuta to enforce access controls.

    Subscription policies

    When a subscription policy is applied to a data source, users who meet the conditions of the policy will be automatically subscribed to the data source. Then, Immuta updates the allow policy on that resource in Google BigQuery to grant users access to that object. For details about how this access is enforced, see the .

    Consider the following example that illustrates how Immuta enforces a subscription policy that only allows users in the analysts group to access the yellow-table. When this policy is authored and applied to the data source, Immuta updates the allow policy on yellow-table to grant access to users (registered in Immuta) that are part of the analysts group.

    In the image above, the user in the analysts group accesses yellow-table, while the user who is a part of the research group is denied access.

    See the for guidance on applying a subscription policy to a data source. See the for details about the subscription policy types supported and Google BigQuery privileges Immuta grants on objects registered as Immuta data sources.

    When a row-level data policy is applied to a table, Immuta creates a row-level access policy in Google BigQuery that filters rows that subscribed users are able to see. For details about how row-access policies are enforced, see the .

    In the example below, Immuta creates a Google BigQuery row-level access policy that filters rows based on whether users' groups match values in a specified column:

    Only show rows where user is a member of a group that matches the value in columns tagged location.

    When the user in the OH group queries yellow-table, which has the location tag applied to the state column, Google BigQuery returns the result with only rows that contain OH in the state column.

    See the for guidance on authoring data policies in Immuta and the for the Google BigQuery viewless integration.

    Security and Compliance

    Understand the authentication methods and audit features supported by the PostgreSQL integration to ensure you are meeting your organization's security and compliance needs

    Immuta offers several features to provide security for your users and to prove compliance and monitor for anomalies.

    Authentication

    Registering the connection

    The PostgreSQL integration supports the following authentication methods to register a connection:

    • Amazon Aurora and Amazon RDS deployments

      • Access using AWS IAM role (recommended): Immuta will assume this IAM role from Immuta's AWS account when interacting with the AWS API to perform any operations in your AWS account. This option allows you to provide Immuta with an IAM role from your AWS account that is granted a trust relationship with Immuta's IAM role.

      • Access using access key and secret access key: These credentials are used temporarily by Immuta to register the connection. The access key ID and secret access key provided must be for an AWS account with the permissions listed in the .

      • Username and password: These credentials are used temporarily by Immuta to register the connection. The credentials provided must be for an account with the permissions listed in the . Passwords hashed using MD5 are unsupported for authentication.

    • Neon and PostgreSQL deployments

      • Username and password: These credentials are used temporarily by Immuta to register the connection. The credentials provided must be for an account with the permissions listed in the . Passwords hashed using MD5 are unsupported for authentication.

    The built-in Immuta IAM can be used as a complete solution for authentication and user entitlement. However, you can connect your existing identity management provider to Immuta to use that system for authentication and user entitlement instead.

    Each of the supported identity providers includes a specific set of configuration options that enable Immuta to communicate with the IAM system and map the users, permissions, groups, and attributes into Immuta.

    See the for a list of supported providers and details.

    See the for details about user provisioning and mapping user accounts to Immuta.

    Immuta provides governance reports so that data owners and governors can monitor users' access to data and detect anomalies in behavior.

    Immuta governance reports allow users with the GOVERNANCE Immuta permission to use a natural language builder to instantly create reports that delineate user activity across Immuta. These reports can be based on various entity types, including users, groups, projects, data sources, purposes, policy types, or connection types.

    See the page for a list of report types and guidance.

    Databricks

    Learn about Immuta's integrations for Databricks

    Immuta offers three integrations for Databricks:

    • : This integration supports working with database objects registered in Unity Catalog.

    • : This connection supports working with Lakebase Postgres

    • : This integration supports working with .

    Register a Databricks Lakebase Connection

    Register your Databricks Lakebase data and map your user accounts into Immuta

    The user registering the connection must have the permissions below.

    • APPLICATION_ADMIN Immuta permission

    • The account credentials you provide to register the connection should be a

    Google BigQuery Viewless Integration

    Learn about how you can register data from Google BigQuery and govern access to that data

    This page describes the recommended workflow for setting up Immuta with . Following these steps connects your Google BigQuery environment, registers users, ingests metadata, and enables automated governance through global policies and access requests.

    To complete this workflow, ensure you have:

    • Access to BigQuery Enterprise or Enterprise Plus edition and the permissions required to configure the connection

    • An Immuta application administrator who can register the connection

    For the recommended implementation described on this page, you should also have:

    Setting Up Users

    Learn about user impersonation and how to map your Databricks users into Immuta

    When the Databricks Spark plugin is running on a Databricks cluster, all Databricks users running jobs or queries are either a privileged user or a non-privileged user:

    • Privileged users: Privileged users can effectively read from and write to any table or view in the cluster Metastore, or any file path accessible by the cluster, without restriction. Privileged users are either or users specified in . Any user writing queries or jobs impersonating another user is a non-privileged user, even if they are impersonating a privileged user.

      Privileged users have effective authority to read from and write to any securable in the cluster metastore or file path, because in almost all cases Databricks clusters running with the Immuta Spark plug-in installed have disabled . However, if Hive metastore table access control is enabled on the cluster, privileged users will have the authority granted to them that is specified by table access control.

    Register an Oracle Connection

    Register your Oracle data

    The user registering the connection must have the permissions below.

    • APPLICATION_ADMIN Immuta permission

    • Either of the following Oracle system privileges:

    Using the validation and debugging notebook

    Py4J security error

    Databricks trusted library errors

    Respond to an access request
    Respond to an access request
    Respond to an access request
    Configure audit
    Respond to an access request
    Configure audit
  • Configure audit: Once you have your data sources and users, and policies granting them access, you can set up audit export. This will export the audit logs from user queries, policy changes, and tagging updates.

  • Organize your data sources into domains and assign domain permissions to accountable teams (recommended)
    Integrate an IAM with Immuta
    Map external user IDs from Databricks to Immuta
    Connect an external catalog
    Run identification
    Author a global subscription policy
    Author a global data policy
    required permissions

    Auditing and compliance

    Databricks Unity Catalog query audit

    Governance reports

    Identity managers guide
    Databricks Unity Catalog integration reference guide
    dashboards
    Audit documentation
    registering the connection
    Immuta app settings page
    Databricks Unity Catalog audit page
    Governance report types

    Respond to an access request: To grant access to data, data stewards will respond to the access request.

    Organize your data sources into domains and assign domain permissions to accountable teams
    Connect an IAM
    Map external user IDs to Immuta
    Request app
    Set up a request form for your assets
    Add access request links to your catalog
    Connect an external catalog
    Run identification
    Author a global subscription policy
    Configure audit

    Triggering an ephemeral override request

    Configuring overrides in Immuta-enabled clusters

    Ephemeral overrides best practices

    1. Disable ephemeral overrides for clusters when using multiple workspaces and dedicate a single cluster to serve queries from Immuta in a single workspace.

    2. If you use multiple E2 workspaces without disabling ephemeral overrides, avoid applying the where user row-level policy to data sources.

    configuration settings
    data source registration
    IMMUTA_EPHEMERAL_HOST_OVERRIDE_HTTPPATH Spark environment variable
    IMMTUA_EPHEMERAL_HOST_OVERRIDE Spark environment variable

    Identity providers for user authentication

    Auditing and compliance

    Register a PostgreSQL connection guide
    Register a PostgreSQL connection guide
    Register a PostgreSQL connection guide
    Identity managers guide
    PostgreSQL integration reference guide
    Governance report types
    SELECT
  • TRUNCATE

  • UPDATE

  • restricted words
    in your connection name.
  • Hostname: URL of your Amazon Redshift instance.

  • Port: Port configured for Amazon Redshift.

  • Database: The Redshift database you created for Immuta. All databases in the host will be registered.

  • SSL Mode: Use the dropdown to select the SSL mode to connect to the host.

    1. Prefer: Use this mode to try an encrypted connection and fallback to unencrypted if needed.

    2. Require: Use this mode for encrypted connections.

    3. Disable: Use this mode for plain, unencrypted connections.

  • Select the
    Run Frequency
    to determine how frequently object sync will run each day.
  • Opt to Run Object Sync on Create to create all the data objects for your connection. If you do not select this option, you must run object sync manually or wait for the scheduled object sync for your connection's data objects.

  • Amazon Redshift database user you created above
    listed in the permissions section
    Create the exemption role

    Data policies

    Google BigQuery viewless integration reference guide
    Author a subscription policy page
    Subscription policy access types page
    Google BigQuery viewless integration reference guide
    Data policies page
    supported data policies
    When users submit a query, the Google BigQuery client submits the SQL query to Google BigQuery, which then processes the query and determines what data they are allowed to see. Then, Google BigQuery returns the query results to the client, which then returns policy-enforced data to the user.

    Register and map your users

    lightbulb

    If your identity provider supports SCIM, synchronize the user attributes that you plan to reference in policies, such as department, region, or employment type. These attributes provide a strong foundation for reusable global policies.

    Add metadata to your data

    Configure automated policies

    Configure access requests

    Configure audit

    Connect your organization's identity provider
    enable provisioning to synchronize users, groups, and attributes
    map Amazon Redshift user identities to Immuta users
    connect your external catalog
    enable identification to automatically discover and tag sensitive data
    Create subscription policies
    Create data policies
    Request app
    create request forms
    your data catalog
    review and respond to access requests
    configure audit to export governance activity
    restricting the permissions of the Amazon Redshift system account
    lightbulb

    A common first policy is to mask sensitive data identified through identification or your external catalog. As new Amazon Redshift tables are registered and tagged, the policy automatically protects those columns without additional configuration.

    DeltaTable.convertToDelta

    CONVERT TO DELTA parquet./path/to/parquet/

    DeltaTable.delete

    DELETE FROM [table_identifier delta./path/to/delta/] WHERE condition

    DeltaTable.generate

    GENERATE symlink_format_manifest FOR TABLE [table_identifier delta./path/to/delta]

    DeltaTable.history

    DESCRIBE HISTORY [table_identifier delta./path/to/delta] (LIMIT x)

    DeltaTable.merge

    MERGE INTO

    DeltaTable.update

    UPDATE [table_identifier delta./path/to/delta/] SET column = valueWHERE (condition)

    DeltaTable.vacuum

    VACUUM [table_identifier delta./path/to/delta]

    Merging tables in workspaces

    Delta SQL Commands
    Create a table in the project workspace

    Mounting a bucket

    • Users can mount additional buckets to DBFS that can also be accessed using the FUSE mount.

    • Mounting a bucket is a one-time action, and the mount will be available to all clusters in the workspace from that point on.

    • Mounting must be performed from a non-Immuta cluster.

    Scala DBUtils (and %fs magic) with scratch paths

    Configure Scala DBUtils (and %fs magic) with scratch paths

    Configure DBUtils in Python

    Example workflow

    MERGE INTO delta_native.target_native as target
    USING immuta_temp_view_data_source as source
    ON target.dr_number = source.dr_number
    WHEN MATCHED THEN
    UPDATE SET target.date_reported = source.date_reported
    %fs put -f s3://my-bucket/my/scratch/path/mynewfile.txt "I'm creating a new file in S3"
    %scala dbutils.fs.put("s3://my-bucket/my/scratch/path/mynewfile.txt", "I'm creating a new file in S3")
           <property>
               <name>immuta.spark.databricks.scratch.paths</name>
               <value>s3://my-bucket/my/scratch/path</value>
           </property>
    %python
    import os
    import shutil
    
    s3ScratchFile = "s3://some-bucket/path/to/scratch/file"
    localScratchDir = os.environ.get("IMMUTA_LOCAL_SCRATCH_DIR")
    localScratchFile = "{}/myfile.txt".format(localScratchDir)
    localScratchFileCopy = "{}/myfile_copy.txt".format(localScratchDir)
    dbutils.fs.cp(s3ScratchFile, "file://{}".format(localScratchFile))
    shutil.copy(localScratchFile, localScratchFileCopy)
    with open(localScratchFileCopy, "a") as f:
        f.write("Some appended file content")
    dbutils.fs.cp("file://{}".format(localScratchFileCopy), s3ScratchFile)
    To determine which integration you should use, consider which metastore you use:
    • Legacy Hive metastore: Databricks recommends that you migrate all data from the legacy Hive metastore to Unity Catalog. However, when this migration is not possible, use the Databricks Spark integration to protect securables registered in the Hive metastore.

    • Unity Catalog: To protect securables registered in the Unity Catalog metastore, use the Databricks Unity Catalog integration.

      • Databricks Lakebase: To register and protect fully managed PostgreSQL-compatible data objects, use the Databricks Lakebase integration.

    • Legacy Hive metastore and Unity Catalog: If you need to work with database objects registered in both the legacy Hive metastore and in Unity Catalog, allows you to use both integrations.

    Databricks metastore magic allows you to migrate your data from the Databricks legacy Hive metastore to the Unity Catalog metastore while protecting data and maintaining your current processes in a single Immuta instance.

    Databricks metastore magic is for organizations who intend to use the Databricks Unity Catalog integration, but must still protect tables in the Hive metastore until they can migrate all of their data to Unity Catalog.

    Unity Catalog support is enabled in Immuta.

    Databricks has two built-in metastores that contain metadata about your tables, views, and storage credentials:

    • Legacy Hive metastore: Created at the workspace level. This metastore contains metadata of the registered securables in that workspace available to query.

    • Unity Catalog metastore: Created at the account level and is attached to one or more Databricks workspaces. This metastore contains metadata of the registered securables available to query. All clusters on that workspace use the configured metastore and all workspaces that are configured to use a single metastore share those securables.

    Databricks allows you to use the legacy Hive metastore and the Unity Catalog metastore simultaneously. However, Unity Catalog does not support controls on the Hive metastore, so you must attach a Unity Catalog metastore to your workspace and move existing databases and tables to the attached Unity Catalog metastore to use the governance capabilities of Unity Catalog.

    Immuta's Databricks Spark integration and Unity Catalog integration enforce access controls on the Hive and Unity Catalog metastores, respectively. However, because these metastores have two distinct security models, users were discouraged from using both in a single Immuta instance before metastore magic; the Databricks Spark integration and Unity Catalog integration were unaware of each other, so using both concurrently caused undefined behavior.

    Metastore magic reconciles the distinct security models of the legacy Hive metastore and the Unity Catalog metastore, allowing you to use multiple metastores (specifically, the Hive metastore or AWS Glue Data Catalog alongside Unity Catalog metastores) within a Databricks workspace and single Immuta instance and keep policies enforced on all your tables as you migrate them. The diagram below shows Immuta enforcing policies on registered tables across workspaces.

    In clusters A and D, Immuta enforces policies on data sources in each workspace's Hive metastore and in the Unity Catalog metastore shared by those workspaces. In clusters B, C, and E (which don't have Unity Catalog enabled in Databricks), Immuta enforces policies on data sources in the Hive metastores for each workspace.

    With metastore magic, the Databricks Spark integration enforces policies only on data in the Hive metastore, while the Unity Catalog integration enforces policies on tables in the Unity Catalog metastore.

    To enforce plugin-based policies on Hive metastore tables and Unity Catalog native controls on Unity Catalog metastore tables, enable the Databricks Spark integration and the Databricks Unity Catalog integration. Note that some Immuta policies are not supported in the Databricks Unity Catalog integration. See the Databricks Unity Catalog integration reference guide for details.

    Databricks SQL cannot run the Databricks Spark plugin to protect tables, so Hive metastore data sources will not be policy enforced in Databricks SQL.

    To enforce policies on data sources in Databricks SQL, use Hive metastore table access controls to manually lock down Hive metastore data sources and the Databricks Unity Catalog integration to protect tables in the Unity Catalog metastore. Table access control is enabled by default on SQL warehouses, and any Databricks cluster without the Immuta plugin must have table access control enabled.

    Which integration should you use?

    Databricks Unity Catalog integration
    Databricks Lakebase integration
    database objects within Databricks Lakebase.
    Databricks Spark integration
    database objects registered in the legacy Hive metastore

    Metastore magic

    Requirement

    Databricks metastores and Immuta policy enforcement

    Databricks metastore magic solution

    Enforce policies as you migrate

    Enforcing policies on Databricks SQL

    .
    and
    in your Databricks Lakebase database:
    • databricks_superuser

    • CREATEROLE

    For descriptions and explanations of privileges Immuta needs to enforce policies and maintain state in Databricks Lakebase, see the Databricks Lakebase connection reference guide.

    1. In Immuta, click database Data and select Connections in the navigation menu.

    2. Click the + Add Connection button.

    3. Select the Databricks Lakebase tile.

    4. Enter the host connection information:

      1. Display Name: This is the name of your new connection. This name will be used in the API (connectionKey), in data source names from the host, and on the connections page. Avoid the use of periods (.) or

    5. Enter privileged credentials to register the connection using OAuth M2M:

      1. Follow Databricks documentation to create an OAuth token for machine-to-machine authentication for the Immuta service principal and assign this service principal the for the Databricks Lakebase database.

      2. Fill out the Workspace URL (e.g., https://<your workspace name>.cloud.databricks.com).

    6. Click Save Connection.

    Requirement: USER_ADMIN Immuta permission

    Map PostgreSQL usernames to each Immuta user account to ensure Immuta properly enforces policies when the user queries the Databricks Lakebase objects in PostgreSQL.

    The instructions below illustrate how to do this for individual users, but you can also configure user mapping in your IAM connection on the app settings page.

    1. Click People and select Users in the navigation menu.

    2. Click the user's name to navigate to their page and scroll to the External User Mapping section.

    3. Click Edit in the PostgreSQL row.

    4. Select one of the following options from the dropdown:

      1. Select PostgreSQL Username to map the PostgreSQL username to the Immuta user and enter the PostgreSQL username in the field. Username mapping is case insensitive.

      2. Select Unset (fallback to Immuta username) to use the Immuta username as the assumed PostgreSQL username. Use this option if the user's PostgreSQL username exactly matches the user's Immuta username. Username mapping is case insensitive.

      3. Select None (user does not exist in PostgreSQL) if this is an Immuta-only user. This option will improve performance for Immuta users who do not have a mapping to PostgreSQL users and will be automatically selected by Immuta if an Immuta user is not found in PostgreSQL. To ensure your PostgreSQL users have policies correctly applied, manually map their usernames using the first option above.

    5. Click Save.

    Public preview: This integration is available to all accounts that request to enable it for their tenant. Contact your Immuta representative to enable it.

    Requirements

    Permissions

    Databricks Lakebase database

    Register a Databricks Lakebase connection

    Map users

    Databricks service principal
    Create a PostgreSQL role for the Databricks service principal
    grant it the following permissions

    An enterprise identity provider

  • Identified owners or stewards for your major data domains

  • An understanding of the metadata maintained in your external catalog, if you use one

  • 1

    Connect your Google BigQuery environment

    1. An application administrator will register the Google BigQuery connection to allow Immuta to discover projects, datasets, and data objects in Google BigQuery. As object sync runs, Immuta creates corresponding data sources that can be governed through policies or access requests.

    2. After registering the connection, organize your data into domains. Domains assign ownership of data to the appropriate teams and determine who can manage policies and access workflows for those data sources.

    Once your data sources are registered in Immuta and organized into domains, you can apply policy to them.

    lightbulb

    Start by registering a select Google BigQuery business domain by . Once your implementation is established, you can onboard additional data sources using the same governance model.

    2
    1. and configure SSO so that users can authenticate with their existing credentials and be automatically registered in Immuta.

      1. If your identity provider supports SCIM, . These attributes can then be used when authoring policies so access automatically changes as the user information in the IAM is synced with Immuta.

    2. . This ensures that policies written in Immuta are enforced for the correct users when they query data in Google BigQuery.

    Once your users are registered and mapped to their Google BigQuery identities, any policies that apply to data sources will be enforced for those users.

    3

    Metadata allows you to author policies that automatically apply across your environment instead of managing individual tables and columns.

    If your organization already maintains metadata in an external catalog, so Immuta continuously synchronizes tags, classifications, and descriptions.

    Once your data sources are tagged in Immuta, you can author global policies based on those tags. These policies can apply automatically as additional data sources are registered through object sync and tagged.

    4

    Once users and metadata are available, begin authoring global policies that automatically protect your data.

    1. to automatically grant access to users who meet the required conditions. You can also use subscription policies to enforce organization-wide requirements, such as limiting access to users with specific attributes or training before access can be granted.

    2. to filter rows based on data metadata.

    Author global policies using metadata and user attributes instead of individual Google BigQuery objects or users. This allows the same policies to automatically apply as new data is registered and users are synchronized into Immuta.

    5

    Subscription policies can automatically grant access when users meet the required conditions. For access that requires review, configure the , as described below.

    1. A governance user will and attach them to assets so users can request access to Google BigQuery data from their .

    2. If you use an external catalog, so users can request access directly from their catalog while continuing to use it as the primary location for data discovery.

    6

    After your data, users, and policies are configured, .

    Audit records provide visibility into policy evaluations, access requests, policy changes, and metadata updates, allowing your organization to monitor how data is accessed and governed across your environment.

    After completing this workflow, your Google BigQuery environment is ready for automated governance. From here you can continue configuring advanced features, refining policies, and onboarding additional Google BigQuery data sources. See the Google BigQuery viewless integration reference guide for architecture details, platform behavior, and additional configuration options.

    Before you begin

    Google BigQuery
    lightbulb

    Completing this workflow typically requires coordination among an Immuta application administrator, a Google BigQuery administrator, an identity administrator, governance users, and data stewards.

    Next steps

    Non-privileged users: Non-privileged users are any users who are not privileged users, and all authorization for non-privileged users is determined by Immuta policies.

    Whether a user is a privileged user or a non-privileged user, for a given query or job, is cached once first determined, based on IMMUTA_SPARK_ACL_PRIVILEGED_TIMEOUT_SECONDS environment variable. This caching can be disabled entirely by setting the value of that environment variable to 0.

    Usernames in Databricks must match the usernames in the connected Immuta tenant. By default, the Immuta Spark plugin checks the Databricks username against the username within Immuta's internal IAM to determine access. However, you can integrate your existing IAM with Immuta and use that instead of the default internal IAM. Ideally, you should use the same identity manager for Immuta that you use for Databricks. See the Immuta support matrix page for a list of supported identity providers and protocols.

    It is possible within Immuta to have multiple users share the same username if they exist within different IAMs. In this case, the cluster can be configured to look up users from a specified IAM. To do this, the value of theIMMTUA_USER_MAPPING_IAMID Spark environment variable must be updated to be the targeted IAM ID configured within the Immuta tenant. The targeted IAM ID can be found on the App settings page. Each Databricks cluster can only be mapped to one IAM.

    Databricks user impersonation allows a Databricks user to impersonate an Immuta user. With this feature,

    • the Immuta user who is being impersonated does not have to have a Databricks account, but they must have an Immuta account.

    • the Databricks user who is impersonating an Immuta user does not have to be associated with Immuta. For example, this could be a service account.

    When acting under impersonation, the Databricks user loses their privileged access, so they can only access the tables the Immuta user has access to and only perform DDL commands when that user is acting under an allowed circumstance (such as workspaces, scratch paths, or non-Immuta reads/writes).

    Use the IMMUTA_SPARK_DATABRICKS_ALLOWED_IMPERSONATION_USERS Spark environment variable to enable user impersonation.

    Audited queries include an impersonationUser field, which identifies the Databricks user impersonating the Immuta user:

    Databricks workspace admins
    IMMUTA_SPARK_ACL_ALLOWLIST
    Hive metastore table access control
    {
      "id": "query-a20e-493e-id-c1ada0a23a26",
      "dateTime": "1639684812845",
      "month": 1463,
      "profileId": 4,
      "userId": "smwilliams@example.com",
      "dataSourceId": 1,
      "dataSourceName": "Hr Data",
      "count": 1,
      "recordType": "spark",
      "success": true,
      "component": "dataSource",
      "accessType": "query",
      "query": "Relation[id#2644,first_name#2645,last_name#2646,email#2647,gender#2648,race#2649,ssn#2650,dept#2651,job#2652,skills#2653,salary#2654,type#2655] parquet\n",
      "extra": {
        "databricksWorkspaceID": "0",
        "maskedColumns": {},
        "metastoreTables": [
          "demo.hr_data"
        ],
        "clusterName": "your-cluster-name",
        "pathUris": [
          "dbfs:/user/hive/warehouse/demo.db/hr_data"
        ],
        "queryText": "select * from demo.hr_data limit 10;",
        "queryLanguage": "sql",
        "clusterID": "your-171358-cluster-id",
        "impersonationUser": "edixon@example.com"
      },
      "dataSourceTableName": "demo_hr_data",
      "createdAt": "2021-12-16T20:00:12.850Z",
      "updatedAt": "2021-12-16T20:00:12.850Z"
    }

    Mapping Databricks users to Immuta

    User impersonation

    Scala clusters

    Immuta discourages use of this feature with Scala clusters, as the proper security mechanisms were not built to account for . Instead, this feature was developed for the BI tool use case in which service accounts connecting to the Databricks cluster need to impersonate Immuta users so that policies can be enforced.

    Prevent users from changing impersonation user in a given session

    If your BI tool or other service allows users to submit arbitrary SQL or issue SET commands, set IMMUTA_SPARK_DATABRICKS_SINGLE_IMPERSONATION_USER to true to prevent users from changing their impersonation user once it has been set for a given Spark session.

    Audited queries

  • GRANT ANY ROLE

  • GRANT ANY PRIVILEGE

    1. Create a new database user in Oracle to serve as the Immuta system account. Immuta will use this system account continuously to crawl the connection.

    2. Grant this account the SELECT Oracle privilege on the system views listed below:

      • V$DATABASE

      • CDB_PDBS

      • SYS.DBA_USERS

      • SYS.DBA_TABLES

      • SYS.DBA_VIEWS

      • SYS.DBA_MVIEWS

      • SYS.DBA_TAB_COLUMNS

      • SYS.DBA_OBJECTS

      • SYS.DBA_CONSTRAINTS

      • SYS.DBA_CONS_COLUMNS

    1. In Immuta, click database Data and select Connections in the navigation menu.

    2. Click the + Add Connection button.

    3. Select the Oracle tile.

    4. Select RDS as the deployment method.

    5. Enter the host connection information:

      1. Display Name: This is the name of your new connection. This name will be used in the API (connectionKey), in data source names from the host, and on the connections page. Avoid the use of periods (.) or

    6. Enter the username and password of the .

    7. Click Save connection.

    Immuta policies will not be automatically enforced in Oracle

    While you can author and apply subscription and data policies on Oracle data sources within Immuta, these policies will not be enforced natively in the Oracle platform.

    To use this integration, contact your Immuta representative.

    Requirement

    Permissions

    Amazon RDS for Oracle

    Create the database user

    Register an Oracle connection

    Configure Azure Synapse Analytics Integration

    Create, manage, or remove your Azure Synapse Analytics integration

    This page provides a tutorial for enabling the Azure Synapse Analytics integration on the Immuta app settings page. To configure this integration via the Immuta API, see the Configure an Azure Synapse Analytics integration API guide.

    For an overview of the integration, see the Azure Synapse Analytics overview documentation.

    Requirement

    • A running dedicated SQL pool is required.

    Permissions

    The user configuring the integration must have the permissions below.

    • APPLICATION_ADMIN Immuta permission

    • The account credentials you use to set up the integration must have these Azure Synapse Analytics privileges:

      • Server-level principal login or be a member of the loginmanager database role in the master database

      • CONTROL privilege on an existing database that will store all Immuta-generated views and schemas.

    For descriptions and explanations of privileges Immuta needs to enforce policies in Azure Synapse Analytics, see the .

    If you are using the OAuth authentication method,

    • Ensure that Microsoft Entra ID is on the same account as the Azure Synapse Analytics workspace and dedicated SQL pool.

    • .

    • Select Accounts in this organizational directory only as the account type.

    1. Click the App Settings icon in the navigation menu.

    2. Click the Integrations tab.

    3. Click the +Add Integration button and select Azure Synapse Analytics from the dropdown menu.

    4. Complete the Host,

    You have two options for configuring your Azure Synapse Analytic environment:

    • : Grant Immuta one-time use of credentials to automatically configure your environment and the integration.

    • : Run the Immuta script in your Azure Synapse Analytics environment yourself to configure the integration.

    Enter the username and password in the Privileged User Credentials section.

    1. Select Manual.

    2. Download, fill out the appropriate fields, and run the bootstrap master script and bootstrap script linked in the Setup section as a user with the . Note: The master script is not required if you're using the OAuth authentication method.

    3. Select the authentication method:

    Click Save.

    .

    1. Click the App Settings icon in the navigation menu.

    2. Navigate to the Integrations tab and click the down arrow next to the Azure Synapse Analytics Integration.

    3. Edit the field you want to change. Note any field shadowed is not editable, and the integration must be disabled and re-installed to change it.

    4. Use the authentication method and credentials you provided when initially configuring the integration.

    1. Click the App Settings icon in the navigation menu.

    2. Navigate to the Integrations tab and click the down arrow next to the Azure Synapse Analytics Integration.

    3. Click the checkbox to disable the integration.

    4. Enter the credentials that were used to initially configure the integration.

    Amazon Redshift Spectrum Integration Overview

    Learn about how the Amazon Redshift Spectrum integration works to govern access to data

    This page provides an overview of the Amazon Redshift Spectrum integration in Immuta. For a tutorial detailing how to enable this integration, see the installation guide.

    How the integration works

    The Amazon Redshift Spectrum integration is a policy push integration that allows Immuta to apply policies directly on Immuta-created views in Redshift. This allows data analysts to query Redshift views directly instead of going through a proxy and have per-user policies dynamically applied at query time.

    The Amazon Redshift Spectrum integration creates views from the tables within the database specified when configured. Then, the user can choose the name for the schema where all the Immuta-generated views will reside. Immuta will also create the schemas immuta_system, immuta_functions, and immuta_procedures to contain the tables, views, UDFs, and stored procedures that support the integration. Immuta then creates a system role and gives that system account the following privileges:

    • ALL PRIVILEGES ON DATABASE IMMUTA_DB

    • ALL PRIVILEGES ON ALL SCHEMAS IN DATABASE IMMUTA_DB

    • USAGE ON FUTURE PROCEDURES IN SCHEMA IMMUTA_DB.IMMUTA_PROCEDURES

    • USAGE ON LANGUAGE PLPYTHONU

    Additionally the PUBLIC role will be granted the following privileges:

    • USAGE ON DATABASE IMMUTA_DB

    • TEMP ON DATABASE IMMUTA_DB

    • USAGE ON SCHEMA IMMUTA_DB.IMMUTA_PROCEDURES

    Once the integration is configured, data owners must .

    1. An Immuta application administrator, creates an immuta database in Amazon Redshift (that will contain Immuta policy definitions and user entitlements), , and registers Redshift warehouse and databases with Immuta.

    2. A data owner registers Redshift tables in Immuta as .

    3. A data owner, data governor, or administrator or user in Immuta.

    SQL statements are used to create all views, including a join to the secure view: immuta_system.user_profile. This secure view is a select from the immuta_system.profile table (which contains all Immuta users and their current groups, attributes, projects, and a list of valid tables they have access to) with a constraint immuta__userid = current_user() to ensure it only contains the profile row for the current user. The immuta_system.user_profile view is readable by all users, but will only display the data that corresponds to the user executing the query.

    The Amazon Redshift Spectrum integration uses webhooks to keep views up-to-date with Immuta data sources. When a data source or policy is created, updated, or disabled, a webhook will be called that will create, modify, or delete the dynamic view. The immuta_system.profile table is updated through webhooks when a user's groups or attributes change, they switch projects, they acknowledge a purpose, or when their data source access is approved or revoked. The profile table can only be read and updated by the Immuta system account.

    The definitions for each status and the state of configured data platform integrations is available in the .

    The definitions for each status and the state of configured data platform integrations is available in the .

    All Redshift cluster types are supported for the Amazon Redshift Spectrum integration, and Immuta's views must exist in the same database as the raw tables. See the for details about setting up this database for Immuta-managed resources.

    Immuta supports a single integration with secure views in a single database per cluster.

    The Amazon Redshift Spectrum integration supports username and password authentication to configure the integration and create data sources.

    Immuta cannot ingest tags from Amazon Redshift Spectrum, but you can connect any of these to work with your integration.

    Impersonation allows users to query data as another Immuta user in Amazon Redshift Spectrum. To enable user impersonation, see the .

    Users can enable multiple with a single Immuta tenant.

    • The host of the data source must match the host of the integration for the view to be created.

    • When using multiple Amazon Redshift Spectrum integrations, a user has to have the same user account across all hosts.

    • Case sensitivity of database, table, and column identifiers is not supported. The must be set to false (default setting) for your Redshift cluster to configure the integration and register data sources.

    Register a MySQL Connection

    Register your MySQL data

    Immuta policies will not be automatically enforced in MySQL

    While you can author and apply subscription and data policies on MySQL data sources within Immuta, these policies will not be enforced natively in the MySQL platform.

    To use this integration, contact your Immuta representative.

    Requirements

    • Amazon RDS or Amazon Aurora for MySQL

    Permissions

    The user registering the connection must have the permissions below.

    • APPLICATION_ADMIN Immuta permission

    • The MySQL user registering the connection must be the root user or have the GRANT OPTION MySQL privilege.

    1. Create a new database user in MySQL to serve as the Immuta system account. Immuta will use this system account continuously to crawl the database you register. How you create this user depends on your . Follow the instructions linked below to create this user:

      1. : Follow the to create the database user and assign that user a password.

      2. :

    1. In Immuta, click Data and select Connections in the navigation menu.

    2. Click the + Add Connection button.

    3. Select the MySQL tile.

    4. Select your deployment type:

    Register a MariaDB Connection

    Register your MariaDB data

    Immuta policies will not be automatically enforced in MariaDB

    While you can author and apply subscription and data policies on MariaDB data sources within Immuta, these policies will not be enforced natively in the MariaDB platform.

    To use this integration, contact your Immuta representative.

    Requirement

    • Amazon RDS for MariaDB

    Permissions

    The user registering the connection must have the permissions below.

    • APPLICATION_ADMIN Immuta permission

    • The MariaDB user setting up the connection must be the root user or have the GRANT OPTION MariaDB privilege.

    1. Create a new database user in MariaDB to serve as the Immuta system account. Immuta will use this system account continuously to crawl the database you register. How you create this user depends on your . Follow the instructions linked below to create this user:

      1. : Follow the to create the database user and assign that user a password.

      2. :

    1. In Immuta, click Data and select Connections in the navigation menu.

    2. Click the + Add Connection button.

    3. Select the MariaDB tile.

    4. Select RDS as the deployment method.

    Accessing Data

    Learn how end users can access policy-enforced data in Databricks Spark

    Once a Databricks securable is registered in Immuta as a data source and you are subscribed to that data source, you must access that data through SQL:

    df = spark.sql("select * from immuta.table")
    import org.apache.spark.sql.SparkSession
    
    %sql
    select * from immuta
    library(SparkR)
    df <- SparkR

    With R, you must load the SparkR library in a cell before accessing the data.

    See the sections below for more guidance on accessing data using Delta Lake, direct file reads in Spark for file paths, and user impersonation.

    Delta Lake

    When using Delta Lake, the API does not go through the normal Spark execution path. This means that Immuta's Spark extensions do not provide protection for the API. To solve this issue and ensure that Immuta has control over what a user can access, the Delta Lake API is blocked.

    Spark SQL can be used instead to give the same functionality with all of Immuta's data protections. See the for a list of corresponding Spark SQL calls to use.

    In addition to supporting direct file reads through workspace and scratch paths, Immuta allows direct file reads in Spark for file paths. As a result, users who prefer to interact with their data using file paths or who have existing workflows revolving around file paths can continue to use these workflows without rewriting those queries for Immuta.

    When reading from a path in Spark, the Immuta Databricks Spark plugin queries the Immuta Web Service to find Databricks data sources for the current user that are backed by data from the specified path. If found, the query plan maps to the Immuta data source and follows existing code paths for policy enforcement.

    Users can read data from individual parquet files in a sub-directory and partitioned data from a sub-directory (or by using a where predicate). Expand the blocks below to view examples of reading data using these methods.

    • Direct file reads for Immuta data sources only apply to data sources created from tables, not data sources created from views or queries.

    • If more than one data source has been created for a path, Immuta will use the first valid data source it finds. It is therefore not recommended to use this integration when more than one data source has been created for a path.

    • In Databricks, multiple input paths are supported as long as they belong to the same data source.

    • CSV-backed tables are not currently supported.

    User impersonation allows Databricks users to query data as another Immuta user. To impersonate another user, see the .

    Security and Compliance

    Understand the authentication methods, cluster security, and audit features supported by the Databricks Spark integration to ensure you are meeting your organization's security and compliance needs

    Immuta offers several features to provide security for your users and Databricks clusters and to prove compliance and monitor for anomalies.

    Immuta supports the following authentication methods to configure the Databricks Spark integration and register data sources:

    • OAuth machine-to-machine (M2M): Immuta uses the to integrate with , which allows Immuta to authenticate with Databricks using a client secret. Once Databricks verifies the Immuta service principal’s identity using the client secret, Immuta is granted a temporary OAuth token to perform token-based authentication in subsequent requests. When that token expires (after one hour), Immuta requests a new temporary token.

      See the for more details.

    Oracle Integration Reference Guide

    Learn about how the Oracle integration works and what Immuta does in your environment to register your data and keep it in sync

    The Oracle integration allows you to register data from Oracle in Immuta. Immuta supports Oracle on Amazon RDS.

    Oracle is configured and data is registered through , an Immuta feature that allows you to register your data objects through a single connection to make data registration more scalable for your organization. Instead of registering schema and databases individually, you can register them all at once and allow Immuta to monitor your data platform for changes so that data sources are added and removed automatically to reflect the state of data in your data platform.

    When the , Immuta ingests and stores connection metadata in the Immuta metadata database. In the example below, the Immuta application administrator connects the database that contains marketing-data, research-data, and cs-data tables. Immuta

    MySQL Integration Reference Guide

    Learn about how the MySQL integration works and what Immuta does in your environment to register your data and keep it in sync

    The MySQL integration uses connections to register data from MySQL in Immuta. Immuta supports the following deployment methods:

    • Amazon Aurora with MySQL

    • Amazon RDS with MySQL

    MySQL is configured and data is registered through , an Immuta feature that allows you to register your data objects through a single connection to make data registration more scalable for your organization. Instead of registering schema and databases individually, you can register them all at once and allow Immuta to monitor your data platform for changes so that data sources are added and removed automatically to reflect the state of data in your data platform.

    MariaDB Integration Reference Guide

    Learn about how the MariaDB integration works and what Immuta does in your environment to register your data and keep it in sync

    The MariaDB integration allows you to register data from MariaDB in Immuta. Immuta supports MariaDB on Amazon RDS.

    MariaDB is configured and data is registered through , an Immuta feature that allows you to register your data objects through a single connection to make data registration more scalable for your organization. Instead of registering schema and databases individually, you can register them all at once and allow Immuta to monitor your data platform for changes so that data sources are added and removed automatically to reflect the state of data in your data platform.

    When the , Immuta ingests and stores connection metadata in the Immuta metadata database. In the example below, the Immuta application administrator connects the database that contains marketing-data, research-data, and cs-data tables. Immuta

    Run R and Scala spark-submit Jobs on Databricks

    Complete prerequisites and create R and Scala spark-submit jobs

    This guide illustrates how to run R and Scala spark-submit jobs on Databricks, including prerequisites and caveats.

    Before you can run spark-submit jobs on Databricks, complete the following steps.

    1. Initialize the Spark session:

      1. Enter these settings into the R submit script to allow the R script to access Immuta data sources, scratch paths, and workspace tables:

    Snowflake

    Learn about how you can register data from Snowflake and govern access to that data

    This page describes the recommended workflow for setting up Immuta with . Following these steps connects your Snowflake environment, registers users, ingests metadata, and enables automated governance through global policies and access requests.

    To complete this workflow, ensure you have:

    • Access to a Snowflake account and the permissions required to configure the connection

    • An Immuta application administrator who can register the connection

    For the recommended implementation described on this page, you should also have:

    restricted words
    in your connection name.
  • Hostname: The host can be found by clicking Connect in your Databricks Lakebase console. See the Databricks Lakebase docs for additional details.

  • Port: The default PostgreSQL port used for Databricks Lakebase is 5432.

  • Database: The database can be found by clicking Connect in your Databricks Lakebase console. The default is databricks_postgres.

  • Fill out the Client ID. This is a combination of letters, numbers, or symbols, used as a public identifier and is the client ID displayed in Databricks when creating the client secret for the service principal.
  • Enter the Client Secret you created above. Immuta uses this secret to authenticate with the authorization server when it requests a token.

  • privileges listed above
    restricted words
    in your connection name.
  • Hostname: URL of your Oracle instance.

  • Port: Port configured for Oracle.

  • Database: The Oracle database you want to connect to. All databases in the host will be registered.

  • Region: The region of the AWS account with your Oracle instance.

  • Oracle database user you created above

    Data stewards can then review and respond to access requests, and Immuta automatically provisions access when requests are approved.

    Once access requests are configured, users can request access from Google BigQuery or your external catalog, and Immuta will route the request for review and provision access when it is approved.

    Register and map your users

    lightbulb

    If your identity provider supports SCIM, synchronize the user attributes that you plan to reference in policies, such as department, region, or employment type. These attributes provide a strong foundation for reusable global policies.

    Add metadata to your data

    Configure automated policies

    Configure access requests

    Configure audit

    Connect your organization's identity provider
    enable provisioning to synchronize users, groups, and attributes
    Map Google BigQuery user identities to Immuta users
    connect your external catalog
    Create subscription policies
    Create row-level data policies
    Request app
    create request forms
    external catalog
    configure access request links
    configure audit to export governance activity
    restricting the permissions of the Immuta service account
    user isolation limitations in Scala clusters
    USAGE ON SCHEMA IMMUTA_DB.IMMUTA_FUNCTIONS
  • USAGE ON FUTURE FUNCTIONS IN SCHEMA IMMUTA_DB.IMMUTA_FUNCTIONS

  • USAGE ON SCHEMA IMMUTA_DB.IMMUTA_SYSTEM

  • SELECT ON TABLES TO public

  • Data source metadata, tags, user metadata, and policy definitions are stored in Immuta's Metadata Database.
  • The Immuta Web Service calls a stored procedure that modifies the user entitlements or policies.

  • A Redshift user who is subscribed to the data source in Immuta queries the corresponding view directly in Redshift through the immuta database and sees policy-enforced data.

  • Data flow

    Policy enforcement

    Integration health status

    Supported cluster types

    Authentication method

    Tag ingestion

    User impersonation

    Required Redshift privileges

    Setup user

    • OWNERSHIP ON GROUP IMMUTA_IMPERSONATOR_ROLE

    • CREATE GROUP

    Immuta system account

    • GRANT EXECUTE ON PROCEDURE grant_impersonation

    • GRANT EXECUTE ON PROCEDURE revoke_impersonation

    Multiple integrations

    Limitations

    register Redshift Spectrum data sources using the Immuta CLI or V2 API
    configures the Redshift Spectrum integration
    data sources
    creates or changes a policy
    response schema of the integrations API
    response schema of the integrations API
    Configure an Amazon Redshift Spectrum guide
    supported external catalogs
    Configure an Amazon Redshift Spectrum integration guide
    Amazon Redshift Spectrum integrations
    enable_case_sensitive_identifier parameter
    metastore magic

    Loading a delta partition from a sub-directory is not recommended by Spark and is not supported in Immuta. Instead, use a where predicate:

    val spark = SparkSession
    .builder()
    .appName("Spark SQL basic example")
    .config("spark.some.config.option", "some-value")
    .getOrCreate()
    val sqlDF = spark.sql("SELECT * FROM immuta.table")
    .
    table
    ::
    sql
    (
    "SELECT * from immuta.table"
    )

    Spark direct file reads

    Read data from an individual parquet file

    To read from an individual file, load a partition file from a sub-directory:

    spark.read.format("parquet").load("s3:/my_bucket/path/to/my_parquet_table/partition_column=01/my_file.parquet")
    Read partitioned data from a sub-directory

    To read partitioned data from a sub-directory, load a parquet partition from a sub-directory:

    spark.read.format("parquet").load("s3:/my_bucket/path/to/my_parquet_table/partition_column=01")

    Alternatively, load a parquet partition using a where predicate:

    spark.read.format("parquet").load("s3:/my_bucket/path/to/my_parquet_table").where("partition_column=01")Read partitioned data from a sub-directory

    Limitations

    User impersonation

    Delta API reference guide
    Impersonate a user page

    Personal access token (PAT): This token gives Immuta temporary permission to push the cluster policies to the configured Databricks workspace and overwrite any cluster policy templates previously applied to the workspace when configuring the integration or to register securables as Immuta data sources.

    The built-in Immuta IAM can be used as a complete solution for authentication and fine-grained user entitlement. However, you can connect your existing identity management provider to Immuta to use that system for authentication and fine-grained user entitlement instead.

    Each of the supported identity providers includes a specific set of configuration options that enable Immuta to communicate with the IAM system and map the users, permissions, groups, and attributes into Immuta.

    See the Identity managers guide for a list of supported providers and details.

    See the Setting up users guide for details and instructions on mapping Databricks user accounts to Immuta.

    Non-administrator users on an Immuta-enabled Databricks cluster must not have access to view or modify Immuta configuration, as this poses a security loophole around Immuta policy enforcement. Databricks secrets allow you to securely apply environment variables to Immuta-enabled clusters.

    Databricks secrets can be used in the environment variables configuration section for a cluster by referencing the secret path instead of the actual value of the environment variable.

    See the Installation and compliance guide for details and instructions on using Databricks secrets.

    There are limitations to isolation among users in Scala jobs on a Databricks cluster. When data is broadcast, cached (spilled to disk), or otherwise saved to SPARK_LOCAL_DIR, it's impossible to distinguish between which user’s data is composed in each file/block. To address this vulnerability, Immuta suggests that you

    • limit Scala clusters to Scala jobs only and

    • require equalized projects, which will force all users to act under the same set of attributes, groups, and purposes with respect to their data access. This requirement guarantees that data being dropped into SPARK_LOCAL_DIR will have policies enforced and that those policies will be homogeneous for all users on the cluster. Since each user will have access to the same data, if they attempt to manually access other users' cached/spilled data, they will only see what they have access to via equalized permissions on the cluster. If project equalization is not turned on, users could dig through that directory and find data from another user with heightened access, which would result in a data leak.

    See the Installation and compliance guide for more details and configuration instructions.

    Immuta provides auditing features and governance reports so that data owners and governors can monitor users' access to data and detect anomalies in behavior.

    You can view the information in these audit logs on dashboards or export the full audit logs to S3 and ADLS for long-term backup and processing with log data processors and tools. This capability fosters convenient integrations with log monitoring services and data pipelines.

    See the Audit documentation for details about these capabilities and how they work with the Databricks Spark integration.

    Immuta captures the code or query that triggers the Spark plan in Databricks, making audit records more useful in assessing what users are doing.

    To audit what triggers the Spark plan, Immuta hooks into Databricks where notebook cells and JDBC queries execute and saves the cell or query text. Then, Immuta pulls this information into the audits of the resulting Spark jobs.

    Immuta will audit queries that come from interactive notebooks, notebook jobs, and JDBC connections, but will not audit Scala or R submit jobs. Furthermore, Immuta only audits Spark jobs that are associated with Immuta tables. Consequently, Immuta will not audit a query in a notebook cell that does not trigger a Spark job, unless IMMUTA_SPARK_AUDI_ALL_QUERIES is set to true.

    See the Databricks Spark query audit logs page for examples of saved queries and the resulting audit records. To exclude query text from audit events, see the App settings page.

    Immuta supports auditing all queries run on a Databricks cluster, regardless of whether users touch Immuta-protected data or not.

    See the Installation and compliance guide for details and instructions.

    When a query is run by a user impersonating another user, the extra.impersonationUser field in the audit log payload is populated with the Databricks username of the user impersonating another user. The userId field will return the Immuta username of the user being impersonated:

    See the Setting up users guide for details about user impersonation.

    Immuta governance reports allow users with the GOVERNANCE Immuta permission to use a natural language builder to instantly create reports that delineate user activity across Immuta. These reports can be based on various entity types, including users, groups, projects, data sources, purposes, policy types, or connection types.

    See the Governance report types page for a list of report types and guidance.

    Authentication

    Configuring the integration and registering data

    Client Credentials Flow
    Databricks OAuth machine-to-machine authentication
    Databricks OAuth machine-to-machine (M2M) authentication page

    User authentication

    Cluster security

    Protecting the Immuta configuration

    Scala cluster security

    Auditing and compliance

    Databricks query audit

    Auditing all queries

    Auditing queries run while impersonating another user

    Governance reports

    # Not recommended by Spark and not supported in Immuta
    spark.read.format("delta").load("s3:/my_bucket/path/to/my_delta_table/partition_column=01")
    
    # Recommended by Spark and supported in Immuta.
    spark.read.format("delta").load("s3:/my_bucket/path/to/my_delta_table").where("partition_column=01")
    
    {
      "id": "query-a20e-493e-id-c1ada0a23a26",
      [...]
      "userId": "<immuta_username>",
      [...]
      "extra": {
        [...]
        "impersonationUser": "<databricks_username>"
      }
      [...]
    }
    Port
    ,
    Immuta Database
    , and
    Immuta Schema
    fields.
  • Opt to check the Enable Impersonation box and customize the Impersonation Role name as needed. This will allow users to natively impersonate another user. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the Managing users and permissions guide for instructions.

  • Opt to update the User Profile Delimiters. This will be necessary if any of the provided symbols are used in user profile information.

  • Username and Password: Enter the username and password in the Immuta System Account Credentials section. The username and password provided must be the credentials that were set in the bootstrap master script when you created the user.
  • Entra ID OAuth Client Secret: The values below can be found on the overview page of the application you created in Microsoft Entra ID. Before you enter this information, ensure you have completed the prerequisites for OAuth authentication listed above.

    1. Display Name: This must match the name of the OAuth application you registered.

    2. Tenant Id

    3. Client Id

    4. Client Secret: Enter the Value of the secret, not the secret ID.

  • Click Save.

  • Click Save.

    Prerequisites

    Add an Azure Synapse Analytics integration

    Select your configuration method

    Automatic setup

    Manual setup

    Save the configuration

    Register data

    Edit an Azure Synapse Analytics integration

    Immuta requires temporary, one-time use of credentials with specific permissions

    When performing edits to an integration, Immuta requires temporary, one-time use of credentials of a Superuser or a user with the Manage GRANTS permission.

    Alternatively, you can download the Edit Script from your Azure Synapse Analytics configuration on the Immuta app settings page and run it in Azure Synapse Analytics.

    Remove an Azure Synapse Analytics integration

    Azure Synapse Analytics integration reference guide
    Set up OAuth via Microsoft Entra ID app registration with a client secret
    Automatic setup
    Manual setup
    permissions outlined above
    Register Azure Synapse Analytics data in Immuta
    Create the database user in MySQL.
  • Create an IAM policy for IAM database authentication.

  • Create the database account.

  • Grant this account the following MySQL privileges. A sample command that provides all these privileges to all databases and views is provided below:

    1. SHOW DATABASES on all databases in the server

    2. SELECT on all databases, tables, and views in the server

    3. SHOW VIEW on all views in the server

  • Aurora

  • RDS

  • Enter the host connection information:

    1. Display Name: This is the name of your new connection. This name will be used in the API (connectionKey), in data source names from the host, and on the connections page. Avoid the use of periods (.) or restricted words in your connection name.

    2. Hostname: The URL of your MySQL instance.

    3. Port: The port configured for MySQL.

    4. Region: The region of the AWS account with your MySQL instance.

  • Select an authentication method from the dropdown menu.

    1. AWS Access Key: Provide the access key ID and secret access key for the database user account you created above.

    2. AWS Assumed Role (recommended): Immuta will assume this IAM role from Immuta's AWS account to request temporary credentials that it can use to perform operations in the registered MySQL database. Before proceeding, contact your Immuta representative and provide your service principal's IAM role. Immuta will allowlist the service principal so that Immuta can successfully assume that role. Your Immuta representative will provide the account to add to your trust relationship. Then, complete the steps below.

      1. Enter the Username of the

      2. Enter the Role ARN of the .

      3. Set the External ID provided in a condition on the trust relationship for the role specified above. See the for guidance.

    3. Username and Password: Enter the credentials for the you created above.

  • Click Save connection.

  • database

    Create a database user account

    Register a MySQL connection

    database authentication method
    Password authentication
    MySQL documentation
    IAM database authentication
    Create the database user in MariaDB.
  • Create an IAM policy for IAM database authentication.

  • Create the database account.

  • Grant this account the following MariaDB privileges. A sample command that provides all these privileges to all databases and views is provided below:

    1. SHOW DATABASES on all databases in the server

    2. SELECT on all databases, tables, and views in the server

    3. SHOW VIEW on all views in the server

  • Enter the host connection information:

    1. Display Name: This is the name of your new connection. This name will be used in the API (connectionKey), in data source names from the host, and on the connections page. Avoid the use of periods (.) or restricted words in your connection name.

    2. Hostname: URL of your MariaDB instance.

    3. Port: Port configured with MariaDB.

    4. Region: The region of the AWS account with your MariaDB instance.

  • Select an authentication method from the dropdown menu.

    1. AWS Access Key: Provide the access key ID and secret access key for the database account you created above.

    2. AWS Assumed Role (recommended): Immuta will assume this IAM role from Immuta's AWS account to request temporary credentials that it can use to perform operations in the registered MariaDB database. Before proceeding, contact your Immuta representative and provide your service principal's IAM role. Immuta will allowlist the service principal so that Immuta can successfully assume that role. Your Immuta representative will provide the account to add to your trust relationship. Then, complete the steps below.

      1. Enter the Role ARN of the .

      2. Set the external ID provided in a condition on the trust relationship for the role specified above. See the for guidance.

    3. Username and Password: Enter the credentials for the you created above.

  • Click Save connection.

  • database

    Create a database user account

    Register a MariaDB connection

    database authentication method
    Password authentication
    MariaDB documentation
    IAM database authentication
    registers
    these tables as data sources and stores the table metadata in the Immuta metadata database.

    Immuta presents a hierarchical view of your data that reflects the hierarchy of objects in Oracle after registration is complete:

    • Host

    • Database

    • Schema

    • Table

    Beyond making the registration of your data more intuitive, connections provides more control. Instead of performing operations on individual schemas or tables, you can perform operations (such as object sync) at the connection level.

    See the Connections reference guide for details about connections and how to manage them. To configure your Oracle integration and register data, see the Register an Oracle connection guide.

    The privileges that the Oracle integration requires align to the least privilege security principle. The table below describes each privilege required by the setup user and the IMMUTA_SYSTEM_ACCOUNT user.

    Oracle privilege
    User requiring the privilege
    Explanation

    GRANT ANY ROLE or GRANT ANY PRIVILEGE system privilege

    Setup user

    This privilege allows the user registering the connection to assign the SELECT_CATALOG_ROLE or SELECT privileges to the Immuta system account so that it can register and manage the connection.

    SELECT on all the system views listed below:

    • V$DATABASE

    • CDB_PDBS

    • SYS.DBA_USERS

    Immuta system account

    The following user actions spur various processes in the Oracle integration so that Immuta data remains synchronous with data in Oracle:

    • Data source created or updated: Immuta registers data source metadata and stores that metadata in the Immuta metadata database.

    • Data source deleted: Immuta deletes the data source metadata from the metadata database and removes subscription policies from that table.

    While you can author and apply subscription and data policies on Oracle data sources in Immuta, these policies will not be enforced natively in the Oracle platform.

    Object type
    Subscription policy support
    Data policy support
    Request app support

    Tables

    ❌

    ❌

    ✅

    Immuta will not apply policies in this integration.

    The Oracle integration supports username and password authentication to register a connection. The credentials provided must be for an account with the permissions listed in the Register an Oracle connection guide.

    The following Immuta features are unsupported:

    • Subscription and data policies

    • Tag ingestion

    • Query audit

    Immuta policies will not be automatically enforced in Oracle

    While you can author and apply subscription and data policies on Oracle data sources within Immuta, these policies will not be enforced natively in the Oracle platform.

    To use this integration, contact your Immuta representative.

    What does Immuta do in my environment?

    Registering a connection

    connections
    connection is registered

    Required Oracle privileges

    Maintaining state with Oracle

    Supported object types

    Immuta policies

    Security and compliance

    Authentication method

    Limitations and known issues

    When the
    , Immuta ingests and stores connection metadata in the Immuta metadata database. In the example below, the Immuta application administrator connects the database that contains marketing-data, research-data, and cs-data tables. Immuta
    registers
    these tables as data sources and stores the table metadata in the Immuta metadata database.

    Immuta presents a hierarchical view of your data that reflects the hierarchy of objects in MySQL after registration is complete:

    • Host

    • Database

    • Data object

    Beyond making the registration of your data more intuitive, connections provides more control. Instead of performing operations on individual schemas or tables, you can perform operations (such as object sync) at the connection level.

    See the Connections reference guide for details about connections and how to manage them. To configure your MySQL connection, see the Register a MySQL connection guide.

    The privileges that the MySQL integration requires align with the least privilege security principle. The table below describes each privilege required by the setup user and the IMMUTA_SYSTEM_ACCOUNT user.

    MySQL privilege
    User requiring the privilege
    Explanation

    Root user or GRANT OPTION privilege

    Setup user

    This privilege is required so that the setup user can grant privileges to the Immuta system account.

    SHOW DATABASES on all databases in the server

    Immuta system account

    The following user actions spur various processes in the MySQL integration so that Immuta data remains synchronous with data in MySQL:

    • Data source created or updated: Immuta registers data source metadata and stores that metadata in the Immuta metadata database.

    • Data source deleted: Immuta deletes the data source metadata from the metadata database.

    While you can author and apply subscription and data policies on MySQL data sources in Immuta, these policies will not be enforced natively in the MySQL platform.

    Object type
    Subscription policy support
    Data policy support
    Request app support

    Base tables

    ❌

    ❌

    ✅

    Immuta will not apply policies in this integration.

    The MySQL integration supports the following authentication methods when registering a connection:

    • Access using AWS IAM role (recommended): Immuta will assume this IAM role from Immuta's AWS account to request temporary credentials that it can use to perform operations in the registered MySQL database. This option allows you to provide Immuta with an IAM role from your AWS account that is granted a trust relationship with Immuta's IAM role.

    • Access using access key and secret access key: These credentials are used by Immuta to register the connection and maintain state between Immuta and MySQL. The access key ID and secret access key provided must be for an AWS account with the privileges listed in the Register a MySQL connection guide.

    • Username and password: These credentials are used by Immuta to register the connection and maintain state between Immuta and MySQL. The credentials provided must be for a .

    The following Immuta features are unsupported:

    • Subscription and data policies

    • Tag ingestion

    • Query audit

    Immuta policies will not be automatically enforced in MySQL

    While you can author and apply subscription and data policies on MySQL data sources within Immuta, these policies will not be enforced natively in the MySQL platform.

    To use this integration, contact your Immuta representative.

    What does Immuta do in my environment?

    Registering a connection

    connections

    Required MySQL privileges

    Maintaining state with MySQL

    Supported object types

    Immuta policies

    Security and compliance

    Authentication methods

    Limitations and known issues

    connection is registered
    registers
    these tables as data sources and stores the table metadata in the Immuta metadata database.

    Immuta presents a hierarchical view of your data that reflects the hierarchy of objects in MariaDB after registration is complete:

    • Host

    • Database

    • Data object

    Beyond making the registration of your data more intuitive, connections provides more control. Instead of performing operations on individual schemas or tables, you can perform operations (such as object sync) at the connection level.

    See the Connections reference guide for details about connections and how to manage them. To configure your MariaDB integration and register data, see the Register a MariaDB connection guide.

    The privileges that the MariaDB integration requires align to the least privilege security principle. The table below describes each privilege required by the setup user and the IMMUTA_SYSTEM_ACCOUNT user.

    MariaDB privilege
    User requiring the privilege
    Explanation

    Root user or GRANT OPTION privilege

    Setup user

    This privilege is required so that the setup user can grant privileges to the Immuta system account.

    SHOW DATABASES on all databases in the server

    Immuta system account

    The following user actions spur various processes in the MariaDB integration so that Immuta data remains synchronous with data in MariaDB:

    • Data source created or updated: Immuta registers data source metadata and stores that metadata in the Immuta metadata database.

    • Data source deleted: Immuta deletes the data source metadata from the metadata database and removes subscription policies from that table.

    Object type
    Subscription policy support
    Data policy support
    Request app support

    Base tables

    ❌

    ❌

    ✅

    Immuta will not apply policies in this integration.

    The MariaDB integration supports the following authentication methods to register a connection:

    • Access using AWS IAM role (recommended): Immuta will assume this IAM role from Immuta's AWS account to request temporary credentials that it can use to perform operations in the registered MariaDB database. This option allows you to provide Immuta with an IAM role from your AWS account that is granted a trust relationship with Immuta's IAM role.

    • Access using access key and secret access key: These credentials are used by Immuta to register the connection and maintain state between Immuta and MariaDB. The access key ID and secret access key provided must be for an AWS account with the privileges listed in the Register a MariaDB connection guide.

    • Username and password: These credentials are used by Immuta to register the connection and maintain state between Immuta and MariaDB. The credentials provided must be for a .

    The following Immuta features are unsupported:

    • Subscription and data policies

    • Tag ingestion

    • Query audit

    Immuta policies will not be automatically enforced in MariaDB

    While you can author and apply subscription and data policies on MariaDB data sources within Immuta, these policies will not be enforced natively in the MariaDB platform.

    To use this integration, contact your Immuta representative.

    What does Immuta do in my environment?

    Registering a connection

    connections
    connection is registered

    Required MariaDB privileges

    Maintaining state with MariaDB

    Supported object types

    Immuta policies

    Security and compliance

    Authentication methods

    Limitations and known issues

    immuta.spark.acl.assume.not.privileged="true"
    and
    spark.hadoop.immuta.databricks.config.update.service.enabled="false"
    .
  • Once the script is written, upload the script to a location in dbfs/S3/ABFS to give the Databricks cluster access to it.

  • Because of how some user properties are populated in Databricks, load the SparkR library in a separate cell before attempting to use any SparkR functions.

  • To create the R spark-submit job,

    1. Go to the Databricks jobs page.

    2. Create a new job, and select Configure spark-submit.

    3. Set up the parameters:

       [
       "--conf","spark.driver.extraJavaOptions=-Djava.security.manager=com.immuta.security.ImmutaSecurityManager -Dimmuta.security.manager.classes.config=file:///databricks/immuta/allowedCallingClasses.json -Dimmuta.spark.encryption.fpe.class=com.immuta.spark.encryption.ff1.ImmutaFF1Service",
       "--conf","spark.executor.extraJavaOptions=-Djava.security.manager=com.immuta.security.ImmutaSecurityManager -Dimmuta.security.manager.classes.config=file:///databricks/immuta/allowedCallingClasses.json -Dimmuta.spark.encryption.fpe.class=com.immuta.spark.encryption.ff1.ImmutaFF1Service",
       "--conf","spark.databricks.repl.allowedLanguages=python,sql,scala,r",
       "dbfs:/path/to/script.R",
       "arg1", "arg2", "..."
       ]

      Note: The path dbfs:/path/to/script.R can be in S3 or ABFS (on Azure Databricks), assuming the cluster is configured with access to that path.

    4. Edit the cluster configuration, and change the Databricks Runtime to be a .

    5. Configure the section as you normally would for an Immuta cluster.

    Before you can run spark-submit jobs on Databricks you must initialize the Spark session with the settings outlined below.

    1. Configure the Spark session with immuta.spark.acl.assume.not.privileged="true" and spark.hadoop.immuta.databricks.config.update.service.enabled="false".

      Note: Stop your Spark session (spark.stop()) at the end of your job or the cluster will not terminate.

    2. The spark submit job needs to be launched using a different classloader which will point at the designated user JARs directory. The following Scala template can be used to handle launching your submit code using a separate classloader:

      package com.example.job
      
      import java.net.URLClassLoader
      import java.io.File
      
      import org.apache.spark.sql.SparkSession
      
      object ImmutaSparkSubmitExample {
      def main(args: Array[String]): Unit = {
          val jarDir = new File("/databricks/immuta/jars/")
          val urls = jarDir.listFiles.map(_.toURI.toURL)
      
          // Configure a new ClassLoader which will load jars from the additional jars directory
          val cl = new URLClassLoader(urls)
          val jobClass = cl.loadClass(classOf[ImmutaSparkSubmitExample].getName)
          val job = jobClass.newInstance
          jobClass.getMethod("runJob").invoke(job)
      }
      }
      
      class ImmutaSparkSubmitExample {
      
      def getSparkSession(): SparkSession = {
          SparkSession.builder()
          .appName("Example Spark Submit")
          .enableHiveSupport()
          .config("immuta.spark.acl.assume.not.privileged", "true")
          .config("spark.hadoop.immuta.databricks.config.update.service.enabled", "false")
          .getOrCreate()
      }
      
      def runJob(): Unit = {
          val spark = getSparkSession
          try {
          val df = spark.table("immuta.<YOUR DATASOURCE>")
      
          // Run Immuta Spark queries...
      
          } finally {
          spark.stop()
          }
      }
      }

    To create the Scala spark-submit job,

    1. Build and upload your JAR to dbfs/S3/ABFS where the cluster has access to it.

    2. Select Configure spark-submit, and configure the parameters:

       [
       "--conf","spark.driver.extraJavaOptions=-Djava.security.manager=com.immuta.security.ImmutaSecurityManager -Dimmuta.security.manager.classes.config=file:///databricks/immuta/allowedCallingClasses.json -Dimmuta.spark.encryption.fpe.class=com.immuta.spark.encryption.ff1.ImmutaFF1Service",
       "--conf","spark.executor.extraJavaOptions=-Djava.security.manager=com.immuta.security.ImmutaSecurityManager -Dimmuta.security.manager.classes.config=file:///databricks/immuta/allowedCallingClasses.json -Dimmuta.spark.encryption.fpe.class=com.immuta.spark.encryption.ff1.ImmutaFF1Service",
       "--conf","spark.databricks.repl.allowedLanguages=python,sql,scala,r",
       "--class","org.youorg.package.MainClass",
       "dbfs:/path/to/code.jar",
       "arg1", "arg2", "..."
       ]

      Note: The fully-qualified class name of the class whose main function will be used as the entry point for your code in the --class parameter.

      Note: The path dbfs:/path/to/code.jar can be in S3 or ABFS (on Azure Databricks) assuming the cluster is configured with access to that path.

    3. Edit the cluster configuration, and change the Databricks Runtime to a .

    4. Include IMMUTA_INIT_ADDITIONAL_JARS_URI=dbfs:/path/to/code.jar in the "Environment Variables" (where dbfs:/path/to/code.jar is the path to your jar) so that the jar is uploaded to all the cluster nodes.

    • The user mapping works differently from notebooks because spark-submit clusters are not configured with access to the Databricks SCIM API. The cluster tags are read to get the cluster creator and match that user to an Immuta user.

    • Privileged users (Databricks admins and allowlisted users) must be tied to an Immuta user and given access through Immuta to access data through spark-submit jobs because the setting immuta.spark.acl.assume.not.privileged="true" is used.

    • There is an option of using the immuta.api.key setting with an Immuta API key generated on the Immuta profile page.

    • Currently when an API key is generated it invalidates the previous key. This can cause issues if a user is using multiple clusters in parallel, since each cluster will generate a new API key for that Immuta user. To avoid these issues, manually generate the API key in Immuta and set the immuta.api.key on all the clusters or use a specified job user for the submit job.

    R spark-submit

    Prerequisites

    Create the R spark submit Job

    Scala spark-submit

    Prerequisites

    Create the Scala spark-submit Job

    Caveats

    An enterprise identity provider

  • Identified owners or stewards for your major data domains

  • An understanding of the metadata maintained in your external catalog, if you use one

  • 1

    Connect your Snowflake environment

    1. An application administrator will register the Snowflake connection to allow Immuta to discover databases, schemas, and tables in Snowflake. As object sync runs, Immuta creates corresponding data sources that can be governed through policies or access requests.

    2. After registering the connection, organize your data into domains. Domains assign ownership of data to the appropriate teams and determine who can manage policies, identification, audit, and access workflows for those data sources.

    Once your data sources are registered in Immuta and organized into domains, you can apply policy to them.

    lightbulb

    Start by registering a select Snowflake business domain by . Once your implementation is established, you can onboard additional data sources using the same governance model.

    2
    1. and configure SSO so that users can authenticate with their existing credentials and be automatically registered in Immuta.

      1. If your identity provider supports SCIM, . These attributes can then be used when authoring policies so access automatically changes as the user information in the IAM is synced with Immuta.

    2. After your identity provider is configured, . This ensures that policies written in Immuta are enforced for the correct users when they query data in Snowflake.

    Once your users are registered and mapped to their Snowflake identities, any policies that apply to data sources will be enforced for those users.

    3

    Metadata allows you to author policies that automatically apply across your Snowflake environment instead of managing individual tables and columns.

    1. If your organization already maintains metadata in an external catalog, so Immuta continuously synchronizes tags, classifications, and descriptions.

    2. You can also . Identification is recommended for all deployments and is especially useful if you do not maintain an external catalog.

    Once your data sources are tagged in Immuta, you can author global policies based on those tags. These policies can apply automatically as additional data sources are registered through object sync and tagged.

    4

    Once users and metadata are available, begin authoring global policies that automatically protect your data.

    1. to automatically grant access to users who meet the required conditions. You can also use subscription policies to enforce organization-wide requirements, such as limiting access to users with specific attributes or training before access can be granted.

    2. to mask sensitive columns or filter rows based on metadata such as catalog or identification tags.

    Author global policies using metadata and user attributes instead of individual Snowflake objects or users. This allows the same policies to automatically apply as new data is registered and users are synchronized into Immuta.

    5

    Subscription policies can automatically grant access when users meet the required conditions. For access that requires review, configure the .

    1. A governance user will and attach them to assets so users can .

    2. If you use an external catalog, so users can request access directly from their catalog while continuing to use it as the primary location for data discovery.

    6

    After your data, users, and policies are configured, .

    Audit records provide visibility into user queries, policy evaluations, access requests, policy changes, and metadata updates, allowing your organization to monitor how data is accessed and governed across your Snowflake environment.

    After completing this workflow, your Snowflake environment is ready for automated governance. From here you can continue configuring advanced features, refining policies, and onboarding additional Snowflake data sources. See the Snowflake integration reference guide for architecture details, platform behavior, and additional configuration options.

    Before you begin

    Snowflake
    lightbulb

    Completing this workflow typically requires coordination among an Immuta application administrator, a Snowflake administrator, an identity administrator, governance users, and data stewards.

    Next steps

    Azure Synapse Analytics Overview

    Learn about how the Azure Synapse Analytics integration works to govern access to data

    This page describes the Azure Synapse Analytics integration, through which Immuta applies policies directly in Azure Synapse Analytics. For a tutorial on configuring Azure Synapse Analytics see the Azure Synapse Integration page.

    The Azure Synapse Analytics is a policy push integration that allows Immuta to apply policies directly in Azure Synapse Analytics Dedicated SQL pools without the need for users to go through a proxy. Instead, users can work within their existing Synapse Studio and have per-user policies dynamically applied at query time.

    How the integration works

    This integration works on a per-Dedicated-SQL-pool basis: all of Immuta's policy definitions and user entitlements data need to be in the same pool as the target data sources because Dedicated SQL pools do not support cross-database joins. Immuta creates schemas inside the configured Dedicated SQL pool that contain policy-enforced views that users query.

    When the integration is configured, the Application Admin specifies the

    • Immuta Database: This is the pre-existing database Immuta uses. Immuta will create views from the tables contained in this database, and all schemas and views created by Immuta will exist in this database, such as the schemas immuta_system, immuta_functions, and the immuta_procedures that contain the tables, views, UDFs, and stored procedures that support the integration.

    • Immuta Schema: The schema that Immuta manages. All views generated by Immuta for tables registered as data sources will be created in this schema.

    • User Profile Delimiters: Since Azure Synapse Analytics dedicated SQL pools do not support array or hash objects, certain user access information is stored as delimited strings; the Application Admin can modify those delimiters to ensure they do not conflict with possible characters in strings.

    For a tutorial on configuring the integration see the .

    Synapse data sources are represented as views and are under one schema instead of a database, so their view names are a combination of their schema and table name, separated by an underscore.

    For example, with a configuration that uses IMMUTA as the schema in the database dedicated_pool, the view name for the data source dedicated_pool.tpc.case would be dedicated_pool.IMMUTA.tpc_case.

    You can see the view information on the data source details page under Connection Information.

    This integration uses webhooks to keep views up-to-date with the corresponding Immuta data sources. When a data source or policy is created, updated, or disabled, a webhook is called that creates, modifies, or deletes the dynamic view in the Immuta schema. Note that only standard views are available because Azure Synapse Analytics Dedicated SQL pools do not support secure views.

    1. An Immuta Application Administrator , registering their initial Synapse Dedicated SQL pool with Immuta.

    2. Immuta creates Immuta schemas inside the configured Synapse Dedicated SQL pool.

    3. A Data Owner in Immuta as data sources. A Data Owner, Data Governor, or Administrator or in Immuta.

    4. Data source metadata, tags, user metadata, and policy definitions are stored in Immuta's Metadata Database.

    The table below describes each privilege required in Azure Synapse Analytics for the setup user and the IMMUTA_SYSTEM_ACCOUNT user. The references to immuta_db and immuta_schema in the table can be replaced with what you chose for the name of your Immuta database and schema when setting up the integration.

    Azure Synapse Analytics privilege
    User or role requiring privilege
    Features
    Explanation

    The definitions for each status and the state of configured data platform integrations is available in the .

    The Azure Synapse Analytics integration supports the following authentication methods to configure the integration and create data sources:

    • Username and password: Immuta supports SQL authentication with username and password for Azure Synapse Analytics. See the for details.

    • OAuth authentication with Microsoft Entra ID: You can use this authentication method to register data sources or configure the Azure Synapse Analytics integration using the . To use this authentication method, OAuth must be set up via . See the for details about using OAuth authentication with Microsoft Entra ID.

    Immuta cannot ingest tags from Synapse, but you can connect any of these to work with your integration.

    Impersonation allows users to query data as another Immuta user in Azure Synapse Analytics. To enable user impersonation, see the .

    You can to a single Immuta tenant.

    • Immuta does not support the following masking types in this integration because of limitations with dedicated SQL pools (linked below). Any column assigned one of these masking types will be masked to NULL:

      • Reversible Masking: Synapse UDFs currently only support SQL, but Immuta needs to execute code (such as JavaScript or Python) to support this masking feature. See the .

      • Format Preserving Masking: Synapse UDFs currently only support SQL, but Immuta needs to execute code (such as JavaScript or Python) to support this masking feature. See the .

    Databricks Lakebase Integration

    Learn about how the Databricks Lakebase integration works and what Immuta creates in your environment to enforce object-level access controls directly on those objects

    Public preview: This integration is available to all accounts that request to enable it for their tenant. Contact your Immuta representative to enable it.

    The Databricks Lakebase integration registers data from Databricks Lakebase in Immuta and enforces subscription policies on that data when queried in PostgreSQL. Immuta supports both Lakebase Autoscaling and Lakebase Provisioned.

    The sequence diagram below outlines the events that occur when an Immuta user who is subscribed to a data source queries that data.

    What does Immuta do in my environment?

    Registering a connection

    Databricks Lakebase is configured and data is registered through connections, an Immuta feature that allows you to register your data objects through a single connection to make data registration more scalable for your organization. Instead of registering schemas and databases individually, you can register them all at once and allow Immuta to monitor your data platform for changes so that data sources are added and removed automatically to reflect the state of data in your data platform.

    During connection registration, you provide Immuta credentials with the privileges outlined on the Register a Databricks Lakebase connection page. When the connection is registered, Immuta ingests and stores connection metadata in the Immuta metadata database.

    In the example below, the Immuta application administrator connects the database that contains marketing-data, research-data, and cs-data tables. Immuta registers these tables as data sources and stores the table metadata in the Immuta metadata database.

    Immuta presents a hierarchical view of your data that reflects the objects in PostgreSQL hosted on Databricks Lakebase after registration is complete:

    • Lakebase database

    • Database

    • Schema

    • Table

    Beyond making the registration of your data more intuitive, connections provides more control. Instead of performing operations on individual schemas or tables, you can perform operations (such as object sync) at the connection level.

    See the for details about connections and how to manage them. To configure your Databricks Lakebase connection, see the .

    Immuta enforces read and write subscription policies on Databricks Lakebase tables by issuing SQL statements in PostgreSQL that grant and revoke access to tables according to the policy.

    When a user is subscribed to a table registered in Immuta,

    1. Immuta creates a role for that user in PostgreSQL, if one doesn't already exist.

    2. PostgreSQL stores that role in its internal system catalog.

    3. Immuta issues grants to that user's role in PostgreSQL to enforce policy. The provides an example of this policy enforcement.

    See the for details about the privileges granted to users when they are subscribed to a data source protected by a subscription policy.

    Immuta grants access to Databricks Lakebase through PostgreSQL privileges. See the for details about the privileges granted to users when they are subscribed to a data source protected by a subscription policy.

    The privileges that the Databricks Lakebase integration requires align to the least privilege security principle. The table below describes each privilege required by the IMMUTA_SYSTEM_ACCOUNT user.

    Databricks Lakebase privilege
    Explanation

    The following user actions spur various processes in the Databricks Lakebase integration so that Immuta data remains synchronous with data in Databricks Lakebase:

    • Data source created: Immuta registers data source metadata and stores that metadata in the Immuta metadata database.

    • Data source deleted: Immuta deletes the data source metadata from the metadata database and removes subscription policies from that table.

    • : When a user account is mapped to Immuta, their metadata is stored in the metadata database.

    • User subscribed to a data source

    The database instance must be up and running for state to be maintained and object sync to successfully complete. If the database instance is stopped, object sync will fail.

    Databricks Lakebase holds PostgreSQL objects. See the section for details about the PostgreSQL objects and policies that Immuta supports.

    Immuta supports Databricks Lakebase policies through PostgreSQL. See the section for details about the policies that Immuta supports.

    The Databricks Lakebase integration supports OAuth machine-to-machine (M2M) authentication to register a connection.

    The Databricks Lakebase connection authenticates as a Databricks identity and generates an OAuth token. Immuta then uses that token as a password when connecting to PostgreSQL. To enable secure, automated machine-to machine access to the database instance, the connection must obtain an OAuth token using a Databricks service principal. See the for more details.

    The built-in Immuta IAM can be used as a complete solution for authentication and user entitlement. However, you can connect your existing identity management provider to Immuta to use that system for authentication and user entitlement instead. Each of the includes a set of configuration options that enable Immuta to communicate with the IAM system and map the users, permissions, groups, and attributes into Immuta.

    For policies to impact the right users, the user account in Immuta must be mapped to the user account in PostgreSQL. You can ensure these accounts are mapped correctly in the following ways:

    • : If usernames in PostgreSQL align with usernames in the external IAM and those accounts align with an IAM attribute, you can enter that IAM attribute on the app settings page to automatically map user IDs in Immuta to PostgreSQL.

    • : You can manually map user IDs for individual users.

    For guidance on connecting your IAM to Immuta, see the .

    The following Immuta features are unsupported:

    • Data policies

    • Impersonation

    • Tag ingestion

    • Query audit

    Registering and Protecting Data

    Learn how Immuta enforces policies on data in your Databricks Spark environment

    In the Databricks Spark integration, Immuta installs an Immuta-maintained Spark plugin on your Databricks cluster. When a user queries data that has been registered in Immuta as a data source, the plugin injects policy logic into the plan Spark builds so that the results returned to the user only include data that specific user should see.

    The sequence diagram below breaks down this process of events when an Immuta user queries data in Databricks.

    Immuta intercepts Spark calls to the Metastore. Immuta then modifies the logical plan so that policies are applied to the data for the querying user.

    Registering data

    When data owners register Databricks securables in Immuta, the securable metadata is registered and Immuta creates a corresponding data source for those securables. The data source metadata is stored in the Immuta Metadata Database so that it can be referenced in policy definitions.

    The image below illustrates what happens when a data owner registers the Accounts, Claims, and Customers securables in Immuta.

    Users who are subscribed to the data source in Immuta can then query the corresponding securable directly in their Databricks notebook or workspace.

    See the for details about the authentication methods supported for registering data.

    When schema monitoring is enabled, Immuta monitors your servers to detect when new tables or columns are created or deleted, and automatically registers (or disables) those tables in Immuta. These newly updated data sources will then have any global policies and tags that are set in Immuta applied to them. The Immuta data source columns will be updated with any column changes, and the Immuta environment will be in sync with your data environment.

    For Databricks Spark, the automatic is disabled because of the . In this case, Immuta requires you to download a schema detection job template (a Python script) and import that into your Databricks workspace.

    See the for instructions on enabling schema monitoring.

    In Immuta, a Databricks data source is considered ephemeral, meaning that the compute resources associated with that data source will not always be available.

    Ephemeral data sources allow the use of ephemeral overrides, user-specific connection parameter overrides that are applied to Immuta metadata operations.

    When a user runs a Spark job in Databricks, the Immuta plugin automatically submits ephemeral overrides for that user to Immuta. Consequently, subsequent metadata operations for that user will use the current cluster as compute.

    See the for more details about ephemeral overrides and how to configure or disable them.

    The Spark plugin has the capability to send ephemeral override requests to Immuta. These requests are distinct from ephemeral overrides themselves. Ephemeral overrides cannot be turned off, but the Spark plugin can be configured to not send ephemeral override requests.

    Tags can be used in Immuta in a variety of ways:

    • Use tags for global subscription or data policies that will apply to all data sources in the organization. In doing this, company-wide data security restrictions can be controlled by the administrators and governors, while the users and data owners need only to worry about tagging the data correctly.

    • Generate Immuta reports from tags for insider threat surveillance or data access monitoring.

    • Filter search results with tags in the Immuta UI.

    The Databricks Spark integration cannot ingest tags from Databricks, but you can connect any of these to work with your integration.

    You can also manage tags in Immuta by to your data sources and columns. Alternatively, you can use to automatically tag your sensitive data.

    Immuta allows you to author subscription and data policies to automate access controls on your Databricks data.

    • Subscription policies: After registering data sources in Immuta, you can control who has access to specific securables in Databricks through Immuta subscription policies or by . Data users will only see the immuta database with no tables until they are granted access to those tables as Immuta data sources. See the for a list of policy types supported.

    • Data policies: You can create data policies to apply fine-grained access controls (such as restricting rows or masking columns) to manage what users can see in each table after they are subscribed to a data source. See the for details about specific types of data policies supported.

    The image below illustrates how Immuta enforces a subscription policy that only allows users in the Analysts group to access the yellow-table.

    See the for details about the benefits of using Immuta subscription and data policies.

    Once a Databricks user who is subscribed to the data source in Immuta directly in their workspace, Spark Analysis initiates and the following events take place:

    1. Spark calls down to the Metastore to get table metadata.

    2. Immuta intercepts the call to retrieve table metadata from the Metastore.

    3. Immuta modifies the Logical Plan to enforce policies that apply to that user.

    4. Immuta wraps the Physical Plan with specific Java classes to signal to the Security Manager that it is a trusted node and is allowed to scan raw data.

    The image below illustrates what happens when an Immuta user who is subscribed to the Customers data source queries the securable in Databricks.

    Regardless of the policies on the data source, the users will be able to read raw data on the cluster if they meet one of the criteria listed below:

    • Databricks administrator is tied to an Immuta account

    • A Databricks user is listed as an ignored user (Users can be specified in the to become ignored users.)

    Generally, Immuta prevents users from seeing data unless they are explicitly given access, which blocks access to raw sources in the underlying databases.

    Databricks non-admin users will only see sources to which they are subscribed in Immuta, and this can present problems if organizations have a data lake full of non-sensitive data and Immuta removes access to all of it. To address this challenge, Immuta allows administrators to change this default setting when configuring the integration so that Immuta users can access securables that are not registered as a data source. Although this is similar to how privileged users in Databricks operate, non-privileged users cannot bypass Immuta controls.

    See the for details about this setting.

    Immuta projects combine users and data sources under a common purpose. Sometimes this purpose is for a single user to organize their data sources or to control an entire schema of data sources through a single projects screen; however, most often this is an Immuta purpose for which the data has been approved to be used and will restrict access to data and streamline team collaboration. Consequently, data owners can restrict access to data for a specified purpose through projects.

    When a user is working within the context of a project, they will only see the data in that project. This helps to prevent data leaks when users collaborate. Users can switch project contexts to access various data sources while acting under the appropriate purpose.

    When users change project contexts (either through the Immuta UI or with ), queries reflect users as acting under the purposes of that project, which may allow additional access to data if there are purpose restrictions on the data source(s). This process also allows organizations to track not just whether a specific data source is being used, but why.

    See the for details about how to prevent users from switching project contexts in a session.

    Users can have additional write access in their integration using project workspaces. Users can integrate a single or multiple workspaces with a single Immuta tenant.

    See the for more details.

    Register a Google BigQuery Connection

    Public preview: This integration is available to all accounts that request to enable it for their tenant. Contact your Immuta representative to enable it.

    Requirement

    BigQuery Enterprise or Enterprise Plus edition

    Permissions

    The user registering the connection must have the permissions below.

    • APPLICATION_ADMIN Immuta permission

    • The Google BigQuery user setting up the connection must be able to

      • Create a service account and grant that service account the necessary BigQuery permissions. To do so, the setup user needs the following permissions:

        • roles/iam.serviceAccountCreator

        • roles/iam.serviceAccountAdmin

        • roles/resourcemanager.projectIamAdmin (or a project owner)

      • Create a JSON key

    Create the prerequisite role, service account, and private key file for Immuta to connect to Google BigQuery.

    1. and bind it to the project or the specific datasets you want ingested in Immuta. The custom role should have the following privileges:

      1. At the GCP organization level: resourcemanager.organizations.get

      2. At the Google Workspace level (also scoped to the organization, but a different control plane):

    You will use the private key file generated after completing these steps to register your Google BigQuery connection.

    1. In Immuta, click Data and select Connections in the navigation menu.

    2. Click the + Add Connection button.

    3. Select the Google BigQuery tile.

    4. Enter the connection information:

    Configure an Amazon Redshift Spectrum Integration

    Create, manage, or remove your Amazon Redshift Spectrum integration

    This page illustrates how to configure the Amazon Redshift Spectrum integration on the Immuta app settings page. To configure this integration via the Immuta API, see the Integrations API getting started guide.

    Requirements

    • A Redshift cluster with an AWS row-level security patch applied. Contact Immuta for guidance.

    • An AWS IAM role for Redshift that is associated with your Redshift cluster.

    • The enable_case_sensitive_identifier parameter must be set to false (default setting) for your Redshift cluster.

    • . You have two options for configuring this database:

      • : Instead of creating an immuta database that manages all schemas and views created when Redshift data is registered in Immuta, the integration adds the Immuta-managed schemas and views to an existing database in Redshift.

      • : Create a new database for Immuta that manages all schemas and views created when Redshift data is registered in Immuta, and re-create all of your external tables in that database.

    The user configuring the integration must have the permissions below.

    • APPLICATION_ADMIN Immuta permission

    • The Redshift role used to run the Immuta bootstrap script must have the following privileges when configuring the integration:

      • If using an existing database

    Allow Immuta to create secure views of your external tables through one of these methods:

    • : Instead of creating an immuta database that manages all schemas and views created when Redshift data is registered in Immuta, the integration adds the Immuta-managed schemas and views to an existing database in Redshift.

    • : Create a new database for Immuta that manages all schemas and views created when Redshift data is registered in Immuta, and re-create all of your external tables in that database.

    Select a tab below for instructions for either method.

    Configure the integration with an existing database

    1. Click the App Settings icon in the navigation menu.

    2. Click the Integrations tab.

    3. Click the +Add Integration button and select Redshift from the dropdown menu.

    1. Click the App Settings icon in the navigation menu.

    2. Navigate to the Integrations tab and click the down arrow next to the Redshift Spectrum integration.

    3. Edit the field you want to change. Note any field shadowed is not editable, and the integration must be disabled and re-installed to change it.

    1. Click the App Settings icon in the navigation menu.

    2. Navigate to the Integrations tab and click the down arrow next to the Amazon Redshift Spectrum integration.

    3. Click the checkbox to disable the integration.

    4. Enter the credentials that were used to initially configure the integration.

    Spark Environment Variables

    Learn about the available Spark environment variables so that you can customize your Databricks Spark integration

    This page outlines configuration details for Immuta-enabled Databricks clusters. Databricks administrators should place the desired configuration in the Spark environment variables.

    If you add additional Hadoop configuration during the integration setup, this variable sets the path to that file.

    The additional Hadoop configuration is where sensitive configuration goes for remote filesystems (if you are using a secret key pair to access S3, for example).

    Default value: true

    Set this to false if ephemeral overrides should not be enabled for Spark. When true, this will automatically override ephemeral data source httpPaths with the httpPath of the Databricks cluster running the user's Spark application.

    This configuration item can be used if automatic detection of the Databricks httpPath should be disabled in favor of a static path to use for ephemeral overrides.

    Configure a Databricks Spark Integration

    Configure the Databricks Spark integration

    • APPLICATION_ADMIN Immuta permission

    • CAN MANAGE Databricks privilege on the cluster

    • A Databricks workspace with the Premium tier, which includes cluster policies (required to configure the Spark integration)

    supported version
    Spark environment variables
    supported version
    Data stewards can then review and respond to access requests, and Immuta automatically provisions access when requests are approved.

    Once access requests are configured, users can request access from Snowflake or your external catalog, and Immuta will route the request for review and provision access when it is approved.

    Register and map your users

    lightbulb

    If your identity provider supports SCIM, synchronize the user attributes that you plan to reference in policies, such as department, region, or employment type. These attributes provide a strong foundation for reusable global policies.

    Add metadata to your data

    Configure automated policies

    lightbulb

    A common first policy is to mask sensitive data identified through identification or your external catalog. As new Snowflake tables are registered and tagged, the policy automatically protects those columns without additional configuration.

    Configure access requests

    Configure audit

    Connect your organization's identity provider
    enable provisioning to synchronize users, groups, and attributes
    map Snowflake user identities to Immuta users
    connect your external catalog
    enable identification to automatically discover and tag sensitive data
    Create subscription policies
    Create data policies
    Request app
    create request forms
    request access to Snowflake data from Snowflake
    configure access request links
    configure audit to export governance activity
    restricting the permissions of the Snowflake system account
  • SYS.DBA_TABLES

  • SYS.DBA_VIEWS

  • SYS.DBA_MVIEWS

  • SYS.DBA_TAB_COLUMNS

  • SYS.DBA_OBJECTS

  • SYS.DBA_CONSTRAINTS

  • SYS.DBA_CONS_COLUMNS

  • This privilege provides access to all the Oracle system views necessary to register the connection and maintain state between the Oracle database and Immuta.

    Views

    ❌

    ❌

    ✅

    Materialized views

    ❌

    ❌

    ✅

    This privilege allows the Immuta system account to discover new databases to keep data in MySQL and Immuta in sync.

    SHOW VIEW on all views in the server

    Immuta system account

    This privilege allows the Immuta system account to access view definitions.

    SELECT on all databases, tables, and views in the server

    Immuta system account

    This privilege allows the Immuta system account to list columns required for collecting metadata about the data objects.

    Views

    ❌

    ❌

    ✅

    MySQL user account with the privileges listed in the Register a MySQL connection guide

    This privilege allows the Immuta system account to discover new databases to keep data in MariaDB and Immuta in sync.

    SHOW VIEW on all views in the server

    Immuta system account

    This privilege allows the Immuta system account to access view definitions.

    SELECT on all databases, tables, and views in the server

    Immuta system account

    This privilege allows the Immuta system account to connect to MariaDB and register the databases and their objects.

    Views

    ❌

    ❌

    ✅

    MariaDB user account with the privileges listed in the Register a MariaDB connection guide
    : When a user is added to a data source by a data owner or through a subscription policy, Immuta creates a role for that user (if a role for them does not already exist) and grants PostgreSQL privileges to their role.
  • Automatic subscription policy applied to or updated on a data source: Immuta calculates the users and data sources affected by the policy change and grants or revokes users' privileges on the PostgreSQL table. See the Protecting data page for details about this process.

  • Subscription policy deleted: Immuta revokes privileges from the affected roles.

  • User removed from a data source: Immuta revokes privileges from the user's role.

  • databricks_superuser

    This privilege is required so that Immuta can create and grant permissions to PostgreSQL roles.

    CREATEROLE

    Because privileges are granted to roles, this privilege is required so that Immuta can create PostgreSQL roles and manage role membership to enforce access controls for Databricks Lakebase objects.

    Applying policies

    Databricks Lakebase privileges granted by Immuta

    Required Databricks Lakebase privileges

    Maintaining state with Databricks Lakebase

    Supported object types

    Supported policies

    Security and compliance

    Authentication method

    User registration and ID mapping

    Limitations and known issues

    Connections reference guide
    Register a Databricks Lakebase connection guide
    Protecting data page
    Subscription policy access types page
    granting PostgreSQL privileges section on the Subscription policy access types page
    User account is mapped to Immuta
    PostgreSQL supported object types and policies
    PostgreSQL supported policies
    Databricks OAuth machine-to-machine (M2M) authentication page
    supported IAM protocols
    Automatically
    Manually
    how-to guide for your protocol
    After a user subscribes to a data source, Immuta issues GRANT statements that assign a role and object privileges to that user in PostgreSQL. PostgreSQL then stores that role in an internal system catalog, and when a user submits a query to the PostgreSQL client, PostgreSQL returns the data the user's role is allowed to see. The PostgreSQL client then returns that data to the user.

    The Physical Plan is applied and filters out and transforms raw data coming back to the user.

  • The user sees policy-enforced data.

  • Authentication methods

    Schema monitoring

    Ephemeral overrides

    Ephemeral override requests

    Tag ingestion

    Protecting data

    Policy enforcement in Databricks

    Users who can read raw tables on-cluster

    Protected and unprotected tables

    Restricting users' access to data with Immuta projects

    Project workspaces

    Installation and compliance page
    schema monitoring job
    ephemeral nature of Databricks clusters
    Register a Databricks data source guide
    Ephemeral overrides page
    supported external catalogs
    manually adding tags
    identification
    manually adding users to the data source
    Subscription policy access types page
    Data policy types page
    Automate data access control decisions page
    queries the corresponding securable
    IMMUTA_SPARK_ACL_ALLOWLIST Spark environment variable
    Customizing the integration guide
    project UDFs
    Customizing the integration page
    Writing to projects page
    database user account you created above
    database user account you created above
    AWS documentation
    MySQL database user account
    database account you created above
    AWS documentation
    MariaDB database user account

    Default value: true

    When querying Immuta data sources in Spark, the metadata from the Metastore is compared to the metadata for the target source in Immuta to validate that the source being queried exists and is queryable on the current cluster. This check typically validates that the target (database, table) pair exists in the Metastore and that the table’s underlying location matches what is in Immuta. This configuration can be used to disable location checking if that location is dynamic or changes over time. Note: This may lead to undefined behavior if the same table names exist in multiple workspaces but do not correspond to the same underlying data.

    A URI that points to a valid calling class file, which is an Immuta artifact you download during the Databricks Spark configuration process.

    This is a comma-separated list of Databricks users who can access any table or view in the cluster metastore without restriction.

    Default value: 3600

    The number of seconds to cache privileged user status for the Immuta ACL. A privileged Databricks user is an admin or is allowlisted in IMMUTA_SPARK_ACL_ALLOWLIST.

    Default value: false

    Enables auditing all queries run on a Databricks cluster, regardless of whether users touch Immuta-protected data or not.

    Default value: false

    Allows non-privileged users to SELECT from tables that are not protected by Immuta. See the Customizing the integration guide for details about this feature.

    Default value: false

    Allows non-privileged users to run DDL commands and data-modifying commands against tables or spaces that are not protected by Immuta. See the Customizing the integration guide for details about this feature.

    This is a comma-separated list of Databricks users who are allowed to impersonate Immuta users:

    Default value: false

    Exposes the DBFS FUSE mount located at /dbfs. Granular permissions are not possible, so all users will have read/write access to all objects therein. Note: Raw, unfiltered source data should never be stored in DBFS.

    Block one or more Immuta user-defined functions (UDFs) from being used on an Immuta cluster. This should be a Java regular expression that matches the set of UDFs to block by name (excluding the immuta database). For example to block all project UDFs, you may configure this to be ^.*_projects?$. For a list of functions, see the project UDFs page.

    Default value: file:///databricks/jars/immuta-spark-hive.jar

    The location of immuta-spark-hive.jar on the filesystem for Databricks. This should not need to change unless a custom initialization script that places immuta-spark-hive in a non-standard location is necessary.

    Default value: true

    Creates a world-readable or writable scratch directory on local disk to facilitate the use of dbutils and 3rd party libraries that may write to local disk. Its location is non-configurable and is stored in the environment variable IMMUTA_LOCAL_SCRATCH_DIR. Note: Sensitive data should not be stored at this location.

    Default value: INFO

    The SLF4J log level to apply to Immuta's Spark plugins.

    Default value: false

    If true, writes logging output to stdout/the console as well as the log4j-active.txt file (default in Databricks).

    This configuration is a comma-separated list of additional databases that will appear as scratch databases when running a SHOW DATABASE query. This configuration increases performance by circumventing the Metastore to get the metadata for all the databases to determine what to display for a SHOW DATABASE query; it won't affect access to the scratch databases. Instead, use IMMUTA_SPARK_DATABRICKS_SCRATCH_PATHS to control read and write access to the underlying database paths.

    Additionally, this configuration will only display the scratch databases that are configured and will not validate that the configured databases exist in the Metastore. Therefore, it is up to the Databricks administrator to properly set this value and keep it current.

    Comma-separated list of remote paths that Databricks users are allowed to directly read/write. These paths amount to unprotected "scratch spaces." You can create a scratch database by configuring its specified location (or configure dbfs:/user/hive/warehouse/<db_name>.db for the default location).

    To create a scratch path to a location or a database stored at that location, configure

    To create a scratch path to a database created using the default location,

    Default value: false

    Enables non-privileged users to create or drop scratch databases.

    Default value: false

    When true, this configuration prevents users from changing their impersonation user once it has been set for a given Spark session. This configuration should be set when the BI tool or other service allows users to submit arbitrary SQL or issue SET commands.

    Default value: true

    Denotes whether the Spark job will be run that "tags" a Databricks cluster as being associated with Immuta.

    A comma-separated list of Databricks trusted library URIs.

    Default value: 3600

    The number of seconds Immuta caches whether a table has been exposed as a data source in Immuta. This setting only applies when IMMUTA_SPARK_DATABRICKS_ALLOW_NON_IMMUTA_WRITES or IMMUTA_SPARK_DATABRICKS_ALLOW_NON_IMMUTA_READS is enabled.

    Default value: false

    Requires that users act through a single, equalized project. A cluster should be equalized if users need to run Scala jobs on it, and it should be limited to Scala jobs only via spark.databricks.repl.allowedLanguages.

    Default value: true

    Enables use of the underlying database and table name in queries against a table-backed Immuta data source. Administrators or allowlisted users can set IMMUTA_SPARK_RESOLVE_RAW_TABLES_ENABLED to false to bypass resolving raw databases or tables as Immuta data sources. This is useful if an admin wants to read raw data but is also an Immuta user. By default, data policies will be applied to a table even for an administrative user if that admin is also an Immuta user.

    Default value: true

    Same as the IMMUTA_SPARK_RESOLVE_RAW_TABLES_ENABLED variable, but this is a session property that allows users to toggle this functionality. If users run set immuta.spark.session.resolve.raw.tables.enabled=false, they will see raw data only (not Immuta data policy-enforced data). Note: This property is not set in immuta_conf.xml.

    Default value: true

    This shows the immuta database in the configured Databricks cluster. When set to false Immuta will no longer show this database when a SHOW DATABASES query is performed. However, queries can still be performed against tables in the immuta database using the Immuta-qualified table name (e.g., immuta.my_schema_my_table) regardless of whether or not this feature is enabled.

    Default value: true

    Immuta checks the versions of its artifacts to verify that they are compatible with each other. When set to true, if versions are incompatible, that information will be logged to the Databricks driver logs and the cluster will not be usable. If a configuration file or the jar artifacts have been patched with a new version (and the artifacts are known to be compatible), this check can be set to false so that the versions don't get logged as incompatible and make the cluster unusable.

    Default value: bim

    Denotes which IAM in Immuta should be used when mapping the current Spark user's username to a userid in Immuta. This defaults to Immuta's internal IAM (bim) but should be updated to reflect an actual production IAM.

    IMMUTA_INIT_ADDITIONAL_CONF_URI

    IMMUTA_EPHEMERAL_HOST_OVERRIDE

    IMMUTA_EPHEMERAL_HOST_OVERRIDE_HTTPPATH

    IMMUTA_EPHEMERAL_TABLE_PATH_CHECK_ENABLED

    IMMUTA_INIT_ALLOWED_CALLING_CLASSES_URI

    IMMUTA_SPARK_ACL_ALLOWLIST

    IMMUTA_SPARK_ACL_PRIVILEGED_TIMEOUT_SECONDS

    IMMUTA_SPARK_AUDIT_ALL_QUERIES

    IMMUTA_SPARK_DATABRICKS_ALLOW_NON_IMMUTA_READS

    IMMUTA_SPARK_DATABRICKS_ALLOW_NON_IMMUTA_WRITES

    IMMUTA_SPARK_DATABRICKS_ALLOWED_IMPERSONATION_USERS

    IMMUTA_SPARK_DATABRICKS_DBFS_MOUNT_ENABLED

    IMMUTA_SPARK_DATABRICKS_DISABLED_UDFS

    IMMUTA_SPARK_DATABRICKS_JAR_URI

    IMMUTA_SPARK_DATABRICKS_LOCAL_SCRATCH_DIR_ENABLED

    IMMUTA_SPARK_DATABRICKS_LOG_LEVEL

    IMMUTA_SPARK_DATABRICKS_LOG_STDOUT_ENABLED

    IMMUTA_SPARK_DATABRICKS_SCRATCH_DATABASE

    IMMUTA_SPARK_DATABRICKS_SCRATCH_PATHS

    IMMUTA_SPARK_DATABRICKS_SCRATCH_PATHS_CREATE_DB_ENABLED

    IMMUTA_SPARK_DATABRICKS_SINGLE_IMPERSONATION_USER

    IMMUTA_SPARK_DATABRICKS_SUBMIT_TAG_JOB

    IMMUTA_SPARK_DATABRICKS_TRUSTED_LIB_URIS

    IMMUTA_SPARK_NON_IMMUTA_TABLE_CACHE_SECONDS

    IMMUTA_SPARK_REQUIRE_EQUALIZATION

    IMMUTA_SPARK_RESOLVE_RAW_TABLES_ENABLED

    IMMUTA_SPARK_SESSION_RESOLVE_RAW_TABLES_ENABLED

    IMMUTA_SPARK_SHOW_IMMUTA_DATABASE

    IMMUTA_SPARK_VERSION_VALIDATE_ENABLED

    IMMUTA_USER_MAPPING_IAMID

    GRANT SELECT, SHOW DATABASES, SHOW VIEW ON *.* TO '<user>'@'%';
    GRANT SELECT, SHOW DATABASES, SHOW VIEW ON *.* TO '<user>'@'%';
    "spark_env_vars.IMMUTA_SPARK_DATABRICKS_ALLOWED_IMPERSONATION_USERS": {
      "type": "fixed",
      "value": "edixon@example.com,dakota@example.com"
    }
    IMMUTA_SPARK_DATABRICKS_SCRATCH_PATHS=s3://path/to/the/dir
    IMMUTA_SPARK_DATABRICKS_SCRATCH_PATHS=s3://path/to/the/dir,dbfs:/user/hive/warehouse/any_db_name.db</value>

    The Immuta Web Service calls a stored procedure that modifies the user entitlements or policies and updates data source view definitions as necessary.

  • A Synapse user who is subscribed to the data source in Immuta queries the corresponding data source view in Synapse and sees policy-enforced data.

  • Setup user

    All

    This privilege allows the setup user to grant privileges on the database, which will contain the Immuta schemas, to the Immuta system account user.

    • CONTROL ON DATABASE IMMUTA_DB

    • CONTROL ON SCHEMA immuta_procedures WITH GRANT OPTION

    • CONTROL ON SCHEMA immuta_functions WITH GRANT OPTION

    IMMUTA_SYSTEM_ACCOUNT user

    All

    The setup script grants the Immuta system account user these privileges because Immuta must have full ownership of the Immuta database where Immuta objects are managed.

    • EXECUTE ON SCHEMA immuta_functions

    • SELECT ON SCHEMA immuta_schema

    PUBLIC role

    All

    Immuta has stored functions that are used for policy enforcement and do not expose or contain any sensitive information. These objects must be accessible by all users to query and execute UDFs in native views Immuta creates in Azure Synapse Analytics.

    Regex: The built in string replace function does not support full regex. See the Synapse Documentation for details.
  • The delimiters configured when enabling the integration cannot be changed once they are set. To change the delimiters, the integration has to be disabled and re-enabled.

  • If the generated view name is more than 128 characters, then the view name is shortened to 128 characters. This could cause collisions between view names if the shortened version is the same for two different data sources.

  • For proper updates, the dedicated SQL pools have to be running when changes are made to users or data sources in Immuta.

  • Server-level principal login or be a member of the loginmanager database role in the master database

    Setup user

    All

    This privilege allows the user setting up the integration to create a user account that Immuta will use to manage Immuta-generated schemas and views.

    Data source naming convention

    Policy enforcement

    Data flow

    Required Azure Synapse Analytics privileges

    Integration health status

    Authentication methods

    Tag ingestion

    User impersonation

    Multiple integrations

    Limitations

    Azure Synapse Integration page
    configures the Synapse integration
    registers Synapse tables
    creates or changes a policy
    user
    response schema of the integrations API
    SQL Authentication in Azure Synapse Analytics documentation
    manual setup method
    Microsoft Entra ID app registration with a client secret
    Microsoft Entra documentation
    supported external catalogs
    Configure Azure Synapse Analytics integration guide
    configure multiple integrations of Synapse
    Synapse Documentation for details
    Synapse Documentation for details

    CONTROL privilege on an existing database that will store all Immuta-generated views and schemas

    Group Create privilege and privilege required to apply security label on group resource

  • Group Editor scoped to Access to Security Groups Only

  • At the GCP project level:

    • bigquery.datasets.create

    • bigquery.datasets.delete

    • bigquery.datasets.get

    • bigquery.datasets.update

    • bigquery.jobs.create

    • bigquery.routines.create

    • bigquery.routines.delete

    • bigquery.routines.get

    • bigquery.routines.update

    • bigquery.rowAccessPolicies.create

    • bigquery.rowAccessPolicies.delete

    • bigquery.rowAccessPolicies.list

    • bigquery.rowAccessPolicies.setIamPolicy

    • bigquery.rowAccessPolicies.update

    • bigquery.tables.create

    • bigquery.tables.delete

    • bigquery.tables.get

    • bigquery.tables.getData

    • bigquery.tables.getIamPolicy

    • bigquery.tables.list

    • bigquery.tables.setIamPolicy

    • bigquery.tables.update

    • bigquery.tables.updateData

    • iam.roles.create

    • iam.roles.get

    • iam.roles.list

    • iam.roles.undelete

    • iam.roles.update

    • resourcemanager.projects.getIamPolicy

    • resourcemanager.projects.setIamPolicy

  • Create a service account and grant it the custom role you just created.

  • Enable the Google BigQuery API.

  • Display Name: This is the name of your new connection. This name will be used in the API (connectionKey), in data source names from the host, and on the connections page. Avoid the use of periods (.) or restricted words in your connection name.

  • Upload your GCP Service Account Key JSON File. This is the private key file generated in create a Google Cloud service account and role for Immuta to use to connect to Google BigQuery. Uploading this file will auto-populate the following fields:

    1. Project ID: The Google Cloud Platform project to operate on (where your Google BigQuery data warehouse is located).

    2. Service Account: The service account you created.

  • Location: This is the location or region used for the dataset and query operations.

  • Directory Customer ID: This is the Google Workspace customer ID for the organization that the governed BigQuery project belongs to. See the for guidance on how to find this ID.

  • Immuta Dataset: The name of the Google BigQuery dataset to create inside the project. If you are using multiple environments in the same Google BigQuery project, this dataset must be unique across environments.

  • Immuta role: The .

  • Opt to Enable Object Sync, which will keep your connection objects up to date with your Google BigQuery environment.

    1. Select the Start Time for when the first object sync job will run each day.

    2. Select the Run Frequency to determine how frequently object sync will run each day.

    3. Opt to Run Object Sync on Create to create all the data objects for your connection. If you do not select this option, you must run object sync manually or wait for the scheduled object sync for your connection's data objects.

  • Click Save connection.

  • database

    Create a Google Cloud service account and custom role

    BigQuery users with access to Immuta-governed BigQuery data sources will be able to read the immuta_profiles table

    Google BigQuery states that grantees must have the bigquery.tables.getData permission on the target and referenced tables in policies. Because Immuta policy predicates read immuta_profiles for every entitlement check, Immuta grants every user querying a protected table read access to immuta_profiles.

    Register a Google BigQuery connection

    Create a custom role using the console
    ALL PRIVILEGES ON DATABASE for the database you configure the integration with, as you must manage grants on that database.
  • CREATE USER

  • GRANT TEMP ON DATABASE

  • If creating a new database

    • CREATE DATABASE

    • CREATE USER

    • GRANT TEMP ON DATABASE

    • REVOKE ALL PRIVILEGES ON DATABASE

  • If enabling user impersonation:

    • OWNERSHIP ON GROUP IMMUTA_IMPERSONATOR_ROLE

    • CREATE GROUP

  • Complete the Host and Port fields.

  • Enter the name of the database you created the external schema in as the Immuta Database. This database will store all secure schemas and Immuta-created views.

  • Opt to check the Enable Impersonation box and customize the Impersonation Role name as needed. This will allow users to natively impersonate another user. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the Managing users and permissions guide for instructions.

  • Select Manual and download the second bootstrap script (bootstrap script (Immuta database)) from the Setup section. The specified role used to run the bootstrap needs to have the permissions listed above for an existing database.

  • Run the bootstrap script (Immuta database) in the Redshift database that contains the external schema.

  • Choose username and password as your authentication method, and enter the credentials from the bootstrap script for the Immuta_System_Account.

  • Click Save.

  • Configure the integration by creating a new database

    1. Click the App Settings icon in the navigation menu.

    2. Click the Integrations tab.

    3. Click the +Add Integration button and select Redshift from the dropdown menu.

    4. Complete the Host and Port fields.

    5. Enter an Immuta Database. This is a new database where all secure schemas and Immuta created views will be stored.

    6. Opt to check the Enable Impersonation box and customize the Impersonation Role name as needed. This will allow users to natively impersonate another user.

    7. Select Manual and download both of the bootstrap scripts from the Setup section. The specified role used to run the bootstrap needs to have the for a new database.

    8. Run the bootstrap script (initial database) in the Redshift initial database.

    9. Run the bootstrap script (Immuta database) in the new Immuta Database in Redshift.

    10. Choose username and password as your authentication method, and enter the credentials from the bootstrap script for the Immuta_System_Account.

    11. Click Save.

    12. Then, add your external tables to the Immuta Database.

    Download the
    Edit Script
    and run it in the
    Immuta Database
    in Amazon Redshift.
  • In Immuta, enter the credentials used to initially configure the integration.

  • Click Save.

  • Click cleanup script to download the script.

  • Click Save.

  • Run the cleanup script in Amazon Redshift.

  • Permissions

    Add a Redshift integration

    Edit a Redshift Spectrum integration

    Remove a Redshift Spectrum integration

    Disabling Amazon Redshift Spectrum

    Disabling the Amazon Redshift Spectrum integration is not supported when you set the fields nativeWorkspaceName, nativeViewName, and nativeSchemaName to create Redshift Spectrum data sources. Disabling the integration when these fields are used in metadata ingestion causes undefined behavior.

    A Redshift database that contains an external schema and external tables
    Configure the integration with an existing database that contains the external tables
    Configure the integration by creating a new immuta database
    Configure the integration with an existing database that contains the external tables
    Configure the integration by creating a new immuta database
  • A cluster that uses one of these supported Databricks Runtimes:

    • 11.3 LTS

    • 14.3 LTS

  • Supported languages

    • Python

    • R (not supported for Databricks Runtime 14.3 LTS)

    • Scala (not supported for Databricks Runtime 14.3 LTS)

    • SQL

  • A Databricks cluster that is one of these supported compute types:

    • All-purpose compute

    • Job compute

  • Custom access mode

  • A Databricks workspace and cluster with the ability to directly make HTTP calls to the Immuta web service. The Immuta web service also must be able to connect to and perform queries on the Databricks cluster, and to call Databricks workspace APIs.

    • Enable OAuth M2M authentication (recommended) or ​personal access tokens.

    • Disable Photon by setting runtime_engine to STANDARD using the Clusters API. Immuta does not support clusters with Photon enabled. Photon is enabled by default on compute running Databricks Runtime 9.1 LTS or newer and must be manually disabled before setting up the integration with Immuta.

    • Restrict the set of Databricks principals who have CAN MANAGE where the Spark plugin is installed. This is to prevent editing , editing cluster policies, or removing the Spark plugin from the cluster, all of which would cause the Spark plugin to stop working.

    • If Databricks Unity Catalog is enabled in a Databricks workspace, you must use an Immuta cluster policy when you set up the Databricks Spark integration to create an Immuta-enabled cluster. See the section below for guidance.

    • If Databricks Unity Catalog is not enabled in your Databricks workspace, you must disable Unity Catalog in your Immuta tenant before proceeding with your configuration of Databricks Spark:

      1. Navigate to the App Settings page and click Integration Settings.

      2. Uncheck the Enable Unity Catalog checkbox.

    1. Click the App Settings icon in Immuta.

    2. Navigate to HDFS > System API Key and click Generate Key.

    3. Click Save and then Confirm. If you do not save and confirm, the system API key will not be saved.

    4. Scroll to the Integration Settings section.

    5. Click + Add Native Integration and select Databricks Spark Integration from the dropdown menu.

    6. Complete the Hostname field.

    7. Enter a Unique ID for the integration. The unique ID is used to name cluster policies clearly, which is important when managing several Databricks Spark integrations. As cluster policies are workspace-scoped, but multiple integrations might be made in one workspace, this ID lets you distinguish between different sets of cluster policies.

    8. Select the identity manager that should be used when mapping the current Spark user to their corresponding identity in Immuta from the Immuta IAM dropdown menu. This should be set to reflect the identity manager you use in Immuta (such as Entra ID or Okta).

    9. Choose an Access Model. The Protected until made available by policy option , whereas the Available until protected by policy option allows it.

    1. Select the Storage Access Type from the dropdown menu.

    2. Opt to add any Additional Hadoop Configuration Files.

    3. Click Add Native Integration, and then click Save and Confirm. This will restart the application and save your Databricks Spark integration. (It is normal for this restart to take some time.)

    The Databricks Spark integration will not do anything until your cluster policies are configured, so even though your integration is saved, continue to the next section to configure your cluster policies so the Spark plugin can manage authorization on the Databricks cluster.

    1. Click Configure Cluster Policies.

    2. Select one or more cluster policies in the matrix. Clusters running Immuta with Databricks Runtime 14.3 can only use Python and SQL. You can make changes to the policy by clicking Additional Policy Changes and editing the environment variables in the text field or by downloading it. See the Spark environment variables reference guide for information about each variable and its default value. Some common settings are linked below:

      1. Audit all queries

      2. (you can also )

    3. Select your Databricks Runtime.

    4. Use one of the two installation types described below to apply the policies to your cluster:

      • Automatically push cluster policies: This option allows you to automatically push the cluster policies to the configured Databricks workspace. This will overwrite any cluster policy templates previously applied to this workspace.

        1. Select the Automatically Push Cluster Policies radio button.

    5. Click Close, and then click Save and Confirm.

    6. Apply the cluster policy generated by Immuta to the cluster with the Spark plugin installed by following the .

    1. Map external user IDs from Databricks to Immuta.

    2. Give users the Can Attach To permission on the cluster.

    Permissions

    Requirements

    Prerequisites

    Add the integration on the app settings page

    Behavior change

    If a table is registered in Immuta and does not have a subscription policy applied to it, that data will be visible to users, even if the Protected until made available by policy setting is enabled.

    If you have enabled this setting, author an "Allow individually selected users" that applies to all data sources.

    Configure cluster policies

    Map users and grant them access to the cluster

    Amazon Redshift Integration Reference Guide

    Learn about how the Amazon Redshift integration works and what Immuta creates in your environment to enforce access controls directly on objects in Amazon Redshift

    The Amazon Redshift integration allows you to configure your integration and register data from Amazon Redshift in Immuta in a single step. Once data is registered, Immuta can enforce policies on that data.

    What does Immuta do in my environment?

    Registering a connection

    The Amazon Redshift integration is configured and data is registered through connections, an Immuta feature that allows you to register your data objects through a single connection to make data registration more scalable for your organization. Instead of registering schema and databases individually, you can register them all at once and allow Immuta to monitor your data platform for changes so that data sources are added and removed automatically to reflect the state of data in your data platform.

    When the connection is registered, Immuta ingests and stores connection metadata in the Immuta metadata database. In the example below, the Immuta application administrator connects the database that contains marketing-data, research-data, and cs-data tables. Immuta registers these tables as data sources and stores the table metadata in the Immuta metadata database.

    Immuta presents a hierarchical view of your data that reflects the hierarchy of objects in Amazon Redshift after registration is complete:

    • Host

    • Database

    • Schema

    • Table or view

    Beyond making the registration of your data more intuitive, connections provides more control. Instead of performing operations on individual schemas or tables, you can perform operations (such as object sync) at the connection level.

    See the for details about connections and how to manage them. To configure your Amazon Redshift integration and register data, see the .

    Immuta enforces read and write on Amazon Redshift tables by issuing SQL statements in Amazon Redshift that grant and revoke access to tables according to the policy.

    When a user is subscribed to a data object registered in Immuta,

    1. Immuta creates a role for that user in Amazon Redshift, if one doesn't already exist.

    2. Amazon Redshift stores that role in its internal system catalog.

    3. Immuta issues grants to that user's role in Amazon Redshift to enforce policy. The provides an example of this policy enforcement.

    4. The users will query data in Amazon Redshift using the immuta_<username>

    You can author in Immuta to enforce fine-grained access controls on Amazon Redshift data objects registered as Immuta data sources.

    Once a data policy is applied to an Amazon Redshift data source in Immuta,

    1. Immuta generates a masking or row-level policy in Amazon Redshift and attaches the policy to the data object it applies to.

    2. When users query that data source in Amazon Redshift, the policy will dynamically apply to that data object so that users see policy-enforced data.

    See the for a list of data policies supported for this integration.

    See the for details about the Amazon Redshift privileges granted to users when they are subscribed to a data source protected by a subscription policy.

    The privileges that the Amazon Redshift integration requires align to the least privilege security principle. The table below describes each privilege required by the setup user and the IMMUTA_SYSTEM_ACCOUNT user.

    Amazon Redshift privilege
    User requiring the privilege
    Explanation

    The following user actions initiate processes that keep Immuta data synchronous with data in Amazon Redshift:

    • Data source created or updated: Immuta registers data source metadata and stores that metadata in the Immuta metadata database.

    • Data source deleted: Immuta deletes the data source metadata from the metadata database.

    • : When a user account is mapped to Immuta, their metadata is stored in the metadata database.

    • User subscribed to a data source

    Object type
    Subscription policy support
    Data policy support
    Request app support

    The Amazon Redshift integration allows users to author and to enforce access controls.

    The following data policies are supported:

    See the for details about policy enforcement.

    The Amazon Redshift role configured as the policy exemption role in Immuta will be exempt from Immuta data policy enforcement. This role is created and managed in Amazon Redshift, not in Immuta.

    If you have service or system accounts that need to be exempt from masking and row-level policy enforcement, add them to this role in Amazon Redshift. Then, role members will be exempt from having data policies applied to them when they query Immuta-protected tables in Amazon Redshift.

    Typically, service or system accounts that perform the following actions are added to an exemption role in Amazon Redshift:

    • Automated queries

    • ETL

    • Report generation

    The system account used to register data sources in Immuta will be automatically added to the exemption role for the Amazon Redshift securables it registers.

    The Amazon Redshift integration supports username and password authentication to register a connection. The credentials provided must be for an account with the permissions listed in the . Passwords hashed using MD5 are unsupported for authentication.

    The built-in Immuta IAM can be used as a complete solution for authentication and user entitlement. However, you can connect your existing identity management provider to Immuta to use that system for authentication and user entitlement instead. Each of the includes a set of configuration options that enable Immuta to communicate with the IAM system and map the users, permissions, groups, and attributes into Immuta.

    For policies to impact the right users, the user account in Immuta must be mapped to the user account in Amazon Redshift. You can ensure these accounts are mapped correctly in the following ways:

    • : If usernames in Amazon Redshift align with usernames in the external IAM and those accounts align with an IAM attribute, you can enter that IAM attribute on the app settings page to automatically map user IDs in Immuta to Amazon Redshift.

    • : You can manually map user IDs for individual users.

    For guidance on connecting your IAM to Immuta, see the .

    The following Immuta features are unsupported:

    • Amazon Redshift Spectrum: See the for details about registering Amazon Redshift Spectrum data sources in Immuta. However, if you are using data policies on your Redshift Spectrum data sources, you cannot use the AWS Lake Formation integration. Instead, use the .

    • Several data policy types are unsupported. See the section for a list of supported data policies.

    • Impersonation

    • Query audit

    Register a PostgreSQL Connection

    Register your PostgreSQL data and map your user accounts into Immuta

    • Immuta supports PostgreSQL versions 16+

    • Data consumers must access data directly through PostgreSQL. Immuta governs PostgreSQL data for consumers accessing data directly through PostgreSQL. Transactional use cases where users access data through downstream applications that are writing data from PostgreSQL are outside of the scope of Immuta’s governance.

    The user registering the connection must have the permissions below.

    CONTROL ON SCHEMA immuta_schema WITH GRANT OPTION

    Google Workspace documentation
    custom role you created
    permissions listed above
    Click Save.
    Enter your Admin Token. This token must be for a user who has the required Databricks privilege. This will give Immuta temporary permission to push the cluster policies to the configured Databricks workspace and overwrite any cluster policy templates previously applied to the workspace.
  • Click Apply Policies.

  • Manually push cluster policies: Enabling this option allows you to manually push the cluster policies and the init script to the configured Databricks workspace.

    1. Select the Manually Push Cluster Policies radio button.

    2. Click Download Init Script and set the Immuta plugin init script as a cluster-scoped init script in Databricks by following the Databricks documentation.

    3. Click Download Policies, and then workspace.

      1. Ensure that the init_scripts.0.workspace.destination in the policy matches the file path to the init script you configured above.

      2. The Immuta cluster policy references Databricks Secrets for several of the sensitive fields. These secrets must be manually created if the cluster policy is not automatically pushed. Use Databricks API or CLI to push the proper secrets.

  • privileges on Databricks clusters
    environment variables or Spark configuration
    configure cluster policies
    disallows reading and writing tables not protected by Immuta
    Scratch paths
    User impersonation
    prevent users from changing impersonation in a session
    Databricks documentation
    global subscription policy
    role, which allows them to use the privileges granted to that role by Immuta.

    CREATE ROLE

    Immuta system account

    This privilege is required so that Immuta can create Redshift roles to enforce access controls.

    Database superuser or have the sys:secadmin role

    Immuta system account

    This role allows Immuta to apply masking and row-level policies to Redshift securables.

    The following privileges WITH GRANT OPTION on objects registered in Immuta:

    • DELETE

    • INSERT

    • SELECT

    Immuta system account

    These privileges allow Immuta to apply read and write subscription policies on tables registered in Immuta.

    : When a user is added to a data source by a data owner or through a subscription policy, Immuta creates a role for that user (if a role for them does not already exist) and
    to that role.
  • Automatic subscription policy applied to or updated on a data source: Immuta calculates the users and data sources affected by the policy change and grants or revokes users' privileges on the data. See the Protecting data page for details about this process.

  • Subscription policy deleted: Immuta revokes privileges from the affected roles.

  • Data policy created or updated: Immuta calculates the users and data sources affected by the data policy change and attaches the policy to the data object in Amazon Redshift.

  • Data policy deleted: Immuta removes the policy from the data object in Amazon Redshift.

  • User removed from a data source: Immuta revokes privileges from the user's role.

  • ✅

    ✅

    ✅

    Datashares

    ✅

    ❌

    ✅

    Only show rows (matching)

    Database superuser or the following privileges:

    • CREATEDB

    • CREATE USER

    • sys:secadmin role

    • USAGE on all databases and schemas that contain data you want to register

    • The following privileges WITH GRANT OPTION on objects registered in Immuta:

      • DELETE

      • INSERT

    • CREATE ROLE

    Setup user

    These privileges allow the user registering the connection to

    • assign the required roles and privileges to the Immuta system account so that it can register the connection and manage the integration.

    • create an Immuta database that Immuta will use to connect to the Amazon Redshift instance and maintain state with the registered databases.

    • create a policy exemption role.

    USAGE on all the databases and schemas that will be registered

    Immuta system account

    Tables

    ✅

    ✅

    ✅

    Applying policies

    Subscription policies

    Data policies

    Amazon Redshift privileges granted by Immuta

    Required Amazon Redshift privileges

    Maintaining state with Amazon Redshift

    Supported object types

    Datashares privilege requirement

    To allow Immuta to enforce access controls on datashares, you must include the WITH PERMISSIONS clause when creating the database from the datashare. You cannot add the WITH PERMISSIONS Amazon Redshift privilege after the database has been created. See the Amazon Redshift documentation for details.

    Supported policies

    Policy exemption role

    Security and compliance

    Authentication method

    User registration and ID mapping

    Limitations and known issues

    Connections reference guide
    Register an Amazon Redshift connection guide
    subscription policies
    Protecting data page
    data policies
    supported policies section
    Subscription policy access types page
    User account is mapped to Immuta
    subscription policies
    data policies
    Masking with a constant
    Masking using the custom function
    Masking with hashing
    Masking with NULL
    applying policies section
    Register an Amazon Redshift connection guide
    supported IAM protocols
    Automatically
    Manually
    how-to guide for your protocol
    AWS Lake Formation reference guide
    Amazon Redshift Spectrum integration
    Supported policies

    This privilege allows Immuta to crawl the database and discover database objects so it can register the Amazon Redshift data objects.

    Views

    grants Amazon Redshift privileges
    APPLICATION_ADMIN
    Immuta permission
  • The account credentials you provide to register the connection must have these PostgreSQL privileges:

    • Database superuser OR all of the privileges listed below.

      • CREATEROLE

      • CONNECT on the databases to be protected WITH GRANT OPTION

      • USAGE on the schemas to be protected WITH GRANT OPTION

      • The following privileges on tables to be protected WITH GRANT OPTION:

        • SELECT

        • DELETE

    For descriptions and explanations of privileges Immuta needs to enforce policies and maintain state in PostgreSQL, see the .

    1. In your PostgreSQL environment, create an Immuta database that Immuta can use to connect to your PostgreSQL instance to register the connection and maintain state with PostgreSQL.

      Having this separate database for Immuta prevents custom ETL processes or jobs deleting the database you use to register the connection, which would break the connection.

    2. In Immuta, click database Data and select Connections in the navigation menu.

    3. Click the + Add Connection button.

    4. Select the PostgreSQL tile.

    5. Select your deployment type:

      1. Self-Managed

      2. Aurora

      3. RDS

    6. Enter the host connection information:

      1. Display Name: This is the name of your new connection. This name will be used in the API (connectionKey), in data source names from the host, and on the connections page. Avoid the use of periods (.) or

    7. Enter privileged credentials to register the connection. Select your deployment method below for guidance.

    1. Click Save connection.

    Requirement: USER_ADMIN Immuta permission

    Map AWS IAM principals or PostgreSQL usernames to each Immuta user account to ensure Immuta properly enforces policies.

    The instructions below illustrate how to do this for individual users, but you can also configure user mapping in your IAM connection on the app settings page.

    1. Click People and select Users in the navigation menu.

    2. Click the user's name to navigate to their page and scroll to the External User Mapping section.

    3. Select your deployment method below for guidance on mapping users.

    Public preview: This integration is available to all accounts that request to enable it for their tenant. Contact your Immuta representative to enable it.

    Requirements

    Permissions

    Register a PostgreSQL connection

    Amazon Aurora or Amazon RDS

    Select an authentication method from the dropdown menu.

    AWS Access Key and Secret Access Key

    Provide the access key ID and secret access key for an AWS account with the .

    AWS Assumed Role (recommended)

    Immuta will assume this IAM role from Immuta's AWS account in order to perform any operations in your AWS account.

    1. Create an IAM policy with the following permissions. You will attach this to your service principal once created.

    PostgreSQL OSS or Neon

    Enter the Username and Password of a PostgreSQL account with the .

    Map users

    Amazon Aurora or Amazon RDS

    If your PostgreSQL users are using AWS IAM roles or AWS IDC users,

    1. Click Edit in the AWS User row.

    2. Use the dropdown menu to select the User Type. User and role names are case-sensitive. See the for details.

    PostgreSQL OSS or Neon
    1. Click Edit in the PostgreSQL row.

    2. Select one of the following options from the dropdown:

    Register a Databricks Unity Catalog Connection

    Register your Databricks Unity Catalog data

    Requirements

    • Immuta user with the APPLICATION_ADMIN Immuta permission

    • Databricks service principal with the following privileges. For instructions on setting up this user, see the Creating the Databricks service principal section:

      • USE CATALOG and MANAGE on all catalogs containing securables you want registered as Immuta data sources.

      • USE SCHEMA on all schemas containing securables you want registered as Immuta data sources.

      • MODIFY and SELECT on all securables you want registered as Immuta data sources.

      • Workspace admin on the workspace configured as the host for the integration.

      • Additional privileges are required for query audit:

        • USE CATALOG on the system catalog

        • USE SCHEMA on the system.access and system.query

    • Databricks user to run the script to register the connection with the following privileges:

      • Metastore admin and account admin

      • CREATE CATALOG privilege on the Unity Catalog metastore to create an Immuta-owned catalog and tables

    See the for more details about Unity Catalog privileges and securable objects.

    • Unity Catalog and attached to a Databricks workspace.

    • Unity Catalog enabled on your Databricks cluster or SQL warehouse. All SQL warehouses have Unity Catalog enabled if your workspace is attached to a Unity Catalog metastore. Immuta recommends linking a SQL warehouse to your Immuta tenant rather than a cluster for both performance and availability reasons.

    1. Click Data and select the Connections tab in the navigation menu.

    2. Click the + Add Connection button.

    3. Select the Databricks data platform tile.

    4. Enter the connection information:

    1. Click Next.

    2. Configure the Policy setting:

      1. Opt to by adding them to the Exclude Group Pattern. This field cannot be changed after the connection is created.

    3. Click Next

    Requirements:

    • A configured Databricks Unity Catalog connection

    • Fewer than 10,000 Databricks Unity Catalog data sources registered in Immuta

    • The following permissions must be added to your Immuta service principal:

      • USE CATALOG

    To allow Immuta to automatically import table and column tags from Databricks Unity Catalog, enable Databricks Unity Catalog tag ingestion in the external catalog section of the Immuta app settings page.

    1. Navigate to the App Settings page.

    2. Scroll to 2 External Catalogs, and click Add Catalog.

    3. Enter a Display Name and select Databricks Unity Catalog from the dropdown menu.

    4. Click

    If you need instruction for setting up your Databricks service principal before registering your connection, see the steps below.

    In Databricks, with the privileges listed below. Immuta uses this service principal continuously to orchestrate Unity Catalog policies and maintain state between Immuta and Databricks.

    • USE CATALOG and MANAGE on all catalogs containing securables you want registered as Immuta data sources.

    • USE SCHEMA on all schemas containing securables you want registered as Immuta data sources.

    • MODIFY and SELECT

    See the for more details about Unity Catalog privileges and securable objects.

    1. . For Databricks Unity Catalog audit to work, Immuta must have, at minimum, the following access.

      • USE CATALOG on the system catalog

      • USE SCHEMA on the system.access

    Register a Databricks Unity Catalog Legacy Connection

    Legacy connections

    The legacy connections flow documented here has been replaced for most tenants. See the .

    Requirements

    • Immuta user with the APPLICATION_ADMIN Immuta permission

    • Databricks service principal with the following privileges. For instructions on setting up this user, see the Creating the Databricks service principal section:

      • USE CATALOG and MANAGE on all catalogs containing securables you want registered as Immuta data sources.

      • USE SCHEMA on all schemas containing securables you want registered as Immuta data sources.

      • MODIFY and SELECT on all securables you want registered as Immuta data sources.

      • Workspace admin on the workspace configured as the host for the integration.

      • Additional privileges are required for query audit:

        • USE CATALOG on the system catalog

        • USE SCHEMA on the system.access and system.query

    • Databricks user to run the script to register the connection with the following privileges:

      • Metastore admin and account admin

      • CREATE CATALOG privilege on the Unity Catalog metastore to create an Immuta-owned catalog and tables

    See the for more details about Unity Catalog privileges and securable objects.

    • Unity Catalog and attached to a Databricks workspace.

    • Unity Catalog enabled on your Databricks cluster or SQL warehouse. All SQL warehouses have Unity Catalog enabled if your workspace is attached to a Unity Catalog metastore. Immuta recommends linking a SQL warehouse to your Immuta tenant rather than a cluster for both performance and availability reasons.

    1. Click Data and select the Connections tab in the navigation menu.

    2. Click the + Add Connection button.

    3. Select the Databricks data platform tile.

    4. Enter the connection information:

    Requirements:

    • A configured Databricks Unity Catalog connection

    • Fewer than 10,000 Databricks Unity Catalog data sources registered in Immuta

    • The following permissions must be added to your Immuta service principal:

      • USE CATALOG

    To allow Immuta to automatically import table and column tags from Databricks Unity Catalog, enable Databricks Unity Catalog tag ingestion in the external catalog section of the Immuta app settings page.

    1. Navigate to the App Settings page.

    2. Scroll to 2 External Catalogs, and click Add Catalog.

    3. Enter a Display Name and select Databricks Unity Catalog from the dropdown menu.

    4. Click

    If you need instruction for setting up your Databricks service principal before registering your connection, see the steps below.

    In Databricks, with the privileges listed below. Immuta uses this service principal continuously to orchestrate Unity Catalog policies and maintain state between Immuta and Databricks.

    • USE CATALOG and MANAGE on all catalogs containing securables you want registered as Immuta data sources.

    • USE SCHEMA on all schemas containing securables you want registered as Immuta data sources.

    • MODIFY and SELECT

    See the for more details about Unity Catalog privileges and securable objects.

    1. . For Databricks Unity Catalog audit to work, Immuta must have, at minimum, the following access.

      • USE CATALOG on the system catalog

      • USE SCHEMA on the system.access

    AWS Lake Formation

    Learn about how the AWS Lake Formation integration works and what Immuta creates in your environment to enforce object-level access controls

    In the AWS Lake Formation integration, Immuta orchestrates Lake Formation access controls on data registered in the Glue Data Catalog. Then, Immuta users who have been granted access to the Glue Data Catalog table or view can query it using one of these analytic engines:

    • Amazon Athena

    • Amazon EMR Spark

    Protecting Data

    Learn how Immuta enforces policies on data in your Databricks Unity Catalog environment

    In the Databricks Unity Catalog integration, Immuta administers Databricks Unity Catalog privileges on data registered in Immuta. Then, Immuta users who have been granted access to the data sources can query them.

    The sequence diagram below outlines the events that occur when an Immuta user who is subscribed to a data source queries it in Databricks Unity Catalog.

    The Databricks Unity Catalog integration is configured and data is registered through , an Immuta feature that allows administrators to register data objects in a technology through a single connection to make data registration more scalable for your organization.

    Once the Databricks Unity Catalog connection is registered, you can author subscription and data policies in Immuta to enforce access controls.

    See the for more details about registering a connection.

    When a subscription policy is applied to a data source, users who meet the conditions of the policy will be

    SELECT
  • TRUNCATE

  • UPDATE

  • TRUNCATE

  • UPDATE

  • manually add this cluster policy to your Databricks
    INSERT
  • TRUNCATE

  • UPDATE

  • Neon

    restricted words
    in your connection name.
  • Hostname

  • Port

  • Database: Enter the name of the Immuta database you created in your PostgreSQL environment. Immuta will register all supported databases and data objects through this database connection.

    1. Create an IAM role and select AWS Account as the trusted entity type. This role will be used by Immuta to set up the connection and orchestrate policies.

    2. Add the IAM policy from step 1 to your service principal. These permissions will allow the service principal to register data sources and apply policies on Immuta's behalf.

      Before proceeding, contact your Immuta representative for the account and external ID to add to your trust relationship. Then, complete the steps below.

    3. Add a trust policy to your service principal, replacing <AWS ACCOUNT ID> and <EXTERNAL ID> with the values provided by Immuta. See the AWS documentation for guidance.

    1. Grant your service principal the rds_iam role in PostgreSQL. See the AWS documentation for guidance.

    2. In Immuta, enter the IAM role name of your service principal in the Username field.

    3. Enter the Role ARN. Immuta will assume this role when interacting with AWS.

    4. Enter the External ID provided by Immuta.

    Username and Password

    Enter the credentials for an AWS account with the PostgreSQL privileges outlined above.

    AWS IAM role: Only a single Immuta user can be mapped to an IAM role. This restriction prohibits enforcing policies on AWS users who could assume that role. Therefore, if using role principals, create a new user in Immuta that represents the role so that the role then has the permissions applied specifically to it.

    1. AWS IAM user

    2. AWS Identity Center user IDs: You must use the numeric User ID value found in AWS IAM Identity Center, not the user's email address.

    3. Unset (fallback to Immuta username): When selecting this option, the AWS username is assumed to be the same as the Immuta username.

  • Click Save.

  • See the Mapping IAM principals in Immuta section for details about supported principals.

    If your PostgreSQL users are using PostgreSQL usernames,

    1. Click Edit in the PostgreSQL row.

    2. Select one of the following options from the dropdown:

      1. Select PostgreSQL Username to map the PostgreSQL username to the Immuta user and enter the PostgreSQL username in the field. Username mapping is case insensitive.

      2. Select Unset (fallback to Immuta username) to use the Immuta username as the assumed PostgreSQL username. Use this option if the user's PostgreSQL username exactly matches the user's Immuta username. Username mapping is case insensitive.

      3. Select None (user does not exist in PostgreSQL) if this is an Immuta-only user. This option will improve performance for Immuta users who do not have a mapping to PostgreSQL users and will be automatically selected by Immuta if an Immuta user is not found in PostgreSQL. To ensure your PostgreSQL users have policies correctly applied, manually map their usernames using the first option above.

    3. Click Save.

    Select PostgreSQL Username to map the PostgreSQL username to the Immuta user and enter the PostgreSQL username in the field. Username mapping is case insensitive.
  • Select Unset (fallback to Immuta username) to use the Immuta username as the assumed PostgreSQL username. Use this option if the user's PostgreSQL username exactly matches the user's Immuta username. Username mapping is case insensitive.

  • Select None (user does not exist in PostgreSQL) if this is an Immuta-only user. This option will improve performance for Immuta users who do not have a mapping to PostgreSQL users and will be automatically selected by Immuta if an Immuta user is not found in PostgreSQL. To ensure your PostgreSQL users have policies correctly applied, manually map their usernames using the first option above.

  • Click Save.

  • MD5 unsupported

    Passwords hashed using MD5 are unsupported for authentication.

    PostgreSQL integration reference guide
    PostgreSQL privileges outlined above
    PostgreSQL privileges outlined above
    AWS documentation

    MD5 unsupported

    Passwords hashed using MD5 are unsupported for authentication.

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "rds-db:connect",
                "Resource": "arn:aws:rds-db:<REGION>:<AWS_ACCOUNT_ID>:dbuser:<RDS_DB_RESOURCE_ID>/<DB_USERNAME>"
            }
        ]
    }
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "assumeRole",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::<AWS ACCOUNT ID>:root"
                },
                "Action": "sts:AssumeRole",
                "Condition": {
                    "StringEquals": {
                        "sts:ExternalId": "<EXTERNAL ID>"
                    }
                }
            }
        ]
    }
    schemas
  • SELECT on the following system tables:

    • system.access.table_lineage

    • system.access.column_lineage

    • system.access.audit

    • system.query.history

  • Add the Databricks service principal to the databricks_pii_access group

  • Display Name: The display name represents the unique name of your connection and will be used as prefix in the name for all data objects associated with this connection. It will also appear as the display name in the UI and will be used in all API calls made to update or delete the connection. Avoid the use of periods (.) or restricted words in your connection name.

  • Host: The hostname of your Databricks workspace.

  • Port: Your Databricks port.

  • HTTP Path: The HTTP path of your Databricks cluster or SQL warehouse.

  • Immuta Catalog: The name of the catalog Immuta will create to store internal entitlements and other user data specific to Immuta. This catalog will only be readable for the Immuta service principal and should not be granted to other users. The catalog name may only contain letters, numbers, and underscores and cannot start with a number.

  • Opt to configure an HTTP proxy for this connection by selecting Enable and entering the required details:

    • Proxy Host: Enter the full proxy URL.

    • Proxy Port: Enter the proxy port.

    • Select if the proxy requires authentication:

  • Select your authentication method from the dropdown menu and enter the authentication information for the Immuta service principal that you created.

  • .
  • Configure the Audit settings:

    1. Opt to Enable Audit.

    2. If audit is enabled, opt to enter Workspace IDs to filter the audit ingest to just specific workspaces.

  • Click Next.

  • Opt to Enable Object Sync, which will keep your connection objects up to date with your Databricks Unity Catalog environment.

    1. Select the Start Time for when the first object sync job will run each day.

    2. Select the Run Frequency to determine how frequently object sync will run each day.

    3. Opt to Run Object Sync on Create to create all the data objects for your connection. If you do not select this option, you must run object sync manually or wait for the scheduled object sync for your connection's data objects.

  • Click Save connection.

  • Copy the provided script and run it in Databricks Unity Catalog as a user with the privileges listed in the requirements section.

  • Click Validate Connection.

  • If the connection is successful, click Finish. If there are any errors, check the connection details and credentials to ensure they are correct and try again.

  • on the
    system
    catalog
  • USE SCHEMA on the system.access schema

  • SELECT on the following system table:

    • system.access.audit

  • If ingesting and applying tags to foreign catalogs (created via Lakehouse Federation), the following additional permissions are required:

    • USE SCHEMA on the system.information_schema schema

    • SELECT on the following system tables:

      • system.information_schema.column_tags

      • system.information_schema.table_tags

      • system.information_schema.tables

  • Save
    and confirm your changes.
    on all securables you want registered as Immuta data sources.
    The
    MODIFY
    privilege is not required for materialized views registered as Immuta data sources, since
    MODIFY
    is not a supported privilege on that object type in
    .
  • Workspace admin permissions (If your service principal is a regular user in Databricks and not an actual service principal in Databricks, follow the guidance for managing users in Databricks documentation to grant this user the workspace admin permission.)

  • and
    system.query
    schemas
  • SELECT on the following system tables:

    • system.access.table_lineage

    • system.access.column_lineage

    • system.access.audit

    • system.query.history

  • Access to system tables is governed by Unity Catalog. No user has access to these system schemas by default. To grant access, a user that is both a metastore admin and an account admin must grant USE_SCHEMA and SELECT privileges on the system schemas to the service principal. See Manage privileges in Unity Catalog.

  • Create an account-level group in Databricks named databricks_pii_access (case-sensitive) and add the service principal to the group.

  • database

    Prerequisites

    Register a connection

    Create a separate Immuta catalog for each Immuta tenant

    If multiple Immuta tenants are connected to your Databricks environment, create a separate Immuta catalog for each of those tenants. Having multiple Immuta tenants use the same Immuta catalog causes failures in policy enforcement.

    Personal Access Token

    Enter the Token. This is the access token for the Immuta service principal, which can be an on-behalf token created in Databricks. This service principal must have the metastore privileges listed for the metastore associated with the Databricks workspace. If this token is configured to expire, update this field regularly for the connection to continue to function. This authentication information will be included in the script populated to complete the connection setup.

    OAuth M2M (Client Secret)

    AWS Databricks:

    1. Follow Databricks documentation to create a client secret for the Immuta service principal and assign this service principal the privileges listed for the metastore associated with the Databricks workspace.

    2. Fill out the Client ID. This is a combination of letters, numbers, or symbols, used as a public identifier and is the client ID displayed in Databricks when creating the client secret for the service principal.

    3. Fill out the Authority URL with the full URL of the identity provider. This is where the generated token is sent. The default value is https://<your workspace name>.cloud.databricks.com/oidc/v1/token.

    4. Enter the Scope (string). The scope limits the operations and roles allowed in Databricks by the access token. See the for details about scopes.

    5. Enter the Client Secret. Immuta uses this secret to authenticate with the authorization server when it requests a token.

    Azure Databricks:

    1. Follow to create a service principal within Azure and then populate to your Databricks account and workspace.

    2. Assign this service principal the for the metastore associated with the Databricks workspace.

    3. Within Databricks, . This completes your Databricks-based service principal setup.

    4. Fill out the Client ID. This is a combination of letters, numbers, or symbols, used as a public identifier and is the

    OAuth M2M (Certificate)
    1. Fill out the Client ID, which is the subject of the generated token. It is also known as sub (subject).

    2. Fill out the Authority URL, which is the authority URL of your identity provider.

    3. Fill out the Scope, which is the scope of operations and roles allowed by the secret.

    4. Enter the Certificate Thumbprint. This identifies the corresponding key to the token and is often abbreviated as x5t or is called kid (key identifier).

    5. Opt to fill out the Resource field with a URI of the resource where the requested token will be used.

    6. Upload the Private Key, which is the client certificate that is used to sign the authorization request.

    Opt to enable Databricks Unity Catalog tag ingestion

    Private preview: This feature is only available to select accounts. Contact your Immuta representative to enable this feature.

    Setting up the required Databricks service principal

    Creating the Databricks service principal

    MANAGE and MODIFY are required so that the service principal can apply row filters and column masks on the securable; to do so, the service principal must also have SELECT on the securable as well as USE CATALOG on its parent catalog and USE SCHEMA on its parent schema. Since privileges are inherited, you can grant the service principal the MODIFY and SELECT privilege on all catalogs or schemas containing Immuta data sources, which automatically grants the service principal the MODIFY and SELECT privilege on all current and future securables in the catalog or schema. The service principal also inherits MANAGE from the parent catalog for the purpose of applying row filters and column masks, but that privilege must be set directly on the parent catalog in order for grants to be fully applied.

    Configuring query audit privileges

    Databricks documentation
    metastore created
    exclude specific users from policy
    create a service principal
    Databricks documentation
    Grant the service principal access to the Databricks Unity Catalog system tables
    Databricks
    schemas
  • SELECT on the following system tables:

    • system.access.table_lineage

    • system.access.column_lineage

    • system.access.audit

    • system.query.history

  • Add the Databricks service principal to the databricks_pii_access group

  • Host: The hostname of your Databricks workspace.

  • Port: Your Databricks port.

  • HTTP Path: The HTTP path of your Databricks cluster or SQL warehouse.

  • Immuta Catalog: The name of the catalog Immuta will create to store internal entitlements and other user data specific to Immuta. This catalog will only be readable for the Immuta service principal and should not be granted to other users. The catalog name may only contain letters, numbers, and underscores and cannot start with a number.

  • Display Name: The display name represents the unique name of your connection and will be used as prefix in the name for all data objects associated with this connection. It will also appear as the display name in the UI and will be used in all API calls made to update or delete the connection. Avoid the use of periods (.) or restricted words in your connection name.

  • Click Next.

  • Select your authentication method from the dropdown:

    • Access Token: Enter the Access Token in the Immuta System Account Credentials section. This is the access token for the Immuta service principal, which can be an on-behalf token created in Databricks. This service principal must have the metastore privileges listed for the metastore associated with the Databricks workspace. If this token is configured to expire, update this field regularly for the connection to continue to function. This authentication information will be included in the script populated later on the page.

    • OAuth M2M:

      • AWS Databricks:

        • Follow for the Immuta service principal and assign this service principal the for the metastore associated with the Databricks workspace.

        • Fill out the Token Endpoint with the full URL of the identity provider. This is where the generated token is sent. The default value is https://<your workspace name>.cloud.databricks.com/oidc/v1/token.

        • Fill out the Client ID

      • Azure Databricks:

        • Follow to create a service principal within Azure and then populate to your Databricks account and workspace.

        • Assign this service principal the for the metastore associated with the Databricks workspace.

        • Within Databricks, . This completes your Databricks-based service principal setup.

  • Copy the provided script and run it in Databricks as a user with the privileges listed in the requirements section.

  • Click Validate Connection.

  • If the connection is successful, click Next. If there are any errors, check the connection details and credentials to ensure they are correct and try again.

  • Ensure all the details are correct in the summary and click Complete Setup.

  • on the
    system
    catalog
  • USE SCHEMA on the system.access schema

  • SELECT on the following system table:

    • system.access.audit

  • If ingesting and applying tags to foreign catalogs (created via Lakehouse Federation), the following additional permissions are required:

    • USE SCHEMA on the system.information_schema schema

    • SELECT on the following system tables:

      • system.information_schema.column_tags

      • system.information_schema.table_tags

      • system.information_schema.tables

  • Save
    and confirm your changes.
    on all securables you want registered as Immuta data sources.
    The
    MODIFY
    privilege is not required for materialized views registered as Immuta data sources, since
    MODIFY
    is not a supported privilege on that object type in
    .
  • Workspace admin permissions (If your service principal is a regular user in Databricks and not an actual service principal in Databricks, follow the guidance for managing users in Databricks documentation to grant this user the workspace admin permission.)

  • and
    system.query
    schemas
  • SELECT on the following system tables:

    • system.access.table_lineage

    • system.access.column_lineage

    • system.access.audit

    • system.query.history

  • Access to system tables is governed by Unity Catalog. No user has access to these system schemas by default. To grant access, a user that is both a metastore admin and an account admin must grant USE_SCHEMA and SELECT privileges on the system schemas to the service principal. See Manage privileges in Unity Catalog.

  • Create an account-level group in Databricks named databricks_pii_access (case-sensitive) and add the service principal to the group.

  • database

    Prerequisites

    Register a connection

    Create a separate Immuta catalog for each Immuta tenant

    If multiple Immuta tenants are connected to your Databricks environment, create a separate Immuta catalog for each of those tenants. Having multiple Immuta tenants use the same Immuta catalog causes failures in policy enforcement.

    Opt to enable Databricks Unity Catalog tag ingestion

    Private preview: This feature is only available to select accounts. Contact your Immuta representative to enable this feature.

    Setting up the required Databricks service principal

    Creating the Databricks service principal

    MANAGE and MODIFY are required so that the service principal can apply row filters and column masks on the securable; to do so, the service principal must also have SELECT on the securable as well as USE CATALOG on its parent catalog and USE SCHEMA on its parent schema. Since privileges are inherited, you can grant the service principal the MODIFY and SELECT privilege on all catalogs or schemas containing Immuta data sources, which automatically grants the service principal the MODIFY and SELECT privilege on all current and future securables in the catalog or schema. The service principal also inherits MANAGE from the parent catalog for the purpose of applying row filters and column masks, but that privilege must be set directly on the parent catalog in order for grants to be fully applied.

    Configuring query audit privileges

    Audit is enabled by default on all Databricks Unity Catalog connections. If you need to turn audit off, create the connection with the connections API and set audit to false in the payload.

    Databricks documentation
    metastore created
    create a service principal
    Databricks documentation
    Grant the service principal access to the Databricks Unity Catalog system tables
    new connections flow
    Databricks

    Amazon Redshift Spectrum

    The sequence diagram below outlines the events that occur when an Immuta user who is subscribed to a data source submits a query in their AWS analytic engine.

    If a user is automatically subscribed to the data source by a policy, Immuta creates an LF-Tag for that user and data source they are subscribed to. If the user is manually added to a data source by the data owner, Immuta grants direct access to the table in Lake Formation.

    See the AWS Lake Formation documentation for more details about Lake Formation access controls.

    AWS Lake Formation is configured and data is registered through connections, an Immuta feature that allows you to register your data objects in a technology through a single connection to make data registration more scalable for your organization. Instead of registering schema and databases individually, you can register them all at once and allow Immuta to monitor your data platform for changes so that data sources are added and removed automatically to reflect the state of data on your data platform.

    After you set up a data lake in Lake Formation and a Glue Data Catalog, you provide Immuta an AWS IAM role with the permissions outlined on the Register an AWS Lake Formation connection page to register the Lake Formation connection.

    Once the connection is registered in Immuta, Immuta ingests and stores connection metadata in the Immuta metadata database.

    In the example below, the Immuta application administrator connects the Glue Data Catalog that contains marketing-data, research-data, and cs-data metadata. Immuta registers these tables as data sources and stores the table metadata in the Immuta metadata database.

    Immuta presents a hierarchical view of your data that reflects the hierarchy of objects in the Glue Data Catalog. Beyond making the registration of your data more intuitive, connections provides more control. Instead of performing operations on individual schemas or tables, you can perform operations (such as object sync) at the connection level.

    See the Connections reference guide for details about connections and how to manage them. To configure your Lake Formation integration and register data, see the Register an AWS Lake Formation connection guide.

    When an Immuta subscription policy is applied to data sources, Immuta calculates and stores the policy logic in the Immuta metadata database and generates an LF-Tag key and value that is applied to the table in AWS. When users are subscribed to the data source, Immuta issues grants either directly to the table (if they are manually subscribed to the data source by a data owner) or to the LF-Tag (if they are subscribed by an automatic subscription policy). See the Protecting data page for details about these policy types.

    The table below outlines how two different automatic subscription policies authored in Immuta are orchestrated in Lake Formation.

    Immuta actions
    Example 1
    Example 2
    1. Governor authors a global policy in Immuta.

    "Users may subscribe to data sources tagged Research when they are members of group Research."

    "Users may subscribe to data sources tagged CS when they have the attribute training.complete."

    1. Immuta calculates data sources affected

    • research-data

    • marketing-data

    The privileges Immuta issues to users when they are subscribed to a data source vary depending on the object type. See an outline of privileges granted by Immuta on the Subscription policy access types page.

    The following user actions spur various processes in the Lake Formation integration so that Immuta data remains synchronous with data in Lake Formation. The list below provides an overview of each process:

    • Data source created: Immuta registers data source metadata and stores that metadata in the Immuta metadata database.

    • Data source deleted: Immuta deletes the data source metadata from the metadata database and removes LF-Tags from that AWS resource.

    • Automatic subscription policy applied to or updated on a data source: Immuta calculates the users and data sources affected by the policy change and generates an LF-Tag key and value.

      Immuta then applies the LF-Tags to the affected AWS resources and grants users permissions on the LF-Tags. See the applying policies section for details about this process.

    • User manually subscribed to a data source: When a user is manually added to a data source by a data owner, Immuta grants the user direct access to the table in Lake Formation.

    • Automatic subscription policy deleted: Immuta deletes the LF-Tag key and values.

    • : When a user account is mapped to Immuta, their metadata is stored in the metadata database.

    • User removed from a data source: Immuta revokes the user's access to the table or the LF-Tag.

    The image below illustrates these processes.

    See the for more details about the AWS components pictured above.

    When registering an AWS Lake Formation connection, you can opt to ingest Lake Formation Tags. If this option is enabled, then every data source in Immuta will have the Lake Formation Tags pulled in and automatically applied. Immuta will check every 24 hours for any relevant metadata changes in AWS Lake Formation.

    Tag ingestion is an integration-wide setting and, once enabled, cannot be disabled on a data-source-by-data-source basis. Additionally, if enabled, no other external catalog can be linked to the AWS Lake Formation data sources.

    Glue Data Catalog object type
    Subscription policy support
    Data policy support
    Request app support

    Table

    ✅

    ❌

    ✅

    The AWS Lake Formation integration allows users to author subscription policies to enforce access controls. Data policies are unsupported.

    See the applying policies section for details about subscription policy enforcement.

    The Lake Formation integration supports the following authentication methods to register a connection:

    • Access using AWS IAM role (recommended): Immuta will assume this IAM role from Immuta's AWS account when interacting with the AWS API to perform any operations in your AWS account. This option allows you to provide Immuta an IAM role from your AWS account that is granted a trust relationship with Immuta's IAM role.

    • Access using access key and secret access key: These credentials are used temporarily by Immuta to register the connection. The access key ID and secret access key provided must be for an AWS account with the AWS permissions listed in the Register an AWS Lake Formation connection guide.

    Access can be managed in AWS using IAM users, roles, or Identity Center (IDC). Immuta supports all three methods for user provisioning in the Lake Formation integration.

    However, if you manage access in AWS through IAM roles instead of users, user provisioning in Immuta must be done using IAM role principals. This means that if users share IAM roles, you could end up in a situation where you over-provision access to everyone in the IAM role.

    See the guidelines below for the best practices to avoid this behavior if you currently use IAM roles to manage access.

    1. Enable AWS IAM Identity Center (IDC) (recommended): IDC is the best approach for user provisioning because it treats users as users, not users as roles. Consequently, access controls are enforced for the querying user, nothing more. This approach eliminates over-provisioning and permits granular access control. Furthermore, IDC uses trusted identity propagation, meaning AWS propagates a user's identity wherever that user may operate within the AWS ecosystem. As a result, a user's identity always remains known and consistent as they navigate across AWS services, which is a key requirement for organizations to properly govern that user.

      Enabling IDC does not impact any existing access controls; it is additive. Immuta will manage the GRANTs for you using IDC if it is enabled and configured in Immuta. See the map users section for instructions on mapping users from AWS IDC to user accounts in Immuta.

    2. Create an IAM role per user: If you do not have IDC enabled, create an IAM role per user that is unique to that user and assign that IAM role to each corresponding user in Immuta. Ensure that the IAM role cannot be shared with other users.

      This approach can be a challenge because there is an .

    3. Request on behalf of IAM roles (not recommended): Create users in Immuta that map to each of your existing IAM roles. Then, when users request access to data, they of the IAM role user rather than themselves.

      This approach is not recommended because everyone in that role will gain access to data when granted access through a policy, and adding future users to that role will also grant access. Furthermore, it requires policy authors and approvers to understand what role should have access to what data.

    Immuta supports mapping an Immuta user to AWS in one of the following ways:

    • AWS IAM Identity Center user IDs

    • IAM role principals: Only a single Immuta user can be mapped to an IAM role. This restriction prohibits enforcing policies on AWS users who could assume that role. Therefore, if using role principals, create a new user in Immuta that represents the role so that the role then has the permissions applied specifically to it.

    • IAM user principals

    See the map users section for instructions on mapping principals to user accounts in Immuta.

    Existing Amazon S3 integrations have no impact on AWS Lake Formation integrations; they can be used in tandem.

    While the Amazon S3 integration offers access control for raw object storage, the Lake Formation integration provides access control for Glue Data Catalog views and tables. Together, they offer support for every cloud-native data warehouse and lakehouse for AWS users.

    • You cannot use the AWS Lake Formation integration if you are using data policies on Redshift Spectrum data sources, since granting access to the underlying Glue table via the AWS Lake Formation integration would allow a user to bypass the row- and column-level security of the Immuta-managed view by querying the Glue table directly. Instead, use the Amazon Redshift Spectrum integration.

    • Impersonation

    • User query audit

    • AWS Lake Formation has the following limitations:

      • 50 tag limit per resource

      • 1000 tag limit total

      • 1000 values per tag

      See the for details.

    • Immuta is actively making improvements to the AWS Lake Formation integration throughout the preview phases. Be aware of these temporary limitations during the early preview stages:

      • Immuta will only synchronize policies on a 1-minute schedule, so it could be up to 1 minute from you taking an action in Immuta until Immuta starts synchronizing policies. Note that this 1-minute schedule refers to Immuta starting to synchronize, not the time it will take to complete synchronization.

      • LF-Tags created for automatic subscription policies are not removed when no longer applicable. This can result in growth of the LF-Tag value space and may hit quotas if many policy changes occur over time. LF-Tags can be manually removed to free up space if quota is a concern.

    Public preview: This feature is available to all accounts.

    What does Immuta do in my AWS environment?

    Registering a connection

    Applying policies

    Lake Formation privileges granted by Immuta

    Maintaining state with Lake Formation

    Tag ingestion

    Private preview: This feature is only available to select accounts. Contact your Immuta representative to enable this feature.

    Supported object types

    Supported policies

    Security and compliance

    Authentication methods

    User provisioning

    Mapping IAM principals in Immuta

    Names are case-sensitive

    The IAM role name and IAM user name are case-sensitive. See the for details.

    Existing Amazon S3 integrations

    Limitations and known issues

    automatically subscribed to the data source
    . Immuta creates and manages Databricks Unity Catalog groups for those users (if an appropriate group does not already exist), grants the required Unity Catalog privileges to the group, and adds the entitled users to that group.

    Consider the following example that illustrates how Immuta enforces a subscription policy that only allows users in the analysts group to access the yellow-table. When this policy is authored and applied to the data source, Immuta creates an Immuta-managed Databricks group (if needed), grants the SELECT privilege on yellow-table to that group, and adds users who are members of the analysts group to it.

    In the image above, the user in the analysts group accesses yellow-table, while the user who is a part of the research group is denied access.

    On securable objects

    If you enable a Databricks Unity Catalog object in Immuta, Immuta will only manage users' access to that data object after a subscription policy grants them access to the data source. Immuta preserves all preexisting grants in Databricks and only revokes user access when explicitly dictated by an Immuta policy.

    Expand the collapsible blocks below to see how Immuta-managed grants and Databricks-managed grants are affected in various scenarios.

    If a user is not registered in Immuta, Immuta will have no effect on that user's access to data in Unity Catalog.

    On schemas and catalogs

    By default, Immuta will revoke Immuta users' USE CATALOG and USE SCHEMA privileges in Unity Catalog for users that do not have access to any of the underlying securables within that catalog/schema. If users have any Immuta-managed or Databricks-managed grants to a securable, Immuta will not revoke that catalog/schema access.

    If you disable this setting, Immuta will only revoke the permissions granted on the securable objects themselves, and users' USE CATALOG and USE SCHEMA permissions will remain even if the user does not have access to any resource in that catalog/schema.

    See the App settings page for instructions on changing this setting.

    After Databricks Unity Catalog objects are registered in Immuta, you can author data policies in Immuta to enforce fine-grained access controls.

    When a data policy is applied to a Databricks Unity Catalog data source, Immuta enforces that policy natively in Databricks. Depending on the policy type, Immuta applies SQL user-defined functions (UDFs) to enforce row-level security and column masking on registered tables so that queries return policy-enforced results.

    As data policies are created, updated, or removed in Immuta, Immuta updates the corresponding SQL UDFs in Databricks to keep enforcement in sync. Users continue querying the Databricks Unity Catalog object directly and see policy-enforced data in Databricks.

    See the Data policies page for guidance on authoring data policies in Immuta and the supported data policies for the Databricks Unity Catalog integration.

    Registering a connection

    Protecting data

    Subscription policies

    connections
    Databricks Unity Catalog integration reference guide

    User permissions Immuta revokes

    Subscription policy applied

    Immuta only manages grants for Immuta users once a subscription policy applies to them. Any grants performed on Databricks objects outside Immuta will not be revoked.

    The table below illustrates how the following policy enforces access controls for 4 different users, some of whom have Databricks-managed grants:

    Allow users to subscribe to the data source if they are a member of group HR

    Subscription policy edited

    If a subscription policy is edited, Immuta only affects the Immuta-managed grants on the data object.

    The table below illustrates how editing the following policy enforces access controls for 4 different users, some of whom have Databricks-managed grants:

    Previous policy

    Allow users to subscribe to the data source if they are a member of group HR

    Updated policy

    Allow users to subscribe if they are a member of group

    Subscription policy deleted

    If a subscription policy is deleted, users' Immuta grants are revoked for that policy. Users will retain access to the data source if they have Immuta-granted access through another subscription policy that overlaps or if they have a Databricks-managed grant for that data source.

    The table below illustrates how deleting the following Immuta policy affects access for 4 different users, some of whom have Databricks-managed grants:

    Allow users to subscribe to the data source if they are a member of group HR

    Data source disabled

    If a data source is disabled, users' access reverts to what the Databricks-managed access was previously, before the data object was registered in Immuta.

    The table below illustrates how disabling the data source in Immuta affects access for 4 different users, some of whom have Databricks-managed grants.

    Immuta-managed grant
    Databricks-managed grant
    Access result

    Data policies

    PostgreSQL Integration

    Learn about how the PostgreSQL integration works and what Immuta creates in your environment to enforce object-level access controls

    Public preview: This integration is available to all accounts that request to enable it for their tenant. Contact your Immuta representative to enable it.

    The PostgreSQL integration allows you to register data from PostgreSQL in Immuta and enforce subscription policies on that data. Immuta supports the following deployment methods:

    • Amazon Aurora with PostgreSQL

    • Amazon RDS with PostgreSQL

    • Crunchy Data

    • Neon

    • Self-managed PostgreSQL

    The sequence diagram below outlines the events that occur when an Immuta user who is subscribed to a data source queries that data in PostgreSQL.

    PostgreSQL is configured and data is registered through , an Immuta feature that allows you to register your data objects through a single connection to make data registration more scalable for your organization. Instead of registering schema and databases individually, you can register them all at once and allow Immuta to monitor your data platform for changes so that data sources are added and removed automatically to reflect the state of data in your data platform.

    During connection registration, you provide Immuta credentials with the . When the connection is registered, Immuta ingests and stores connection metadata in the Immuta metadata database.

    In the example below, the Immuta application administrator connects the database that contains marketing-data, research-data, and cs-data tables. Immuta registers these tables as data sources and stores the table metadata in the Immuta metadata database.

    Immuta presents a hierarchical view of your data that reflects the hierarchy of objects in PostgreSQL after registration is complete:

    • Host

    • Database

    • Schema

    • Table

    Beyond making the registration of your data more intuitive, connections provides more control. Instead of performing operations on individual schemas or tables, you can perform operations (such as object sync) at the connection level.

    See the for details about connections and how to manage them. To configure your PostgreSQL integration and register data, see the .

    Immuta enforces read and write subscription policies on PostgreSQL tables by issuing SQL statements in PostgreSQL that grant and revoke access to tables according to the policy.

    When a user is subscribed to a table registered in Immuta,

    1. Immuta creates a role for that user in PostgreSQL, if one doesn't already exist.

    2. PostgreSQL stores that role in its internal system catalog.

    3. Immuta issues grants to that user's role in PostgreSQL to enforce policy. The provides an example of this policy enforcement.

    See the for details about the PostgreSQL privileges granted to users when they are subscribed to a data source protected by a subscription policy.

    The privileges that the PostgreSQL integration requires align to the least privilege security principle. The table below describes each privilege required by the IMMUTA_SYSTEM_ACCOUNT user.

    PostgreSQL privilege
    Explanation

    The following user actions spur various processes in the PostgreSQL integration so that Immuta data remains synchronous with data in PostgreSQL:

    • Data source created: Immuta registers data source metadata and stores that metadata in the Immuta metadata database.

    • Data source deleted: Immuta deletes the data source metadata from the metadata database and removes subscription policies from that table.

    • : When a user account is mapped to Immuta, their metadata is stored in the metadata database.

    • User subscribed to a data source

    The PostgreSQL integration allows users to author to enforce access controls. Data policies are unsupported.

    See the for details about policy enforcement.

    Object type
    Subscription policy support
    Data policy support
    Request app support

    Immuta will not ingest the following objects:

    • The default postgres database and its objects will be ignored by object sync and will not be ingested into Immuta.

    The PostgreSQL integration allows users to author to enforce access controls. Data policies are unsupported.

    See the for details about policy enforcement.

    The PostgreSQL integration supports the following authentication methods to register a connection:

    • Amazon Aurora and Amazon RDS deployments

      • Access using AWS IAM role (recommended): Immuta will assume this IAM role from Immuta's AWS account when interacting with the AWS API to perform any operations in your AWS account. This option allows you to provide Immuta an IAM role from your AWS account that is granted a trust relationship with Immuta's IAM role.

      • Access using access key and secret access key: These credentials are used temporarily by Immuta to register the connection. The access key ID and secret access key provided must be for an AWS account with the permissions listed in the .

    The built-in Immuta IAM can be used as a complete solution for authentication and user entitlement. However, you can connect your existing identity management provider to Immuta to use that system for authentication and user entitlement instead. Each of the includes a set of configuration options that enable Immuta to communicate with the IAM system and map the users, permissions, groups, and attributes into Immuta.

    For policies to impact the right users, the user account in Immuta must be mapped to the user account in PostgreSQL or AWS. You can ensure these accounts are mapped correctly in the following ways:

    • : If usernames in PostgreSQL or AWS align with usernames in the external IAM and those accounts align with an IAM attribute, you can enter that IAM attribute on the app settings page to automatically map user IDs in Immuta to PostgreSQL.

    • : You can manually map user IDs for individual users.

    For guidance on connecting your IAM to Immuta, see the .

    Access can be managed in AWS using IAM users, roles, or Identity Center (IDC). Immuta for user provisioning in the Amazon Aurora or Amazon RDS with PostgreSQL deployments.

    However, if you manage access in AWS through IAM roles instead of users, user provisioning in Immuta must be done using IAM role principals. This means that if users share IAM roles, you could end up in a situation where you over-provision access to everyone in the IAM role.

    See the guidelines below for the best practices to avoid this behavior if you currently use IAM roles to manage access.

    1. Enable (recommended): IDC is the best approach for user provisioning because it treats users as users, not users as roles. Consequently, access controls are enforced for the querying user, nothing more. This approach eliminates over-provisioning and permits granular access control. Furthermore, IDC uses trusted identity propagation, meaning AWS propagates a user's identity wherever that user may operate within the AWS ecosystem. As a result, a user's identity always remains known and consistent as they navigate across AWS services, which is a key requirement for organizations to properly govern that user.

      Enabling IDC does not impact any existing access controls; it is additive. Immuta will manage the GRANTs for you using IDC if it is enabled and configured in Immuta. See the for instructions on mapping users from AWS IDC to user accounts in Immuta.

    2. Create an IAM role per user: If you do not have IDC enabled, create an IAM role per user that is unique to that user and assign that IAM role to each corresponding user in Immuta. Ensure that the IAM role cannot be shared with other users.

    Immuta supports mapping an Immuta user to AWS in one of the following ways:

    • : Only a single Immuta user can be mapped to an IAM role. This restriction prohibits enforcing policies on AWS users who could assume that role. Therefore, if using role principals, create a new user in Immuta that represents the role so that the role then has the permissions applied specifically to it.

    See the for instructions on mapping principals to user accounts in Immuta.

    The following Immuta features are unsupported:

    • Data policies

    • Impersonation

    • Tag ingestion

    • Query audit

    Google BigQuery Viewless Integration Reference Guide

    Learn about how the Google BigQuery viewless integration works and what Immuta does in your environment to register your data and keep it in sync

    The Google BigQuery viewless integration allows you to register data from Google BigQuery in Immuta and enforce subscription policies and row-level data policies on that data. The sequence diagram below outlines the events that occur when an Immuta user queries a Google BigQuery table that has been registered as an Immuta data source.

    Google BigQuery is configured and data is registered through , an Immuta feature that allows you to register your data objects through a single connection to make data registration more scalable for your organization. Instead of registering schema and databases individually, you can register them all at once and allow Immuta to monitor your data platform for changes so that data sources are added and removed automatically to reflect the state of data in your data platform.

    When the , Immuta ingests and stores connection metadata in the Immuta metadata database. In the example below, the Immuta application administrator connects the database that contains marketing-data, research-data, and cs-data tables. Immuta

    Scale constraints are limited to 2000 data sources and 100 users.

  • Multiple AWS Lake Formation integrations are not supported on a single Immuta tenant.

  • Immuta does not ingest existing LF-Tags.

    • cs-data

    1. Immuta calculates users affected.

    • Alex

    • Taylor

    • Deepu

    • Casey

    • Mary

    • Catherine

    1. Immuta generates a group identifier for the users and data sources affected.

    1234

    5678

    1. Immuta creates an LF-Tag key and value.

    Immuta_policy=1234

    Immuta_policy=5678

    1. Immuta assigns the LF-Tag to the AWS resource in Lake Formation.

    Assign tag Immuta_policy=1234 to research-data and marketing-data

    Assign tag Immuta_policy=5678 to cs-data

    1. Immuta grants the LF-Tag to users in Lake Formation.

    GRANT (SELECT) on tag Immuta_policy=1234TO arn:aws:iam::123456:user/Alex

    GRANT (SELECT) on tag Immuta_policy=1234 TO arn:aws:iam::123456:user/Taylor

    GRANT (SELECT) on tag Immuta_policy=1234 TO arn:aws:iam::123456:user/Deepu

    GRANT (SELECT) on tag Immuta_policy=5678 TO arn:aws:iam::123456:user/Casey

    GRANT (SELECT) on tag Immuta_policy=5678 TO arn:aws:iam::123456:user/Mary

    GRANT (SELECT) on tag Immuta_policy=5678 TO arn:aws:iam::123456:user/Catherine

    View

    ✅

    ❌

    ✅

    AWS user account is mapped to Immuta
    IAM role max limit of 5,000 per AWS account
    request on behalf
    AWS documentation
    AWS documentation
    AWS documentation
    When users submit a query against a data source they are subscribed to, the analytic engine requests metadata from Glue Data Catalog, which then queries Lake Formation to determine what data the user is allowed to see. Then, the analytic engine requests temporary access from Lake Formation, retrieves the data from S3, and filters the data to return policy-enforced data to the user.
    . This is a combination of letters, numbers, or symbols, used as a public identifier and is the
    .
  • Enter the Scope (string). The scope limits the operations and roles allowed in Databricks by the access token. See the OAuth 2.0 documentation for details about scopes.

  • Enter the Client Secret you created above. Immuta uses this secret to authenticate with the authorization server when it requests a token.

  • Within Immuta, fill out the Token Endpoint with the full URL of the identity provider. This is where the generated token is sent. The default value is https://<your workspace name>.azuredatabricks.net/oidc/v1/token.

  • Fill out the Client ID. This is a combination of letters, numbers, or symbols, used as a public identifier and is the client ID displayed in Databricks when creating the client secret for the service principal (note that Azure Databricks uses the Azure SP Client ID; it will be identical).

  • Enter the Scope (string). The scope limits the operations and roles allowed in Databricks by the access token. See the OAuth 2.0 documentation for details about scopes.

  • Enter the Client Secret you created above. Immuta uses this secret to authenticate with the authorization server when it requests a token.

  • system.information_schema.columns
    Databricks documentation to create a client secret
    privileges listed
    Databricks documentation
    privileges listed
    create an OAuth client secret for the service principal
    client ID displayed in Databricks when creating the client secret for the service principal
  • Disabled

  • Enabled:

    • Proxy Username: Enter the username for the proxy connection.

    • Proxy Password: Enter the password for the proxy connection.

  • system.information_schema.columns
    (note that Azure Databricks uses the Azure SP Client ID; it will be identical).
  • Within Immuta, fill out the Authority URL with the full URL of the identity provider. This is where the generated token is sent. The default value is https://<your workspace name>.azuredatabricks.net/oidc/v1/token.

  • Enter the Scope (string). The scope limits the operations and roles allowed in Databricks by the access token. See the OAuth 2.0 documentation for details about scopes.

  • Enter the Client Secret you created above. Immuta uses this secret to authenticate with the authorization server when it requests a token.

  • OAuth 2.0 documentation
    Databricks documentation
    privileges listed
    create an OAuth client secret for the service principal
    client ID displayed in Databricks when creating the client secret for the service principal

    CREATEROLE

    Because PostgreSQL privileges are granted to roles, this privilege is required so that Immuta can create PostgreSQL roles and manage role membership to enforce access controls.

    The following privileges WITH GRANT OPTION on tables registered in Immuta:

    • SELECT

    • INSERT

    • UPDATE

    These privileges allow Immuta to apply read and write subscription policies on tables registered in Immuta. The ALTER TABLE privilege allows Immuta to enforce row-level policies, which will be available in a subsequent release.

    : When a user is added to a data source by a data owner or through a subscription policy, Immuta creates a role for that user (if a role for them does not already exist) and grants PostgreSQL privileges to their role.
  • Automatic subscription policy applied to or updated on a data source: Immuta calculates the users and data sources affected by the policy change and grants or revokes users' privileges on the PostgreSQL table. See the Protecting data page for details about this process.

  • Subscription policy deleted: Immuta revokes privileges from the affected roles.

  • User removed from a data source: Immuta revokes privileges from the user's role.

  • ✅

    ❌

    ✅

    Materialized view

    ✅

    ❌

    ✅

    Partitioned table

    ✅

    ❌

    ✅

    Username and password: These credentials are used temporarily by Immuta to register the connection. The credentials provided must be for an account with the permissions listed in the Register a PostgreSQL connection guide. Passwords hashed using MD5 are unsupported for authentication.

  • Neon and PostgreSQL deployments

    • Username and password: These credentials are used temporarily by Immuta to register the connection. The credentials provided must be for an account with the permissions listed in the Register a PostgreSQL connection guide. Passwords hashed using MD5 are unsupported for authentication.

  • This approach can be a challenge because there is an
    .
  • Request on behalf of IAM roles (not recommended): Create users in Immuta that map to each of your existing IAM roles. Then, when users request access to data, they request on behalf of the IAM role user rather than themselves.

    This approach is not recommended because everyone in that role will gain access to data when granted access through a policy, and adding future users to that role will also grant access. Furthermore, it requires policy authors and approvers to understand what role should have access to what data.

  • Database superuser OR all of the privileges listed below

    This privilege is required so that the setup user can create and grant permissions to the Immuta system account role.

    CONNECT on the database Immuta will protect WITH GRANT OPTION

    This privilege allows Immuta to connect to the PostgreSQL database that contains the tables Immuta will protect.

    USAGE on the schema Immuta will protect WITH GRANT OPTION

    Table

    ✅

    ❌

    ✅

    What does Immuta do in my environment?

    Registering a connection

    Applying policies

    PostgreSQL privileges granted by Immuta

    Required PostgreSQL privileges

    Maintaining state with PostgreSQL

    Supported object types

    Supported policies

    Security and compliance

    Authentication methods

    User registration and ID mapping

    User provisioning for Amazon Aurora or Amazon RDS with PostgreSQL

    Mapping IAM principals in Immuta

    Names are case-sensitive

    The IAM role name and IAM user name are case-sensitive. See the AWS documentation for details.

    Limitations and known issues

    connections
    privileges outlined on the Register a PostgreSQL connection page
    Connections reference guide
    Register a PostgreSQL connection guide
    Protecting data page
    Subscription policy access types page
    User account is mapped to Immuta
    subscription policies
    applying policies section
    subscription policies
    applying policies section
    Register a PostgreSQL connection guide
    supported IAM protocols
    Automatically
    Manually
    how-to guide for your protocol
    supports all three methods
    AWS IAM Identity Center (IDC)
    map users section
    AWS IAM Identity Center user IDs
    IAM role principals
    IAM user principals
    map users section
    After a user subscribes to a data source, Immuta issues GRANT statements that assign a role and object privileges to that user in PostgreSQL. PostgreSQL then stores that role in an internal system catalog, and when a user submits a query to the PostgreSQL client, PostgreSQL returns the data the user's role is allowed to see. The PostgreSQL client then returns that data to the user.

    This privilege allows the Immuta system account to access schemas that contain tables it will protect.

    View

    IAM role max limit of 5,000 per AWS account
    Immuta-managed grant
    Databricks-managed grant
    Access result

    User A - HR group

    SELECT

    None

    ✅

    User B - Engineering group

    None

    SELECT

    ✅

    User C

    None

    In this example,

    • User A is granted access to the table by Immuta.

    • User B is granted access to the table by Databricks.

    • User C cannot access the table because they do not meet the conditions of the Immuta policy and they have been not granted access to the table in Databricks outside of Immuta.

    • User D is granted access to the table by Immuta and Databricks. The Immuta-managed SELECT grant coexists with their Databricks-managed SELECT grant.

    Engineers
    Immuta-managed grant
    Databricks-managed grant
    Access result

    User A - HR group

    Revoked

    None

    ❌

    In this example,

    • User A is revoked access to the table by Immuta. Because this user was previously granted access to the data source by Immuta, that Immuta-managed grant is revoked.

    • User B is granted access to the table by Databricks and Immuta. The Immuta-managed SELECT grant coexists with their Databricks-managed SELECT grant.

    • User C cannot access the table because they do not meet the conditions of the Immuta policy and they have been not granted access to the table in Databricks outside of Immuta.

    • User D is revoked access to the table by the change to the Immuta policy. The Immuta-managed SELECT grant (from the previous policy) and the pre-existing Databricks-managed SELECT grant have been revoked because the Immuta policy explicitly dictated that their access should be removed.

    Immuta-managed grant
    Databricks-managed grant
    Access result

    User A - HR group

    None

    None

    ❌

    User B - Engineering group

    None

    SELECT

    ✅

    User C

    None

    In this example,

    • User A is revoked access to the table by Immuta. Because this user was previously granted access to the data source by Immuta, that Immuta-managed grant is revoked when the subscription policy is deleted.

    • User B is granted access to the table by Databricks.

    • User C cannot access the table because they have not been granted access by an Immuta policy and they have been not granted access to the table in Databricks.

    • User D is revoked access to the table by Immuta. Because this user was to the data source by Immuta, Immuta took over managing this user's grants on the table, and that Immuta-managed grant is revoked when the subscription policy is deleted.

    User A - HR group

    None

    None

    ❌

    User B - Engineering group

    None

    SELECT

    ✅

    User C

    None

    In this example,

    • User A is revoked access to the table by Immuta. The Immuta-managed grant is revoked when the data source is disabled because the state of the grants on this data object reverts to what it was before the data object was registered in Immuta.

    • User B is granted access to the table by Databricks. The Databricks-managed grant remains because the state of the grants on this data object reverts to what it was before the data object was registered in Immuta.

    • User C cannot access the table because they had not been granted access to the table in Databricks.

    • User D is granted access to the table by Databricks. The Immuta-managed grant is revoked and the Databricks grant remains when the data source is disabled because the state of the grants on this data object reverts to what it was before the data object was registered in Immuta.

    registers
    these tables as data sources and stores the table metadata in the Immuta metadata database.

    Immuta presents a hierarchical view of your data that reflects the hierarchy of objects in Google BigQuery after registration is complete:

    • Project

    • Dataset

    • Data object

    Beyond making the registration of your data more intuitive, connections provides more control. Instead of performing operations on individual schemas or tables, you can perform operations (such as object sync) at the connection level.

    See the Connections reference guide for details about connections and how to manage them. To configure your Google BigQuery viewless integration and register data, see the Register a Google BigQuery connection guide.

    After objects are registered in Immuta, you can author subscription policies or row-level data policies in Immuta to enforce access controls. The Google BigQuery viewless integration is additive: Immuta does not update or override existing access controls on securables unless an Immuta policy explicitly dictates an access change.

    Immuta enforces read and write subscription policies on Google BigQuery objects by updating allow policies on Google BigQuery resources that grant and revoke access to objects according to the allow policy.

    When a subscription policy is activated on an Immuta data source,

    1. Immuta creates a custom role in the Google BigQuery project with the necessary permissions on the data object.

    2. Immuta calculates the users affected by the subscription policy and creates a Google group for those users.

    3. Immuta adds the appropriate Google groups to a Google BigQuery allow policy and binds them to the custom role. This binding grants the custom role to those Google groups, which then permits users in those groups to access the data object.

    The Protecting data in Google BigQuery page provides an example of this policy enforcement. See the Subscription policy access types page for details about the Google BigQuery privileges granted to users when they are subscribed to a data source protected by a subscription policy.

    Immuta applies Google BigQuery row-level security controls that are enforced natively within Google BigQuery.

    When a row-level data policy is applied to a table registered in Immuta, Immuta creates a Google BigQuery row-level access policy that includes the target table and a filter_expression that compares the querying user's entitlements (saved in the immuta_profiles table) against those specified in the data policy. Then, when a user queries that data source, the rows returned are filtered according to what the policy dictates that they're allowed to see.

    The Protecting data in Google BigQuery page provides an example of this policy enforcement.

    The privileges that the Google BigQuery integration requires align to the least privilege security principle. The table below describes each privilege required by the setup user and the service account.

    Google BigQuery privilege
    User requiring the privilege
    Explanation
    • roles/iam.serviceAccountCreator

    • roles/iam.serviceAccountAdmin

    • roles/resourcemanager.projectIamAdmin on the project (or be a project owner)

    Setup user

    This privilege is required so that the setup user can create the service account and custom role for Immuta.

    • bigquery.datasets.get

    • bigquery.tables.get

    • bigquery.tables.list

    Service account

    The following user actions spur various processes in the Google BigQuery viewless integration so that Immuta data remains synchronous with data in Google BigQuery:

    • Data source created or updated: Immuta registers data source metadata and stores that metadata in the Immuta metadata database.

    • Data source deleted: Immuta deletes the data source metadata from the metadata database.

    • User account is mapped to Immuta: When a user account is mapped to Immuta, their metadata is stored in the metadata database.

    • User subscribed to a data source: When users are added to a data source by a data owner or through a subscription policy, Immuta calculates the users affected by the subscription policy and creates a for those users. Then Immuta grants Google BigQuery privileges to their group through an .

    • Automatic subscription policy applied to or updated on a data source: Immuta calculates the users and data sources affected by the policy change and grants or revokes users' privileges on the data object by adding them to or removing them from the Immuta-managed Google group that has access to the securable. See the for details about this process.

    • Subscription policy deleted: Immuta calculates the users and Google groups affected by the policy and revokes privileges on the Google BigQuery object by removing users from the Immuta-created Google group. If there are no longer any members of an Immuta-created Google group, that group is deleted by Immuta.

    • User removed from a data source: Immuta removes the user from the Immuta-managed Google group.

    Google BigQuery silently removes row access policies on tables that have any of the following Google BigQuery operations run against them:

    • CREATE OR REPLACE TABLE

    • bq load --replace

    • WRITE_TRUNCATE jobs

    • bq cp -f

    If you run any of these operations in Google BigQuery against objects protected by Immuta, you must manually trigger Immuta policies to resync. See the Google Cloud documentation for details about this behavior.

    Object type
    Subscription policy support
    Data policy support
    Request app support

    Tables

    ✅

    ✅

    ✅

    The Google BigQuery integration allows users to author subscription and row-level data policies to enforce access controls. See the corresponding pages for details about specific types of policies supported:

    • Subscription policy access types

    • Data policies reference guide

    See the applying policies section for details about policy enforcement.

    See the Security and compliance in Google BigQuery guide for details about security, supported authentication methods, and audit.

    The built-in Immuta IAM can be used as a complete solution for authentication and user entitlement. However, you can connect your existing identity management provider to Immuta to use that system for authentication and user entitlement instead. Each of the supported IAM protocols includes a set of configuration options that enable Immuta to communicate with the IAM system and map the users, permissions, groups, and attributes into Immuta.

    For policies to impact the right users, the user account in Immuta must be mapped to the user account in Google BigQuery. You can ensure these accounts are mapped correctly in the following ways:

    • Automatically: If usernames in Google BigQuery align with usernames in the external IAM and those accounts align with an IAM attribute, you can enter that IAM attribute on the app settings page to automatically map user IDs in Immuta to Google BigQuery.

    • Manually: You can manually map user IDs for individual users.

    For guidance on connecting your IAM to Immuta, see the how-to guide for your protocol.

    The following Immuta features are unsupported:

    • Identification

    • Select data policies

      • Limit to purpose

      • Masking

      • Minimization

      • Time-based restrictions

    • Tag ingestion

    • Query audit

    Google BigQuery has the following limitations:

    • Limit of one allow policy per resource

    • Limit of 250 Google groups in an allow policy

    • Limit of 1500 groups Immuta can own

    • Limit of 400 row-access policies per table

    • Destructive operations that remove row access policies: Google BigQuery silently removes row access policies on tables that have any of the following Google BigQuery operations run against them:

      • CREATE OR REPLACE TABLE

      • bq load --replace

      • WRITE_TRUNCATE

    Public preview: This integration is available to all accounts that request to enable it for their tenant. Contact your Immuta representative to enable it.

    What does Immuta do in my environment?

    Registering a connection

    connections
    connection is registered

    Applying policies

    Subscription policies

    Data policies

    Required Google BigQuery privileges

    Google BigQuery users with access to Immuta-governed Google BigQuery data sources will be able to read the immuta_profiles table

    Google BigQuery states that grantees must have the bigquery.tables.getData permission on the target and referenced tables in policies. Because Immuta policy predicates read immuta_profiles for every entitlement check, Immuta grants every user querying a protected table read access to immuta_profiles.

    Maintaining state with Google BigQuery

    Google BigQuery destructive operations that remove row access policies

    Supported object types

    Supported policies

    Security and compliance

    User registration and ID mapping

    Limitations and known issues

    Register an AWS Lake Formation Connection

    Register your Glue Data Catalog data and map your user accounts into Immuta

    Public preview: This feature is available to all accounts.

    Requirements

    • Data lake is set up in AWS Lake Formation. The account in which this is set up is referred to as the admin account. This is the account that you will use to initially configure IAM and AWS Lake Formation permissions to give the Immuta service principal access to perform operations. The user in this account must be able to manage IAM permissions and Lake Formation permissions for all data in the Glue Data Catalog.

    • No AWS Lake Formation connections configured in the same Immuta instance for the same Glue Data Catalog.

    • The databases and tables you want Immuta to govern must be configured in AWS to respect the AWS Lake Formation permissions. Immuta cannot govern resources that use IAM access control or hybrid access mode. To ensure Immuta can govern your resources, verify that the default Data Catalog settings in AWS are unchecked. See the screenshot below and for instructions on changing these settings:

    • Enable AWS IAM Identity Center (IDC) (recommended): is the best approach for user provisioning because it treats users as users, not users as roles. Consequently, access controls are enforced for the querying user, nothing more. This approach eliminates over-provisioning and permits granular access control. Furthermore, IDC uses trusted identity propagation, meaning AWS propagates a user's identity wherever that user may operate within the AWS ecosystem. As a result, a user's identity always remains known and consistent as they navigate across AWS services, which is a key requirement for organizations to properly govern that user.

      Enabling IDC does not impact any existing access controls; it is additive. See the for instructions on mapping users from AWS IDC to user accounts in Immuta.

    These are permissions that the user registering the connection must have in order to successfully complete setup.

    • APPLICATION_ADMIN Immuta permission to register the connection

    • Create LF-Tag AWS permission

    • DESCRIBE

    The Immuta service principal is the AWS IAM role that Immuta will assume to perform operations in your AWS account. This role must have all the necessary permissions in AWS Glue and AWS Lake Formation to allow Immuta to register data sources and apply policies.

    1. Create an IAM policy with the following AWS Lake Formation and AWS Glue permissions. You will attach this to your service principal once created. Select the tab that corresponds with your Glue Data Catalog setup: encryption disabled or encryption enabled.

    If you have encryption enabled on your Glue Data Catalog, you must grant the Immuta service principal the kms privileges included in the example IAM policy below on your KMS key. Otherwise, these privileges are unnecessary and you should use the . See the for details.

    1. and select AWS Account as the trusted entity type. This role will be used by Immuta to set up the connection and orchestrate AWS Lake Formation policies. Immuta will assume this IAM role from Immuta's AWS account in order to perform any operations in your AWS account.

    2. Add the IAM policy from step 1 to your service principal. These permissions will allow the service principal to register data sources and apply policies on Immuta's behalf.

    3. Add the service principal as an .

    This method follows the principle of least privilege and is the most flexible way of granting permissions to the service principal. LF-Tags cascade down from databases to tables, while allowing for exceptions. This means that when you apply this tag to a database, it will automatically apply to all tables within that database and allow you to remove it from any tables if those should be out of the scope of Immuta’s governance.

    1. Create a new LF-Tag, giving yourself permissions to grant that tag to a user, which will ultimately be your service principal.

      1. In the Lake Formation console, navigate to LF-Tags and permissions and click Add LF-Tag. You will need the Create LF-Tag permission to do this.

    1. Click Data and select Connections in the navigation menu.

    2. Click the + Add Connection button.

    3. Select the AWS Glue tile.

    4. Enter the host connection information:

    Requirement: USER_ADMIN Immuta permission

    Map AWS IAM principals to each Immuta user to ensure Immuta properly enforces policies.

    1. Click People and select Users in the navigation menu.

    2. Click the user's name to navigate to their page and scroll to the External User Mapping section.

    3. Click Edit in the AWS User row.

    See the for details about supported principals.

    Google BigQuery View-Based Integration

    Configure the Google BigQuery view-based integration and learn about how the integration works to apply access controls

    The Google BigQuery view-based integration allows users to query policy protected data directly in BigQuery as secure views within an Immuta-created dataset. Immuta controls who can see what within the views, allowing data governors to create complex ABAC policies and data users to query the right data within the BigQuery console.

    Configuration

    The Google BigQuery view-based integration is configured through the Immuta console and a script provided by Immuta. While you can complete some steps within the BigQuery console, it is easiest to install using gcloud and the Immuta script.

    1. Create a custom role and assign that role to a custom user to use as the Immuta system account.

    2. Enable the integration in the Immuta console.

    Protect your data

    Once the Google BigQuery view-based integration has been configured, BigQuery admins can start creating subscription and data policies to meet compliance requirements and users can start querying policy protected data directly in BigQuery.

    1. Create a global or .

    2. Revoke user access to the original datasets and grant users access to the Immuta created datasets in BigQuery.

    1. What permissions will Immuta have in my BigQuery environment?

      • You can find a list of the permissions the custom Immuta role has .

    2. What integration features will Immuta support for BigQuery?

      • Immuta can enforce on data in a single BigQuery project. At this time, workspaces, tag ingestion, user impersonation, query audit, and multiple integrations are not supported.

    In this policy push integration, Immuta creates views that contain all policy logic. Each view has a 1-to-1 relationship with the original table. Access controls are applied in the view, allowing users to leverage Immuta’s powerful set of attribute-based policies and query data directly in BigQuery.

    BigQuery is organized by projects (which can be thought of as databases), datasets (which can be compared to schemas), tables, and views. When you enable the integration, an Immuta dataset is created in BigQuery that contains the Immuta-required user entitlements information. These objects within the Immuta dataset are intended to only be used and altered by the Immuta application.

    After data sources are registered, Immuta uses the custom user and role, created before the integration is enabled, to push the Immuta data sources as views into a mirrored dataset of the original table. Immuta manages grants on the created view to ensure only users subscribed to the Immuta data source will see the data.

    The Immuta integration uses a mirrored dataset approach. That is, if the source dataset is named mydataset, Immuta will create a dataset named mydataset_secure, assuming that _secure is the specified Immuta dataset suffix. This mirrored dataset is an , allowing it to access the data of the original dataset. It will contain the Immuta-managed views, which have identical names to the original tables they’re based on.

    Following the principle of least privilege, Immuta does not have permission to manage Google Cloud Platform users, specifically in granting or denying access to a project and its datasets. This means that data governors should limit user access to original datasets to ensure data users are accessing the data through the Immuta created views and not the backing tables. The only users who need to have access to the backing tables are the credentials used to register the tables in Immuta.

    Additionally, a data governor must grant users access to the mirrored datasets that Immuta will create and populate with views. Immuta and BigQuery’s best practice recommendation is to grant access via groups in Google Cloud Platform. Because users still must be registered in Immuta and subscribed to an Immuta data source to be able to query Immuta views, all Immuta users can be granted access to the mirrored datasets that Immuta creates.

    The definitions for each status and the state of configured data platform integrations is available in the .

    • This integration can only be enabled through a manual bootstrap using the Immuta API.

    • This integration can only be enabled to work in a single region.

    • BigQuery does not allow views partitioned by pseudo-columns. If you would like to partition a table by a pseudo-column and have Immuta govern it, take the following steps:

      • Create a view in BigQuery of the partitioned table, with the pseudo-column aliased. For example,

    This integration supports the following policy types:

    • Column masking

      • Mask using hashing (SHA256())

      • Mask by making NULL

      • Mask using constant

    See the resources below to start implementing and using the BigQuery view-based integration:

    • Building global and to govern data

    • to collaborate

    Follow this guide to connect your Google BigQuery data warehouse to Immuta.

    The Google BigQuery view-based integration requires you to create a Google Cloud service account and role that will be used by Immuta to

    • create a Google BigQuery dataset that will be used to store a table of user entitlements, UDFs for policy enforcement, etc.

    • manage the table of user entitlements via updates when entitlements change in Immuta.

    • create datasets and secure views with access control policies enforced, which mirror tables inside of datasets you ingest as Immuta data sources.

    You have two options to create the required Google Cloud service account and role:

    The bootstrap.sh script is a shell script provided by Immuta that creates prerequisite Google Cloud IAM objects for the integration to connect. When you run this script from your command line, it will create the following items, scoped at the project-level:

    • A new Google Cloud IAM role

    • A new Google Cloud service account, which will be granted the newly-created role

    • A JSON keyfile for the newly-created service account

    You will need to use the objects created in these steps to .

    Google Cloud IAM roles required to run the script

    To execute bootstrap.sh from your command line, you must be authenticated to the gcloud CLI utility as a user with all of the following roles:

    • roles/iam.roleAdmin

    • roles/iam.serviceAccountAdmin

    • roles/serviceusage.serviceUsageAdmin

    Having these three roles is the least-privilege set of Google Cloud IAM roles required to successfully run the bootstrap.sh script from your command line. However, having either of the following Google Cloud IAM roles will also allow you to run the script successfully:

    • roles/editor

    • roles/owner

    1. Install .

    2. Set the account property in the core section for Google Cloud CLI to the account gcloud should use for authentication. (You can run gcloud auth list to see your currently available accounts):

    3. In Immuta, navigate to the App Settings page and click the Integrations tab.

    4. Click Add Integration

    Alternatively, you may use the Google Cloud Console to create the prerequisite role, service account, and private key file for the integration to connect to Google BigQuery.

    1. with the following privileges:

      • bigquery.datasets.create

      • bigquery.datasets.delete

    Once the Google Cloud IAM custom role and service account are created, you can enable the Google BigQuery view-based integration. This section illustrates how to enable the integration on the Immuta app settings page. To configure this integration via the Immuta API, see the .

    1. In Immuta, navigate to the App Settings page and click the Integrations tab.

    2. Click Add Integration and select Google BigQuery from the dropdown menu.

    3. Click Select Authentication Method and select Key File.

    You can disable the Google BigQuery view-based integration automatically or manually.

    1. Click the App Settings icon, and then click the Integrations tab.

    2. Select the Google BigQuery view-based integration you would like to disable, and select the Disable Integration checkbox.

    3. Click Save.

    The privileges required to run the cleanup script are the same as the Google Cloud IAM roles required to run the bootstrap.sh script.

    1. Click the App Settings icon, and then click the Integrations tab.

    2. Select the Google BigQuery view-based integration you would like to disable, and click Download Scripts.

    3. Click Save. Wait until Immuta has finished saving your configuration changes before proceeding.

    • Build and

    • to securely collaborate on analytical workloads

  • TRUNCATE

  • DELETE

  • ALTER TABLE

  • None

    ❌

    User D - HR group

    SELECT

    SELECT

    ✅

    User B - Engineering group

    SELECT

    SELECT

    ✅

    User C

    None

    None

    ❌

    User D - HR group

    Revoked

    Revoked

    ❌

    None

    ❌

    User D - HR group

    None

    None

    ❌

    None

    ❌

    User D - HR group

    None

    SELECT

    ✅

    previously granted access
    jobs
  • bq cp -f

  • If you run any of these operations in Google BigQuery against objects protected by Immuta, you must manually trigger Immuta policies to resync. See the Google Cloud documentation for details about this behavior.

    These privileges allow the Immuta service account to get metadata for datasets and their objects.

    • At the GCP organization level: resourcemanager.organizations.get

    • At the Google Workspace level (also scoped to the organization, but a different control plane):

      • Group Create privilege and privilege required to apply security label on group resource

      • Group Editor privilege scoped to Access to Security Groups Only

    • At the GCP project level:

      • bigquery.datasets.create

      • bigquery.datasets.delete

      • bigquery.datasets.update

    Service account

    These privileges allow the Immuta service account to create Google groups to enforce read and write subscription policies and row-level data policies on data objects registered as Immuta data sources. Immuta does not manage or have access to your existing Google groups managed outside Immuta.

    Views

    ✅

    ❌

    ✅

    Materialized views

    ✅

    ❌

    ✅

    Google group
    allow policy
    Protecting data in Google BigQuery page
    AWS permission. You must have the
    DESCRIBE
    permission on the
    in AWS:
    • All databases that should be registered in the connection

    • All tables that should be registered in the connection

    • Any LF-Tags you are using on the resources that should be registered in the connection

  • The AWS account credentials or AWS IAM role you provide for the Immuta service principal must have permissions to perform the following actions to register data and apply policies:

    • Glue Data Catalog actions

      • glue:GetDatabase

      • glue:GetTables

      • glue:GetDatabases

      • glue:GetTable

      • lakeformation:ListPermissions

      • lakeformation:BatchGrantPermissions

    • DESCRIBE Lake Formation permission on any LF-Tags you want to have pulled into Immuta and applied to data sources through tag ingestion

    • If you have encryption enabled on your Glue Data Catalog, you must grant the Immuta service principal the following privileges on your KMS key in your ; otherwise, these privileges are unnecessary:

      • kms:Decrypt

      • kms:GenerateDataKey

  • In the Lake Formation console, navigate to Permissions.
  • Select LF-Tags and permissions.

  • Select LF-Tag creators, and then Add LF-Tag creators.

  • Enter your service principal, and grant it the Create LF-Tag permission and grantable permission.

  • Click Add to save your changes.

  • Grant the service principal permissions on any tables that will be registered in Immuta. There are two ways to give the service principal these permissions: either make a new LF-Tag that gives the appropriate permissions and apply it to all databases or tables that Immuta will manage, or make the role a superuser in Lake Formation.

  • Create a single tag key with one tag value. For example,

    1. Tag key: immuta_governed

    2. Tag value: true

  • On the LF-Tag key-value pair, grant the ASSOCIATE LF-Tag permission to your own IAM principal.

  • Grant this tag to the Immuta service principal.

    1. In the Lake Formation console, navigate to Data permissions and click Grant.

    2. Enter the service principal’s IAM role.

    3. Add the key-value pair of the tag you created in step 1.

    4. Under Table Permissions, select the following grantable permissions: SELECT, DESCRIBE, INSERT, DELETE.

    5. Click Grant.

  • Apply this tag to the resources you would like Immuta to govern. The Immuta service principal will now have the minimum required permissions on these resources. If new resources are created in AWS, you must repeat this process of applying this tag to those resources if you want Immuta to govern them.

  • This option enables all Lake Formation operations on all data in the Glue Data Catalog. This is highly privileged and runs the risk of managing permissions on data you did not intend to.

    This method will grant all necessary permissions to the service principal, but grants more than the service principal needs without being as flexible, since it does not allow for exceptions like the LF-Tag method. You can make the service principal a superuser on the entire catalog or specify individual resources.

    1. In the Lake Formation console, navigate to Data permissions and click Grant.

    2. Enter your service principal’s IAM role.

    3. Select Named Data Catalog resources, and input the Glue Data Catalog ID and any databases or tables you wish to specify.

    4. Under Grantable permissions, select Super and click Grant.

    Follow the to grant ALL permissions to the DataLakePrincipalIdentifier for the Immuta service principal ARN.

  • Display Name: This is the name of your new connection. This name will be used in the API (connectionKey), in data source names from the host, and on the connections page. Avoid the use of periods (.) or restricted words in your connection name.

  • AWS Account ID: The ID of the AWS account associated with the Glue Data Catalog.

  • AWS Region: The region of the AWS account associated with the Glue Data Catalog.

  • Opt to enable Immuta to Ingest Lake Formation Tags (private preview): This will ensure your Lake Formation Tags are applied to your data sources in Immuta.

  • Click Next.

  • Select an authentication method from the dropdown menu.

    1. AWS Access Key and Secret Access Key: Provide the access key ID and secret access key for an AWS account with the AWS permissions listed in the set up the Immuta service principal section.

    2. AWS IAM Role (recommended): Immuta will assume this IAM role from Immuta's AWS account in order to perform any operations in your AWS account.

      1. Enter your service principal's role ARN in the AWS IAM Role field. Immuta will assume this role when interacting with AWS.

      2. Copy the trust policy displayed below the AWS IAM Role field. You will paste this in your service principal's trust policy in the next step.

      3. In AWS, navigate to your service principal's Trust Relationships tab and edit the existing trust relationship. Paste the trust policy you copied from the Immuta UI and save your changes.

  • In Immuta, ensure that you have the correct permissions and click Validate Connection.

  • If the connection is successful, click Next. If there are any errors, check the connection details and credentials to ensure they are correct and try again.

  • Ensure all the details are correct in the summary and click Complete Setup.

  • Use the dropdown menu to select the
    User Type
    . User and role names are case-sensitive. See the
    for details.
    • AWS IAM role: Only a single Immuta user can be mapped to an IAM role. This restriction prohibits enforcing policies on AWS users who could assume that role. Therefore, if using role principals, create a new user in Immuta that represents the role so that the role then has the permissions applied specifically to it.

    • AWS IAM user

    • AWS Identity Center user IDs: You must use the numeric User ID value found in AWS IAM Identity Center, not the user's email address.

    • Unset (fallback to Immuta username): When selecting this option, the AWS username is assumed to be the same as the Immuta username.

  • Click Save.

  • {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "glue:GetDatabase",
            "glue:GetTables",
            "glue:GetDatabases",
            "glue:GetTable",
            "lakeformation:ListPermissions",
            "lakeformation:BatchGrantPermissions",
            "lakeformation:BatchRevokePermissions",
            "lakeformation:CreateLFTag",
            "lakeformation:UpdateLFTag",
            "lakeformation:DeleteLFTag",
            "lakeformation:AddLFTagsToResource",
            "lakeformation:RemoveLFTagsFromResource",
            "lakeformation:GetResourceLFTags",
            "lakeformation:ListLFTags",
            "lakeformation:GetLFTag",
            "lakeformation:SearchTablesByLFTags",
            "lakeformation:SearchDatabasesByLFTags"
          ],
          "Resource": "*"
        }
      ]
    }
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "glue:GetDatabase",
            "glue:GetTables",
            "glue:GetDatabases",
            "glue:GetTable",
            "lakeformation:ListPermissions",
            "lakeformation:BatchGrantPermissions",
            "lakeformation:BatchRevokePermissions",
            "lakeformation:CreateLFTag",
            "lakeformation:UpdateLFTag",
            "lakeformation:DeleteLFTag",
            "lakeformation:AddLFTagsToResource",
            "lakeformation:RemoveLFTagsFromResource",
            "lakeformation:GetResourceLFTags",
            "lakeformation:ListLFTags",
            "lakeformation:GetLFTag",
            "lakeformation:SearchTablesByLFTags",
            "lakeformation:SearchDatabasesByLFTags"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey",
            "kms:Encrypt",
            "kms:DescribeKey",
            "kms:CreateGrant"
          ],
          "Resource": "<your-kms-key-arn>"
        }
      ]
    }
    database

    Permissions

    Set up the Immuta service principal

    Register an AWS Lake Formation connection

    Map users

    AWS documentation
    IDC
    map users section
    IAM policy for an unencrypted Glue Data Catalog
    AWS documentation
    Create an IAM role
    LF-Tag Creator
    Mapping IAM principals in Immuta section
    The Use only IAM access control for new databases option and the Use only IAM access control for new tables in new databases option in the Data Catalog Settings section in AWS are unchecked so that Immuta can govern resources.
    AWS Data Catalog settings must be unchecked for Immuta to govern access.
    required resources
    AWS documentation

    Users query data from the Immuta created datasets directly in BigQuery.

  • Register this view as a BigQuery data source in Immuta.

  • Immuta will then be able to create Immuta-managed views off of this view with the pseudo-column aliased.

  • Mask using a regular expression

  • Mask by date rounding

  • Mask by numeric rounding

  • Mask using custom functions

  • Row filtering based on user attributes and/or object attributes

  • Filter rows using custom WHERE clause

  • and select
    Google BigQuery
    from the dropdown menu.
  • Click Select Authentication Method and select Key File.

  • Click Download Script(s).

  • Before you run the script, update your permissions to execute it:

    chmod 755 <path to downloaded script>
  • Run the script, where

    • PROJECT_ID is the Google Cloud Platform project to operate on.

    • ROLE_ID is the name of the custom role to create.

    • NAME will create a service account with the provided name.

    • OUTPUT_FILE is the path where the resulting private key should be written. File system write permission will be checked on the specified path prior to the key creation.

    • undelete-role (optional) will undelete the custom role from the project. Roles that have been deleted for a long time can't be undeleted. This option can fail for the following reasons:

      • The role specified does not exist.

      • The active user does not have permission to access the given role.

    • enable-api (optional) provided you’ve been granted access to enable the Google BigQuery API, will enable the service.

  • bigquery.datasets.get
  • bigquery.datasets.update

  • bigquery.jobs.create

  • bigquery.jobs.get

  • bigquery.jobs.list

  • bigquery.jobs.listAll

  • bigquery.routines.create

  • bigquery.routines.delete

  • bigquery.routines.get

  • bigquery.routines.list

  • bigquery.routines.update

  • bigquery.tables.create

  • bigquery.tables.delete

  • bigquery.tables.export

  • bigquery.tables.get

  • bigquery.tables.getData

  • bigquery.tables.list

  • bigquery.tables.setCategory

  • bigquery.tables.update

  • bigquery.tables.updateData

  • bigquery.tables.updateTag

  • Create a service account and grant it the custom role you just created.

  • Enable the Google BigQuery API.

  • Upload your GCP Service Account Key File. This is the private key file generated in create a Google Cloud service account and role for Immuta to use to connect to Google BigQuery. Uploading this file will auto-populate the following fields:
    • Project Id: The Google Cloud Platform project to operate on, where your Google BigQuery data warehouse is located. A new dataset will be provisioned in this Google BigQuery project to store the integration configuration.

    • Service Account: The service account you created in create a Google Cloud service account and role for Immuta to use to connect to Google BigQuery.

  • Complete the following fields:

    • Immuta Dataset: The name of the Google BigQuery dataset to provision inside of the project. Important: if you are using multiple environments in the same Google BigQuery project, this dataset to provision must be unique across environments.

    • Immuta Role: The custom role you created in create a Google Cloud service account and role for Immuta to use to connect to Google BigQuery.

    • Dataset Suffix: The suffix that will be postfixed to the name of each dataset created to store secure views, one per dataset that you ingest a table for as a data source in Immuta. Important: if you are using multiple environments in the same Google BigQuery project, this suffix must be unique across environments.

    • GCP Location: The dataset’s location. After a dataset is created, the location can't be changed. Note that

      • If you choose EU for the dataset location, your Core BigQuery Customer Data resides in the EU.

  • Click Test Google BigQuery Integration.

  • Click Save.

  • Before you run the script, update your permissions to execute it:
  • Run the cleanup script.

  • gcloud config set account ACCOUNT

    FAQs

    Google BigQuery view-based integration conceptual overview

    Secure views

    Managing access

    Integration health status

    Limitations

    Supported policies

    Additional resources

    Configure the Google BigQuery view-based integration

    Google Cloud service account and role used by Immuta to connect to Google BigQuery

    The Immuta script

    Create a service account and role by running the script provided by Immuta

    Create a service account and role by using Google Cloud console

    Enable the Google BigQuery view-based integration

    GCP location must match dataset region

    The region set for the GCP location must match the region of your datasets. Set GCP location to a general region (for example, US) to include child regions.

    Disable the Google BigQuery view-based integration

    Automatically disable integration

    Manually disable integration

    Next steps

    subscription
    supported data policy
    Register your BigQuery tables and views in Immuta as data sources.
    Recommended: Organize your data sources into domains and assign domain permissions to accountable teams.
    here
    specific policies
    authorized dataset
    response schema of the integrations API
    Configuring the Google BigQuery view-based integration
    Creating BigQuery data sources
    subscription
    data policies
    Creating projects
    Run the script provided by Immuta
    Use the Google Cloud Console
    enable the Google BigQuery view-based integration
    gcloud
    Create a custom role using the console
    Configure a Google BigQuery view-based integration API guide
    Create Google BigQuery data sources
    global subscription policies
    data policies
    Create projects
    create view `sales`.`emea`.`sales_view` as SELECT *, _PARTITIONTIME as __partitiontime from `sales`.`emea`.`sales`
    chmod 755 <path to downloaded script>

    Installation and Compliance

    Learn about what Immuta creates in your Databricks environment to enforce access controls

    In the Databricks Spark integration, Immuta installs an Immuta-maintained Spark plugin on your Databricks cluster. When a user queries data that has been registered in Immuta as a data source, the plugin injects policy logic into the plan Spark builds so that the results returned to the user only include data that specific user should see.

    The sequence diagram below breaks down this process of events when an Immuta user queries data in Databricks.

    • A Databricks workspace with the Premium tier, which includes cluster policies (required to configure the Spark integration)

    • A cluster that uses one of these supported Databricks Runtimes:

    Customizing the Integration

    Learn how to adjust settings for the Databricks Spark integration

    You can customize the Databricks Spark integration settings using these components Immuta provides:

    Immuta provides cluster policies that set the

  • bigquery.jobs.create

  • bigquery.routines.create

  • bigquery.routines.delete

  • bigquery.routines.get

  • bigquery.routines.update

  • bigquery.rowAccessPolicies.create

  • bigquery.rowAccessPolicies.delete

  • bigquery.rowAccessPolicies.list

  • bigquery.rowAccessPolicies.setIamPolicy

  • bigquery.rowAccessPolicies.update

  • bigquery.tables.create

  • bigquery.tables.delete

  • bigquery.tables.getData

  • bigquery.tables.getIamPolicy

  • bigquery.tables.setIamPolicy

  • bigquery.tables.update

  • bigquery.tables.updateData

  • iam.roles.create

  • iam.roles.get

  • iam.roles.list

  • iam.roles.undelete

  • iam.roles.update

  • resourcemanager.projects.getIamPolicy

  • resourcemanager.projects.setIamPolicy

  • lakeformation:BatchRevokePermissions
  • lakeformation:CreateLFTag

  • lakeformation:UpdateLFTag

  • lakeformation:DeleteLFTag

  • lakeformation:AddLFTagsToResource

  • lakeformation:RemoveLFTagsFromResource

  • lakeformation:GetResourceLFTags

  • lakeformation:ListLFTags

  • lakeformation:GetLFTag

  • lakeformation:SearchTablesByLFTags

  • lakeformation:SearchDatabasesByLFTags

  • kms:Encrypt
  • kms:DescribeKey

  • kms:CreateGrant

  • Lake Formation actions
    IAM policy
    AWS documentation
    $ bootstrap.sh \
        --project PROJECT_ID \
        --role ROLE_ID \
        --service_account NAME \
        --keyfile OUTPUT_FILE \
        [--undelete-role] \
        [--enable-api]
  • 11.3 LTS

  • 14.3 LTS

  • For a comparison of features supported for both Databricks Runtimes, see the Databricks Runtime 14.3 section.

  • Supported languages

    • Python

    • R (not supported for Databricks Runtime 14.3 LTS)

    • Scala (not supported for Databricks Runtime 14.3 LTS)

    • SQL

  • A Databricks cluster that is one of these supported compute types:

    • All-purpose compute

    • Job compute

  • Custom access mode

  • A Databricks workspace and cluster with the ability to directly make HTTP calls to the Immuta web service. The Immuta web service also must be able to connect to and perform queries on the Databricks cluster, and to call Databricks workspace APIs.

  • When an administrator configures the Databricks Spark integration, Immuta generates a cluster policy that the administrator then applies to the Databricks cluster. When the cluster starts after the cluster policy has been applied, the Databricks cluster init script that Immuta provides downloads Spark plugin artifacts onto the cluster that has the init script and puts the artifacts in the appropriate locations on local disk for use by Spark.

    Once the init script runs, the Spark application running on the Databricks cluster will have the appropriate artifacts on its CLASSPATH to use Immuta for authorization and policy enforcement.

    Immuta adds the following artifacts to your Databricks environment:

    Once the Immuta-enabled cluster is running, the following user actions spur various processes. The list below provides an overview of each process:

    • Data source is registered: When a data owner registers a Databricks securable as a data source, data source metadata (column type, securable name, column names, etc.) is retrieved from the Metastore and stored in the Immuta Metadata Database. If tags are then applied to the data source, Immuta stores this metadata in the Metadata Database as well.

    • Data source is deleted: When a data source is deleted, the data source metadata is deleted from the Metadata Database. Depending on the settings configured for the integration, users will either be able to query that data now that it is no longer registered in Immuta, or access to the securable will be revoked for all users. See the Protected and unprotected tables section for details about this setting.

    • Policy is created or edited on a data source: Information about the policy and the columns or securables it applies to is stored in the Metadata Database. When a user queries the data in Databricks, the Spark plugin retrieves the policy information, the user metadata, and the data source metadata from the Metadata Database and injects this information as policy logic into the Spark logical plan. Immuta caches policy information and data source definitions in memory on the Spark application to reduce calls to the Metadata Database and boost performance.

    • A policy is deleted: When a policy is deleted, the policy information is deleted from the Metadata Database. If users were granted access to the data source by that policy, their access is revoked.

    • : When a Databricks user is mapped to Immuta, their metadata is stored in the Metadata Database.

    • Databricks user queries data: When a user queries the data in Databricks, Immuta intercepts the call from Spark down to the Metastore. Then, the Immuta-maintained Spark plugin retrieves the policy information, the user metadata, and the data source metadata from the Metadata Database and injects this information as policy logic into the Spark logical plan. Once the physical plan is applied, Databricks returns policy-enforced data to the user.

    The image below illustrates these processes and how they interact.

    The Databricks Spark integration allows users to author subscription and data policies to enforce access controls. See the corresponding pages for details about specific types of policies supported:

    • Subscription policy access types

    • Data policy types

    Immuta supports clusters on Databricks Runtime 14.3. The integration for this Databricks Runtime differs from the integration for Databricks Runtime 11.3 in the following ways:

    • Security Manager is disabled: The Security Manager is disabled for Databricks Runtime 14.3. Because the Security Manager is used to prevent users from circumventing access controls when using R and Scala, those languages are unsupported. Only Python and SQL clusters are supported.

    • Py4J security and process isolation automatically enabled: Immuta relies on Databricks process isolation and Py4J security to prevent user code from performing unauthorized actions. After selecting Runtime 14.3 during configuration, Immuta will automatically enable process isolation and Py4J security.

    • dbutils is unsupported: Immuta relies on Databricks process isolation and Py4J security to prevent user code from performing unauthorized actions. This means that dbutils is not supported for Databricks Spark integrations using Databricks Runtime 14.3 LTS.

    • : Databricks Connect is unsupported because Py4J security must be enabled to use it.

    The table below compares the features supported for clusters on Databricks Runtime 11.3 and Databricks Runtime 14.3.

    Feature
    Databricks Runtime 11.3
    Databricks Runtime 14.3

    Subscription policies

    ✅

    ✅

    Data policies

    The Databricks Spark integration supports the following authentication methods to configure the integration:

    • OAuth machine-to-machine (M2M): Immuta uses the Client Credentials Flow to integrate with Databricks OAuth machine-to-machine authentication, which allows Immuta to authenticate with Databricks using a client secret. Once Databricks verifies the Immuta service principal’s identity using the client secret, Immuta is granted a temporary OAuth token to perform token-based authentication in subsequent requests. When that token expires (after one hour), Immuta requests a new temporary token. See the Databricks OAuth machine-to-machine (M2M) authentication page for more details.

    • Personal access token (PAT): This token gives Immuta temporary permission to push the cluster policies to the configured Databricks workspace and overwrite any cluster policy templates previously applied to the workspace when configuring the integration or to register securables as Immuta data sources.

    Immuta captures the code or query that triggers the Spark plan in Databricks, making audit records more useful in assessing what users are doing. To audit what triggers the Spark plan, Immuta hooks into Databricks where notebook cells and JDBC queries execute and saves the cell or query text. Then, Immuta pulls this information into the audits of the resulting Spark jobs.

    Immuta supports auditing all queries run on a Databricks cluster, regardless of whether users touch Immuta-protected data or not. To configure Immuta to do so, set the IMMUTA_SPARK_AUDIT_ALL_QUERIES environment variable in the Spark cluster configuration when configuring your integration.

    See the Security and compliance guide for more details about the audit capabilities in the Databricks Spark integration.

    Non-administrator users on an Immuta-enabled Databricks cluster must not have access to view or modify Immuta configuration or the immuta-spark-hive.jar file, as this poses a security loophole around Immuta policy enforcement. Databricks secrets allow you to securely apply environment variables to Immuta-enabled clusters.

    Databricks secrets can be used in the environment variables configuration section for a cluster by referencing the secret path instead of the actual value of the environment variable. For example, if a user wanted to make the MY_SECRET_ENV_VAR=abcd_1234 value secret, they could instead create a Databricks secret and reference it as the value of that variable by following these steps:

    1. Create the secret scope my_secrets and add a secret with the key my_secret_env_var containing the sensitive environment variable.

    2. Reference the secret in the environment variables section as MY_SECRET_ENV_VAR={{secrets/my_secrets/my_secret_env_var}}.

    At runtime, {{secrets/my_secrets/my_secret_env_var}} would be replaced with the actual value of the secret if the owner of the cluster has access to that secret.

    There are limitations to isolation among users in Scala jobs on a Databricks cluster, even when using Immuta’s Security Manager. When data is broadcast, cached (spilled to disk), or otherwise saved to SPARK_LOCAL_DIR, it's impossible to distinguish between which user’s data is composed in each file/block. If you are concerned about this vulnerability, Immuta suggests that you

    • limit Scala clusters to Scala jobs only and

    • require equalized projects, which will force all users to act under the same set of attributes, groups, and purposes with respect to their data access. To require that Scala clusters be used in equalized projects and avoid the risk described above, set the IMMUTA_SPARK_REQUIRE_EQUALIZATION Spark environment variable to true.

      Once this configuration is complete, users on the cluster will need to switch to an Immuta equalized project before running a job. Once the first job is run using that equalized project, all subsequent jobs, no matter the user, must also be run under that same equalized project. If you need to change a cluster's project, you must restart the cluster.

    When data is read in Spark using an Immuta policy-enforced plan, the masking and redaction of rows is performed at the leaf level of the physical Spark plan, so a policy such as "Mask using hashing the column social_security_number for everyone" would be implemented as an expression on a project node right above the FileSourceScanExec/LeafExec node at the bottom of the plan. This process prevents raw data from being shuffled in a Spark application and, consequently, from ending up in SPARK_LOCAL_DIR.

    This policy implementation coupled with an equalized project guarantees that data being dropped into SPARK_LOCAL_DIR will have policies enforced and that those policies will be homogeneous for all users on the cluster. Since each user will have access to the same data, if they attempt to manually access other users' cached data, they will only see what they have access to via equalized permissions on the cluster. If project equalization is not turned on, users could dig through that directory and find data from another user with heightened access, which would result in a data leak.

    The Troubleshooting page has guidance for resolving issues with your installation.

    System requirements

    Immuta intercepts Spark calls to the Metastore. Immuta then modifies the logical plan so that policies are applied to the data for the querying user.

    What does Immuta do in my Databricks environment?

    Immuta-maintained Spark plugin

    The Databricks Spark integration injects this Immuta-maintained Spark plugin into the SparkSQL stack at cluster startup time. Policy determinations are obtained from the connected Immuta tenant and applied before returning results to the user. The plugin includes wrappers and Immuta analysis hook plan rewrites to enforce policies.

    Immuta Security Manager

    Note: The Security Manager is disabled for.

    The Immuta Security Manager ensures users can't perform unauthorized actions when using Scala and R, since those languages have features that allow users to circumvent policies without the Security Manager enabled. The Immuta Security Manager blocks users from executing code that could allow them to gain access to sensitive data by only allowing select code paths to access sensitive files and methods. These select code paths provide Immuta's code access to sensitive resources while blocking end users from these sensitive resources directly.

    Performance

    The Security Manager must inspect the call stack every time a permission check is triggered, which adds overhead to queries. To improve Immuta's query performance on Databricks, Immuta disables the Security Manager when Scala and R are not being used.

    The cluster init script checks the cluster’s configuration and automatically removes the Security Manager configuration when

    immuta database

    When a table is registered in Immuta as a data source, users can see that table in the native Databricks database and in the immuta database. This allows for an option to use a single database (immuta) for all tables.

    The immuta database on Immuta-enabled clusters allows Immuta to track Immuta-managed data sources separately from remote Databricks tables so that policies and other security features can be applied. However, Immuta supports raw tables in Databricks, so table-backed queries do not need to reference this database.

    When configuring a Databricks cluster, you can hide immuta

    Supported policies

    Databricks Runtime 14.3

    Cluster security and compliance

    Authentication methods

    Audit

    Protecting the Immuta configuration

    Scala clusters

    Troubleshooting the installation

    and configuration on your Databricks cluster once you apply that policy to your cluster. These policies generated by Immuta must be applied to your cluster manually. The
    includes instructions for generating and applying these cluster policies. Each cluster policy is described below.

    The Spark environment variables reference guide lists the various possible settings controlled by these variables that you can set in your cluster policy before attaching it to your cluster.

    In some cases it is necessary to add sensitive configuration to SparkSession.sparkContext.hadoopConfiguration to allow Spark to read data.

    For example, when accessing external tables stored in Azure Data Lake Gen2, Spark must have credentials to access the target containers or filesystems in Azure Data Lake Gen2, but users must not have access to those credentials. In this case, an additional configuration file may be provided with a storage account key that the cluster may use to access Azure Data Lake Gen2.

    To use an additional Hadoop configuration file, set the IMMUTA_INIT_ADDITIONAL_CONF_URI Spark environment variable to be the full URI to this file.

    Databricks non-privileged users will only see sources to which they are subscribed in Immuta, and this can present problems if organizations have a data lake full of non-sensitive data and Immuta removes access to all of it. Immuta addresses this challenge by allowing Immuta users to access any tables that are not protected by Immuta (i.e., not registered as a data source or a table in a native workspace). Although this is similar to how privileged users in Databricks operate, non-privileged users cannot bypass Immuta controls.

    • Protected until made available by policy: This setting means that users can only see tables that Immuta has explicitly subscribed them to.

    • Available until protected by policy: This setting means all tables are open until explicitly registered and protected by Immuta. This setting allows both non-Immuta reads and non-Immuta writes:

      • IMMUTA_SPARK_DATABRICKS_ALLOW_NON_IMMUTA_READS: Immuta users with regular (non-privileged) Databricks roles may SELECT from tables that are not registered in Immuta. This setting does not allow reading data directly with commands like spark.read.format("x"). Users are still required to read data and query tables using Spark SQL. When non-Immuta reads are enabled through the cluster policy, Immuta users will see all databases and tables when they run show databases or show tables. However, this does not mean they will be able to query all of them.

      • : Immuta users with regular (non-privileged) Databricks roles can run DDL commands and data-modifying commands against tables or spaces that are not registered in Immuta. With non-Immuta writes enabled through the cluster policy, users on the cluster can mix any policy-enforced data they may have access to via any registered data sources in Immuta with non-Immuta data and write the ensuing result to a non-Immuta write space where it would be visible to others. If this is not a desired possibility, the cluster should instead be configured to only use Immuta’s project workspaces.

    The Configure a Databricks Spark integration guide includes instructions for applying these settings to your cluster.

    In Immuta, a Databricks data source is considered ephemeral, meaning that the compute resources associated with that data source will not always be available.

    Ephemeral data sources allow the use of ephemeral overrides, user-specific connection parameter overrides that are applied to Immuta metadata operations.

    When a user runs a Spark job in Databricks, the Immuta plugin automatically submits ephemeral overrides for that user to Immuta for all applicable data sources to use the current cluster as compute for all subsequent metadata operations for that user against the applicable data sources.

    For more details about ephemeral overrides and how to configure or disable them, see the Ephemeral overrides page.

    Immuta projects combine users and data sources under a common purpose. Sometimes this purpose is for a single user to organize their data sources or to control an entire schema of data sources through a single projects screen; however, most often this is an Immuta purpose for which the data has been approved to be used and will restrict access to data and streamline team collaboration. Consequently, data owners can restrict access to data for a specified purpose through projects.

    When a user is working within the context of a project, data users will only see the data in that project. This helps to prevent data leaks when users collaborate. Users can switch project contexts to access various data sources while acting under the appropriate purpose. Consider adjusting the following project settings to suit your organization's needs:

    • Project UDFs (web service and on-cluster caches): Immuta caches a mapping of user accounts and users' current projects in the Immuta Web Service and on-cluster. When users change their project with UDFs instead of the Immuta UI, Immuta invalidates all the caches on-cluster (so that everything changes immediately) and the cluster submits a request to change the project context to a web worker. Immediately after that request, another call is made to a web worker to refresh the current project.

      To allow use of project UDFs in Spark jobs, raise the caching on-cluster and lower the cache timeouts for the Immuta Web Service. Otherwise, caching could cause dissonance among the requests and calls to multiple web workers when users try to change their project contexts.

    • Preventing users from changing projects within a session: If your compliance requirements restrict users from changing projects within a session, you can block the use of Immuta's project UDFs on a Databricks Spark cluster. To do so, configure the IMMUTA_SPARK_DATABRICKS_DISABLED_UDFS Spark environment variable.

    This section describes how Immuta interacts with common Databricks features.

    Databricks users can see the Databricks change data feed (CDF) on queried tables if they are allowed to read raw data and meet specific qualifications. Immuta does not support applying policies to the changed data, and the CDF cannot be read for data source tables if the user does not have access to the raw data in Databricks or for streaming queries.

    The CDF can be read if the querying user is allowed to read the raw data and ONE of the following statements is true:

    • the table is in the current workspace

    • the table is in a scratch path

    • non-Immuta reads are enabled AND the table does not intersect with a workspace under which the current user is not acting

    • non-Immuta reads are enabled AND the table is not part of an Immuta data source

    The trusted libraries feature allows Databricks cluster administrators to avoid Immuta Security Manager errors when using third-party libraries. An administrator can specify an installed library as trusted, which will enable that library's code to bypass the Immuta security manager. This feature does not impact Immuta's ability to apply policies; trusting a library only allows code through that otherwise would have been blocked by the Security Manager.

    The following types of libraries are supported when installing a third-party library using the Databricks UI or the Databricks Libraries API:

    • Library source is Upload, DBFS or DBFS/S3 and the Library Type is Jar.

    • Library source is Maven.

    When users install third-party libraries, those libraries will be denied access to sensitive resources by default. However, cluster administrators can specify which of the installed Databricks libraries should be trusted by Immuta. See the Install a trusted library guide to add a trusted library to your configuration.

    Limitations

    • Installing trusted libraries outside of the Databricks Libraries API (e.g., ADD JAR ...) is not supported.

    • Databricks installs libraries right after a cluster has started, but there is no guarantee that library installation will complete before a user's code is executed. If a user executes code before a trusted library installation has completed, Immuta will not be able to identify the library as trusted. This can be solved by either

      • waiting for library installation to complete before running any third-party library commands or

      • executing a Spark query. This will force Immuta to wait for any trusted Immuta libraries to complete installation before proceeding.

    • When installing a library using Maven as a library source, Databricks will also install any transitive dependencies for the library. However, those transitive dependencies are installed behind the scenes and will not appear as installed libraries in either the Databricks UI or using the Databricks Libraries API. Only libraries specifically listed in the IMMUTA_SPARK_DATABRICKS_TRUSTED_LIB_URIS environment variable will be trusted by Immuta, which does not include installed transitive dependencies. This effectively means that any code paths that include a class from a transitive dependency but do not include a class from a trusted third-party library can still be blocked by the Immuta security manager. For example, if a user installs a trusted third-party library that has a transitive dependency of a file-util library, the user will not be able to directly use the file-util library to read a sensitive file that is normally protected by the Immuta security manager.

      In many cases, it is not a problem if dependent libraries aren't trusted because code paths where the trusted library calls down into dependent libraries will still be trusted. However, if the dependent library needs to be trusted, there is a workaround:

    Connect any of these supported external catalogs to work with your Databricks Spark integration so data owners can tag their data.

    Immuta supports the use of external metastores in local or remote mode:

    • Local mode: The metastore client running inside a cluster connects to the underlying metastore database directly via JDBC.

    • Remote mode: Instead of connecting to the underlying database directly, the metastore client connects to a separate metastore service via the Thrift protocol. The metastore service connects to the underlying database. When running a metastore in remote mode, DBFS is not supported.

    For more details about these deployment modes, see how to set up Databricks clusters to connect to an existing external Apache Hive metastore.

    Users on Databricks Runtimes 8+ can manage notebook-scoped libraries with %pip commands.

    However, this functionality differs from the support for Databricks trusted libraries, and Python libraries are not supported as trusted libraries. The Immuta Security Manager will deny the code of libraries installed with %pip access to sensitive resources.

    Scratch paths are cluster-specific remote file paths that Databricks users are allowed to directly read from and write to without restriction. The creator of a Databricks cluster specifies the set of remote file paths that are designated as scratch paths on that cluster when they configure a Databricks cluster. Scratch paths are useful for scenarios where non-sensitive data needs to be written out to a specific location using a Databricks cluster protected by Immuta.

    To configure a scratch path, use the IMMUTA_SPARK_DATABRICKS_SCRATCH_PATHS Spark environment variable.

    Cluster policies

    Cluster policies
    Spark environment variables
    Hadoop configuration file
    Spark environment variables
    Python and SQL

    This is the most performant policy configuration.

    In this configuration, Immuta is able to rely on Databricks-native security controls, reducing overhead. The key security control here is the enablement of process isolation. This prevents users from obtaining unintentional access to the queries of other users. In other words, masked and filtered data is consistently made accessible to users in accordance with their assigned attributes. This Immuta cluster configuration relies on Py4J security being enabled. Consequently, the following Databricks features are unsupported:

    • Many Python ML classes (such as LogisticRegression, StringIndexer

    Python, SQL, and R

    Additional overhead: Compared to the Python and SQL cluster policy, this configuration trades some additional overhead for added support of the R language.

    In this configuration, you are able to rely on the Databricks-native security controls. The key security control here is the enablement of process isolation. This prevents users from obtaining unintentional access to the queries of other users. In other words, masked and filtered data is consistently made accessible to users in accordance with their assigned attributes.

    Like the Python & SQL configuration, Py4j security is enabled for the Python & SQL & R configuration. However, because R has been added Immuta enables the Security Manager, in addition to Py4J security, to provide more security guarantees. For example, by default all actions in R execute as the root user; among other things, this permits access to the entire filesystem (including sensitive configuration data), and, without iptable restrictions, a user may freely access the cluster’s cloud storage credentials. To address these security issues, Immuta’s initialization script wraps the R and Rscript binaries to launch each command as a temporary, non-privileged user with limited filesystem and network access and installs the Immuta Security Manager, which prevents users from bypassing policies and protects against the above vulnerabilities from within the JVM.

    Python, SQL, and R with library support

    Py4J security disabled: In addition to support for Python, SQL, and R, this configuration adds support for additional Python libraries and utilities by disabling Databricks-native Py4J security.

    This configuration does not rely on Databricks-native Py4J security to secure the cluster, while process isolation is still enabled to secure filesystem and network access from within Python processes. On an Immuta-enabled cluster, once Py4J security is disabled the Immuta Security Manager is installed to prevent nefarious actions from Python in the JVM. Disabling Py4J security also allows for expanded Python library support, including many Python ML classes (such as LogisticRegression, StringIndexer, and DecisionTreeClassifier) and dbutils.fs.

    Scala

    Scala clusters: This configuration is for Scala-only clusters.

    Where Scala language support is needed, this configuration can be used in the Custom .

    According to Databricks’ cluster type support documentation, Scala clusters are intended for . However, nothing inherently prevents a Scala cluster from being configured for multiple users. Even with the Immuta Security Manager enabled, there are limitations to user isolation within a Scala job.

    For a secure configuration, it is recommended that clusters intended for Scala workloads are limited to Scala jobs only and are made homogeneous through the use of or externally via convention/cluster ACLs. (In homogeneous clusters, all users are at the same level of groups/authorizations; this is enforced externally, rather than directly by Immuta.)

    For full details on Databricks’ best practices in configuring clusters, read their .

    Sparklyr

    Single-user clusters recommended: Like Databricks, Immuta recommends single-user clusters for sparklyr when user isolation is required. A single-user cluster can either be a job cluster or a cluster with credential passthrough enabled. Note: spark-submit jobs are not currently supported.

    Two cluster types can be configured with sparklyr: Single-User Clusters (recommended) and Multi-User Clusters (discouraged).

    • : Credential Passthrough (required on Databricks) allows a single-user cluster to be created. This setting automatically configures the cluster to assume the role of the attached user when reading from storage. Because Immuta requires that raw data is readable by the cluster, the instance profile associated with the cluster should be used rather than a role assigned to the attached user.

    Spark environment variables

    Additional Hadoop configuration file (optional)

    Configurable settings

    Data source settings

    Protected and unprotected tables

    Behavior change

    If a table is registered in Immuta and does not have a subscription policy applied to it, that data will be visible to users, even if the Protected until made available by policy setting is enabled.

    If you have enabled this setting, author an "Allow individually selected users" that applies to all data sources.

    Ephemeral overrides

    Restricting users' access with Immuta projects

    Databricks features

    Change data feed

    Databricks trusted libraries

    Security vulnerability

    Using this feature could create a security vulnerability, depending on the third-party library. For example, if a library exposes a public method named readProtectedFile that displays the contents of a sensitive file, then trusting that library would allow end users access to that file. Work with your Immuta support professional to determine if the risk does not apply to your environment or use case.

    External catalogs

    External metastores

    Configure external Hive metastore

    Download the metastore jars and point to them as specified in . Metastore jars must end up on the cluster's local disk at this explicit path: /databricks/hive_metastore_jars.

    If using DBR 7.x with Hive 2.3.x, either

    • Set spark.sql.hive.metastore.version to 2.3.7 and spark.sql.hive.metastore.jars

    Configure AWS Glue Data Catalog

    To use AWS Glue Data Catalog as the metastore for Databricks, see the .

    Notebook-scoped libraries on machine learning clusters

    Scratch paths

    Configure a Databricks Spark integration guide

    Add the transitive dependency jar paths to the . In the driver log4j logs, Databricks outputs the source jar locations when it installs transitive dependencies. In the cluster driver logs, look for a log message similar to the following:

    1. In the above example, where slf4j is the transitive dependency, you would add the path dbfs:/FileStore/jars/maven/org/slf4j/slf4j-api-1.7.25.jar to the IMMUTA_SPARK_DATABRICKS_TRUSTED_LIB_URIS environment variable and restart your cluster.

    , and
    DecisionTreeClassifier
    )
  • dbutils.fs

  • Databricks Connect client library

  • For full details on Databricks’ best practices in configuring clusters, read their .

    Consequently, the cost of introducing R is that the Security Manager incurs a small increase in performance overhead; however, average latency will vary depending on whether the cluster is homogeneous or heterogeneous. (In homogeneous clusters, all users are at the same level of groups/authorizations; this is enforced externally, rather than directly by Immuta.)

    When users install third-party Java/Scala libraries, they will be denied access to sensitive resources by default. However, cluster administrators can specify which of the installed Databricks libraries should be by Immuta.

    The following Databricks features are unsupported when this cluster policy is applied:

    • Many Python ML classes (such as LogisticRegression, StringIndexer, and DecisionTreeClassifier)

    • dbutils.fs

    • Databricks Connect client library

    For full details on Databricks’ best practices in configuring clusters, read their .

    By default, all actions in R will execute as the root user. Among other things, this permits access to the entire filesystem (including sensitive configuration data). And without iptable restrictions, a user may freely access the cluster’s cloud storage credentials. To properly support the use of the R language, Immuta’s initialization script wraps the R and Rscript binaries to launch each command as a temporary, non-privileged user. This user has limited filesystem and network access. The Immuta Security Manager is also installed to prevent users from bypassing policies and protects against the above vulnerabilities from within the JVM.

    The Security Manager will incur a small increase in performance overhead; average latency will vary depending on whether the cluster is homogeneous or heterogeneous. (In homogeneous clusters, all users are at the same level of groups/authorizations; this is enforced externally, rather than directly by Immuta.)

    When users install third-party Java/Scala libraries, they will be denied access to sensitive resources by default. However, cluster administrators can specify which of the installed Databricks libraries should be by Immuta.

    A homogeneous cluster is recommended for configurations where Py4J security is disabled. If all users have the same level of authorization, there would not be any data leakage, even if a nefarious action was taken.

    For full details on Databricks’ best practices in configuring clusters, read their .

    : Because Immuta cannot guarantee user isolation in a multi-user sparklyr cluster, it is not recommended to deploy a multi-user cluster. To force all users to act under the same set of attributes, groups, and purposes with respect to their data access and eliminate the risk of a data leak, all sparklyr multi-user clusters must be equalized either by convention (all users able to attach to the cluster have the same level of data access in Immuta) or by configuration (detailed below).

    Single-user cluster configuration

    1 - Enable sparklyr

    In addition to the configuration for an Immuta cluster with R, add this environment variable to the Environment Variables section of the cluster:

    This configuration makes changes to the iptables rules on the cluster to allow the sparklyr client to connect to the required ports on the JVM used by the sparklyr backend service.

    2 - Set up a sparklyr connection in Databricks

    1. Install and load libraries into a notebook. Databricks includes the stable version of sparklyr, so library(sparklyr) in an R notebook is sufficient, but you may opt to install the latest version of sparklyr from CRAN. Additionally, loading library(DBI) will allow you to execute SQL queries.

    2. Set up a sparklyr connection:

    3. Pass the connection object to execute queries:

    3 - Configure a single-user cluster

    Add the following items to the Spark Config section of the cluster:

    The trustedFileSystems setting is required to allow Immuta’s wrapper FileSystem (used in conjunction with the Security Manager for data security purposes) to be used with credential passthrough. Additionally, the InstanceProfileCredentialsProvider must be configured to continue using the cluster’s instance profile for data access, rather than a role associated with the attached user.

    Multi-user cluster configuration

    Avoid deploying multi-user clusters with sparklyr configuration

    It is possible, but not recommended, to deploy a multi-user cluster sparklyr configuration. Immuta cannot guarantee user isolation in a multi-user sparklyr configuration.

    The configurations in this section enable sparklyr, require project equalization, map sparklyr sessions to the correct Immuta user, and prevent users from accessing Immuta native workspaces.

    1. Add the following environment variables to the Environment Variables section of your cluster configuration:

    2. Add the following items to the Spark Config section:

    Limitations

    Immuta’s integration with sparklyr does not currently support

    • spark-submit jobs

    • UDFs

    to
    builtin
    or
  • Download the metastore jars and set spark.sql.hive.metastore.jars to /databricks/hive_metastore_jars/* as before.

  • IMMUTA_SPARK_DATABRICKS_ALLOW_NON_IMMUTA_WRITES
    access mode
    single users only
    project equalization
    governance documentation
    Single-User Clusters
    global subscription policy
    Databricks documentation
    Databricks documentation
  • spark.databricks.repl.allowedlanguages is a subset of {python, sql}

  • IMMUTA_SPARK_DATABRICKS_PY4J_STRICT_ENABLED is true

  • When the cluster is configured this way, Immuta can rely on Databricks' process isolation and Py4J security to prevent user code from performing unauthorized actions.

    Note: Immuta still expects the spark.driver.extraJavaOptions and spark.executor.extraJavaOptions to be set and pointing at the Security Manager.

    Beyond disabling the Security Manager, Immuta will skip several startup tasks that are required to secure the cluster when Scala and R are configured, and fewer permission checks will occur on the Driver and Executors in the Databricks cluster, reducing overhead and improving performance.

    Caveats

    • There are still cases that require the Security Manager; in those instances, Immuta creates a fallback Security Manager to check the code path, so the IMMUTA_INIT_ALLOWED_CALLING_CLASSES_URI environment variable must always point to a valid calling class file.

    • Databricks’ dbutils is blocked by their Py4J security; therefore, it can’t be used to access scratch paths.

    from any calls to
    SHOW DATABASES
    so that users are not confused or misled by that database. Hiding the database does not disable access to it. Queries can still be performed against tables in the
    immuta
    database using the Immuta-qualified table name (e.g.,
    immuta.my_schema_my_table
    ) regardless of whether or not this database is hidden.

    To hide the immuta database, use the following environment variable in the when configuring your integration:

    Then, Immuta will not show this database when a SHOW DATABASES query is performed.

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    Non-Immuta reads and writes

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    Python

    ✅

    ✅

    SQL

    ✅

    ✅

    R

    ✅

    ❌

    Scala

    ✅

    ❌

    Immuta project workspaces

    ✅

    ❌

    Smart mask ordering

    ✅

    ❌

    Masking and tagging complex columns (STRUCT, ARRAY, MAP)

    ✅

    ❌

    Photon support

    ✅

    ❌

    dbutils

    ✅

    ❌

    Databricks Connect

    ✅

    ❌

    Write policies

    ❌

    ❌

    Support for allowlisting networks or local filesystem paths

    ❌

    ✅

    Databricks user is mapped to Immuta
    Databricks Connect is unsupported
    Databricks Runtime 14.3
    Spark cluster configuration
    Scratch paths
    Project UDFs
    Impersonation
    Metastore magic
    IMMUTA_SPARK_DATABRICKS_TRUSTED_LIB_URIS Spark environment variable
    governance documentation
    trusted
    governance documentation
    trusted
    governance documentation
    Multi-User Clusters
    IMMUTA_SPARK_SHOW_IMMUTA_DATABASE=false
    INFO LibraryDownloadManager: Downloaded library dbfs:/FileStore/jars/maven/org/slf4j/slf4j-api-1.7.25.jar as
    local file /local_disk0/tmp/addedFile8569165920223626894slf4j_api_1_7_25-784af.jar
    IMMUTA_DATABRICKS_SPARKLYR_SUPPORT_ENABLED=true
    sc <- spark_connect(method = "databricks")
    dbGetQuery(sc, "show tables in immuta")
    spark.databricks.passthrough.enabled true
    
    spark.databricks.pyspark.trustedFilesystems com.databricks.s3a.S3AFileSystem,shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.SecureAzureBlobFileSystem,shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.SecureAzureBlobFileSystem,com.databricks.adl.AdlFileSystem,shaded.databricks.V2_1_4.com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem,shaded.databricks.org.apache.hadoop.fs.azure.NativeAzureFileSystem,shaded.databricks.org.apache.hadoop.fs.s3a.S3AFileSystem,org.apache.hadoop.fs.ImmutaSecureFileSystemWrapper
    
    spark.hadoop.fs.s3a.aws.credentials.provider com.amazonaws.auth.InstanceProfileCredentialsProvider
    IMMUTA_DATABRICKS_SPARKLYR_SUPPORT_ENABLED=true
    
    IMMUTA_SPARK_REQUIRE_EQUALIZATION=true
    
    IMMUTA_SPARK_CURRENT_USER_SCIM_FALLBACK=false
    immuta.spark.acl.assume.not.privileged true
    
    immuta.api.key=<user’s API key>

    Databricks Unity Catalog Integration Reference Guide

    Learn about how the Databricks Unity Catalog integration works and what Immuta creates in your environment to administer access controls directly on objects in Databricks Unity Catalog

    Using the Databricks Unity Catalog connection, you can register a Databricks Unity Catalog integration to register data sources, apply policies to securables, audit user queries, and use other supported Immuta features.

    The sequence diagram below outlines the events that occur when an Immuta user wants to query a Databricks Unity Catalog table that has been registered as an Immuta data source.

    Immuta’s integration with Unity Catalog allows you to enforce fine-grained access controls on Unity Catalog securable objects with Immuta policies. Instead of manually creating UDFs or granting access to each table in Databricks, you can author your policies in Immuta and have Immuta manage and orchestrate Unity Catalog access-control policies on your data in Databricks clusters or SQL warehouses.

    What does Immuta do in my Databricks environment?

    Registering a connection

    Immuta utilizes connections to register and manage data from your entire Databricks Unity Catalog environment all at once. This approach simplifies data registration and allows Immuta to automatically monitor your Databricks Unity Catalog platform for changes. Data sources are then added or removed to reflect the current state of your data platform.

    When a connection is first registered, Immuta will ask your application admin to provide the following:

    • The name of an Immuta system catalog in Databricks Unity Catalog that Immuta will control and create schemas in to contain policy definitions and user entitlements.

    • A set of Databricks credentials to a service principal with the to manage all data protected by Immuta. These credentials will be used to initially register all your as data objects. Immuta will also continue to use those credentials for scheduled , , and to orchestrate policies in Databricks Unity Catalog.

    The application admin will then run the setup script in Databricks Unity Catalog, which will create the following:

    • The new Immuta system catalog to contain the immuta_system schema with internal Immuta data and the immuta_policies_n schema with the Immuta policy UDFs

    After the setup and registration is complete, Immuta ingests and stores connection metadata in the Immuta metadata database. In the example below, the Immuta application administrator connects the database that contains marketing-data, research-data, and cs-data tables. Immuta registers these tables as data objects and stores the view metadata in the Immuta metadata database. Creating the connection does not impact any user's existing access in Databricks Unity Catalog until policy sync is enabled for those tables.

    Beyond making the registration of your data more intuitive, connections provide more control. Instead of performing operations on individual schemas or tables, you can perform operations (such as object sync) at the connection level.

    See the for details about connections and how to manage them. To configure your Databricks Unity Catalog integration and register data, see the .

    When policies require changes to be pushed to Unity Catalog, Immuta updates the internal tables in the immuta_system schema with the updated policy information. If necessary, new UDFs are pushed to replace any out-of-date policies in the immuta_policies_n schemas and any row filters or column masks are updated to point at the new policies. Many of these operations require compute on the configured Databricks cluster or SQL warehouse, so compute must be available for these policies to succeed.

    Immuta enforces read and write on Databricks Unity Catalog data sources by granting access to the appropriate securables in Databricks.

    Once the connection is registered, this is what happens when a user applies a subscription policy to a Databricks Unity Catalog data source:

    1. Immuta determines which users should have access based on the subscription policy.

    2. If an appropriate Immuta-managed Databricks group does not already exist, Immuta creates one at the Databricks account level.

    3. Immuta grants the required Unity Catalog privileges on the catalog, schema, or table to that Immuta-managed group using the Unity Catalog API.

    4. Immuta adds the entitled users to the group.

    Immuta-managed groups are created at the account level and not assigned to any particular workspace.

    When Immuta creates Databricks Unity Catalog groups to enforce access controls, the group naming convention differs slightly based on whether access was granted by an automatic subscription policy or the group was manually subscribed to the data source.

    • Automatic subscription of a user or Immuta group: The group name comprises the Immuta external ID, the connectionKey, and the policy hash.

      • Naming convention: IMMUTA_<Immuta external ID>_<connectionKey>_<policy hash>

      • Example: IMMUTA_123456789_UnityCatalogConnection_ce86d2f5f86471f66fcd08741d0eb0f4447a6e73a005094c9da07753a8d630f7

    You can author in Immuta to enforce fine-grained access controls on Databricks Unity Catalog data sources. For more details abour how enforcement works, see the .

    When a data policy is applied to a Databricks Unity Catalog data source in Immuta,

    1. A data owner, data governor, or administrator , or a in Immuta.

    2. Immuta generates and applies SQL user-defined functions (UDFs) in Databricks to enforce the configured policy.

      • Row-level security is enforced by applying SQL UDFs that filter rows returned to the querying user.

      • Column-level security

    See the integration support matrix on the for a list of supported data policy types for Databricks Unity Catalog.

    See the for details about the Databricks Unity Catalog privileges granted to users when they are subscribed to a data source protected by a subscription policy.

    The privileges the Databricks Unity Catalog integration requires align to the least privilege security principle. The table below describes each privilege required in Databricks Unity Catalog for the setup user and the Immuta service principal.

    Databricks Unity Catalog privilege
    User requiring the privilege
    Explanation

    The following user actions spur various processes in the Databricks Unity Catalog integration so that Immuta data remains synchronous with data in Databricks Unity Catalog:

    • Data source created: Immuta registers data source metadata and stores that metadata in the Immuta metadata database.

    • Data source deleted: Immuta deletes the data source metadata from the metadata database and removes subscription policies from that table.

    • User account is mapped to Immuta: When a user account is mapped to Immuta, their metadata is stored in the metadata database.

    Object type
    Subscription policy support
    Data policy support
    Request app support

    If you have , the ingestion of these catalogs (and their securables) into Immuta may get skipped. Ingestion for catalogs where the workspace associated with the Immuta service principal has read-only access are skipped because Immuta will be blocked from enforcing policies on such catalogs, even if the Immuta service principal were given explicit privilege grants (e.g., MANAGE) on the catalog.

    See the following table to determine whether Immuta ingests catalogs with each binding:

    Catalog binding
    Ingested into Immuta

    When enabling Unity Catalog support in Immuta, the catalog for all Databricks data sources will be updated to point at the default hive_metastore catalog. Internally, Databricks exposes this catalog as a proxy to the workspace-level Hive metastore that schemas and tables were kept in before Unity Catalog. Since this catalog is not a real Unity Catalog catalog, it does not support any Unity Catalog policies. Therefore, Immuta will ignore any data sources in the hive_metastore in any Databricks Unity Catalog integration, and policies will not be applied to tables there.

    However, with you can use hive_metastore and enforce subscription and data policies with the .

    The Unity Catalog integration supports the following policy types:

      • Conditional masking

      • Constant

    The Databricks Unity Catalog integration supports the following authentication methods to configure the integration and create data sources:

    • Personal access token (PAT): This is the access token for the Immuta service principal. This service principal must have the metastore privileges listed in the section for the metastore associated with the Databricks workspace. If this token is configured to expire, update this field regularly for the integration to continue to function.

    • OAuth machine-to-machine (M2M): Immuta uses the to integrate with , which allows Immuta to authenticate with Databricks using a client secret. Once Databricks verifies the Immuta service principal’s identity using the client secret, Immuta is granted a temporary OAuth token to perform token-based authentication in subsequent requests. When that token expires (after one hour), Immuta requests a new temporary token. See the for more details.

    The built-in Immuta IAM can be used as a complete solution for authentication and user entitlement. However, you can connect your existing identity management provider to Immuta to use that system for authentication and user entitlement instead. Each of the includes a set of configuration options that enable Immuta to communicate with the IAM system and map the users, permissions, groups, and attributes into Immuta.

    For policies to impact the right users, the user account in Immuta must be mapped to the user account in Databricks Unity Catalog. You can ensure these accounts are mapped correctly in the following ways:

    • : If usernames in Databricks Unity Catalog align with usernames in the external IAM and those accounts align with an IAM attribute, you can enter that IAM attribute on the app settings page to automatically map user IDs in Immuta to Databricks Unity Catalog.

    • : You can manually map user IDs for individual users.

    For guidance on connecting your IAM to Immuta, see the .

    The Databricks group configured as the policy exemption group in Immuta will be exempt from Immuta data policy enforcement. This account-level group is created and managed in Databricks, not in Immuta. This group does not need to be assigned to a Databricks workspace.

    If you have service or system accounts that need to be exempt from masking and row-level policy enforcement, add them to an account-level group in Databricks and include this group name in the Databricks Unity Catalog configuration in Immuta. Then, group members will be excluded from having data policies applied to them when they query Immuta-protected tables in Databricks.

    Typically, service or system accounts that perform the following actions are added to an exemption group in Databricks:

    • Automated queries

    • ETL

    • Report generation

    If you have multiple groups that must be exempt from data policies, add each group to a single group in Databricks that you then set as the policy exemption group in Immuta.

    The service principal used to register data sources in Immuta will be automatically added to the exemption group for the Databricks securables it registers. Consequently, accounts added to the exemption group and used to register data sources in Immuta should be limited to service accounts.

    You can enable tag ingestion to allow Immuta to ingest Databricks Unity Catalog table and column tags so that you can use them in Immuta policies to enforce access controls. When you enable this feature, Immuta uses the credentials and connection information from the Databricks Unity Catalog integration to pull tags from Databricks and apply them to data sources as they are registered in Immuta. If Databricks data sources preexist the Databricks Unity Catalog tag ingestion enablement, those data sources will automatically sync to the catalog and tags will apply.

    Immuta checks for changes to tags in Databricks and syncs Immuta data sources to those changes every hour by default. Immuta's tag ingestion process has a delta logic in order to establish all resources that have had a tag or description change inside Databricks Unity Catalog within a given timeframe to reduce excessive processing time and reduce compute cost.

    Once external tags are applied to Databricks data sources, those tags can be used to create and .

    To enable Databricks Unity Catalog tag ingestion, see the .

    After making changes to tags in Databricks, you can so that the changes immediately apply to the data sources in Immuta. Otherwise, tag changes will automatically sync within a one hour timeframe. Please note that you may see this timeframe being exceeded in cases where Immuta has to process a lot of tag changes.

    When syncing data sources to Databricks Unity Catalog tags, Immuta pulls the following information:

    • Table tags: These tags apply to the table and appear on the data source details tab. Databricks tags' key and value pairs are reflected in Immuta as a hierarchy with each level separated by a . delimiter. For example, the Databricks Unity Catalog tag Location: US would be represented as Location.US in Immuta.

    • Column tags: These tags are applied to data source columns and appear on the columns listed for the data source. Databricks tags' key and value pairs are reflected in Immuta as a hierarchy with each level separated by a . delimiter. For example, the Databricks Unity Catalog tag Location: US

    • Only tags that apply to Databricks data sources in Immuta are available to build policies in Immuta. Immuta will not pull tags in from Databricks Unity Catalog unless those tags apply to registered data sources.

    • Cost implications: Tag ingestion in Databricks Unity Catalog requires compute resources. Therefore, having many Databricks data sources or frequently manually syncing data sources to Databricks Unity Catalog may incur additional costs.

    • Databricks Unity Catalog tag ingestion only supports tenants with fewer than 10,000 data sources registered.

    • Direct group memberships: A principal can be a member of up to 1,500 groups.

    • Unity Catalog privileges per object: Databricks limits privileges to 4,000 privileges for parent objects and 1,000 privileges for non-parent objects.

    • Groups per account: Databricks has a limit of 250,000 groups for Databricks customers using Account SCIM 2.1. All other Databricks environments are subject to a 5,000 group limit.

    • Row access policies with more than 1023 columns are unsupported. This is an underlying limitation of UDFs in Databricks. Immuta will only create row access policies with the minimum number of referenced columns. This limit will therefore apply to the number of columns referenced in the policy and not the total number in the table.

    If a registered data source is owned by a Databricks group at the table level, then the Unity Catalog integration cannot apply data masking policies to that table in Unity Catalog.

    Therefore, set all table-level ownership on your Unity Catalog data sources to an individual user or service principal instead of a Databricks group. Catalogs and schemas can still be owned by a Databricks group, as ownership at that level doesn't interfere with the integration.

    The following features are currently unsupported:

    • Immuta project workspaces

    • Multiple IAMs on a single cluster

    • Row filters and column masking policies on the following object types:

      • Functions

    Users who are no longer entitled to access the data source are removed from the group, causing them to lose access to the securable object.

  • Manual subscription of an Immuta group: The group name comprises the Immuta external ID, the connectionkey, and the Immuta group name.

    • Naming convention: IMMUTA_<Immuta external ID>_<connectionKey>_MANUAL_<group name>

    • Example: IMMUTA_123456789_UnityCatalogConnection_MANUAL_Research

  • is enforced by applying column-mask SQL UDFs to protected columns.
  • A Databricks user who is subscribed to the data source in Immuta queries the corresponding table directly in Databricks and the SQL UDFs are evaluated during query execution, ensuring that only authorized rows and unmasked column values are returned.

  • This privilege allows the setup user to create an Immuta-owned catalog and tables.

    Metastore admin

    Setup user

    This privilege is required only if enabling query audit, which requires granting access to system tables to the Immuta service principal. To grant access, a user that is both a metastore admin and an account admin must grant USE and SELECT permissions on the system schemas to the service principal. See for more details.

    Workspace admin

    Immuta service principal

    This privilege allows Immuta to create and manage Databricks groups to enforce access controls. Immuta-managed groups are created at the account level and not assigned to any particular workspace.

    • USE CATALOG and MANAGE on all catalogs containing securables registered as Immuta data sources

    • USE SCHEMA on all schemas containing securables registered as Immuta data sources

    Immuta service principal

    These privileges allow the service principal to ingest catalogs and determine if they have specific workspace-catalog binding behavior defined. These privileges also allow the service principal to apply row filters and column masks on the securable.

    MODIFY and SELECT on all securables registered as Immuta data sources

    Immuta service principal

    These privileges allow the service principal to apply row filters and column masks on the securable. Additionally, they are required for to run on the securable.

    OWNER on the Immuta catalog

    Immuta service principal

    The Immuta service principal must own the catalog Immuta creates during setup that stores the Immuta policy information. The Immuta setup script grants ownership of this catalog to the Immuta service principal when you configure the integration.

    • USE CATALOG on the system catalog

    • USE SCHEMA on the system.access and system.query schemas

    Immuta service principal

    These privileges allow Immuta to audit user queries in Databricks Unity Catalog.

    databricks_pii_access group

    Immuta service principal

    This membership allows Immuta to see the query text for Databricks Unity Catalog query audit.

    • USE CATALOG on the system catalog

    • USE SCHEMA on the system.access schema

    • SELECT

    Immuta service principal

    These privileges allow Immuta to ingest and apply Databricks Unity Catalog tags to Immuta data sources.

    Subscription policy created, updated, or deleted:
    Immuta provisions access in these scenarios by creating and managing Databricks groups and granting or revoking users from those groups.
    • User subscribed to a data source by an automatic subscription policy: Immuta creates a group for the affected users (if a group for them does not already exist) and grants Databricks privileges on the data object to that group.

    • Automatic subscription policy applied to or updated on a data source: Immuta calculates the users and data sources affected by the policy change and grants or revokes privileges on the Databricks Unity Catalog object by adding or removing users from the Immuta-created group in Databricks.

    • Subscription policy deleted: Immuta calculates the users and Databricks groups affected by the policy and revokes privileges on the Databricks Unity Catalog object by removing users from the Immuta-created group in Databricks. If there are no longer any members of an Immuta-created group in Databricks, that group is deleted by Immuta.

  • User manually added to or removed from a data source: Immuta provisions access in these scenarios by granting or revoking Databricks access to the securable object directly from the user.

    • User added to a data source by a data owner: Immuta grants Databricks privileges on the data object directly to that user.

    • User removed from a data source: If the user was previously subscribed to the data source through an automatic subscription policy, Immuta removes the user from the Immuta-created group in Databricks. If the user was previously manually added to the data source by a data owner, Immuta revokes the Databricks privileges from the user.

  • ✅

    ❌

    ✅

    Materialized view

    ✅

    ✅

    ✅

    Metric views

    ✅

    ❌

    ✅

    Streaming table

    ✅

    ✅

    ✅

    External table

    ✅

    ✅

    ✅

    Foreign table

    ✅

    ✅

    ✅

    Volumes (external and managed)

    ✅

    ❌

    ✅

    Models

    ✅

    ❌

    ✅

    Functions

    ✅

    ❌

    ✅

    Delta Shares

    ✅

    Supported with caveats

    ✅

    Custom masking

  • Hashing

  • Null (including on ARRAY, MAP, and STRUCT type columns)

  • Regex: You must use the global regex flag (g) when creating a regex masking policy in this integration. You cannot use the case insensitive regex flag (i) when creating a regex masking policy in this integration. See the limitations section for examples.

  • Rounding (date and numeric rounding)

  • Row-level policies

    • Matching (only show rows where)

      • Custom WHERE

      • Never

      • Where user

      • Where value in column

    • Minimization

    • Time-based restrictions

  • would be represented as
    Location.US
    in Immuta.
  • Table comments field: This content appears as the data source description on the data source details tab.

  • Column comments field: This content appears as column descriptions on the columns tab.

  • If you disable table grants, Immuta revokes the grants. Therefore, if users had access to a table before enabling Immuta, they’ll lose access.

  • If multiple Immuta tenants are connected to your Databricks environment, you must create a separate Immuta catalog for each of those tenants during configuration. Having multiple Immuta tenants use the same Immuta catalog causes failures in policy enforcement.

  • You must use the global regex flag (g) when creating a regex masking policy in this integration, and you cannot use the case insensitive regex flag (i) when creating a regex masking policy in this integration. See the examples below for guidance:

    • regex with a global flag (supported): /^ssn|social ?security$/g

    • regex without a global flag (unsupported): /^ssn|social ?security$/

    • regex with a case insensitive flag (unsupported): /^ssn|social ?security$/gi

    • regex without a case insensitive flag (supported): /^ssn|social ?security$/g

  • Models

  • Views

  • Volumes

  • Mixing masking policies on the same column

  • R and Scala cluster support

  • Scratch paths

  • User impersonation

  • Policy enforcement on raw Spark reads

  • Python UDFs for advanced masking functions

  • Direct file-to-SQL reads

  • Data policies (except for masking with NULL) on ARRAY, MAP, or STRUCT type columns

  • Shallow clones

  • Account admin

    Setup user

    This privilege allows the setup user to grant the Immuta service principal the necessary permissions to orchestrate Unity Catalog access controls and maintain state between Immuta and Databricks Unity Catalog.

    CREATE CATALOG on the Unity Catalog metastore

    Table

    ✅

    ✅

    ✅

    Open access with no bindings

    ✅

    Read-only isolated access

    ❌

    Read and write isolated access

    Applying policies

    Subscription policies

    Group naming convention

    Data policies

    Databricks Unity Catalog privileges granted by Immuta

    Required Databricks Unity Catalog privileges

    Maintaining state with Databricks Unity Catalog

    Supported object types

    Workspace-restricted catalogs

    Policy support with hive_metastore

    Supported policies

    Security and compliance

    Authentication methods

    User registration and ID mapping

    Policy exemption group

    Tag ingestion

    Private preview: This feature is only available to select accounts. Contact your Immuta representative to enable this feature.

    Access requirements for Databricks Unity Catalog tag ingestion (delta logic)

    Since the delta logic leverages the system.access.audit table in Databricks, Immuta must have, at minimum, the following access:

    • USE CATALOG on the system catalog

    • USE SCHEMA on the system.access schema

    • SELECT on the following system table:

      • system.access.audit

    Note that without these permissions, Immuta will not be able to process any tag changes post the initial onboarding of data sources.

    Syncing tag changes

    Limitations

    Limitations and known issues

    Azure Databricks Unity Catalog limitation

    Feature limitations

    required privileges
    Databricks objects
    object syncs
    identification
    Connections reference guide
    Register a Databricks Unity Catalog connection guide
    subscription policies
    data policies
    Protecting data page
    creates or changes a policy
    user's attributes change
    Data policies reference guide
    Subscription policy access types page
    a binding set to restrict workspace access to certain catalogs in Databricks Unity Catalog
    Databricks metastore magic
    Databricks Spark integration
    Subscription policies
    Select masking policies
    requirements
    Client Credentials Flow
    Databricks OAuth machine-to-machine authentication
    Databricks OAuth machine-to-machine (M2M) authentication page
    supported IAM protocols
    Automatically
    Manually
    how-to guide for your protocol
    subscription
    data policies
    Register a Databricks Unity Catalog connection page
    manually sync the catalog

    Setup user

    View

    ✅

    Amazon S3

    Configure the Amazon S3 integration and learn about how the integration works to apply object-level access controls

    Getting started

    Immuta's Amazon S3 integration allows users to apply subscription policies to data in S3 to restrict what prefixes, buckets, or objects users can access. To enforce access controls on this data, Immuta creates S3 grants that are administered by S3 Access Grants, an AWS feature that defines access permissions to data in S3.

    Requirements

    • No location is registered in your AWS Access Grants instance before configuring the integration in Immuta.

    • Enable AWS IAM Identity Center (IDC) (recommended): IDC is the best approach for user provisioning because it treats users as users, not users as roles. Consequently, access controls are enforced for the querying user, nothing more. This approach eliminates over-provisioning and permits granular access control. Furthermore, IDC uses trusted identity propagation, meaning AWS propagates a user's identity wherever that user may operate within the AWS ecosystem. As a result, a user's identity always remains known and consistent as they navigate across AWS services, which is a key requirement for organizations to properly govern that user.

      Enabling IDC does not impact any existing access controls; it is additive. Immuta will manage the GRANTs for you using IDC if it is enabled and configured in Immuta. See the for instructions on mapping users from AWS IDC to user accounts in Immuta.

    • APPLICATION_ADMIN Immuta permission to configure the integration

    • CREATE_S3_DATASOURCE Immuta permission to register S3 prefixes

    • There are two AWS roles that you will set up in AWS before configuring the integration in Immuta:

    . AWS supports one Access Grants instance per region per AWS account.

    1. Create a permissions policy with the following permissions. You will attach this permissions policy to your location IAM role once created.

      If you use server-side encryption with AWS Key Management Service (AWS KMS) keys to encrypt your data, the following permissions are required for the IAM role in the policy. If you do not use this feature, do not include these permissions in your IAM policy:

      • kms:Decrypt

      • kms:GenerateDataKey

    1. Create a permissions policy with the permissions in the sample policy below.

      Replace <location_role_arn> and <access_grants_instance_arn> in the example below with the ARNs of the location IAM role you created and your Access Grants instance, respectively.

      The Access Grants instance resource ARN should be scoped to apply to any future locations that will be created under this Access Grants instance. For example, "Resource": "arn:aws:s3:us-east-2:6********499:access-grants/default*" ensures that the role would have permissions for both of these locations:

      1. arn:aws:s3:us-east-2:6********499:access-grants/default/newlocation1

    A sample trust policy for this role is provided in the next section.

    Once you begin configuring the integration in Immuta, you will add this role to your integration configuration so that Immuta can authenticate with AWS and set up the integration. In a step in the next section, you will return to AWS to edit the trust policy for this role and add the AWS account Immuta provided and the external ID displayed in the Immuta console.

    1. In Immuta, click the App Settings icon in the navigation menu and click the Integrations tab.

    2. Click + Add Integration.

    3. Select Amazon S3 from the dropdown menu and click Continue Configuration.

    4. Complete the connection details fields, where

    You can edit the following settings for an existing Amazon S3 integration on the app settings page:

    • friendly name

    • authentication type and values (access key, secret, and role)

    To edit settings for an existing integration via the API, see the .

    1. Follow the to register prefixes in Immuta.

    To create an S3 data source using the API, see the .

    Requirements: USER_ADMIN Immuta permission and either the GOVERNANCE or CREATE_S3_DATASOURCE Immuta permission

    1. in Immuta to enforce access controls.

    2. Map AWS IAM principals to each Immuta user to ensure Immuta properly enforces policies:

      1. Click Identities in the navigation menu and select Users.

      2. Navigate to the user's page and click the

    Requirement: User must be subscribed to the data source in Immuta

    1. . If you're accessing S3 data through one of the supported (such as Amazon EMR on EC2), that application will make this request on your behalf, so you can skip this step.

    2. .

    Immuta's Amazon S3 integration allows users to apply to data in S3 to restrict what prefixes, buckets, or objects users can access. To enforce access controls on this data, Immuta creates S3 grants that are administered by S3 Access Grants, an AWS feature that defines access permissions to data in S3.

    With this integration, users can avoid

    • hand-writing AWS IAM policies

    • managing AWS IAM role limits

    • manually tracking what user or role has access to what files in AWS S3 and verifying those are consistent with intent

    To enforce controls on S3 data, Immuta interacts with several S3 Access Grants components:

    • Access Grants instance: An Access Grants instance is a logical container for individual grants that specify who can access what level of data in S3 in your AWS account and region. AWS supports one Access Grants instance per region per AWS account.

    • Location: A location specifies what data the Access Grants instance can grant access to. For example, registering a location with a scope of s3:// allows Access Grants to manage access to all S3 buckets in that AWS account and region, whereas setting the bucket s3://research-data as the scope limits Access Grants to managing access to that single bucket for that location. When you configure the S3 integration in Immuta, you specify a location's scope and IAM assumed role, and Immuta registers the location in your Access Grants instance and associates it with the provided IAM role for you. Each S3 integration you configure in Immuta is associated with one location, and Immuta manages all grants in that location. Therefore, grants cannot be manually created by users in an Access Grants instance location that Immuta has registered and manages. During data source registration, this location scope is prepended to the data source prefixes to build the final path used to grant or revoke access to that data in S3. For example, a location scope of

    The diagram below illustrates how these S3 Access Grants components interact.

    For more details about these Access Grants concepts, see the .

    After an administrator creates an Access Grants instance and an assumed IAM role in their AWS account, an application administrator configures the Amazon S3 integration in Immuta. During configuration, the administrator provides the following connection information so that Immuta can create and register a location in that Access Grants instance:

    • AWS account ID and region

    • ARN for the existing Access Grants instance

    • ARN for the assumed IAM role

    When Immuta registers this location, it associates the assumed IAM role with the location. This allows the IAM role to create temporary credentials with access scoped to a particular S3 prefix, bucket, or object in the location. The IAM role you create for this location must have all the object- and bucket-level permissions listed in the on all buckets and objects in the location; if it is missing permissions, the IAM role will not be able to grant those missing permissions to users or applications requesting temporary credentials.

    In the example below, an application administrator registers the following location prefix and IAM role for their Access Grants instance in AWS account 123456:

    • Location path: s3://. This path allows a single Amazon S3 integration to manage all objects in S3 in that AWS account and region. Data owners can scope down access further when registering specific S3 prefixes and applying policies.

    • Location IAM role: The arn:aws:iam::123456:role/access-grants-role IAM role will be used to vend temporary credentials to users and applications.

    Immuta registers this location and associated IAM role in the user's Access Grants instance:

    After the S3 integration is configured, a data owner can register S3 prefixes and buckets that are in the configured Access Grants location path to enforce access controls on resources. Immuta stores the connection information for the prefix so that the metadata can be used to create and enforce subscription policies on S3 data.

    A data owner or governor can apply a subscription policy to a registered prefix, bucket, or object to control who can access objects beginning with that prefix or in that bucket after it is registered in Immuta. Once a subscription policy is created and Immuta users are subscribed to the prefix, bucket, or object, Immuta calls the Access Grants API to create a grant for each subscribed user, specifying the following parameters in the payload so that Access Grants can create and store a grant for each user:

    • Access Grants location

    • READ access

    • User or role principle

    • Registered prefix, bucket, or object

    In the example below, a data owner registers the s3://research-data/* bucket, and Immuta stores the connection information in the Immuta metadata database. Once the user, Taylor, is subscribed to s3://research-data/*, Immuta calls the Access Grants API to create a grant for that user to allow them to read and write S3 data in that bucket:

    The definitions for each status and the state of configured data platform integrations is available in the .

    To access S3 data registered in Immuta, users must be subscribed to the prefix, bucket, or object in Immuta, and their principals must be . Once users are subscribed, they request temporary credentials from S3 Access Grants. Access Grants looks up the grant ID associated with the requester. If no matching grant exists, they receive an access denied error. If one exists, Access Grants assumes the IAM role associated with the location and requests temporary credentials that are scoped to the prefix, bucket, or object and permissions specified by the individual grant. Access Grants vends the credentials to the requester, who uses those temporary credentials to access the data in S3.

    In the example below, Taylor requests temporary credentials from S3 Access Grants. Access Grants looks up the grant ID (1) for that user, assumes the arn:aws:iam::123456:role/access-grants-role IAM role for the location, and vends temporary credentials to Taylor, who then uses the credentials to access the research-data bucket in S3:

    Note that when accessing data through S3 Access Grants, the user or application interacts directly with the Access Grants API to request temporary credentials; Immuta does not act in this process at all. See the diagram below for an illustration of the process for accessing data through S3 Access Grants.

    AWS services that support S3 Access Grants will request temporary credentials for users automatically. If users are not using a service that supports S3 Access Grants, they must have the to to request temporary credentials to access data through the access grant.

    For a list of AWS services that support S3 Access Grants, see the .

    Immuta's S3 integration allows data owners and governors to apply object-level access controls on data in S3 through subscription policies. When a user is subscribed to a registered prefix, bucket, or object, Immuta calls the Access Grants API to create an individual grant that narrows the scope of access within the location to that registered prefix, bucket, or object. See the diagram below for a visualization of this process.

    When a user's entitlements change or a subscription policy is added to, updated, or deleted from a prefix, Immuta performs one of the following processes for each user subscribed to the registered prefix:

    • User added to the prefix: Immuta specifies a permission (READ or READWRITE) for each user and uses the Access Grants API to create an individual grant for each user.

    • User updated: Immuta deletes the current grant ID and creates a new one using the Access Grants API.

    • User deleted: Immuta deletes the grant ID using the Access Grants API.

    Immuta offers two to manage read and write access to data in S3:

    • Read access policies manage who can get objects from S3.

    • Write access policies manage who can modify data in S3.

    Data policies, which provide more granular controls by redacting or masking values in a table, are not supported for S3.

    Data owners can register an S3 prefix at any level in the S3 path by . During this process, Immuta stores the connection information for use in .

    Each prefix added in the data registration workflow is created as a single Immuta data source, and a subscription policy added to a data source applies to any objects in that bucket or beginning with that prefix:

    Therefore, data owners should register prefixes or buckets at the lowest level of access control they need for that data. Using the example above, if the data owner needed to allow different users to access s3://yellow-bucket/research-data/* than those who should access s3://yellow-bucket/analyst-data/*, the data owner must register the research-data/* and analyst-data/* prefixes separately and then apply a subscription policy to those prefixes:

    When an S3 data source is deleted, Immuta deletes all the grants associated with that prefix, bucket, or object in that location.

    Access can be managed in AWS using IAM users, roles, or Identity Center (IDC). Immuta for user provisioning in the S3 integration.

    However, if you manage access in AWS through IAM roles instead of users, user provisioning in Immuta must be done using IAM role principals. This means that if users share IAM roles, you could end up in a situation where you over-provision access to everyone in the IAM role.

    See the guidelines below for the best practices to avoid this behavior if you currently use IAM roles to manage access.

    1. Enable (recommended): IDC is the best approach for user provisioning because it treats users as users, not users as roles. Consequently, access controls are enforced for the querying user, nothing more. This approach eliminates over-provisioning and permits granular access control. Furthermore, IDC uses trusted identity propagation, meaning AWS propagates a user's identity wherever that user may operate within the AWS ecosystem. As a result, a user's identity always remains known and consistent as they navigate across AWS services, which is a key requirement for organizations to properly govern that user.

      Enabling IDC does not impact any existing access controls; it is additive. Immuta will manage the GRANTs for you using IDC if it is enabled and configured in Immuta. See the for instructions on mapping users from AWS IDC to user accounts in Immuta.

    2. Create an IAM role per user: If you do not have IDC enabled, create an IAM role per user that is unique to that user and assign that IAM role to each corresponding user in Immuta. Ensure that the IAM role cannot be shared with other users.

    Immuta supports mapping an Immuta user to AWS in one of the following ways:

    • : Only a single Immuta user can be mapped to an IAM role. This restriction prohibits enforcing policies on AWS users who could assume that role. Therefore, if using role principals, create a new user in Immuta that represents the role so that the role then has the permissions applied specifically to it.

    See the for instructions on mapping principals to user accounts in Immuta.

    The Amazon S3 integration will not interfere with existing legacy S3 integrations, and multiple S3 integrations can exist in a single Immuta tenant.

    AWS services that support S3 Access Grants will request temporary credentials for users automatically. If users are not using a service that supports S3 Access Grants, they must have the to to request temporary credentials to access data through the access grant.

    For a list of AWS services that support S3 Access Grants, see the .

    • Immuta supports up to 500 prefixes (data sources) and up to 20 Immuta users that are mapped to S3 identities principals.

    • S3 Access Grants allows 100,000 grants per region per account. Thus, if you have 5 Immuta users with access to 20,000 registered prefixes, you would reach this limit. for details.

    • The following Immuta features are not supported:

      • Audit

    SELECT on the following system tables:
    • system.access.table_lineage

    • system.access.column_lineage

    • system.access.audit

    • system.query.history

    on the following system table:
    • system.access.audit

    Manage privileges in Unity Catalog
    identification

    Location IAM role: The S3 Access Grants service assumes this role to vend credentials to the querying user. Permissions required for this IAM location role are provided in the Set up S3 Access Grants instance and IAM roles section.

  • Authentication IAM role (or user): Immuta uses this role to authenticate with AWS, set up the integration, and issue grants. This entity must

    • have ownership of the buckets Immuta will enforce policies on

    • have the necessary permissions to create locations and issue grants. Permissions required for this IAM authentication role are provided in the Set up S3 Access Grants instance and IAM roles section.

  • Replace <bucket_arn> in the example below with the ARN of the bucket scope that contains data you want to grant access to. If you plan to use write access policies, contact your Immuta representative to enable this feature. Otherwise, ObjectLevelWritePermissions can be omitted from your IAM policy. Note: The resource for object-level permissions must end with a wildcard so that Immuta can grant access to objects inside that prefix.

  • Create an AWS IAM role and select Custom trust policy as the trusted entity type.

  • Edit the trust policy to give the S3 Access Grants service principal access to this role in the resource policy file.

    The trust policy for this role should include at least the permissions provided in the example below, but might need additional permissions depending on other local setup factors.

    {
      "Version": "2012-10-17",
        "Statement": [
        {
          "Sid": "Stmt1234567891011",
          "Effect": "Allow",
          "Principal": {
            "Service":"access-grants.s3.amazonaws.com"
          },
          "Action": [
            "sts:AssumeRole", 
            "sts:SetSourceIdentity"
          ]
        }
      ]
    }           
  • Attach the permissions policy you created in the previous step to this IAM role to grant the permissions to the role. Once you begin configuring the integration in Immuta, you will add this role to your integration configuration so that Immuta can register this role with your Access Grants location.

  • arn:aws:s3:us-east-2:6********499:access-grants/default/newlocation2

  • If you use AWS IAM Identity Center, associate your IAM Identity Center instance with your S3 Access Grants instance. Then add the permissions listed in the sample policy below to your IAM authentication policy.

    Copy the JSON below and replace the following bracketed placeholder values with your own. For details about the actions and resource values, see the IAM Identity Center API reference documentation.

    • <iam_identity_center_instance_arn>: The ARN of the instance of IAM Identity Center (InstanceArn) that is configured with the application.

    • <iam_identity_center_application_arn_for_s3_access_grants>: The ARN of the S3 Access Grants instance (ApplicationArn) configured with IAM Identity Center.

    • <aws_account>: Your AWS account ID.

    • <identity_store_id>: The globally that is connected to the Identity Center instance. This value is generated when a new identity store is created.

  • Create an AWS IAM role (recommended) and select AWS account as the trusted entity type.

  • Attach the permissions policy you created in the previous step(s) to the authentication IAM role to grant the permissions to the role.

  • Immuta will assume this authentication IAM role from Immuta's AWS account (475806706894) in order to perform operations in your AWS account. Add that account to the role's trust policy, then contact your Immuta representative with the role ARN so Immuta can update the Immuta AWS configuration to allow Immuta to assume this role.

    • Friendly Name is a name for the integration that is unique across all Amazon S3 integrations configured in Immuta.

    • AWS Account ID is the ID of your AWS account.

    • AWS Region is the AWS region to use.

    • S3 Access Grants Location IAM Role ARN is the role the S3 Access Grants service assumes to vend credentials to the grantee. When a grantee accesses S3 data, the Access Grants service attaches session policies and assumes this role in order to vend credentials scoped to a prefix or bucket to the grantee. This role needs full access to all paths under the S3 location prefix.

    • S3 Access Grants S3 Location Scope is the base S3 location that Immuta will use for this connection when registering S3 prefixes. This path must be unique across all S3 integrations configured in Immuta. During data source registration, this prefix is prepended to the data source prefixes to build the final path used to grant or revoke access to that data in S3. For example, a location prefix of s3://research-data would be prepended to the data source prefix /demographics to generate a final path of s3://research-data/demographics.

  • Select your authentication method:

    • Access using AWS IAM role (recommended): Immuta will assume this IAM role from Immuta's AWS account in order to perform operations in your AWS account. You should have already contacted your Immuta representative so that they could update the Immuta AWS configuration to allow Immuta to assume this role. If you have not contacted your Immuta representative yet, please follow the instructions in the section above before completing these steps:

      1. Enter the role ARN in the AWS IAM Role field. Immuta will assume this role when interacting with AWS.

      2. Set the external ID provided in a condition on the trust relationship for the cross-account IAM role specified above. See the for guidance. An example trust policy is provided below. Replace the values in placeholder brackets with your own:

    • Access using access key and secret access key: Provide your AWS Access Key ID and AWS Secret Access Key. The credentials you provide should have the included in the sample permissions policy for the authentication role (or user).

  • Click Verify Credentials.

  • Click Next to review and confirm your connection information, and then click Complete Setup.

  • more actions
    icon next to their username.
  • Select Change S3 User or AWS IAM Role from the dropdown menu.

  • Use the dropdown menu to select the User Type. Then complete the S3 field. User and role names are case-sensitive. See the AWS documentation for details.

    • AWS IAM role principals: Only a single Immuta user can be mapped to an IAM role. This restriction prohibits enforcing policies on AWS users who could assume that role. Therefore, if using role principals, create a new user in Immuta that represents the role so that the role then has the permissions applied specifically to it.

    • AWS IAM user principals

    • AWS Identity Center user IDs: You must use the numeric User ID value found in AWS IAM Identity Center, not the user's email address. Ensure that you have added the content to your IAM policy JSON as outlined in the above to allow Immuta to use AWS Identity Center.

    • Unset (fallback to Immuta username): When selecting this option, the S3 username is assumed to be the same as the Immuta username.

  • Click Save.

  • See the Mapping IAM principals in Immuta section for details about supported principals.

    s3://research-data
    would be prepended to the data source prefix
    /demographics
    to generate a final path of
    s3://research-data/demographics
    .
  • Individual grants: Individual permission grants in S3 Access Grants specify the identity that can access the data, the access level, and the location of the S3 data. Immuta creates a grant for each user subscribed to a prefix, bucket, or object by interacting with the Access Grants API. Each grant has its own ID and gives the user or role principle access to the data.

  • IAM assumed role: This is an IAM role you create in S3 that has full access to all prefixes, buckets, and objects in the Access Grants location registered by Immuta. This IAM role is used to vend temporary credentials to users or applications. When a grantee requests temporary credentials, the S3 Access Grants service assumes this role to vend credentials scoped to the prefix, bucket, or object specified in the grant to the grantee. The grantee then uses these credentials to access S3 data. When configuring the integration in Immuta, you specify this role, and then Immuta associates this role with the registered location in the Access Grants instance.

  • Temporary credentials: These just-in-time access credentials provide access to a prefix, bucket, or object with a permission level of READ or READWRITE in S3. When a user or application requests temporary credentials to access S3 data, the S3 Access Grants instance evaluates the request against the grants Immuta has created for that user. If a matching grant exists, S3 Access Grants assumes the IAM role associated with the location of the matching grant and scopes the permissions of the IAM session to the S3 prefix, bucket, or object specified by the grant and vends these temporary credentials to the requester. These credentials have a default timeout of 1 hour, but this duration can be changed by the requester.

  • This approach can be a challenge because there is an
    .
  • Request on behalf of IAM roles (not recommended): Create users in Immuta that map to each of your existing IAM roles. Then, when users request access to data, they request on behalf of the IAM role user rather than themselves.

    This approach is not recommended because everyone in that role will gain access to data when granted access through a policy, and adding future users to that role will also grant access. Furthermore, it requires policy authors and approvers to understand what role should have access to what data.

  • Data policies

  • Impersonation

  • Schema monitoring

  • Tag ingestion

  • users

    Permissions

    Set up S3 Access Grants instance and IAM roles

    S3 Access Grants instance

    Location IAM role

    Authentication IAM role (or user)

    Configure the integration in Immuta

    Editing an integration

    Register S3 data

    Protect data

    Access data

    S3 integration overview

    S3 Access Grants components

    How does the integration work?

    Integration health status

    Accessing S3 data

    Policy enforcement

    Prefix registration

    Deleting registered prefixes

    User provisioning

    Mapping IAM principals in Immuta

    Names are case-sensitive

    The IAM role name and IAM user name are case-sensitive. See the AWS documentation for details.

    Existing S3 integrations

    Supported AWS services

    Limitations

    protect data section
    Follow AWS documentation to create an Access Grants instance using the S3 console, AWS CLI, AWS SDKs, or the REST API
    Configure an Amazon S3 integration API guide
    Create an S3 data source guide
    Recommended: Organize your data sources into domains and assign domain permissions to accountable teams.
    Create and manage an Amazon S3 data source API guide
    Build read or write subscription policies
    Request access to Amazon S3 data through S3 Access Grants
    S3 Access Grants integrations
    Use the temporary credentials you received in the previous step to access the data in S3
    subscription policies
    S3 Access Grants documentation
    set up S3 Access Grants instance section
    response schema of the integrations API
    mapped to their Immuta user accounts
    permissions listed in the AWS documentation
    call the Access Grants API directly themselves
    AWS documentation
    subscription policy access types
    creating an Immuta data source
    subscription policies
    supports all three methods
    AWS IAM Identity Center (IDC)
    protect data section
    AWS IAM Identity Center user IDs
    IAM role principals
    IAM user principals
    protect data section
    permissions listed in the AWS documentation
    call the Access Grants API directly themselves
    AWS documentation
    See AWS documentation
    S3 Access Grants vends temporary credentials to the user, and then the user uses those temporary credentials to directly access data in S3.
    Once a user is subscribed to a data source, Immuta sends user and data source metadata to S3 Access Grants, which then creates and stores an individual grant for that user. S3 Access Grants returns the grant ID to Immuta so that it can store the grant ID.
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ObjectLevelReadPermissions",
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:GetObjectVersion",
            "s3:GetObjectAcl",
            "s3:GetObjectVersionAcl",
            "s3:ListMultipartUploadParts"
          ],
          "Resource": "<bucket_arn>/*"
        },
        {
          "Sid": "ObjectLevelWritePermissions",
          "Effect": "Allow",
          "Action": [
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:PutObjectVersionAcl",
            "s3:DeleteObject",
            "s3:DeleteObjectVersion",
            "s3:AbortMultipartUpload"
          ],
          "Resource": "<bucket_arn>/*"
        },
        {
          "Sid": "BucketLevelReadPermissions",
          "Effect": "Allow",
          "Action": [
            "s3:ListBucket"
          ],
          "Resource": "<bucket_arn>"
        },
        {
          "Sid": "ListAllBuckets",
          "Effect": "Allow",
          "Action": [
            "s3:ListAllMyBuckets"
          ],
          "Resource": "*"
        }
      ]
    }
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "RolePermissions",
                "Effect": "Allow",
                "Action": [
                    "iam:GetRole",
                    "iam:PassRole"
                ],
                "Resource": "<location_role_arn>"
            },
            {
                "Sid": "AccessGrants",
                "Effect": "Allow",
                "Action": [
                    "s3:CreateAccessGrant",
                    "s3:DeleteAccessGrantsLocation",
                    "s3:GetAccessGrantsLocation",
                    "s3:CreateAccessGrantsLocation",
                    "s3:GetAccessGrantsInstance",
                    "s3:GetAccessGrantsInstanceForPrefix",
                    "s3:GetAccessGrantsInstanceResourcePolicy",
                    "s3:ListAccessGrants",
                    "s3:ListAccessGrantsLocations",
                    "s3:ListAccessGrantsInstances",
                    "s3:DeleteAccessGrant",
                    "s3:GetAccessGrant"
                ],
                "Resource": [
                    "<access_grants_instance_arn>"
                ]
            }
        ]
    }
    IAM role max limit of 5,000 per AWS account
    unique identifier for the identity store (IdentityStoreId)
    AWS documentation
    permissions
    Set up S3 Access Grants instance section
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "sso",
          "Effect": "Allow",
          "Action": [
            "sso:DescribeInstance",
            "sso:DescribeApplication",
            "sso-directory:DescribeUsers"
          ],
          "Resource": [
            "<iam_identity_center_instance_arn>",
            "<iam_identity_center_application_arn_for_s3_access_grants>",
            "arn:aws:identitystore:::user/*",
            "arn:aws:identitystore::<aws_account>:identitystore/<identity_store_id>"
          ]
        },
        {
          "Sid": "idc",
          "Effect": "Allow",
          "Action": [
            "identitystore:DescribeUser",
            "identitystore:DescribeGroup"
          ],
          "Resource": [
            "<iam_identity_center_instance_arn>",
            "<iam_identity_center_application_arn_for_s3_access_grants>",
            "arn:aws:identitystore:::user/*",
            "arn:aws:identitystore::<aws_account>:identitystore/<identity_store_id>"
          ]
        }
      ]
    }
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::475806706894:root"
          },
          "Action": "sts:AssumeRole",
          "Condition": {
            "StringEquals": {
              "sts:ExternalId": "<EXTERNAL_ID>"
            }
          }
        }
      ]
    }

    Databricks Unity Catalog Integration with Legacy Connections

    Legacy connections

    The Databricks Unity Catalog integration documentation here does not include details about how the Databricks Unity Catalog integration works with connections. See the .

    Immuta’s integration with Unity Catalog allows you to enforce fine-grained access controls on Unity Catalog securable objects with Immuta policies. Instead of manually creating UDFs or granting access to each table in Databricks, you can author your policies in Immuta and have Immuta manage and orchestrate Unity Catalog access-control policies on your data in Databricks clusters or SQL warehouses:

    • Subscription policies: Immuta subscription policies automatically grant and revoke access to specific Databricks securable objects.

    • Data policies: Immuta data policies enforce row- and column-level security.

    Unity Catalog object model

    Unity Catalog uses the following hierarchy of data objects:

    • Metastore: Created at the account level and is attached to one or more Databricks workspaces. The metastore contains metadata of all the catalogs, schemas, and tables available to query. All clusters on that workspace use the configured metastore and all workspaces that are configured to use a single metastore share those objects.

    • Catalog: Sits on top of schemas (also called databases) and tables to manage permissions across a set of schemas

    • Schema: Organizes tables and views

    • Table-etc: Table (managed or external tables), view, volume, model, and function

    For details about the Unity Catalog object model, see the .

    The Databricks Unity Catalog integration supports

    • managing and accessing data across multiple Databricks workspaces

    • :

      • applying column masks and row filters on specific securable objects

      • applying subscription policies on tables and views

    Databricks Unity Catalog is configured and data is registered through connections, an Immuta feature that allows you to register your data objects in a technology through a single connection to make data registration more scalable for your organization. Instead of registering schema and databases individually, you can register them all at once and allow Immuta to monitor your data platform for changes so that data sources are added and removed automatically to reflect the state of data on your data platform.

    Once the connection is registered in Immuta, Immuta ingests and stores connection metadata in the Immuta metadata database. In the example below, the Immuta application administrator connects the SQL warehouse that contains the marketing, cs, and research tables. Immuta registers these tables as data sources and stores the table metadata in the Immuta metadata database.

    To establish a connection with Databricks and apply controls to securable objects within the metastore, Immuta requires a service principal with privileges to manage all data protected by Immuta. (OAuth M2M) or a personal access token (PAT) can be provided for Immuta to authenticate as the service principal. See the for a list of specific Databricks privileges.

    Immuta uses this service principal to run queries that set up user-defined functions (UDFs) and other data necessary for policy enforcement. Upon enabling the integration, Immuta will create a catalog that contains these schemas:

    • immuta_system: Contains internal Immuta data.

    • immuta_policies_n: Contains policy UDFs.

    When policies require changes to be pushed to Unity Catalog, Immuta updates the internal tables in the immuta_system schema with the updated policy information. If necessary, new UDFs are pushed to replace any out-of-date policies in the immuta_policies_n schemas and any row filters or column masks are updated to point at the new policies. Many of these operations require compute on the configured Databricks cluster or SQL warehouse, so compute must be available for these policies to succeed.

    See the Connections reference guide for details about connections and how to manage them. To configure your Databricks Unity Catalog integration and register data, see the Register a Databricks Unity Catalog connection guide.

    Workspace-catalog binding allows users to leverage Databricks’ catalog isolation mode to limit catalog access to specific Databricks workspaces. The default isolation mode is OPEN, meaning all workspaces can access the catalog (with the exception of the automatically-created ), provided they are in the metastore attached to the catalog. Setting this mode to ISOLATED allows the catalog owner to specify a workspace-catalog binding, which means the owner can dictate which workspaces are authorized to access the catalog. This prevents other workspaces from accessing the specified catalogs. To bind a catalog to a specific workspace in Databricks Unity Catalog, see the .

    Use cases

    Typical use cases for binding a catalog to specific workspaces include

    1. Ensuring users can only access production data from a production workspace environment.

      For example, you may have production data in a prod_catalog, as well as a production workspace you are introducing to your organization. Binding the prod_catalog to the prod_workspace ensures that workspace admins and users can only access prod_catalog from the prod_workspace environment.

    2. Ensuring users can only process sensitive data from a specific workspace

    Additional workspace connections

    Immuta’s Databricks Unity Catalog integration allows users to configure additional workspace connections to support using Databricks' feature. Users can configure additional workspace connections in their Immuta integrations to be consistent with the workspace-catalog bindings that are set up in Databricks. Immuta will use each additional workspace connection to govern the catalog(s) that workspace is bound to in Databricks. If desired, each set of bound catalogs can also be configured to run on its own compute.

    To use this feature, you should first . Once that is configured, you can use Immuta's Integrations API to configure an additional workspace connection. This can be added when you initially set up the integration or by updating your existing integration configuration.

    Limitations

    • Additional workspace connections in Databricks Unity Catalog are not currently supported in Immuta's .

    • Each additional workspace connection must be in the same metastore as the primary workspace used to set up the integration.

    • No two additional workspace connections can be responsible for the same catalog.

    The privileges the Databricks Unity Catalog integration requires align to the least privilege security principle. The table below describes each privilege required in Databricks Unity Catalog for the setup user and the Immuta service principal.

    Databricks Unity Catalog privilege
    User requiring the privilege
    Explanation

    The following user actions spur various processes in the Databricks Unity Catalog integration so that Immuta data remains synchronous with data in Databricks Unity Catalog:

    • Data source created: Immuta registers data source metadata and stores that metadata in the Immuta metadata database.

    • Data source deleted: Immuta deletes the data source metadata from the metadata database and removes subscription policies from that table.

    • User account is mapped to Immuta: When a user account is mapped to Immuta, their metadata is stored in the metadata database.

    Immuta’s Unity Catalog integration applies Databricks table-, row-, and column-level security controls that are enforced natively within Databricks. Immuta's management of these Databricks security controls is automated and ensures that they synchronize with Immuta policy or user entitlement changes.

    • Table-level security: Immuta manages and privileges on Databricks securable objects that have been registered as Immuta data sources. When you register a data source in Immuta, Immuta uses the Unity Catalog API to issue GRANTS or REVOKES against the catalog, schema, or table in Databricks for users registered in Immuta. To provision access, Immuta creates and manages Databricks groups that are granted access to the securable object. Once a user is subscribed to a data source by a subscription policy, Immuta creates a group for the affected users (if one doesn't already exist), grants access to the securable to the group, and then adds users to that group. If a users' access is revoked through a subscription policy change, they are removed from the Immuta-created group in Databricks. Immuta-managed groups are created at the account level and not assigned to any particular workspace.

    • Row-level security: Immuta applies SQL UDFs to restrict access to rows for querying users.

    When Immuta creates Databricks Unity Catalog groups to enforce access controls, the group naming convention differs slightly based on whether access was granted by an automatic subscription policy or the group was manually subscribed to the data source.

    • Automatic subscription of a user or Immuta group: The group name comprises the Immuta external ID, the connectionKey, and the policy hash.

      • Naming convention: IMMUTA_<Immuta external ID>_<connectionKey>_<policy hash>

      • Example: IMMUTA_123456789_UnityCatalogConnection_ce86d2f5f86471f66fcd08741d0eb0f4447a6e73a005094c9da07753a8d630f7

    On securable objects

    If you enable a Databricks Unity Catalog object in Immuta, Immuta will only manage users' access to that data object after a subscription policy grants them access to the data source. Immuta preserves all preexisting grants in Databricks and only revokes user access when explicitly dictated by an Immuta policy.

    Expand the collapsible blocks below to see how Immuta-managed grants and Databricks-managed grants are affected in various scenarios.

    If a user is not registered in Immuta, Immuta will have no effect on that user's access to data in Unity Catalog.

    On schemas and catalogs

    By default, Immuta will revoke Immuta users' USE CATALOG and USE SCHEMA privileges in Unity Catalog for users that do not have access to any of the underlying securables within that catalog/schema. If users have any Immuta-managed or Databricks-managed grants to a securable, Immuta will not revoke that catalog/schema access.

    If you disable this setting, Immuta will only revoke the permissions granted on the securable objects themselves, and users' USE CATALOG and USE SCHEMA permissions will remain even if the user does not have access to any resource in that catalog/schema.

    See the on changing this setting.

    The Unity Catalog integration supports the following policy types:

      • Conditional masking

      • Constant

    The privileges Immuta issues to users when they are subscribed to a data source vary depending on the object type. See an outline of privileges granted by Immuta on the .

    Project-scoped purpose exceptions for Databricks Unity Catalog integrations allow you to apply purpose-based policies to Databricks data sources in a project. As a result, users can only access that data when they are working within that specific project.

    Databricks Unity Catalog views

    If you are using views in Databricks Unity Catalog, one of the following must be true for project-scoped purpose exceptions to apply to the views in Databricks:

    • The view and underlying table are registered as Immuta data sources and added to a project: If a view and its underlying table are both added as Immuta data sources, both of these assets must be added to the project for the project-scoped purpose exception to apply. If a view and underlying table are both added as data sources but the table is not added to an Immuta project, the purpose exception will not apply to the view because Databricks does not support fine-grained access controls on views.

    • Only the underlying table is registered as an Immuta data source and added to a project: If only the underlying table is registered as an Immuta data source but the view is not registered, the purpose exception will apply to both the table and corresponding view in Databricks. Views are the only Databricks object that will have Immuta policies applied to them even if they're not registered as Immuta data sources (as long as their underlying tables are registered).

    This feature allows masked columns to be joined across data sources that belong to the same project. When data sources do not belong to a project, Immuta uses a unique salt per data source for hashing to prevent masked values from being joined. However, once you add Databricks Unity Catalog data sources to a project and enable masked joins, Immuta uses a consistent salt across all the data sources in that project to allow the join.

    For more information about masked joins and enabling them for your project, see the .

    The Databricks group configured as the policy exemption group in Immuta will be exempt from Immuta data policy enforcement. This account-level group is created and managed in Databricks, not in Immuta. This group does not need to be assigned to a Databricks workspace.

    If you have service or system accounts that need to be exempt from masking and row-level policy enforcement, add them to an account-level group in Databricks and include this group name in the Databricks Unity Catalog configuration in Immuta. Then, group members will be excluded from having data policies applied to them when they query Immuta-protected tables in Databricks.

    Typically, service or system accounts that perform the following actions are added to an exemption group in Databricks:

    • Automated queries

    • ETL

    • Report generation

    If you have multiple groups that must be exempt from data policies, add each group to a single group in Databricks that you then set as the policy exemption group in Immuta.

    The service principal used to register data sources in Immuta will be automatically added to the exemption group for the Databricks securables it registers. Consequently, accounts added to the exemption group and used to register data sources in Immuta should be limited to service accounts.

    To configure a policy exemption group, use the groupPattern object when setting up the integration using the connections API.

    When enabling Unity Catalog support in Immuta, the catalog for all Databricks data sources will be updated to point at the default hive_metastore catalog. Internally, Databricks exposes this catalog as a proxy to the workspace-level Hive metastore that schemas and tables were kept in before Unity Catalog. Since this catalog is not a real Unity Catalog catalog, it does not support any Unity Catalog policies. Therefore, Immuta will ignore any data sources in the hive_metastore in any Databricks Unity Catalog integration, and policies will not be applied to tables there.

    However, with you can use hive_metastore and enforce subscription and data policies with the .

    The Databricks Unity Catalog integration supports the following authentication methods to configure the integration and create data sources:

    • Personal access token (PAT): This is the access token for the Immuta service principal. This service principal must have the metastore for the metastore associated with the Databricks workspace. If this token is configured to expire, update this field regularly for the integration to continue to function.

    • OAuth machine-to-machine (M2M): Immuta uses the to integrate with , which allows Immuta to authenticate with Databricks using a client secret. Once Databricks verifies the Immuta service principal’s identity using the client secret, Immuta is granted a temporary OAuth token to perform token-based authentication in subsequent requests. When that token expires (after one hour), Immuta requests a new temporary token. See the for more details.

    The Unity Catalog data object model introduces a 3-tiered namespace, as . Consequently, your Databricks tables registered as data sources in Immuta will reference the catalog, schema (also called a database), and table.

    Object type
    Subscription policy support
    Data policy support
    Request app support

    External data connectors and query-federated tables are preview features in Databricks. See the for details about the support and limitations of these features before registering them as data sources in the Unity Catalog integration.

    Immuta uses Databricks tables from the system catalog to understand the queries users make and present them in the query audit logs. See the for details about the contents of the logs.

    The audit ingest is set when registering the connection and can be scoped to only ingest specific workspaces if needed. The default ingest frequency is every 24 hours, but this can be configured to a different frequency on the Immuta app settings page. Additionally, audit ingestion can be manually requested at any time from the Immuta audit page. When manually requested, it will only search for new queries that were created since the last query that had been audited. The job is run in the background, so the new queries will not be immediately available.

    You can enable tag ingestion to allow Immuta to ingest Databricks Unity Catalog table and column tags so that you can use them in Immuta policies to enforce access controls. When you enable this feature, Immuta uses the credentials and connection information from the Databricks Unity Catalog integration to pull tags from Databricks and apply them to data sources as they are registered in Immuta. If Databricks data sources preexist the Databricks Unity Catalog tag ingestion enablement, those data sources will automatically sync to the catalog and tags will apply.

    Immuta checks for changes to tags in Databricks and syncs Immuta data sources to those changes every hour by default. Immuta's tag ingestion process has a delta logic in order to establish all resources that have had a tag or description change inside Databricks Unity Catalog within a given timeframe to reduce excessive processing time and reduce compute cost.

    Once external tags are applied to Databricks data sources, those tags can be used to create subscription and data policies.

    To enable Databricks Unity Catalog tag ingestion, see the .

    Since the delta logic leverages the system.access.audit table in Databricks, Immuta must have, at minimum, the following access:

    • USE CATALOG on the system catalog

    • USE SCHEMA on the system.access schema

    • SELECT on the following system table:

    For tags to be ingested on foreign catalogs (created via Lakehouse Federation) additional permissions are required:

    • USE SCHEMA on the system.information_schema schema

    • SELECT on the following system tables:

      • system.information_schema.column_tags

    After making changes to tags in Databricks, you can manually sync the catalog so that the changes immediately apply to the data sources in Immuta. Otherwise, tag changes will automatically sync within a one hour timeframe. Please note that you may see this timeframe being exceeded in cases where Immuta has to process a lot of tag changes.

    When syncing data sources to Databricks Unity Catalog tags, Immuta pulls the following information:

    • Table tags: These tags apply to the table and appear on the data source details tab. Databricks tags' key and value pairs are reflected in Immuta as a hierarchy with each level separated by a . delimiter. For example, the Databricks Unity Catalog tag Location: US would be represented as Location.US in Immuta.

    • Column tags: These tags are applied to data source columns and appear on the columns listed for the data source. Databricks tags' key and value pairs are reflected in Immuta as a hierarchy with each level separated by a . delimiter. For example, the Databricks Unity Catalog tag Location: US

    • Only tags that apply to Databricks data sources in Immuta are available to build policies in Immuta. Immuta will not pull tags in from Databricks Unity Catalog unless those tags apply to registered data sources.

    • Cost implications: Tag ingestion in Databricks Unity Catalog requires compute resources. Therefore, having many Databricks data sources or frequently manually syncing data sources to Databricks Unity Catalog may incur additional costs.

    • Databricks Unity Catalog tag ingestion only supports tenants with fewer than 10,000 data sources registered.

    See the for a list of requirements.

    • Direct group memberships: A principal can be a member of up to 1,500 groups.

    • Unity Catalog privileges per object: Databricks limits privileges to 4,000 privileges for parent objects and 1,000 privileges for non-parent objects.

    • Groups per account: Databricks has a limit of 250,000 groups for Databricks customers using Account SCIM 2.1. All other Databricks environments are subject to a 5,000 group limit.

    • Row access policies with more than 1023 columns are unsupported. This is an underlying limitation of UDFs in Databricks. Immuta will only create row access policies with the minimum number of referenced columns. This limit will therefore apply to the number of columns referenced in the policy and not the total number in the table.

    If a registered data source is owned by a Databricks group at the table level, then the Unity Catalog integration cannot apply data masking policies to that table in Unity Catalog.

    Therefore, set all table-level ownership on your Unity Catalog data sources to an individual user or service principal instead of a Databricks group. Catalogs and schemas can still be owned by a Databricks group, as ownership at that level doesn't interfere with the integration.

    The following features are currently unsupported:

    • Immuta project workspaces

    • Multiple IAMs on a single cluster

    • Row filters and column masking policies on the following object types:

      • Functions

    enforcing Unity Catalog access controls, even if Immuta becomes disconnected

  • auditing activity of both Immuta users and non-Immuta users

  • allowing non-Immuta reads and writes

  • using Photon

  • using a proxy server

  • .

    Limiting the environments from which users can access sensitive data helps better secure your organization’s data. Limiting access to one workspace also simplifies any monitoring, auditing, and understanding of which users are accessing specific data. This would entail a similar setup as the example above.

  • Giving users read-only access to production data from a developer workspace.

    This enables your organization to effectively conduct development and testing, while minimizing risk to production data. All user access to this catalog from this workspace can be specified as read-only, ensuring developers can access the data they need for testing without risk of any unwanted updates.

  • This privilege allows the setup user to create an Immuta-owned catalog and tables.

    Metastore admin

    Setup user

    This privilege is required only if enabling query audit, which requires granting access to system tables to the Immuta service principal. To grant access, a user that is both a metastore admin and an account admin must grant USE and SELECT permissions on the system schemas to the service principal. See for more details.

    Workspace admin

    Immuta service principal

    This privilege allows Immuta to create and manage Databricks groups to enforce access controls. Immuta-managed groups are created at the account level and not assigned to any particular workspace.

    • USE CATALOG and MANAGE on all catalogs containing securables registered as Immuta data sources

    • USE SCHEMA on all schemas containing securables registered as Immuta data sources

    Immuta service principal

    These privileges allow the service principal to apply row filters and column masks on the securable.

    MODIFY and SELECT on all securables registered as Immuta data sources

    Immuta service principal

    These privileges allow the service principal to apply row filters and column masks on the securable. Additionally, they are required for identification to run on the securable.

    OWNER on the Immuta catalog

    Immuta service principal

    The Immuta service principal must own the catalog Immuta creates during setup that stores the Immuta policy information. The Immuta setup script grants ownership of this catalog to the Immuta service principal when you configure the integration.

    • USE CATALOG on the system catalog

    • USE SCHEMA on the system.access and system.query schemas

    Immuta service principal

    These privileges allow Immuta to audit user queries in Databricks Unity Catalog.

    databricks_pii_access group

    Immuta service principal

    This membership allows Immuta to see the query text for Databricks Unity Catalog query audit.

    • USE CATALOG on the system catalog

    • USE SCHEMA on the system.access schema

    • SELECT

    Immuta service principal

    These privileges allow Immuta to ingest and apply Databricks Unity Catalog tags to Immuta data sources.

    • USE SCHEMA on the system.information_schema schema

    • SELECT on the following system tables:

      • system.information_schema.column_tags

    Immuta service principal

    These privileges allow Immuta to ingest and apply Databricks Unity Catalog tags to Databricks foreign tables registered as Immuta data sources.

    Subscription policy created, updated, or deleted:
    Immuta provisions access in these scenarios by creating and managing Databricks groups and granting or revoking users from those groups.
    • User subscribed to a data source by an automatic subscription policy: Immuta creates a group for the affected users (if a group for them does not already exist) and grants Databricks privileges on the data object to that group.

    • Automatic subscription policy applied to or updated on a data source: Immuta calculates the users and data sources affected by the policy change and grants or revokes privileges on the Databricks Unity Catalog object by adding or removing users from the Immuta-created group in Databricks.

    • Subscription policy deleted: Immuta calculates the users and Databricks groups affected by the policy and revokes privileges on the Databricks Unity Catalog object by removing users from the Immuta-created group in Databricks. If there are no longer any members of an Immuta-created group in Databricks, that group is deleted by Immuta.

  • User manually added to or removed from a data source: Immuta provisions access in these scenarios by granting or revoking Databricks access to the securable object directly from the user.

    • User added to a data source by a data owner: Immuta grants Databricks privileges on the data object directly to that user.

    • User removed from a data source: If the user was previously subscribed to the data source through an automatic subscription policy, Immuta removes the user from the Immuta-created group in Databricks. If the user was previously manually added to the data source by a data owner, Immuta revokes the Databricks privileges from the user.

  • Column-level security
    : Immuta applies column-mask SQL UDFs to tables for querying users. These column-mask UDFs run for any column that requires masking.
  • Manual subscription of an Immuta group: The group name comprises the Immuta external ID, the connectionkey, and the Immuta group name.

    • Naming convention: IMMUTA_<Immuta external ID>_<connectionKey>_MANUAL_<group name>

    • Example: IMMUTA_123456789_UnityCatalogConnection_MANUAL_Research

  • Custom masking

  • Hashing

  • Null (including on ARRAY, MAP, and STRUCT type columns)

  • Regex: You must use the global regex flag (g) when creating a regex masking policy in this integration. You cannot use the case insensitive regex flag (i) when creating a regex masking policy in this integration. See the limitations section for examples.

  • Rounding (date and numeric rounding)

  • Row-level policies

    • Matching (only show rows where)

      • Custom WHERE

      • Never

      • Where user

      • Where value in column

    • Minimization

    • Time-based restrictions

  • ✅

    ✅

    ✅

    Foreign table (FOREIGN)

    ✅

    ✅

    ✅

    Functions

    ✅

    ❌

    ✅

    Iceberg table (MANAGED or FOREIGN)

    ✅

    ✅

    ✅

    Materialized view (MATERIALIZED_VIEW)

    ✅

    ✅

    ✅

    Models

    ✅

    ❌

    ✅

    Streaming table (STREAMING_TABLE)

    ✅

    ✅

    ✅

    Table (MANAGED)

    ✅

    ✅

    ✅

    View (VIEW)

    ✅

    ❌

    ✅

    Volumes (EXTERNAL and MANAGED)

    ✅

    ❌

    ✅

    • system.access.audit

    system.information_schema.table_tags

  • system.information_schema.tables

  • system.information_schema.columns

  • would be represented as
    Location.US
    in Immuta.
  • Table comments field: This content appears as the data source description on the data source details tab.

  • Column comments field: This content appears as column descriptions on the columns tab.

  • If you disable table grants, Immuta revokes the grants. Therefore, if users had access to a table before enabling Immuta, they’ll lose access.

  • If multiple Immuta tenants are connected to your Databricks environment, you must create a separate Immuta catalog for each of those tenants during configuration. Having multiple Immuta tenants use the same Immuta catalog causes failures in policy enforcement.

  • You must use the global regex flag (g) when creating a regex masking policy in this integration, and you cannot use the case insensitive regex flag (i) when creating a regex masking policy in this integration. See the examples below for guidance:

    • regex with a global flag (supported): /^ssn|social ?security$/g

    • regex without a global flag (unsupported): /^ssn|social ?security$/

    • regex with a case insensitive flag (unsupported): /^ssn|social ?security$/gi

    • regex without a case insensitive flag (supported): /^ssn|social ?security$/g

  • Models

  • Views

  • Volumes

  • Mixing masking policies on the same column

  • R and Scala cluster support

  • Scratch paths

  • User impersonation

  • Policy enforcement on raw Spark reads

  • Python UDFs for advanced masking functions

  • Direct file-to-SQL reads

  • Data policies (except for masking with NULL) on ARRAY, MAP, or STRUCT type columns

  • Shallow clones

  • Account admin

    Setup user

    This privilege allows the setup user to grant the Immuta service principal the necessary permissions to orchestrate Unity Catalog access controls and maintain state between Immuta and Databricks Unity Catalog.

    CREATE CATALOG on the Unity Catalog metastore

    Delta Shares

    ✅

    Supported with caveats

    ✅

    Feature support

    What does Immuta do in my Databricks environment?

    Registering a connection

    Workspace-catalog binding

    This feature is currently only supported by the legacy Databricks Unity Catalog integration.

    Required Databricks Unity Catalog privileges

    Maintaining state with Databricks Unity Catalog

    Group membership delay There can be up to a five-minute delay between when Immuta pushes the group update to Databricks and when the group membership updates are reflected in Databricks.

    Policy enforcement

    Group naming convention

    User permissions Immuta revokes

    Subscription policy applied

    Immuta only manages grants for Immuta users once a subscription policy applies to them. Any grants performed on Databricks objects outside Immuta will not be revoked.

    The table below illustrates how the following policy enforces access controls for 4 different users, some of whom have Databricks-managed grants:

    Allow users to subscribe to the data source if they are a member of group HR

    Immuta-managed grant
    Databricks-managed grant
    Access result

    In this example,

    • User A is granted access to the table by Immuta.

    • User B is granted access to the table by Databricks.

    • User C cannot access the table because they do not meet the conditions of the Immuta policy and they have been not granted access to the table in Databricks outside of Immuta.

    Subscription policy edited

    If a subscription policy is edited, Immuta only affects the Immuta-managed grants on the data object.

    The table below illustrates how editing the following policy enforces access controls for 4 different users, some of whom have Databricks-managed grants:

    Previous policy

    Allow users to subscribe to the data source if they are a member of group HR

    Updated policy

    Allow users to subscribe if they are a member of group Engineers

    Immuta-managed grant
    Databricks-managed grant
    Access result

    In this example,

    • User A is revoked access to the table by Immuta. Because this user was previously granted access to the data source by Immuta, that Immuta-managed grant is revoked.

    • User B is granted access to the table by Databricks and Immuta. The Immuta-managed SELECT grant coexists with their Databricks-managed SELECT grant.

    • User C cannot access the table because they do not meet the conditions of the Immuta policy and they have been not granted access to the table in Databricks outside of Immuta.

    Subscription policy deleted

    If a subscription policy is deleted, users' Immuta grants are revoked for that policy. Users will retain access to the data source if they have Immuta-granted access through another subscription policy that overlaps or if they have a Databricks-managed grant for that data source.

    The table below illustrates how deleting the following Immuta policy affects access for 4 different users, some of whom have Databricks-managed grants:

    Allow users to subscribe to the data source if they are a member of group HR

    Immuta-managed grant
    Databricks-managed grant
    Access result

    In this example,

    • User A is revoked access to the table by Immuta. Because this user was previously granted access to the data source by Immuta, that Immuta-managed grant is revoked when the subscription policy is deleted.

    • User B is granted access to the table by Databricks.

    • User C cannot access the table because they have not been granted access by an Immuta policy and they have been not granted access to the table in Databricks.

    Data source disabled

    If a data source is disabled, users' access reverts to what the Databricks-managed access was previously, before the data object was registered in Immuta.

    The table below illustrates how disabling the data source in Immuta affects access for 4 different users, some of whom have Databricks-managed grants.

    Immuta-managed grant
    Databricks-managed grant
    Access result

    In this example,

    • User A is revoked access to the table by Immuta. The Immuta-managed grant is revoked when the data source is disabled because the state of the grants on this data object reverts to what it was before the data object was registered in Immuta.

    • User B is granted access to the table by Databricks. The Databricks-managed grant remains because the state of the grants on this data object reverts to what it was before the data object was registered in Immuta.

    • User C cannot access the table because they had not been granted access to the table in Databricks.

    Supported policies

    Unity Catalog privileges granted by Immuta

    Project-scoped purpose exceptions for Databricks Unity Catalog

    Masked joins for Databricks Unity Catalog

    Policy exemption group

    Policy support with hive_metastore

    Authentication methods

    Immuta data sources in Unity Catalog

    Supported object types

    External data connectors and query-federated tables

    Query audit

    Access requirements

    For Databricks Unity Catalog audit to work, Immuta must have, at minimum, the following access:

    • USE CATALOG on the system catalog

    • USE SCHEMA on the system.access and system.query schemas

    • SELECT on the following system tables:

      • system.access.table_lineage

      • system.access.column_lineage

    • The Databricks service principal added to the databricks_pii_access group

    Tag ingestion

    Private preview: This feature is only available to select accounts. Contact your Immuta representative to enable this feature.

    Required permissions

    Syncing tag changes

    Limitations

    Configuration requirements

    Unity Catalog caveats

    Azure Databricks Unity Catalog limitation

    Feature limitations

    Databricks Unity Catalog documentation
    enforcing Unity Catalog row-, column-, and table-level access controls on Databricks clusters and SQL warehouses
    Databricks OAuth for service principals
    Databricks Unity Catalog privileges section
    workspace catalog
    Databricks documentation
    workspace-catalog binding
    set up a workspace-catalog binding in your Databricks account
    connections
    REVOKE
    GRANT
    App settings page for instructions
    Subscription policies
    Select masking policies
    Subscription policy access types page
    Projects and purposes guide
    Databricks metastore magic
    Databricks Spark integration
    privileges listed in the permissions section
    Client Credentials Flow
    Databricks OAuth machine-to-machine authentication
    Databricks OAuth machine-to-machine (M2M) authentication page
    outlined above
    Databricks documentation
    Databricks Unity Catalog audit page
    Register a Databricks Unity Catalog connection page
    Register a Databricks Unity Catalog connection guide
    new Databricks Unity Catalog integration reference guide

    Setup user

    External table (EXTERNAL)

    ❌

    User D - HR group

    SELECT

    SELECT

    ✅

    User D is granted access to the table by Immuta and Databricks. The Immuta-managed SELECT grant coexists with their Databricks-managed SELECT grant.

    SELECT

    SELECT

    ✅

    User C

    None

    None

    ❌

    User D - HR group

    Revoked

    Revoked

    ❌

  • User D is revoked access to the table by the change to the Immuta policy. The Immuta-managed SELECT grant (from the previous policy) and the pre-existing Databricks-managed SELECT grant have been revoked because the Immuta policy explicitly dictated that their access should be removed.

  • ❌

    User D - HR group

    None

    None

    ❌

    User D is revoked access to the table by Immuta. Because this user was previously granted access to the data source by Immuta, Immuta took over managing this user's grants on the table, and that Immuta-managed grant is revoked when the subscription policy is deleted.

    ❌

    User D - HR group

    None

    SELECT

    ✅

    User D is granted access to the table by Databricks. The Immuta-managed grant is revoked and the Databricks grant remains when the data source is disabled because the state of the grants on this data object reverts to what it was before the data object was registered in Immuta.

    system.access.audit
  • system.query.history

  • SELECT on the following system tables:
    • system.access.table_lineage

    • system.access.column_lineage

    • system.access.audit

    • system.query.history

    on the following system table:
    • system.access.audit

  • system.information_schema.table_tags

  • system.information_schema.tables

  • system.information_schema.columns

  • User A - HR group

    SELECT

    None

    ✅

    User B - Engineering group

    None

    SELECT

    ✅

    User C

    None

    User A - HR group

    Revoked

    None

    ❌

    User A - HR group

    None

    None

    ❌

    User B - Engineering group

    None

    SELECT

    ✅

    User C

    None

    User A - HR group

    None

    None

    ❌

    User B - Engineering group

    None

    SELECT

    ✅

    User C

    None

    Manage privileges in Unity Catalog

    None

    User B - Engineering group

    None

    None

    Connect Integrations

    Learn how your data platform integrates with Immuta so you can register and manage access controls on your data

    Immuta integrates with your data platforms so you can register your data and effectively manage access controls on that data.

    This section includes guidance for connecting your data platform and keeping it synced with Immuta.

    Immuta doesn't require users to learn a new API or language to access protected data. Instead, Immuta integrates with existing tools and data platforms while remaining invisible to downstream consumers.

    The table below outlines features supported by each of Immuta's data platform integrations.

    Request app
    Subscription policies
    Data policies
    Identification
    Impersonation
    Query audit
    Tag ingestion

    ✅

    ✅

    ✅

    ✅

    ❌

    ❌

    ❌

    ✅

    The table below illustrates the subscription policy access types supported by each integration. If a data platform isn't included in the table, that integration does not support any subscription policies. For more details about read and write access policy support for these data platforms, see the Subscription policy access types reference guide.

    Data platform
    Read access policies
    Write access policies

    ✅

    ✅

    The table below outlines the types of data policies supported for various data platforms. If a data platform isn't included in the table, that integration does not support any data policies.

    For details about each of these policies, see the Data policy types page.

    Amazon Redshift
    Amazon Redshift Spectrum
    Azure Synapse Analytics
    Databricks Spark
    Databricks Unity Catalog
    Google BigQuery view-based
    Google BigQuery viewless
    Snowflake
    Starburst (Trino)
    Teradata

    Identification has varied support for data sources from different technologies based on the identifier type. For details about how identification works in Immuta, see the Data identification page.

    Technology
    Regex
    Dictionary
    Column name regex

    Amazon Redshift

    ✅

    ✅

    ✅

    The table below outlines what information is included in the query audit logs for each integration where query audit is supported.

    Snowflake
    Databricks Spark
    Databricks Unity Catalog
    Starburst (Trino)

    Table and user coverage

    Registered data sources and users

    Registered data sources and users

    All tables and users

    Legend:

    • ✅ This is available and the information is included in audit logs.

    • ❌ This is not available and the information is not included in audit logs.

    Integrations overview

    Subscription policy support matrix

    Data policy support matrix

    Identification support matrix

    Query audit support for platform queries

    ✅

    ✅

    ✅

    ✅

    ❌

    ❌

    ✅

    ✅

    ❌

    ✅

    ❌

    ❌

    ❌

    ✅

    ✅

    ❌

    ✅

    ❌

    ❌

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ❌

    ❌

    ✅

    ✅

    ❌

    ✅

    ❌

    ❌

    ❌

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ❌

    ✅

    ✅

    ✅

    ✅

    ❌

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ❌

    ❌

    ❌

    ✅

    ✅

    ✅

    ❌

    ❌

    ❌

    ❌

    ✅

    ❌

    ❌

    ✅

    ❌

    ❌

    ❌

    ✅

    ❌

    ❌

    ✅

    ❌

    ❌

    ❌

    ✅

    ❌

    ❌

    ✅

    ❌

    ❌

    ❌

    ✅

    ✅

    ❌

    ✅

    ❌

    ❌

    ❌

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ❌

    ❌

    ✅

    ❌

    ❌

    ❌

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ❌

    ✅

    ✅

    ✅

    ✅

    ❌

    ❌

    ❌

    ✅

    ❌ View-based integrations are read-only

    ✅

    ✅

    ✅

    ✅

    ✅

    ❌ View-based integrations are read-only

    ✅

    ✅

    ✅

    ❌ Write access is controlled through and

    ✅

    ✅

    ✅

    ❌ View-based integrations are read-only

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ❌ View-based integrations are read-only

    Cell-level masking

    ❌

    ✅

    ✅

    ✅

    ✅

    ❌

    ❌

    ✅

    ✅

    ❌

    Amazon Redshift Spectrum

    ✅

    ✅

    ✅

    Amazon S3

    ❌

    ❌

    ✅

    AWS Lake Formation

    ❌

    ❌

    ✅

    Azure Synapse Analytics

    ❌

    ❌

    ✅

    Databricks Lakebase

    ❌

    ❌

    ✅

    Databricks Spark

    ✅

    ✅

    ✅

    Databricks Unity Catalog

    ✅

    ✅

    ✅

    Google BigQuery view-based

    ❌

    ❌

    ✅

    Google BigQuery viewless

    ❌

    ❌

    ❌

    MariaDB

    ❌

    ❌

    ✅

    MySQL

    ❌

    ❌

    ✅

    Oracle

    ❌

    ❌

    ✅

    PostgreSQL

    ❌

    ❌

    ✅

    Snowflake

    ✅

    ✅

    ✅

    SQL Server

    ❌

    ❌

    ✅

    Starburst (Trino)

    ✅

    ✅

    ✅

    Teradata

    ❌

    ❌

    ✅

    Registered data sources and users

    Object queried

    ✅

    ✅

    ✅

    ✅

    Columns returned

    ✅

    ❌

    ✅

    ✅

    Rows returned

    ✅

    ❌

    ✅

    ✅

    Query text

    ✅

    ✅

    ✅

    ✅

    Unauthorized information

    Limited support

    ✅

    ✅

    ❌

    Amazon Redshift integration
    Amazon Redshift Spectrum integration
    Amazon Redshift
    Amazon Redshift Spectrum

    Custom function

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    Supported with caveats

    ✅

    ✅

    ❌

    Format preserving masking

    ❌

    ❌

    ❌

    ❌

    ❌

    ❌

    ❌

    ✅

    ❌

    ❌

    Hashing

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ❌

    ✅

    ✅

    ❌

    Limit to purpose

    ❌

    ✅

    ✅

    ✅

    Supported with caveats

    ✅

    ❌

    ✅

    ✅

    ❌

    Masking fields within STRUCT columns

    ❌

    ❌

    ❌

    ✅

    Supported with caveats

    ❌

    ❌

    ❌

    ❌

    ❌

    Minimize

    ❌

    ✅

    ✅

    ✅

    ✅

    ❌

    ❌

    ✅

    ✅

    ❌

    Only show data by time

    ❌

    ✅

    ✅

    ✅

    ✅

    ❌

    ❌

    ✅

    ✅

    ❌

    Only show rows (matching)

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    Randomized response

    ❌

    ❌

    ❌

    ❌

    ❌

    ❌

    ❌

    ✅

    ❌

    ❌

    Regex

    ❌

    ✅

    ❌

    ✅

    ✅

    ✅

    ❌

    ✅

    ✅

    ❌

    Replace with NULL

    ✅

    ✅

    ✅

    Supported with caveats

    ✅

    ✅

    ❌

    ✅

    ✅

    ✅

    Replace with constant

    ✅

    ✅

    ✅

    Supported with caveats

    ✅

    ✅

    ❌

    ✅

    ✅

    ❌

    Reversible masking

    ❌

    ✅

    ❌

    ✅

    ❌

    ❌

    ❌

    ✅

    ✅

    ❌

    Rounding (by specifying the bucket size)

    ❌

    ✅

    ✅

    ✅

    ✅

    ✅

    ❌

    ✅

    ✅

    ❌

    WHERE clause

    ✅

    ✅

    ✅

    ✅

    ✅

    ✅

    Supported with caveats

    ✅

    ✅

    ✅

    Amazon S3
    AWS Lake Formation
    Azure Synapse Analytics
    Databricks Lakebase
    Databricks Spark
    Databricks Unity Catalog
    Google BigQuery view-based
    Google BigQuery viewless
    MariaDB
    MySQL
    Oracle
    PostgreSQL
    Snowflake
    SQL Server
    Starburst (Trino)
    Teradata
    Amazon S3
    AWS Lake Formation
    Azure Synapse Analytics
    Databricks Lakebase
    Databricks Spark
    workspaces
    scratch paths
    Databricks Unity Catalog
    Google BigQuery view-based
    Google BigQuery viewless
    PostgreSQL
    Snowflake
    Starburst (Trino)
    Teradata