The connection API is a REST API which allows users to register a Snowflake 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.
Requirements
The following permissions and personas are used in the registration process:
Immuta permission: CREATE_DATA_SOURCE
Snowflake permissions for the user registering the connection and running the script:
CREATE DATABASE ON ACCOUNT WITH GRANT OPTION
CREATE ROLE ON ACCOUNT WITH GRANT OPTION
CREATE 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
USAGE on the schema and database to register data sources
Snowflake permissions for the new Immuta system user that is created:
APPLY MASKING POLICY ON ACCOUNT
APPLY ROW ACCESS POLICY ON ACCOUNT
Additional grants associated with the IMMUTA database
Complete the following steps to register a Snowflake connection:
Use the /integrations/scripts/create endpoint to receive a script.
Run the script in Snowflake.
Use the /data/connection endpoint to finish registering your connection in Immuta.
Step 1: Generate the script
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.
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
config.databasestring
Name of a new empty database that the Immuta system user will manage and store metadata in.
Yes
config.usernamestring
The new username of the system account that can act on Snowflake objects and register the connection. The system account will be created by the script in step two.
Yes
config.passwordstring
The password of the system account that can act on Snowflake objects and register the connection. The system account will be created by the script in step two.
Yes
config.auditobject
This object enables Snowflake query audit.
No
config.audit.enabledboolean
If true, Snowflake query audit is enabled. Set to true for the recommended configuration.
No
config.workspacesobject
This object represents an Immuta project workspace configured for Snowflake.
No
config.workspaces.enabledboolean
If true, Snowflake project workspaces are enabled. If you use Snowflake table grants, set to false because table grants and project workspaces cannot be used together. Set to false for the recommended configuration.
No
config.impersonationobject
This object enables user impersonation.
No
config.impersonation.enabledboolean
If true, user impersonation is enabled. If you use Snowflake low row access policy mode, set to false because that mode and impersonation cannot be used together.
No
config.lineageobject
This object enables Snowflake lineage ingestion.
No
config.lineage.enabledboolean
If true, Snowflake lineage is enabled. Set false for the recommended configuration.
No
config.userRolePatternobject
This object excludes roles and users from authorization checks.
No
config.userRolePattern.excludearray
This array is a list of roles and users to exclude from authorization checks. The roles and users will not have policies applied to them when querying Immuta protected Snowflake tables.
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
config.databasestring
Name of a new empty database that the Immuta system user will manage and store metadata in.
Yes
config.usernamestring
The username of the system account that can act on Snowflake objects and register the connection.
Yes
config.privateKeystring
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.auditobject
This object enables Snowflake query audit.
No
config.audit.enabledboolean
If true, Snowflake query audit is enabled. Set to true for the recommended configuration.
No
config.workspacesobject
This object represents an Immuta project workspace configured for Snowflake.
No
config.workspaces.enabledboolean
If true, Snowflake project workspaces are enabled. If you use Snowflake table grants, set to false because table grants and project workspaces cannot be used together. Set to false for the recommended configuration.
No
config.impersonationobject
This object enables user impersonation.
No
config.impersonation.enabledboolean
If true, user impersonation is enabled. If you use Snowflake low row access policy mode, set to false because that mode and impersonation cannot be used together.
No
config.lineageobject
This object enables Snowflake lineage ingestion.
No
config.lineage.enabledboolean
If true, Snowflake lineage is enabled. Set false for the recommended configuration.
No
config.userRolePatternobject
This object excludes roles and users from authorization checks.
No
config.userRolePattern.excludearray
This array is a list of roles and users to exclude from authorization checks. The roles and users will not have policies applied to them when querying Immuta protected Snowflake tables.
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.auditobject
This object enables Snowflake query audit.
No
config.audit.enabledboolean
If true, Snowflake query audit is enabled. Set to true for the recommended configuration.
No
config.workspacesobject
This object represents an Immuta project workspace configured for Snowflake.
No
config.workspaces.enabledboolean
If true, Snowflake project workspaces are enabled. If you use Snowflake table grants, set to false because table grants and project workspaces cannot be used together. Set to false for the recommended configuration.
No
config.impersonationobject
This object enables user impersonation.
No
config.impersonation.enabledboolean
If true, user impersonation is enabled. If you use Snowflake low row access policy mode, set to false because that mode and impersonation cannot be used together.
No
config.lineageobject
This object enables Snowflake lineage ingestion.
No
config.lineage.enabledboolean
If true, Snowflake lineage is enabled. Set false for the recommended configuration.
No
config.userRolePatternobject
This object excludes roles and users from authorization checks.
No
config.userRolePattern.excludearray
This array is a list of roles and users to exclude from authorization checks. The roles and users will not have policies applied to them when querying Immuta protected Snowflake tables.
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
config.databasestring
Name of a new empty database that the Immuta system user will manage and store metadata in.
Yes
config.oAuthClientConfig.providerstring
The identity provider for OAuth, such as Okta.
Yes
config.oAuthClientConfig.clientIdstring
The client identifier of your registered application.
Yes
config.oAuthClientConfig.authorityUrlstring
Authority URL of your identity provider.
Yes
config.oAuthClientConfig.clientSecretstring
Client secret of the application.
Yes
config.auditobject
This object enables Snowflake query audit.
No
config.audit.enabledboolean
If true, Snowflake query audit is enabled. Set to true for the recommended configuration.
No
config.workspaceobject
This object represents an Immuta project workspace configured for Snowflake.
No
config.workspaces.enabledboolean
If true, Snowflake project workspaces are enabled. If you use Snowflake table grants, set to false because table grants and project workspaces cannot be used together. Set to false for the recommended configuration.
No
config.impersonationobject
This object enables user impersonation.
No
config.impersonation.enabledboolean
If true, user impersonation is enabled. If you use Snowflake low row access policy mode, set to false because that mode and impersonation cannot be used together.
No
config.lineage object
This object enables Snowflake lineage ingestion.
No
config.lineage.enabled boolean
If true, Snowflake lineage is enabled. Set false for the recommended configuration.
No
config.userRolePattern object
This object excludes roles and users from authorization checks.
No
config.userRolePattern array
This array is a list of roles and users to exclude from authorization checks. The roles and users will not have policies applied to them when querying Immuta protected Snowflake tables.
No
Step 2: Run the script in Snowflake
Using your generated script, run it in your Snowflake environment as a user with the permissions listed in the requirements section.
The script will create an Immuta system user that will authenticate using the credentials you specified in the script generation. This new system user will have the permissions listed above. Additionally, the script will create the database you specified in the earlier step.
Step 3: Create the connection in Immuta
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 Connection registration payloads reference guide. The recommended setting values are included in the example.
Test run
Opt to test and validate the create connection payload using a dry run:
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
connection.hostnamestring
The URL of your Snowflake account. This should be the same as nativeIntegration.config.host.
Yes
connection.portinteger
The port to use when registering your Snowflake connection. Defaults to 443.
Yes
connection.warehousestring
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
connection.rolestring
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.usernamestring
The username of the system account that can act on Snowflake objects and register the connection.
Yes
connection.passwordstring
The password of the system account that can act on Snowflake objects and register the connection.
Yes
settingsarray
Specifications of the connection's settings, including active status.
No
settings.isActiveboolean
When false, data objects will be inactive by default when created in Immuta. Set to false for the recommended configuration.
No
options.forceRecursiveCrawlboolean
If false, only active objects will be crawled. If true, both active and inactive data objects will be crawled; any child objects from inactive objects will be set as inactive. Set to true for the recommended configuration.
No
nativeIntegrationobject
Configuration attributes that should match the values used when getting the script from the integration endpoint. See the table above for descriptions.
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
connection.hostnamestring
The URL of your Snowflake account. This is the same as host.
Yes
connection.portinteger
The port to use when registering your Snowflake connection. Defaults to 443.
Yes
connection.warehousestring
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
connection.rolestring
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.usernamestring
The username of the system account that can act on Snowflake objects and register the connection.
Yes
connection.privateKeyPasswordstring
The Snowflake private key password. Required if the private key is encrypted.
No
connection.privateKey.userFilenamestring
The name of your private key file on your machine.
Yes
connection.privateKey.contentstring
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
settingsarray
Specifications of the connection's settings, including active status.
No
settings.isActiveboolean
If false, data objects will be inactive by default when created in Immuta. Set to false for the recommended configuration.
No
options.forceRecursiveCrawlboolean
If false, only active objects will be crawled. If true, both active and inactive data objects will be crawled; any child objects from inactive objects will be set as inactive. Set to true for the recommended configuration.
No
nativeIntegrationobject
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
connection.hostnamestring
The URL of your Snowflake account. This is the same as host.
Yes
connection.portinteger
The port to use when registering your Snowflake connection. Defaults to 443.
Yes
connection.warehousestring
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
connection.rolestring
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.clientIdstring
The client identifier of your registered application.
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
settingsarray
Specifications of the connection's settings, including active status.
No
settings.isActiveboolean
When false, data objects will be inactive by default when created in Immuta. Set to false for the recommended configuration.
No
options.forceRecursiveCrawlboolean
If false, only active objects will be crawled. If true, both active and inactive data objects will be crawled; any child objects from inactive objects will be set as inactive. Set to true for the recommended configuration.
No
nativeIntegrationobject
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Configuration attributes that should match the values used when getting the script from the integration endpoint.
Yes
connection.hostnamestring
The URL of your Snowflake account. This is the same as host.
Yes
connection.portinteger
The port to use when registering your Snowflake connection. Defaults to 443.
Yes
connection.warehousestring
The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
Yes
connection.rolestring
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.clientIdstring
The client identifier of your registered application.
Yes
connection.oAuthClientConfig.authorityUrlstring
Authority URL of your identity provider.
Yes
connection.oAuthClientConfig.clientSecretstring
Client secret of the application.
Yes
connection.oAuthClientConfig.resourcestring
An optional resource to pass to the token provider.
No
settingsarray
Specifications of the connection's settings, including active status.
No
settings.isActiveboolean
When false, data objects will be inactive by default when created in Immuta. Set to false for the recommended configuration
No
options.forceRecursiveCrawlboolean
If false, only active objects will be crawled. If true, both active and inactive data objects will be crawled; any child objects from inactive objects will be set as inactive. Set to true for the recommended configuration.
No
nativeIntegrationobject
Configuration attributes that should match the values used when getting the script from the integration endpoint.
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.
bulkIdstring
A bulk ID that can be used to search for the status of background jobs triggered by this request.