The connection API is a REST API which allows users to register a Snowflake connection to Immuta with a single set of credentials rather than configuring an integration and creating data sources separately. Then Immuta can manage and enforce access controls on your data through that connection. To manage your connection, see the Manage a connection reference guide.
The following permissions and personas are used in the registration process:
Immuta permission: APPLICATION_ADMIN
The Snowflake user registering the connection and running the script must have the following privileges:
CREATE DATABASE ON ACCOUNT WITH GRANT OPTION
No Snowflake integration configured in Immuta. If your Snowflake integration is already configured on the app settings page, follow the guide.
Complete the following steps to register a Snowflake connection:
Create an Immuta system account with the proper Snowflake privileges for Immuta to use to manage policies in Snowflake.
Use the /integrations/scripts/create endpoint to receive a script.
Run the script in Snowflake.
Use the /data/connection
Complete the following actions in Snowflake:
. Immuta will use this system account continuously to orchestrate Snowflake policies and maintain state between Immuta and Snowflake.
with a minimum of the following privileges:
USAGE on all databases and schemas with registered data sources.
POST /integrations/scripts/create
Using the example request, update the <placeholder_values> with your connection details and the authentication credentials for the system account you just created.
Copy the config object to use later in the setup process.
Run the request.
Find descriptions of the editable attributes in the table below and of the full payload in the .
Payload parameters
Using your generated script, run it in your Snowflake environment as a user with the permissions listed in the .
The script will use the provided Immuta system user credentials to create the database you specified in the earlier step and set up Immuta-managed resources in Snowflake.
POST /data/connection
Using the tabs below, copy the request and update the <placeholder_values> with your connection details. The connection details here should match the ones used when generating the script, and the payload from the script generation should be pasted exactly into nativeIntegration. Then submit the request.
Find descriptions of the editable attributes in the table below and of the full payload in the . The recommended setting values are included in the example.
Payload parameters
Example response
CREATE ROLE ON ACCOUNT WITH GRANT OPTIONCREATE USER ON ACCOUNT WITH GRANT OPTION
MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION
APPLY MASKING POLICY ON ACCOUNT WITH GRANT OPTION
APPLY ROW ACCESS POLICY ON ACCOUNT WITH GRANT OPTION
REFERENCES on all tables and views registered in Immuta.SELECT on all tables and views registered in Immuta.
Grant the new Snowflake role to the system account you just created.
The new username of the system account that can act on Snowflake objects and register the connection.
Yes
config.password string
The password of the system account that can act on Snowflake objects and register the connection.
Yes
config.audit object
This object enables Snowflake query audit. Omit for the recommended configuration: audit enabled.
No
config.audit.enabled boolean
If true, Snowflake query audit is enabled.
No
config.workspaces object
This object represents Immuta project workspaces configured for Snowflake. Omit for the recommended configuration: workspaces disabled.
No
config.workspaces.enabled boolean
If true, Snowflake project workspaces are enabled. If you use Snowflake table grants, project workspaces cannot be used.
No
config.impersonation object
This object enables user impersonation. Omit for the recommended configuration: impersonation disabled.
No
config.impersonation.enabled boolean
If true, user impersonation is enabled. If you use Snowflake low row access policy mode, impersonation cannot be used.
No
config.lineage object
This object enables Snowflake lineage ingestion. Omit for the recommended configuration: lineage disabled.
No
config.lineage.enabled boolean
If true, Snowflake lineage is enabled.
No
config.userRolePattern object
This object excludes roles and users from authorization checks. Omit for the recommended configuration: no users or roles excluded.
No
config.userRolePattern.exclude array
This array is a list of roles and users (both case-sensitive) to exclude from authorization checks. Wildcards are unsupported. The roles and users will not have policies applied to them when querying Immuta protected Snowflake tables.
No
Payload parameters
config.host string
The URL of your Snowflake account.
Yes
config.warehouse string
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
config.database string
Name of a new empty database that the Immuta system user will manage and store metadata in.
Yes
Payload parameters
config.host string
The URL of your Snowflake account.
Yes
config.warehouse string
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
config.database string
Name of a new empty database that the Immuta system user will manage and store metadata in.
Yes
Payload parameters
config.host string
The URL of your Snowflake account.
Yes
config.warehouse string
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
config.database string
Name of a new empty database that the Immuta system user will manage and store metadata in.
Yes
The port to use when registering your Snowflake connection.
Yes
connection.warehouse string
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
connection.role string
The privileged Snowflake role used by the Immuta system account when registering the Snowflake connection. At minimum, it must be able to see the data that Immuta will govern.
Yes
connection.username string
The username of the system account that can act on Snowflake objects and register the connection.
Yes
connection.password string
The password of the system account that can act on Snowflake objects and register the connection.
Yes
settings object
Specifications of the connection's settings, including status.
No
settings.isActive boolean
When false, data objects will be inactive (disabled) by default when created in Immuta. Set to false for the recommended configuration.
No
options.forceRecursiveCrawl boolean
If false, only active (enabled) objects will be crawled. If true, both active (enabled) and inactive (disabled) data objects will be crawled; any child objects from inactive (disabled) objects will be set as inactive (disabled). Set to true for the recommended configuration.
No
nativeIntegration object
Configuration attributes that should match the values used when getting the script from the integration endpoint. See the for descriptions.
Yes
Payload parameters
connectionKey string
A unique name for the connection.
Yes
connection object
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
connection.hostname string
The URL of your Snowflake account. This is the same as host.
Yes
Payload parameters
connectionKey string
A unique name for the connection.
Yes
connection object
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
connection.hostname string
The URL of your Snowflake account. This is the same as host.
Yes
Payload parameters
connectionKey string
A unique name for the connection.
Yes
connection object
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
connection.hostname string
The URL of your Snowflake account. This is the same as host.
Yes
config.host string
The URL of your Snowflake account.
Yes
config.warehouse string
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
config.database string
Name of a new empty database that the Immuta system user will manage and store metadata in.
Yes
connectionKey string
A unique name for the connection.
Yes
connection object
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
connection.hostname string
The URL of your Snowflake account. This should be the same as nativeIntegration.config.host.
Yes
objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element will be the associated connectionKey.
bulkId string
A bulk ID that can be used to search for the status of background jobs triggered by this request.
config.username string
connection.port integer
curl -X 'POST' \
'https://<your-immuta-url>/integrations/scripts/create' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"type": "Snowflake",
"autoBootstrap": false,
"config": {
"host": "<your-Snowflake-hostname-url>",
"warehouse": "<your-Snowflake-warehouse>",
"database": "<your-Snowflake-database>",
"authenticationType": "keyPair",
"username": "<the-Snowflake-username>",
"privateKey": "<-----BEGIN PRIVATE KEY-----your-private-key-----END PRIVATE KEY----->",
"audit": {"enabled": true},
"workspaces": {"enabled": false},
"impersonation": {"enabled": false},
"lineage": { "enabled": false },
"userRolePattern": { "exclude": [] }
}
}'curl -X 'POST' \
'https://<your-immuta-url>/integrations/scripts/create' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"type": "Snowflake",
"autoBootstrap": false,
"config": {
"host": "<your-Snowflake-hostname-url>",
"warehouse": "<your-Snowflake-warehouse>",
"database": "<your-Snowflake-database>",
"authenticationType": "oAuthClientCredentials",
"oAuthClientConfig": {
"provider": "<your-provider>",
"clientId": "<your-client-ID>",
"authorityUrl": "<your-example.authority.com>",
"useCertificate": true,
"publicCertificateThumbprint": "<your-certificate-thumbprint>",
"oauthPrivateKey": "<-----BEGIN PRIVATE KEY-----your-private-key-----END PRIVATE KEY----->",
"scope": "session:role-any",
"audit": {"enabled": true},
"workspaces": {"enabled": false},
"impersonation": {"enabled": false},
"lineage": { "enabled": false },
"userRolePattern": { "exclude": [] }
}
}
}'curl -X 'POST' \
'https://<your-immuta-url>/integrations/scripts/create' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"type": "Snowflake",
"autoBootstrap": false,
"config": {
"host": "<your-Snowflake-hostname-url>",
"warehouse": "<your-Snowflake-warehouse>",
"database": "<your-Snowflake-database>",
"authenticationType": "oAuthClientCredentials",
"oAuthClientConfig": {
"provider": "<your-provider>",
"clientId": "<your-client-ID>",
"authorityUrl": "<your-example.authority.com>",
"clientSecret": "<your-client-secret>",
"useCertificate": false,
"scope": "session:role-any",
"audit": {"enabled": true},
"workspaces": {"enabled": false},
"impersonation": {"enabled": false},
"lineage": { "enabled": false },
"userRolePattern": { "exclude": [] }
}
}
}'curl -X 'POST' \
'https://<your-immuta-url>/data/connection' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"connectionKey": "<your-connection-key-name>",
"connection": {
"technology": "Snowflake",
"hostname": "<your-Snowflake-hostname-url>",
"port": <your-Snowflake-port>,
"warehouse": "<your-Snowflake-warehouse>",
"role": "<your-Snowflake-role>",
"authenticationType": "keyPair",
"username": "<the-Snowflake-username>",
"privateKeyPassword": "<your-Snowflake-key-password>",
"privateKey": {
"keyName": "PRIV_KEY_FILE",
"userFilename": "<your-private-key-file-name>",
"content": "<-----BEGIN PRIVATE KEY-----your-private-key-----END PRIVATE KEY----->"
}
},
"settings": {
"isActive": false
},
"options": {
"forceRecursiveCrawl": true
},
"nativeIntegration": {
"type": "Snowflake",
"autoBootstrap": false,
"config": {
"authenticationType": "keyPair",
"username": "<the-Snowflake-username>",
"privateKeyPassword": "<your-Snowflake-key-password>",
"privateKey": {
"keyName": "PRIV_KEY_FILE",
"userFilename": "<your-private-key-file-name>",
"content": "<-----BEGIN PRIVATE KEY-----your-private-key-----END PRIVATE KEY----->"
}
"host": "<your-Snowflake-hostname-url>",
"port": <your-Snowflake-port>,
"warehouse": "<your-Snowflake-warehouse>",
"database": "<your-Snowflake-database>",
"impersonation": { "enabled": false },
"audit": { "enabled": true },
"workspaces": { "enabled": false },
"lineage": { "enabled": false },
"userRolePattern": { "exclude": [] }
}
}
}'
curl -X 'POST' \
'https://<your-immuta-url>/data/connection' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"connectionKey": "<your-connection-key-name>",
"connection": {
"technology": "Snowflake",
"hostname": "<your-Snowflake-hostname-url>",
"port": <your-Snowflake-port>,
"warehouse": "<your-Snowflake-warehouse>",
"role": "<your-Snowflake-role>",
"authenticationType": "oAuthClientCredentials",
"oAuthClientConfig": {
"useCertificate": true,
"clientId": "<your-client-ID>",
"authorityUrl": "<your-example.authority.com>",
"scope": "session:role-any",
"publicCertificateThumbprint": "<your-certificate-thumbprint>",
"resource": "<your-optional-resource>",
"oauthPrivateKey": {
"keyName": "oauth client certificate",
"userFilename": "<your-user-file.pem>",
"content": "<-----BEGIN PRIVATE KEY-----your-private-key-----END PRIVATE KEY----->"
}
}
},
"settings": {
"isActive": false
},
"options": {
"forceRecursiveCrawl": true
},
"nativeIntegration": {
"type": "Snowflake",
"autoBootstrap": false,
"config": {
"authenticationType": "oAuthClientCredentials",
"oAuthClientConfig": {
"useCertificate": true,
"clientId": "<your-client-ID>",
"authorityUrl": "<your-example.authority.com>",
"scope": "session:role-any",
"publicCertificateThumbprint": "<your-certificate-thumbprint>",
"resource": "<your-optional-resource>",
"oauthPrivateKey": {
"keyName": "oauth client certificate",
"userFilename": "<your-user-file.pem>",
"content": "<-----BEGIN PRIVATE KEY-----your-private-key-----END PRIVATE KEY----->"
}
}
"host": "<your-Snowflake-hostname-url>",
"port": <your-Snowflake-port>,
"warehouse": "<your-Snowflake-warehouse>",
"database": "<your-Snowflake-database>",
"impersonation": { "enabled": false },
"audit": { "enabled": true },
"workspaces": { "enabled": false },
"lineage": { "enabled": false },
"userRolePattern": { "exclude": [] }
}
}
}'
curl -X 'POST' \
'https://<your-immuta-url>/data/connection' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"connectionKey": "<your-connection-key-name>",
"connection": {
"technology": "Snowflake",
"hostname": "<your-Snowflake-hostname-url>",
"port": <your-Snowflake-port>,
"warehouse": "<your-Snowflake-warehouse>",
"role": "<your-Snowflake-role>",
"authenticationType": "oAuthClientCredentials",
"oAuthClientConfig": {
"useCertificate": false,
"clientId": "<your-client-ID>",
"authorityUrl": "<your-example.authority.com>",
"scope": "session:role-any",
"resource": "<your-optional-resource>",
"clientSecret": "<your-client-secret>"
}
},
"settings": {
"isActive": false
},
"options": {
"forceRecursiveCrawl": true
},
"nativeIntegration": {
"type": "Snowflake",
"autoBootstrap": false,
"config": {
"authenticationType": "oAuthClientCredentials",
"oAuthClientConfig": {
"useCertificate": false,
"clientId": "<your-client-ID>",
"authorityUrl": "<your-example.authority.com>",
"scope": "session:role-any",
"resource": "<your-optional-resource>",
"clientSecret": "<your-client-secret>"
}
"host": "<your-Snowflake-hostname-url>",
"port": <your-Snowflake-port>,
"warehouse": "<your-Snowflake-warehouse>",
"database": "<your-Snowflake-database>",
"impersonation": { "enabled": false },
"audit": { "enabled": true },
"workspaces": { "enabled": false },
"lineage": { "enabled": false },
"userRolePattern": { "exclude": [] }
}
}
}'
curl -X 'POST' \
'https://<your-immuta-url>/integrations/scripts/create' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"type": "Snowflake",
"autoBootstrap": false,
"config": {
"host": "<your-Snowflake-hostname-url>",
"warehouse": "<your-Snowflake-warehouse>",
"database": "<your-Snowflake-database>",
"authenticationType": "userPassword",
"username": "<new-Snowflake-username>",
"password": "<new-Snowflake-password>",
"audit": {"enabled": true},
"workspaces": {"enabled": false},
"impersonation": {"enabled": false},
"lineage": { "enabled": false },
"userRolePattern": { "exclude": [] }
}
}'curl -X 'POST' \
'https://<your-immuta-url>/data/connection' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"connectionKey": "<your-connection-key-name>",
"connection": {
"technology": "Snowflake",
"hostname": "<your-Snowflake-hostname-url>",
"port": <your-Snowflake-port>,
"warehouse": "<your-Snowflake-warehouse>",
"role": "<your-Snowflake-role>",
"authenticationType": "userPassword",
"username": "<your-Snowflake-username>",
"password": "<your-Snowflake-password>"
},
"settings": {
"isActive": false
},
"options": {
"forceRecursiveCrawl": true
},
"nativeIntegration": {
"type": "Snowflake",
"autoBootstrap": false,
"config": {
"authenticationType": "userPassword",
"username": "<your-Snowflake-username>",
"password": "<your-Snowflake-password>",
"host": "<your-Snowflake-hostname-url>",
"port": <your-Snowflake-port>,
"warehouse": "<your-Snowflake-warehouse>",
"database": "<your-Snowflake-database>",
"impersonation": { "enabled": false },
"audit": { "enabled": true },
"workspaces": { "enabled": false },
"lineage": { "enabled": false },
"userRolePattern": { "exclude": [] }
}
}
}'
{
"objectPath": ['<your-connection-key-name>'],
"bulkId": "a-new-uuid"
}config.username string
The username of the system account that can act on Snowflake objects and register the connection.
Yes
config.privateKey string
The private key. Replace new lines in the private key with a backslash before the new line character: "\n". If you are using another means of configuration, such as a Python script, the "\n" should not be added.
Yes
config.audit object
This object enables Snowflake query audit. Omit for the recommended configuration: audit enabled.
No
config.audit.enabled boolean
If true, Snowflake query audit is enabled.
No
config.workspaces object
This object represents Immuta project workspaces configured for Snowflake. Omit for the recommended configuration: workspaces disabled.
No
config.workspaces.enabled boolean
If true, Snowflake project workspaces are enabled. If you use Snowflake table grants, project workspaces cannot be used.
No
config.impersonation object
This object enables user impersonation. Omit for the recommended configuration: impersonation disabled.
No
config.impersonation.enabled boolean
If true, user impersonation is enabled. If you use Snowflake low row access policy mode, impersonation cannot be used.
No
config.lineage object
This object enables Snowflake lineage ingestion. Omit for the recommended configuration: lineage disabled.
No
config.lineage.enabled boolean
If true, Snowflake lineage is enabled.
No
config.userRolePattern object
This object excludes roles and users from authorization checks. Omit for the recommended configuration: no users or roles excluded.
No
config.userRolePattern.exclude array
This array is a list of roles and users (both case-sensitive) to exclude from authorization checks. Wildcards are unsupported. The roles and users will not have policies applied to them when querying Immuta protected Snowflake tables.
No
config.oAuthClientConfig.provider string
The identity provider for OAuth, such as Okta.
Yes
config.oAuthClientConfig.clientId string
The client identifier of your registered application.
Yes
config.oAuthClientConfig.authorityUrl string
Authority URL of your identity provider.
Yes
config.oAuthClientConfig.publicCertificateThumbprint string
Your certificate thumbprint.
Yes
config.oAuthClientConfig.oauthPrivateKey string
The private key. Replace new lines in the private key with a backslash before the new line character: "\n". If you are using another means of configuration, such as a Python script, the "\n" should not be added.
Yes
config.audit object
This object enables Snowflake query audit. Omit for the recommended configuration: audit enabled.
No
config.audit.enabled boolean
If true, Snowflake query audit is enabled.
No
config.workspaces object
This object represents Immuta project workspaces configured for Snowflake. Omit for the recommended configuration: workspaces disabled.
No
config.workspaces.enabled boolean
If true, Snowflake project workspaces are enabled. If you use Snowflake table grants, project workspaces cannot be used.
No
config.impersonation object
This object enables user impersonation. Omit for the recommended configuration: impersonation disabled.
No
config.impersonation.enabled boolean
If true, user impersonation is enabled. If you use Snowflake low row access policy mode, impersonation cannot be used.
No
config.lineage object
This object enables Snowflake lineage ingestion. Omit for the recommended configuration: lineage disabled.
No
config.lineage.enabled boolean
If true, Snowflake lineage is enabled.
No
config.userRolePattern object
This object excludes roles and users from authorization checks. Omit for the recommended configuration: no users or roles excluded.
No
config.userRolePattern.exclude array
This array is a list of roles and users (both case-sensitive) to exclude from authorization checks. Wildcards are unsupported. The roles and users will not have policies applied to them when querying Immuta protected Snowflake tables.
No
config.oAuthClientConfig.provider string
The identity provider for OAuth, such as Okta.
Yes
config.oAuthClientConfig.clientId string
The client identifier of your registered application.
Yes
config.oAuthClientConfig.authorityUrl string
Authority URL of your identity provider.
Yes
config.oAuthClientConfig.clientSecret string
Client secret of the application.
Yes
config.audit object
This object enables Snowflake query audit. Omit for the recommended configuration: audit enabled.
No
config.audit.enabled boolean
If true, Snowflake query audit is enabled.
No
config.workspaces object
This object represents Immuta project workspaces configured for Snowflake. Omit for the recommended configuration: workspaces disabled.
No
config.workspaces.enabled boolean
If true, Snowflake project workspaces are enabled. If you use Snowflake table grants, project workspaces cannot be used.
No
config.impersonation object
This object enables user impersonation. Omit for the recommended configuration: impersonation disabled.
No
config.impersonation.enabled boolean
If true, user impersonation is enabled. If you use Snowflake low row access policy mode, impersonation cannot be used.
No
config.lineage object
This object enables Snowflake lineage ingestion. Omit for the recommended configuration: lineage disabled.
No
config.lineage.enabled boolean
If true, Snowflake lineage is enabled.
No
config.userRolePattern object
This object excludes roles and users from authorization checks. Omit for the recommended configuration: no users or roles excluded.
No
config.userRolePattern.exclude array
This array is a list of roles and users (both case-sensitive) to exclude from authorization checks. Wildcards are unsupported. The roles and users will not have policies applied to them when querying Immuta protected Snowflake tables.
No
connection.port integer
The port to use when registering your Snowflake connection.
Yes
connection.warehouse string
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
connection.role string
The privileged Snowflake role used by the Immuta system account when registering the Snowflake connection. At minimum, it must be able to see the data that Immuta will govern.
Yes
connection.username string
The username of the system account that can act on Snowflake objects and register the connection.
Yes
connection.privateKeyPassword string
The Snowflake private key password. Required if the private key is encrypted.
No
connection.privateKey.userFilename string
The name of your private key file on your machine.
Yes
connection.privateKey.content string
The private key. Replace new lines in the private key with a backslash before the new line character: "\n". If you are using another means of configuration, such as a Python script, the "\n" should not be added. This is the same as config.privateKey.
Yes
settings object
Specifications of the connection's settings, including status.
No
settings.isActive boolean
If false, data objects will be inactive (disabled) by default when created in Immuta. Set to false for the recommended configuration.
No
options.forceRecursiveCrawl boolean
If false, only active (enabled) objects will be crawled. If true, both active (enabled) and inactive (disabled) data objects will be crawled; any child objects from inactive (disabled) objects will be set as inactive (disabled). Set to true for the recommended configuration.
No
nativeIntegration object
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
nativeIntegration.config.username string
Same as connection.username
Yes
nativeIntegration.config.privateKeyPassword string
Same as connection.privateKeyPassword
No
nativeIntegration.config.privateKey.keyName string
Same as connection.keyName
Yes
nativeIntegration.config.privateKey.userFilename string
Same as connection.userFilename
Yes
nativeIntegration.config.privateKey.content string
Same as connection.content
Yes
nativeIntegration.config.host string
Same as connection.hostname
Yes
nativeIntegration.config.port integer
Same as connection.port
Yes
nativeIntegration.config.warehouse string
Same as connection.warehouse
Yes
nativeIntegration.config.database string
Use the same setting as the script generation.
Yes
nativeIntegration.config.impersonation object
Use the same setting as the script generation.
Yes
nativeIntegration.config.audit object
Use the same setting as the script generation.
Yes
nativeIntegration.config.workspaces object
Use the same setting as the script generation.
Yes
nativeIntegration.config.lineage object
Use the same setting as the script generation.
Yes
nativeIntegration.userRolePattern object
Use the same setting as the script generation.
Yes
connection.port integer
The port to use when registering your Snowflake connection.
Yes
connection.warehouse string
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
connection.role string
The privileged Snowflake role used by the Immuta system account when registering the Snowflake connection. At minimum, it must be able to see the data that Immuta will govern.
Yes
connection.oAuthClientConfig.clientId string
The client identifier of your registered application.
Yes
connection.oAuthClientConfig.authorityUrl string
Authority URL of your identity provider.
Yes
connection.oAuthClientConfig.publicCertificateThumbprint string
Your certificate thumbprint.
Yes
connection.oAuthClientConfig.resource string
An optional resource to pass to the token provider.
No
connection.oAuthClientConfig.oauthPrivateKey.userFilename string
The name of your private key file on your machine.
Yes
connection.oAuthClientConfig.oauthPrivateKey.content string
The private key. Replace new lines in the private key with a backslash before the new line character: "\n". If you are using another means of configuration, such as a Python script, the "\n" should not be added. This is the same as config.oauthPrivateKey in the script request.
Yes
settings object
Specifications of the connection's settings, including status.
No
settings.isActive boolean
When false, data objects will be inactive (disabled) by default when created in Immuta. Set to false for the recommended configuration.
No
options.forceRecursiveCrawl boolean
If false, only active (enabled) objects will be crawled. If true, both active (enabled) and inactive (disabled) data objects will be crawled; any child objects from inactive (disabled) objects will be set as inactive (disabled). Set to true for the recommended configuration.
No
nativeIntegration object
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
nativeIntegration.config.oAuthClientConfig.clientId string
Same as connection.oAuthClientConfig.clientId
Yes
nativeIntegration.config.oAuthClientConfig.authorityUrl string
Same as connection.oAuthClientConfig.authorityUrl
Yes
nativeIntegration.config.oAuthClientConfig.publicCertificateThumbprint string
Same as connection.oAuthClientConfig.publicCertificateThumbprint
Yes
nativeIntegration.config.oAuthClientConfig.resource string
Same as connection.oAuthClientConfig.resource
No
nativeIntegration.config.oAuthClientConfig.oauthPrivateKey.userFilename string
Same as connection.oAuthClientConfig.oauthPrivateKey.userFilename
Yes
nativeIntegration.config.oAuthClientConfig.oauthPrivateKey.content string
Same as connection.oAuthClientConfig.oauthPrivateKey.content
Yes
nativeIntegration.config.host string
Same as connection.hostname
Yes
nativeIntegration.config.port integer
Same as connection.port
Yes
nativeIntegration.config.warehouse string
Same as connection.warehouse
Yes
nativeIntegration.config.database string
Use the same setting as the script generation.
Yes
nativeIntegration.config.impersonation object
Use the same setting as the script generation.
Yes
nativeIntegration.config.audit object
Use the same setting as the script generation.
Yes
nativeIntegration.config.workspaces object
Use the same setting as the script generation.
Yes
nativeIntegration.config.lineage object
Use the same setting as the script generation.
Yes
nativeIntegration.userRolePattern object
Use the same setting as the script generation.
Yes
connection.port integer
The port to use when registering your Snowflake connection.
Yes
connection.warehouse string
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
connection.role string
The privileged Snowflake role used by the Immuta system account when registering the Snowflake connection. At minimum, it must be able to see the data that Immuta will govern.
Yes
connection.oAuthClientConfig.clientId string
The client identifier of your registered application.
Yes
connection.oAuthClientConfig.authorityUrl string
Authority URL of your identity provider.
Yes
connection.oAuthClientConfig.clientSecret string
Client secret of the application.
Yes
connection.oAuthClientConfig.resource string
An optional resource to pass to the token provider.
No
settings object
Specifications of the connection's settings, including status.
No
settings.isActive boolean
When false, data objects will be inactive (disabled) by default when created in Immuta. Set to false for the recommended configuration
No
options.forceRecursiveCrawl boolean
If false, only active (enabled) objects will be crawled. If true, both active (enabled) and inactive (disabled) data objects will be crawled; any child objects from inactive (disabled) objects will be set as inactive (disabled). Set to true for the recommended configuration.
No
nativeIntegration object
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
nativeIntegration.config.oAuthClientConfig.clientId string
Same as connection.oAuthClientConfig.clientId
Yes
nativeIntegration.config.oAuthClientConfig.authorityUrl string
Same as connection.oAuthClientConfig.authorityUrl
Yes
nativeIntegration.config.oAuthClientConfig.resource string
Same as connection.oAuthClientConfig.resource
No
nativeIntegration.config.oAuthClientConfig.clientSecret string
Same as connection.oAuthClientConfig.clientSecret
Yes
nativeIntegration.config.host string
Same as connection.hostname
Yes
nativeIntegration.config.port integer
Same as connection.port
Yes
nativeIntegration.config.warehouse string
Same as connection.warehouse
Yes
nativeIntegration.config.database string
Use the same setting as the script generation.
Yes
nativeIntegration.config.impersonation object
Use the same setting as the script generation.
Yes
nativeIntegration.config.audit object
Use the same setting as the script generation.
Yes
nativeIntegration.config.workspaces object
Use the same setting as the script generation.
Yes
nativeIntegration.config.lineage object
Use the same setting as the script generation.
Yes
nativeIntegration.userRolePattern object
Use the same setting as the script generation.
Yes
Username and password
Key pair
Snowflake External OAuth
Personal access token (PAT)
OAuth machine-to-machine (M2M)
Required Immuta permission: APPLICATION_ADMIN
To deregister a connection from Immuta, do the following:
POST /integrations/{id}/scripts/delete
Creates a script to remove Immuta-managed resources from your data platform.
The response returns the script that you will run in your Databricks Unity Catalog or Snowflake environment. Copy it for later.
DELETE /data/object/{connectionKey}
Delete the given connection and all its child objects.
Using the copied generated cleanup script from earlier, run it in your Snowflake or Databricks Unity Catalog environment as a privileged user.
The script will remove any objects that were initially created during the .
id integer
The integration ID. Use the GET /integrations endpoint to list all your integrations and their IDs.
Yes
connectionKey string
The key to uniquely identify the connection. This is the same as the display name of the connection in the Immuta UI.
Yes
connectionKey string
The key to uniquely identify the connection.
childCount integer
The number of child objects of the data object that were deleted.
curl -X 'POST' \
'https://www.organization.immuta.com/integrations/1/scripts/delete' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'curl -X 'DELETE' \
'https://<your-immuta-url>/data/object/yourConnectionKey' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \{
"objectPath": ['yourConnectionKey'],
"childCount": 5
}This page details the /data v1 API, which allows users to register a connection to Immuta with a single set of credentials rather than configuring an integration and creating data sources separately. For a how-to on registering a connection, see the Register a connection reference guide.
GET
Search for a connection using a connection key
GET
Search for a specific data object
GET /data/connection/{connectionKey}Search for a connection using a connection key.
Required Immuta permission: CREATE_DATA_SOURCE, APPLICATION_ADMIN, GOVERNANCE, or Data Owner within the hierarchy
GET /data/object/{objectPath}Search for a specific data object using the object path.
Required Immuta permission: CREATE_DATA_SOURCE, APPLICATION_ADMIN, GOVERNANCE, or Data Owner within the hierarchy
POST /data/object/search/{objectPath}Search for the children of the object defined in the objectPath. Or search all top-level data objects if the objectPath is omitted.
Required Immuta permission: CREATE_DATA_SOURCE, APPLICATION_ADMIN, GOVERNANCE, or Data Owner on the object
PUT /data/connection/{connectionKey}Update the connection information for the specified connection. Partial updates are not supported.
Required Immuta permission: APPLICATION_ADMIN
What can be updated?
Using this endpoint, you can only update connection information. To update other integration details, use the endpoint.
The connection parameters differ based on your backing technology. See the for details about the payloads.
POST /data/crawl/{objectPath}Trigger object sync for the specified data object.
Required Immuta permission: GOVERNANCE or APPLICATION_ADMIN global permission or Data Owner on the object
PUT /data/settings/{objectPath}Update the settings through overrides for the specified data object. All changes will trickle down to child objects as new overrides; however, existing overrides on child objects will still be respected. Data owners cannot be removed, only added. To remove data owners, edit the settings at the connection level.
Required Immuta permission: APPLICATION_ADMIN or GOVERNANCE global permission
DELETE /data/object/{objectPath}Delete the given object and all its child objects. For example, if you delete a database, all its schemas and tables will also be deleted.
Required Immuta permission: GOVERNANCE or APPLICATION_ADMIN global permission or Data Owner on the object
creator.email string
The email of the user who registered the connection.
updatedAt timestamp
The time the connection was updated in Immuta.
updatedBy integer
The ID of the user who updated the connection.
updater.id integer
The ID of the user who updated the connection.
updater.name string
The name of the user who updated the connection.
updater.email string
The email of the user who updated the connection.
nativeIntegrationId integer
The ID of the integration backing the connection.
createdAt timestamp
The time the data object was created in Immuta.
lastCrawled timestamp
The time object sync was last run on the data object.
remoteId string
The ID of the remote data object.
searchText string
A partial, case-insensitive search on name.
No
hits.dataSourceId integer
The ID of the data source if it is a table object that is active (enabled).
hits.createdAt timestamp
The time the data object was created in Immuta.
hits.lastCrawled timestamp
The time object sync was last run on the data object.
hits.remoteId string
The ID of the remote data object.
overrides.dataOwners.id integer
The ID of the user or group to make data owner.
No
overrides.dataOwners.type string
The type to make data owner. Options are user or group.
No
createdAt timestamp
The time the data object was created in Immuta.
lastCrawled timestamp
The time object sync was last run on the data object.
remoteId string
The ID of the remote data object.
bulkId string
A bulk ID that can be used to search for the status of background jobs triggered by this request.
POST
Search for the child objects of the data object defined in the objectPath or search all top-level data objects (connections) if the objectPath is omitted
PUT
Update the connection information for the specified connection
POST
Trigger object sync for the specified data object
PUT
Update the settings through overrides for the specified data object
DELETE
Delete the given data object and all its child objects
connectionKey string
The key to uniquely identify the connection. This is the same as the display name of the connection in the Immuta UI.
Yes
connectionKey string
The key to uniquely identify the connection.
connection object
Integration-specific connection information (i.e., hostname, authentication type, warehouse, etc.)
createdAt timestamp
The time the connection was registered in Immuta.
createdBy integer
The ID of the user who registered the connection.
creator.id integer
The ID of the user who registered the connection.
creator.name string
The name of the user who registered the connection.
objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element should be the connectionKey and all names should be separated by forward slashes (/). For example, yourConnectionKey/yourDatabase/yourSchema.
Yes
objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element should be the connectionKey and all names are separated by forward slashes.
technology string
The technology that the object comes from: Databricks or Snowflake.
state string
Whether the object is currently active (enabled) or inactive (disabled).
settings object
Specifications of the connection's settings, including status, new children status, and data owners.
overrides object
Specifications of the data object's settings that differ from its parents' settings.
dataSourceId integer
The ID of the data source if it is a table object that is active.
objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element should be the connectionKey and all names should be separated by forward slashes (/). For example, yourConnectionKey/yourDatabase/yourSchema.
Yes
sortField string
The field to sort the search results.
No
sortOrder string
Denotes whether to sort the results in ascending (asc) or descending (desc) order. Default is asc.
No
offset integer
Use in combination with limit to fetch pages.
No
limit integer
Limits the number of results displayed per page.
count integer
The number of results for your search.
hits.objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element should be the connectionKey and all names are separated by forward slashes.
hits.technology string
The technology that the object comes from (i.e., Snowflake, Databricks, etc.).
hits.state string
Whether the object is currently active (enabled) or inactive (disabled).
hits.settings object
Specifications of the connection's settings, including status, new children status, and data owners.
hits.overrides object
Specifications of the data object's settings that differ from its parents' settings.
connectionKey string
The key to uniquely identify the connection. This is the same as the display name of the connection in the Immuta UI.
Yes
objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element should be the connectionKey and all names are separated by forward slashes.
bulkId string
A bulk ID that can be used to search for the status of background jobs triggered by this request.
objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element should be the connectionKey and all names should be separated by forward slashes (/). For example, yourConnectionKey/yourDatabase/yourSchema.
Yes
forceRecursive boolean
If false, only active (enabled) objects will have object sync run. If true, both active (enabled) and inactive (disabled) data objects will be synced; any child objects from inactive (disabled) objects will be set as inactive (disabled). Defaults to false.
No.
objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element should be the connectionKey and all names are separated by forward slashes.
bulkId string
A bulk ID that can be used to search for the status of background jobs triggered by this request.
objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element should be the connectionKey and all names should be separated by forward slashes (/). For example, yourConnectionKey/yourDatabase/yourSchema.
Yes
overrides object
A list of settings configured differently from the parent object's settings.
No
overrides.isActive boolean
If true, the object and all its child objects are active (enabled).
If you enable a Databricks Unity Catalog data object and it has no subscription policy set on it, Immuta will REVOKE access to the data in Databricks for all Immuta users, even if they had been directly granted access to the table in Unity Catalog.
If a user is not registered in Immuta, Immuta will have no effect on that user's access to data in Unity Catalog. See the Databricks Unity Catalog reference guide for more details.
No
overrides.activateNewChildren boolean
If true, all new children found during object sync will be registered as active (enabled).
No
overrides.dataOwners array
A list of users and groups that are data owners on the connection. These users will be data owners for all the data sources under the data object they are assigned to.
objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element should be the connectionKey and all names should be separated by forward slashes.
technology string
The backing technology of the connection. Options are Databricks or Snowflake.
state string
Whether the object is currently active (enabled) or inactive (disabled).
settings object
Specifications of the connection's settings, including status, new children status, and data owners.
overrides object
Specifications of the data object's settings that differ from its parents' settings.
dataSourceId integer
The ID of the data source if it is a table object that is active (enabled).
objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element should be the connectionKey and all names should be separated by forward slashes (/). For example, yourConnectionKey/yourDatabase/yourSchema.
Yes
objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element should be the connectionKey and all names are separated by forward slashes.
childCount integer
The number of child objects of the data object that were deleted.
No
No
curl -X 'GET' \
'https://your-immuta-url.com/data/connection/yourConnectionKey' \
-H 'accept: application/json' \
-H 'Authorization: Bearer your-bearer-token'{
"connectionKey": "yourConnectionKey",
"connection": {
"port": 443,
"role": "IMMUTA_SNOWFLAKE_ROLE",
"hostname": "example.us-east-1.snowflakecomputing.com",
"username": "IMMUTA_DB_SYSTEM_ACCOUNT",
"warehouse": "your-warehouse",
"technology": "Snowflake",
"authenticationType": "userPassword"
},
"createdAt": "2023-12-22T18:28:46.328Z",
"createdBy": 2,
"updatedAt": "2023-12-22T18:28:46.328Z",
"updatedBy": 2,
"creator": {
"id": 2,
"name": "Taylor Smith",
"email": "[email protected]"
},
"updater": {
"id": 2,
"name": "Taylor Smith",
"email": "[email protected]"
},
"nativeIntegrationId": 1
}curl -X 'GET' \
'https://your-immuta-url.com/data/object/yourConnectionKey' \
-H 'accept: application/json' \
-H 'Authorization: Bearer your-bearer-token'{
"objectPath": ["yourConnectionKey"],
"technology": "Snowflake",
"state": "active",
"settings": {
"activateNewChildren": {
"value": true,
"hasDescendantsWithOverrides": false
},
"dataOwners": {
"value": [{
"id": 2,
"type": "user"
}],
"hasDescendantsWithOverrides": false
},
"isActive": {
"value": true,
"hasDescendantsWithOverrides": false
}
},
"overrides": [],
"lastCrawled": 2023 - 08 - 21 T10: 39: 00.250 Z,
"createdAt": 2023 - 08 - 21 T10: 39: 00.250 Z,
"remoteId": null
}curl -X 'POST' \
'https://your-immuta-url.com/data/object/search/yourConnectionKey' \
-H 'accept: application/json' \
-H 'Authorization: Bearer your-bearer-token'{
"count": 1,
"hits": [{
"objectPath": ["yourConnectionKey"],
"technology": "Snowflake",
"state": "active",
"settings": {
"activateNewChildren": {
"value": true,
"hasDescendantsWithOverrides": false
},
"dataOwners": {
"value": [{
"id": 2,
"type": "user"
}],
"hasDescendantsWithOverrides": false
},
"isActive": {
"value": true,
"hasDescendantsWithOverrides": false
}
},
"overrides": [],
"lastCrawled": 2023 - 08 - 21 T10: 39: 00.250 Z,
"createdAt": 2023 - 08 - 21 T10: 39: 00.250 Z,
"remoteId": null
}]
}curl -X 'PUT' \
'https://<your-immuta-url>/data/connection/yourConnectionKey' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"connection": {
"technology": "Snowflake",
"hostname": "<your-Snowflake-hostname-url>",
"port": <your-Snowflake-port>,
"warehouse": "<your-Snowflake-warehouse>",
"role": "<your-Snowflake-role>",
"authenticationType": "userPassword",
"username": "<your-Snowflake-username>",
"password": "<your-Snowflake-password>"
}
}'curl -X 'PUT' \
'https://<your-immuta-url>/data/connection/yourConnectionKey' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"connection": {
"technology": "Snowflake",
"hostname": "<your-Snowflake-hostname-url>",
"port": <your-Snowflake-port>,
"warehouse": "<your-Snowflake-warehouse>",
"role": "<your-Snowflake-role>",
"authenticationType": "keyPair",
"username": "<the-Snowflake-username>",
"privateKeyPassword": "<your-Snowflake-key-password>",
"privateKey": {
"keyName": "PRIV_KEY_FILE",
"userFilename": "<your-private-key-file-name>",
"content": "<-----BEGIN PRIVATE KEY-----your-private-key-----END PRIVATE KEY----->"
}
}
}'curl -X 'PUT' \
'https://<your-immuta-url>/data/connection/yourConnectionKey' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"connection": {
"technology": "Snowflake",
"hostname": "<your-Snowflake-hostname-url>",
"port": <your-Snowflake-port>,
"warehouse": "<your-Snowflake-warehouse>",
"role": "<your-Snowflake-role>",
"authenticationType": "oAuthClientCredentials",
"oAuthClientConfig": {
"useCertificate": true,
"clientId": "<your-client-ID>",
"authorityUrl": "<your-example.authority.com>",
"scope": "session:role-any",
"publicCertificateThumbprint": "<your-certificate-thumbprint>",
"resource": "<your-optional-resource>",
"oauthPrivateKey": {
"keyName": "oauth client certificate",
"userFilename": "<your-user-file.pem>",
"content": "<-----BEGIN PRIVATE KEY-----your-private-key-----END PRIVATE KEY----->"
}
}
}
}'curl -X 'PUT' \
'https://<your-immuta-url>/data/connection/yourConnectionKey' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"connection": {
"technology": "Snowflake",
"hostname": "<your-Snowflake-hostname-url>",
"port": <your-Snowflake-port>,
"warehouse": "<your-Snowflake-warehouse>",
"role": "<your-Snowflake-role>",
"authenticationType": "oAuthClientCredentials",
"oAuthClientConfig": {
"useCertificate": false,
"clientId": "<your-client-ID>",
"authorityUrl": "<your-example.authority.com>",
"scope": "session:role-any",
"resource": "<your-optional-resource>",
"clientSecret": "<your-client-secret>"
}
}
}'curl -X 'PUT' \
'https://<your-immuta-url>/data/connection/yourConnectionKey' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"connection": {
"technology": "Databricks",
"hostname": "<www.your-workspace.cloud.databricks.com>",
"port": <your-Databricks-port>,
"httpPath": "<your-Databricks-warehouse-path>",
"authenticationType": "token",
"token": "<your-service-principal-pat>"
}
}'{
"objectPath": ['yourConnectionKey'],
"bulkId": "a-new-uuid"
}curl -X 'POST' \
'https://<your-immuta-url>/data/crawl/yourConnectionKey/yourDatabase/yourSchema' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"forceRecursive": false
}'{
"objectPath": ['yourConnectionKey', 'yourDatabase', 'yourSchema'],
"bulkId": 'the-job's-unique-identifier'
}curl -X 'PUT' \
'https://<your-immuta-url>/data/settings/yourConnectionKey/yourDatabase' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"overrides": {
"isActive": true,
"activateNewChildren": true,
"dataOwners": [{
"id": 3,
"type": "group"
}]
}
}'{
"objectPath": ["yourConnectionKey/yourDatabase"],
"technology": "Snowflake",
"state": "active",
"settings": {
"activateNewChildren": {
"value": true,
"hasDescendantsWithOverrides": true
},
"dataOwners": {
"value": [{
"id": 2,
"type": "user"
}],
"hasDescendantsWithOverrides": true
},
"isActive": {
"value": true,
"hasDescendantsWithOverrides": true
}
},
"overrides": [
"isActive",
"activateNewChildren",
"dataOwners"
],
"dataSourceId": null,
"lastCrawled": 2023 - 08 - 21 T10: 39: 00.250 Z,
"createdAt": 2023 - 08 - 21 T10: 39: 00.250 Z,
"remoteId": null,
"bulkId": 'the-job's-unique-identifier'
}
curl -X 'DELETE' \
'https://<your-immuta-url>/data/object/yourConnectionKey/yourDatabase/yourSchema' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>'{
"objectPath": ['yourConnectionKey', 'yourDatabase', 'yourSchema'],
"childCount": 5
}The connection API is a REST API which allows users to register a Databricks Unity Catalog connection to Immuta with a single set of credentials rather than configuring an integration and creating data sources separately. Then Immuta can manage and enforce access controls on your data through that connection. To manage your connection, see the .
APPLICATION_ADMIN Immuta permission
The Databricks user registering the connection and running the script must have 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 Databricks documentation for more details about Unity Catalog privileges and securable objects.
Unity Catalog metastore created 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.
Complete the following steps to register a Databricks Unity Catalog connection:
Create a service principal in Databricks Unity Catalog with the proper Databricks privileges for Immuta to use to manage policies in Unity Catalog.
Set up Unity Catalog system tables for query audit.
Use the /integrations/scripts/create endpoint to receive a script.
Run the script in Databricks Unity Catalog.
Use the /data/connection endpoint to finish registering your connection in Immuta.
Create a Databricks service principal with the Databricks privileges listed below and set up with personal access token (PAT), which can be an on-behalf token created in Databricks, or OAuth machine-to-machine (M2M) authentication. 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 registered as Immuta data sources.
USE SCHEMA on all schemas containing securables registered as Immuta data sources.
MODIFY and SELECT 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 .
Enable query audit by completing these steps in Unity Catalog:
Grant the service principal from step 1 access to the Databricks Unity Catalog system tables. 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 schema
SELECT on the following system tables:
system.access.audit
system.access.table_lineage
.
POST /integrations/scripts/create
Using the example request, update the <placeholder_values> with your connection details.
Copy the config object to use later in the setup process.
Run the request.
Copy the returned script and use it in the next step.
Find descriptions of the editable attributes in the table below and of the full payload in the Integration configuration payload reference guide.
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.
Payload parameters
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.
Payload parameters
The previous step will return a script. Copy the script and run it in your Databricks Unity Catalog environment as a user with the privileges listed in the requirements section.
The script will use the service principal that will use the authentication that you specified. Additionally, the script will create the catalog you specified.
POST /data/connection
Copy the request and update the <placeholder_values> with your connection details. Note that the connection details here should match the ones used when generating the script. Then submit the request.
Find descriptions of the editable attributes in the table below and of the full payload in the Databricks Unity Catalog connection payload table. All values should be included and those you should not edit are noted.
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.
Payload parameters
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.
Payload parameters
objectPath string
The list of names that uniquely identify the path to a data object in the remote platform's hierarchy. The first element should be the associated connectionKey.
bulkId string
A bulk ID that can be used to search for the status of background jobs triggered by this request.
curl -X 'POST' \
'https://<your-immuta-url>/integrations/scripts/create' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"type": "Databricks",
"autoBootstrap": false,
"config": {
"workspaceUrl": "<www.your-workspace.cloud.databricks.com>",
"httpPath": "<sql/protocolv1/o/0/your-path>",
"authenticationType": "token",
"token": "<service-principal-pat>",
"catalog": "<new-catalog>",
"groupPattern": { "deny": "<your-exemption-group>" },
"audit": {"enabled": true}
}
}'curl -X 'POST' \
'https://<your-immuta-url>/data/connection' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"connectionKey": "<your-connection-key-name>",
"connection": {
"technology": "Databricks",
"hostname": "<www.your-workspace.cloud.databricks.com>",
"port": <your-Databricks-port>,
"httpPath": "<your-Databricks-warehouse-path>",
"authenticationType": "token",
"token": "<your-service-principal-pat>"
},
"settings": {
"isActive": false
},
"options": {
"forceRecursiveCrawl": true
},
"nativeIntegration": {
"type": "Databricks",
"autoBootstrap": false,
"unityCatalog": true,
"config": {
"authenticationType": "token",
"token": "<your-service-principal-pat>",
"host": "<www.your-workspace.cloud.databricks.com>",
"port": <your-Databricks-port>,
"catalog": "<your-immuta-catalog>",
"audit": { "enabled": true },
"workspaceIds": ["<your-workspace>", <"another-workspace">],
"enableNativeQueryParsing": false,
"groupPattern": { "deny": "<your-exemption-group>" },
"jobConfig": {
"workspaceDirectoryPath": "/Workspace/ImmutaArtifacts",
"jobClusterId": "undefined"
}
}
}'{
"objectPath": ['<your-connection-key-name>'],
"bulkId": "a-new-uuid"
}system.access.column_lineageAccess 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 and SELECT permissions on the system schemas to the service principal. See Manage privileges in Unity Catalog. The system.access schema must also be enabled on the metastore before it can be used.
No
config.audit.enabled boolean
If true, Databricks Unity Catalog query audit is enabled. Set to true for the recommended configuration.
No
config.workspaceUrl string
Your Databricks workspace URL.
Yes
config.httpPath string
The HTTP path of your Databricks cluster or SQL warehouse.
Yes
config.oAuthClientConfig object
The oAuthClientConfig object represents your OAuth configuration in Databricks Unity Catalog.
Yes
config.oAuthClientConfig.clientId string
The client identifier of the Immuta service principal you configured. This is the client ID displayed in Databricks when creating the client secret for the service principal.
Yes
config.oAuthClientConfig.clientSecret string
.
Yes
config.oAuthClientConfig.authorityUrl string
Yes
connection.authenticationType string
The authentication type to register the connection. Make sure this auth type is the same used when requesting the script.
Yes
connection.token string
The Databricks personal access token for the service principal created in step one for Immuta.
Yes
settings object
Specifications of the connection's settings, including status.
No
settings.isActive boolean
When false, data objects will be inactive (disabled) by default when created in Immuta. Set to false for the recommended configuration.
If you set this to true for a data object and it has no subscription policy set on it, Immuta will REVOKE access to the data in Databricks for all Immuta users, even if they had been directly granted access to the table in Unity Catalog.
If a user is not registered in Immuta, Immuta will have no effect on that user's access to data in Unity Catalog. See the for more details.
No
options object
Specification of the connection's default behavior for object crawls.
No
options.forceRecursiveCrawl boolean
If false, only active (enabled) objects will be crawled. If true, both active (enabled) and inactive (disabled) data objects will be crawled; any child objects from inactive (disabled) objects will be set as inactive (disabled). Set to true for the recommended configuration.
No
nativeIntegration object
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
nativeIntegration.type string
Same as connection.technology
Yes
nativeIntegration.autoBootstrap boolean
Use the same setting as the script generation.
Yes
nativeIntegration.unityCatalog boolean
Use the same setting as the script generation.
Yes
nativeIntegration.config.authenticationType string
Same as connection.authenticationType
Yes
nativeIntegration.config.token string
Same as connection.token
Yes
nativeIntegration.config.host string
Same as connection.hostname
Yes
nativeIntegration.config.port integer
Same as connection.port
Yes
nativeIntegration.config.catalog string
Use the same setting as the script generation.
Yes
nativeIntegration.config.audit object
Use the same setting as the script generation.
Yes
nativeIntegration.config.workspaceIds array
Use the same setting as the script generation.
No
nativeIntegration.config.enableNativeQueryParsing boolean
Use the same setting as the script generation.
No
nativeIntegration.config.groupPattern object
Use the same setting as the script generation.
No
nativeIntegration.config.jobConfig.workspaceDirectoryPath string
Use the same setting as the script generation.
No
nativeIntegration.config.jobConfig.jobClusterId string
Use the same setting as the script generation.
No
connectionKey string
A unique name for the connection.
Yes
connection object
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
connection.technology string
The technology backing the new connection.
Yes
connection.hostname string
Your Databricks workspace URL. This is the same as host and workspaceURL.
Yes
connection.port integer
The port to use when connecting to your Databricks account. Defaults to 443.
Yes
connection.httpPath string
config.workspaceUrl string
Your Databricks workspace URL.
Yes
config.httpPath string
The HTTP path of your Databricks cluster or SQL warehouse.
Yes
config.token string
The Databricks personal access token for the service principal created in step one for Immuta.
Yes
config.catalog string
The name of the Databricks 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.
Yes
config.groupPattern object
This object allows you to exclude an account-level group in Databricks from data policies. See the Databricks Unity Catalog group pattern object description for details.
No
config.audit object
connectionKey string
A unique name for the connection.
Yes
connection object
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
connection.technology string
The technology backing the new connection.
Yes
connection.hostname string
Your Databricks workspace URL. This is the same as host and workspaceURL.
Yes
connection.port integer
The port to use when connecting to your Databricks account. Defaults to 443.
Yes
connection.httpPath string
This object enables Databricks Unity Catalog query audit.
The HTTP path of your Databricks cluster or SQL warehouse.
curl -X 'POST' \
'https://<your-immuta-url>/integrations/scripts/create' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"type": "Databricks",
"autoBootstrap": false,
"config": {
"workspaceUrl": "<www.your-workspace.cloud.databricks.com>",
"httpPath": "<sql/protocolv1/o/0/your-path>",
"authenticationType": "oAuthM2M",
"oAuthClientConfig": {
"useCertificate": false,
"clientId": "<your-client-ID>",
"clientSecret": "<your-client-secret>",
"scope": "all-apis",
"authorityUrl": "<your.authority.com>"
},
"catalog": "<new-catalog>",
"groupPattern": { "deny": "<your-exemption-group>" },
"audit": {"enabled": true}
}
}'curl -X 'POST' \
'https://<your-immuta-url>/data/connection' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: <your-bearer-token>' \
-d '{
"connectionKey": "<your-connection-key-name>",
"connection": {
"technology": "Databricks",
"hostname": "<www.your-workspace.cloud.databricks.com>",
"port": <your-Databricks-port>,
"httpPath": "<your-Databricks-warehouse-path>",
"authenticationType": "oAuthM2M",
"oAuthClientConfig": {
"useCertificate": false,
"clientId": "<your-client-ID>",
"clientSecret": "<your-client-secret>",
"scope": "all-apis",
"authorityUrl": "<your.authority.com>"
}
},
"settings": {
"isActive": false
},
"options": {
"forceRecursiveCrawl": true
},
"nativeIntegration": {
"type": "Databricks",
"autoBootstrap": false,
"unityCatalog": true,
"config": {
"host": "<www.your-workspace.cloud.databricks.com>",
"port": <your-Databricks-port>,
"authenticationType": "oAuthM2M",
"oAuthClientConfig": {
"useCertificate": false,
"clientId": "<your-client-ID>",
"clientSecret": "<your-client-secret>",
"scope": "all-apis",
"authorityUrl": "<your.authority.com>"
},
"catalog": "<your-immuta-catalog>",
"audit": { "enabled": true },
"workspaceIds": ["<your-workspace>", <"another-workspace">],
"enableNativeQueryParsing": false,
"groupPattern": { "deny": "<your-exemption-group>" },
"jobConfig": {
"workspaceDirectoryPath": "/Workspace/ImmutaArtifacts",
"jobClusterId": "undefined"
}
}
}'Authority URL of your identity provider.
Yes
config.catalog string
The name of the Databricks 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.
Yes
config.audit object
This object enables Databricks Unity Catalog query audit.
No
config.audit.enabled boolean
If true, Databricks Unity Catalog query audit is enabled. Set to true for the recommended configuration.
No
The HTTP path of your Databricks cluster or SQL warehouse.
Yes
connection.authenticationType string
The authentication type to register the connection. Make sure this auth type is the same used when requesting the script.
Yes
connection.oAuthClientConfig object
The oAuthClientConfig object represents your OAuth configuration in Databricks Unity Catalog.
Yes
connection.oAuthClientConfig.clientId string
The client identifier of the Immuta service principal you configured. This is the client ID displayed in Databricks when creating the client secret for the service principal.
Yes
connection.oAuthClientConfig.clientSecret string
Yes
connection.oAuthClientConfig.authorityUrl string
Authority URL of your identity provider.
Yes
settings object
Specifications of the connection's settings, including status.
No
settings.isActive boolean
When false, data objects will be inactive (disabled) by default when created in Immuta. Set to false for the recommended configuration.
If you set this to true for a data object and it has no subscription policy set on it, Immuta will REVOKE access to the data in Databricks for all Immuta users, even if they had been directly granted access to the table in Unity Catalog.
If a user is not registered in Immuta, Immuta will have no effect on that user's access to data in Unity Catalog. See the Databricks Unity Catalog reference guide for more details.
No
options object
Specification of the connection's default behavior for object crawls.
No
options.forceRecursiveCrawl boolean
If false, only active (enabled) objects will be crawled. If true, both active (enabled) and inactive (disabled) data objects will be crawled; any child objects from inactive (disabled) objects will be set as inactive (disabled). Set to true for the recommended configuration.
No
nativeIntegration object
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
nativeIntegration.type string
Same as connection.technology
Yes
nativeIntegration.autoBootstrap boolean
Use the same setting as the script generation.
Yes
nativeIntegration.unityCatalog boolean
Use the same setting as the script generation.
Yes
nativeIntegration.config.authenticationType string
Same as connection.authenticationType
Yes
nativeIntegration.config.oAuthClientConfig object
Same as connection.oAuthClientConfig
Yes
nativeIntegration.config.host string
Same as connection.hostname
Yes
nativeIntegration.config.port integer
Same as connection.port
Yes
nativeIntegration.config.catalog string
Use the same setting as the script generation.
Yes
nativeIntegration.config.audit object
Use the same setting as the script generation.
Yes
nativeIntegration.config.workspaceIds array
Use the same setting as the script generation.
No
nativeIntegration.config.enableNativeQueryParsing boolean
Use the same setting as the script generation.
No
nativeIntegration.config.groupPattern object
Use the same setting as the script generation.
No
nativeIntegration.config.jobConfig.workspaceDirectoryPath string
Use the same setting as the script generation.
No
nativeIntegration.config.jobConfig.jobClusterId string
Use the same setting as the script generation.
No