All pages
Powered by GitBook
1 of 7

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Configure a Starburst (Trino) Integration

Deprecation notice

Support for configuring the Starburst (Trino) integration using this legacy workflow has been deprecated. Instead, configure your integration and register your data using .

The Starburst (Trino) resource allows you to create and manage your Starburst (Trino) integration. In this integration, Immuta policies are translated into Starburst rules and permissions and applied directly to tables within users’ existing catalogs.

Use the /integrations endpoint to

  • configure a Starburst (Trino) integration

  • get a Starburst (Trino) integration

  • APPLICATION_ADMIN Immuta permission

  • A valid

To configure the Starburst (Trino) integration, complete the following steps:

  1. Copy the request example. The example provided uses JSON format, but the request also accepts YAML.

  2. Replace the Immuta URL and with your own.

The response returns the status of the Starburst (Trino) integration configuration connection. See the for details about the response schema.

A successful response includes the validation tests statuses.

An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

  1. Navigate to the Immuta App Settings page and click the Integrations tab.

  2. Click your enabled Starburst (Trino) integration and copy the configuration snippet displayed.

  3. Follow the steps in the to add the configuration in the appropriate immuta-access-control.properties file to finish configuring your cluster.

  1. Copy the request example.

  2. Replace the Immuta URL and with your own.

  3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the .

The response returns a Starburst (Trino) integration configuration and the Immuta API key used to configure the Starburst cluster. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

  1. Copy the request example.

  2. Replace the Immuta URL and with your own.

The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

  1. .

  2. Copy the request example below and replace these values:

    • Replace the Immuta URL and with your own.

The response includes your new Immuta API key.

  1. Copy the request example.

  2. Replace the Immuta URL and with your own.

  3. Replace the {id} request parameter with the unique identifier of the integration you want to delete.

The response returns the status of the Starburst (Trino) integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

Replace the {id} request parameter with the unique identifier of the Starburst (Trino) integration you want to regenerate the Immuta API key for.

Once you make this request, your old Immuta API key will be deleted and will no longer be valid.

  • The response includes your new Immuta API key. Replace the old immuta.apikey value in the Immuta access control properties file with this new key.

  • Enable your Starburst (Trino) cluster.

  • Requirements

    Configure the integration

    Generate the configuration snippet

    Response

    Configure the cluster

    Get an integration

    Response

    Get all integrations

    Response

    Generate a new Immuta API key

    Cluster restart required

    To update your API key in Starburst (Trino), you must shut down your cluster, generate and update the API key, and then restart your cluster. If you do not shut down your cluster, generating a new API key using the endpoint below will cause downtime for your deployment.

    Response

    Delete an integration

    Response

    get all integrations
    generate a new Immuta API key
    delete a Starburst (Trino) integration
    Starburst Enterprise license
    Generate the configuration snippet
    Configure your Starburst cluster
    API key
    response schema reference
    HTTP status codes and error messages
    customize the Immuta system access control plugin page
    API key
    GET /integrations endpoint
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    Disable your Starburst (Trino) cluster
    API key
    API key
    response schema reference
    HTTP status codes and error messages
    connections
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Trino"
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [ ]
      }
    }
    {
      "statusCode": 422,
      "error": "Unprocessable entity",
      "message": "Validation of prerequisite setup failed. Unable to create integration."
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "enabled",
      "type": "Trino",
      "config": {
        "apiKey": "3ea2cde7******461b02ebaa"
      }
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Initial Validation: Basic Connection Test",
              "status": "passed"
            },
            {
              "name": "Initial Validation: Default Warehouse Access Test",
              "status": "passed",
              "result": []
            },
            {
              "name": "Initial Validation: Validate access to Privileged Role",
              "status": "passed",
              "result": []
            },
            {
              "name": "Validate Automatic: Database Does Not Exist",
              "status": "passed"
            },
            {
              "name": "Validate Automatic: Impersonation Role Does Not Exist",
              "status": "skipped"
            },
            {
              "name": "Validate Automatic Bootstrap User Grants",
              "status": "passed"
            }
          ]
        },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
      },
      {
        "id": "2",
        "status": "enabled",
        "type": "Databricks",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Metastore validation",
              "status": "passed"
            },
            {
              "name": "Basic Connection Test",
              "result": [
                {
                  "1": 1
                }
              ],
              "status": "passed"
            }
          ]
        },
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "token": "REDACTED",
          "audit": {
            "enabled": false
          },
          "catalog": "immuta"
        }
      }
    ]
    { "newKey": "5bb6cae9******300c21acbb" }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": []
      }
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/{id}/regenerate' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'

    How-to Guides

    The how-to guides in this section illustrate how to integrate your remote data platform with Immuta so you can manage and enforce access controls on your data.

    Immuta generates policy-enforced views in your configured Redshift schema for tables registered as Immuta data sources.

    Follow this guide to configure and manage your Amazon Redshift Spectrum integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    Private preview: This integration is available to select accounts. Contact your Immuta representative for details.

    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.

    Follow this guide to configure and manage your Amazon S3 integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    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.

    Follow this guide to configure and manage your Azure Synapse Analytics integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    Immuta’s integration with Unity Catalog allows you to manage multiple Databricks workspaces through Unity Catalog while protecting your data 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 enforce Unity Catalog access-control policies on your data in Databricks clusters or SQL warehouses.

    Follow this guide to configure and manage your Databricks Unity Catalog integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    In this integration, Immuta generates policy-enforced views in your configured Google BigQuery dataset for tables registered as Immuta data sources.

    Follow this guide to configure and manage your Google BigQuery integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    Immuta manages access to Snowflake tables by administering Snowflake row access policies and column masking policies on those tables, allowing users to query tables directly in Snowflake while dynamic policies are enforced.

    Follow this guide to configure and manage your Snowflake integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    Immuta policies are translated into Starburst rules and permissions and applied directly to tables within users’ existing catalogs.

    Follow this guide to configure and manage your Starburst (Trino) integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    Private preview: This integration is available to all accounts.

    Amazon Redshift Spectrum integration API guide
    Amazon S3 integration API guide
    Azure Synapse Analytics integration API guide
    Databricks Unity Catalog integration API guide
    Google BigQuery integration API guide
    Snowflake integration API guide
    Starburst (Trino) integration API guide

    Configure a Google BigQuery View-Based Integration

    Use the API to set up your Google BigQuery view-based integration

    Private preview: This integration is available to all accounts.

    The Google BigQuery resource allows you to create, configure, and manage your Google BigQuery view-based integration. In this integration, Immuta generates policy-enforced views in your configured Google BigQuery dataset for tables registered as Immuta data sources.

    Use the /integrations endpoint to

    • configure a Google BigQuery view-based integration

    • get a Google BigQuery view-based integration

    • APPLICATION_ADMIN Immuta permission

    • Google BigQuery view-based integration enabled in Immuta (work with your Immuta representative to enable this integration)

    • To execute the Immuta script from your command line to , you must be authenticated to the gcloud CLI utility as a user with all of the following roles:

    by either using the Google Cloud console or the provided Immuta script.

    1. Copy the request example. The example uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    3. Change the config values to your own, where

    See the for parameter definitions, value types, and additional configuration options.

    The response returns the status of the integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the .

    The response returns an integration configuration. See the for details about the response schema. An unsuccessful response returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example, which updates the private key. The example uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    See the for parameter definitions, value types, and additional configuration options.

    The response returns the status of the integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to delete.

    The response returns the status of the integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    roles/iam.roleAdmin

  • roles/iam.serviceAccountAdmin

  • roles/serviceusage.serviceUsageAdmin

  • role is the Google Cloud role used to connect to Google BigQuery.
  • datasetSuffix is the suffix to postfix to the name of each dataset created to store secure views. This string must start with an underscore.

  • dataset is the name of the BigQuery dataset to provision inside of the project for Immuta metadata storage.

  • location is the dataset's location, which can be any valid GCP location (such as us-east-1).

  • credential is the Google BigQuery service account JSON keyfile credential content. See the Google documentation for guidance on generating and downloading this keyfile.

  • Change the config values to your own, where
    • role is the Google Cloud role used to connect to Google BigQuery.

    • datasetSuffix is the suffix to postfix to the name of each dataset created to store secure views. This string must start with an underscore.

    • dataset is the name of the BigQuery dataset to provision inside of the project for Immuta metadata storage.

    • location is the dataset's location, which can be any valid GCP location (such as us-east-1).

    • credential is the Google BigQuery service account JSON keyfile credential content. See the for guidance on generating and downloading this keyfile.

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Google BigQuery",
        "autoBootstrap": false,
        "config": {
          "role": "immuta",
          "datasetSuffix": "_secureView",
          "dataset": "immuta",
          "location": "us-east-1",
          "credential": "{\"type\":\"service_account\",\"project_id\":\"innate-conquest-123456\",\"private_key_id\":\"9163c12345690924f5dd218ff39\",\"private_key\":\"-----BEGIN PRIVATE KEY-----\nXXXXXXXro0s\n/yQlPQijowkccmrmWJyr93kdLnwJzBvLHCto/+W\ncvF2ygX9oM/dyUK//z//4nptMp+Ck//Yw3D4rIBwGu4DWiR1qRnf\nDoGyXfThPTQ==\n-----END PRIVATE KEY-----\n\",\"client_email\":\"service-account-id@innate-conquest-123456.iam.gserviceaccount.com\",\"client_id\":\"1166290***432952487857\",\"auth_uri\":\"https://accounts.google.com/o/oauth2/auth\",\"token_uri\":\"https://oauth2.googleapis.com/token\",\"auth_provider_x509_cert_url\":\"https://www.googleapis.com/oauth2/v1/certs\",\"client_x509_cert_url\":\"https://www.googleapis.com/robot/v1/metadata/x509/service-account-id%40innate-conquest-123456.iam.gserviceaccount.com\",\"universe_domain\":\"googleapis.com\"}"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Basic Validation: Verify service account not being used for data source connection credentials",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Immuta Service Account postfix",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Non-matching service account in key file",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Connection can be made to BigQuery",
          "status": "passed"
        },
        {
          "name": "Initialize Validation: [Dataset - exists] innate-conquest-123456.immuta",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Dataset - create] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Table - create] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Table - insert] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "warning",
          "message": "Billing has not been enabled for this project. Enable billing at https://console.cloud.google.com/billing. DML queries are not allowed in the free tier. Set up a billing account to remove this restriction. Confirm that the bootstrap script was executed without any modifications. This warning will not prevent the connection but continue at your own risk as some features may not function."
        },
        {
          "name": "Validate Manual: [Table - get] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE (After insert)",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - update] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - get] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE (After update)",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - delete] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Dataset - delete] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Google BigQuery integration already exists on host organization.cloud.google.com (id = 123456789)"
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Basic Validation: Verify service account not being used for data source connection credentials",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Immuta Service Account postfix",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Non-matching service account in key file",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Connection can be made to BigQuery",
          "status": "passed"
        },
        {
          "name": "Initialize Validation: [Dataset - exists] innate-conquest-123456.immuta",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Dataset - create] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Table - create] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Table - insert] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "warning",
          "message": "Billing has not been enabled for this project. Enable billing at https://console.cloud.google.com/billing. DML queries are not allowed in the free tier. Set up a billing account to remove this restriction. Confirm that the bootstrap script was executed without any modifications. This warning will not prevent the connection but continue at your own risk as some features may not function."
        },
        {
          "name": "Validate Manual: [Table - get] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE (After insert)",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - update] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - get] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE (After update)",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - delete] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Dataset - delete] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144",
          "status": "passed"
        }
        ]
      },
      "type": "Google BigQuery",
      "autoBootstrap": false,
      "config": {
        "port": 443,
        "role": "immuta",
        "datasetSuffix": "_secureView",
        "dataset": "immuta",
        "location": "us-east-1",
        "credential": {
          "type": "service_account",
          "project_id": "innate-conquest-123456",
          "private_key_id": "9163c12345690924f5dd218ff39",
          "private_key": "-----BEGIN PRIVATE KEY-----\nXXXXXXXro0s\n/yQlPQijowkccmrmWJyr93kdLnwJzBvLHCto/+W\ncvF2ygX9oM/dyUK//z\//4nptMp+Ck//Yw3D4rIBwGu4DWiR1qRnf\nDoGyXfThPTQ==\n-----END PRIVATE KEY-----\n",
          "client_email": "service-account-id@innate-conquest-123456.iam.gserviceaccount.com",
          "client_id": "1166290***432952487857",
          "auth_uri": "https://accounts.google.com/o/oauth2/auth",
          "token_uri": "https://oauth2.googleapis.com/token",
          "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
          "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-id%40innate-conquest-123456.iam.gserviceaccount.com",
          "universe_domain": "googleapis.com"
        }
      }
      }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Initial Validation: Basic Connection Test",
              "status": "passed"
            },
            {
              "name": "Initial Validation: Default Warehouse Access Test",
              "status": "passed",
              "result": []
            },
            {
              "name": "Initial Validation: Validate access to Privileged Role",
              "status": "passed",
              "result": []
            },
            {
              "name": "Validate Automatic: Database Does Not Exist",
              "status": "passed"
            },
            {
              "name": "Validate Automatic: Impersonation Role Does Not Exist",
              "status": "skipped"
            },
            {
              "name": "Validate Automatic Bootstrap User Grants",
              "status": "passed"
            }
          ]
        },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
      },
      {
        "id": "2",
        "status": "enabled",
        "type": "Databricks",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Metastore validation",
              "status": "passed"
            },
            {
              "name": "Basic Connection Test",
              "result": [
                {
                  "1": 1
                }
              ],
              "status": "passed"
            }
          ]
        },
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "token": "REDACTED",
          "audit": {
            "enabled": false
          },
          "catalog": "immuta"
        }
      }
    ]
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Google BigQuery",
        "autoBootstrap": false,
        "config": {
          "role": "immuta",
          "datasetSuffix": "_secureView",
          "dataset": "immuta",
          "location": "us-east-1",
          "credential": "{\"type\":\"service_account\",\"project_id\":\"innate-conquest-123456\",\"private_key_id\":\"9163c12345690924f5dd218ff39\",\"private_key\":\"-----BEGIN PRIVATE KEY-----\nXXXXXXXro0s\n/yQlPQijowkccmrmWJyr93kdLnwJzBvLHCto/+W\ncvF2ygX9oM/dyUK//z//4nptMp+Ck//Yw3D4rIBwGu4DWiR1qRnf\nDoGyXfThPTQ==\n-----END PRIVATE KEY-----\n\",\"client_email\":\"service-account-id@innate-conquest-123456.iam.gserviceaccount.com\",\"client_id\":\"1166290***432952487857\",\"auth_uri\":\"https://accounts.google.com/o/oauth2/auth\",\"token_uri\":\"https://oauth2.googleapis.com/token\",\"auth_provider_x509_cert_url\":\"https://www.googleapis.com/oauth2/v1/certs\",\"client_x509_cert_url\":\"https://www.googleapis.com/robot/v1/metadata/x509/service-account-id%40innate-conquest-123456.iam.gserviceaccount.com\",\"universe_domain\":\"googleapis.com\"}"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Basic Validation: Verify service account not being used for data source connection credentials",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Immuta Service Account postfix",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Non-matching service account in key file",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Connection can be made to BigQuery",
          "status": "passed"
        },
        {
          "name": "Initialize Validation: [Dataset - exists] innate-conquest-123456.immuta",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Dataset - create] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Table - create] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Table - insert] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "warning",
          "message": "Billing has not been enabled for this project. Enable billing at https://console.cloud.google.com/billing. DML queries are not allowed in the free tier. Set up a billing account to remove this restriction. Confirm that the bootstrap script was executed without any modifications. This warning will not prevent the connection but continue at your own risk as some features may not function."
        },
        {
          "name": "Validate Manual: [Table - get] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE (After insert)",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - update] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - get] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE (After update)",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - delete] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Dataset - delete] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Basic Validation: Verify service account not being used for data source connection credentials",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Immuta Service Account postfix",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Non-matching service account in key file",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Connection can be made to BigQuery",
          "status": "passed"
        }
        ]
      }
    }

    Requirements

    Prerequisite

    Configure the integration

    Response

    Get an integration

    Response

    Get all integrations

    Response

    Update an integration configuration

    Response

    Delete an integration

    Response

    get all integrations
    update a Google BigQuery view-based integration
    delete a Google BigQuery view-based integration
    create a Google Cloud service account and role
    Create a Google Cloud service account and role
    API key
    config object description
    response schema reference
    HTTP status codes and error messages
    API key
    GET /integrations endpoint
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    API key
    config object description
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    Google documentation

    Configure an Amazon Redshift Spectrum Integration

    Use the API to set up your Amazon Redshift Spectrum integration

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

    Use the /integrations endpoint to

    • configure an Amazon Redshift Spectrum integration

    • get an Amazon Redshift Spectrum integration

    • A Redshift cluster with an AWS row-level security patch applied. for guidance.

    • that is .

    • The must be set to false (default setting) for your Redshift cluster.

    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

    To configure the integration, complete the following steps:

    1. .

    You have two options for setting up the database Immuta will use to manage the integration and enforce policies:

    • Configure the integration with an existing database that contains the external tables. When configuring the integration, specify an existing database in Amazon Redshift as the database in which Immuta will add the Immuta-managed schemas and views.

      If using an existing database, the Redshift role used to run the Immuta bootstrap script must have the following privileges:

      • ALL PRIVILEGES ON DATABASE for the database you configure the integration with, as you must manage grants on that database.

    1. Copy the request example. The example provided uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    3. Change the config values to your own, where

    See the for parameter definitions, value types, and additional configuration options.

    Response

    The response returns the script for you to run in the existing or new database you created for the Immuta system user.

    1. Copy the request example. The example provided uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    3. Pass the same payload you sent when , where

    See the for parameter definitions, value types, and additional configuration options.

    The response returns the status of the Amazon Redshift Spectrum integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the .

    The response returns an Amazon Redshift Spectrum integration configuration. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    To update the integration, complete the following steps:

    1. Copy the request example. The example provided uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    See the for parameter definitions, value types, and additional configuration options.

    Response

    The response returns the script for you to run in your Amazon Redshift environment.

    1. Copy the request example. The example provided uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    See the for parameter definitions, value types, and additional configuration options.

    The response returns the status of the Amazon Redshift Spectrum integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Use the script endpoint (for integrations that were not successfully created) or the endpoint (for integrations that were successfully created) to remove Immuta-managed resources from your Amazon Redshift environment.

    2. Copy the request example.

    3. Replace the Immuta URL and with your own.

    The response returns the status of the Amazon Redshift Spectrum integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    A Redshift database that contains an external schema and external tables.

    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

  • CREATE USER

  • GRANT TEMP ON DATABASE

  • Create a new database: 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. When configuring the integration, specify this new database you created in Amazon Redshift as the database in which Immuta will add the Immuta-managed schemas and views. If creating a new database, the Redshift role used to run the Immuta bootstrap script must have the following privileges:

    • CREATE DATABASE

    • CREATE USER

    • GRANT TEMP ON DATABASE

    • REVOKE ALL PRIVILEGES ON DATABASE

  • host is the URL of your Redshift account.
  • database is the name of the existing or new database that the Immuta system user will manage and store metadata in.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters. 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.

  • username and password are the credentials for the system account that can act on Redshift objects and configure the integration.

  • Run the script returned in the response in the existing or new database you created in Amazon Redshift.

  • host is the URL of your Redshift account.
  • database is the name of the existing or new database that the Immuta system user will manage and store metadata in.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters. 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.

  • username and password are the credentials for the system account that can act on Redshift objects and configure the integration.

  • Change the config values to your own, where
    • host is the URL of your Redshift account.

    • database is the name of the existing or new database that the Immuta system user will manage and store metadata in.

    • impersonation specifies whether user impersonation is enabled. See the object description for child parameters. 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.

    • username and password are the credentials for the system account that can act on Redshift objects and configure the integration.

  • Run the script returned in the response in your Amazon Redshift environment.

  • Pass the same payload you sent when updating the script, where
    • host is the URL of your Redshift account.

    • database is the name of the existing or new database that the Immuta system user will manage and store metadata in.

    • impersonation specifies whether user impersonation is enabled. See the object description for child parameters. 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.

    • username and password are the credentials for the system account that can act on Redshift objects and configure the integration.

    Replace the {id} request parameter with the unique identifier of the integration you want to delete.

    Requirements

    Permissions

    Configure the integration

    Setup the Immuta database

    Generate the script

    Configure the integration in Immuta

    Response

    Get an integration

    Response

    Get all integrations

    Response

    Update an integration configuration

    Generate the updated script

    Update the integration in Immuta

    Response

    Delete an integration

    Response

    get all integrations
    update an Amazon Redshift Spectrum integration
    delete an Amazon Redshift Spectrum integration
    Contact Immuta
    An AWS IAM role for Redshift
    associated with your Redshift cluster
    enable_case_sensitive_identifier parameter
    Set up an Immuta database in Amazon Redshift
    Generate the Immuta script and run it inside the database you created.
    Configure the integration in Immuta.
    API key
    config object description
    API key
    generating the script
    config object description
    response schema reference
    HTTP status codes and error messages
    API key
    GET /integrations endpoint
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    Generate the updated Immuta script and run it in your Redshift environment.
    Update the integration in Immuta.
    API key
    config object description
    API key
    config object description
    response schema reference
    HTTP status codes and error messages
    cleanup
    delete
    API key
    response schema reference
    HTTP status codes and error messages
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": false,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "taylor@redshift.com",
          "password": "abc1234"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": false,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "taylor@redshift.com",
          "password": "abc1234"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "result": [null],
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Immuta Database Does Not Exist",
          "result": [],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Redshift integration already exists on host organization.aws.amazon.com (id = 123456789)"
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "result": [null],
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Immuta Database Does Not Exist",
          "result": [],
          "status": "passed"
        }
        ]
      },
      "type": "Redshift",
      "autoBootstrap": false,
      "config": {
        "host": "organization.aws.amazon.com",
        "database": "immuta",
        "port": 5439,
        "impersonation": {
          "enabled": false
        },
        "authenticationType": "userPassword",
        "username": "<REDACTED>",
        "password": "<REDACTED>"
      }
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Initial Validation: Basic Connection Test",
              "status": "passed"
            },
            {
              "name": "Initial Validation: Default Warehouse Access Test",
              "status": "passed",
              "result": []
            },
            {
              "name": "Initial Validation: Validate access to Privileged Role",
              "status": "passed",
              "result": []
            },
            {
              "name": "Validate Automatic: Database Does Not Exist",
              "status": "passed"
            },
            {
              "name": "Validate Automatic: Impersonation Role Does Not Exist",
              "status": "skipped"
            },
            {
              "name": "Validate Automatic: User Grants",
              "status": "passed"
            }
          ]
        },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
      },
      {
        "id": "2",
        "status": "enabled",
        "type": "Databricks",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Metastore validation",
              "status": "passed"
            },
            {
              "name": "Basic Connection Test",
              "result": [
                {
                  "1": 1
                }
              ],
              "status": "passed"
            }
          ]
        },
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "token": "REDACTED",
          "audit": {
            "enabled": false
          },
          "catalog": "immuta"
        }
      }
    ]
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/{id}/scripts/edit' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": false,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "taylor@redshift.com",
          "password": "abc1234"
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": false,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "taylor@redshift.com",
          "password": "abc1234"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "result": [null],
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Immuta Database Does Not Exist",
          "result": [],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "result": [null],
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Immuta Database Does Not Exist",
          "result": [],
          "status": "passed"
        }
        ]
      }
    }

    Configure an Amazon S3 Integration

    Use the API to set up your Amazon S3 integration

    Private preview: This integration is available to select accounts. Contact your Immuta representative for details.

    The Amazon S3 resource allows you to create, configure, and manage your S3 integration. In this integration, Immuta provides coarse-grained access controls for data in S3 by performing permission grants using the Access Grants API so that users don't have to manage individual IAM policies themselves.

    Use the /integrations endpoint to

    • configure an Amazon S3 integration

    • S3 integration enabled in Immuta; contact your Immuta representative to enable this integration

    • ; contact your Immuta representative to get this feature enabled

    • No location is registered in your AWS Access Grants instance before configuring the integration 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:

    1. . AWS supports one Access Grants instance per region per AWS account.

    2. 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:

    1. role and select AWS account as the trusted entity type.

    2. 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.

    3. 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.

    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

    This request configures the integration using the AWS access key authentication method.

    1. Copy the request example. The example uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    3. Change the config values to your own, where

    See the for parameter definitions, value types, and additional configuration options.

    The response returns the status of the S3 integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the .

    The response returns an S3 integration configuration. See the for details about the response schema. An unsuccessful response returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Copy the request example, and replace the values with your own as directed to update the integration settings. The example provided uses JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values from above to your own. The editable values listed below are the only parameters that can change from the integration's existing configuration. The required parameters listed below must match the integration's existing configuration.

    The response returns the status of the Amazon S3 integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to delete.

    The response returns the status of the S3 integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    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 Amazon S3 integration reference guide for instructions on mapping users from AWS IDC to user accounts in Immuta.

    Location IAM role: The S3 Access Grants service assumes this role to vend credentials to the querying user. Permissions required for this IAM 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 permissions to perform the following actions to create locations and issue grants:

      • accessgrantslocation resource:

        • s3:CreateAccessGrant

        • s3:DeleteAccessGrantsLocation

        • s3:GetAccessGrantsLocation

      • accessgrantsinstance resource:

        • s3:CreateAccessGrantsInstance

        • s3:CreateAccessGrantsLocation

      • accessgrant resource:

        • s3:DeleteAccessGrant

        • s3:GetAccessGrant

      • bucket resource: s3:ListBucket

      • role resource:

        • iam:GetRole

        • iam:PassRole

      • all resources: s3:ListAccessGrantsInstances

  • kms:Decrypt
  • kms:GenerateDataKey

  • Replace <bucket_arn> in the example below with the ARN of the bucket scope that contains data you want to grant access to.

    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 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 to the authentication 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 authenticate with AWS and set up the integration.

  • name is the name for the integration that is unique across all Amazon S3 integrations configured in Immuta.

  • awsAccountId is the ID of your AWS account.

  • awsRegion is the account's AWS region (such as us-east-1).

  • awsLocationRole is the AWS IAM role ARN assigned to the base access grants location. This is the role the AWS Access Grants service assumes to vend credentials to the grantee.

  • awsLocationPath is the base S3 location prefix that Immuta will use for this connection when registering S3 data sources. This path must be unique across all S3 integrations configured in Immuta.

  • awsAccessKeyId is the AWS access key ID of the AWS account configuring the integration.

  • awsSecretAccessKey is the AWS secret access key of the AWS account configuring the integration.

  • This request configures the integration using the automatic authentication method, which searches and obtains credentials using the AWS SDK's default credential provider chain. This method requires a configured IAM role for a service account and is only supported if you're using a self-managed deployment of Immuta. Contact your Immuta representative to customize your deployment and set up an IAM role for a service account that can give Immuta the credentials to set up the integration. Your Immuta representative will

    1. Provide the AWS account to add to your trust policy.

    2. Update the Immuta AWS configuration to allow Immuta to assume the role of your service principal.

    Then, complete the steps below.

    curl -X 'POST' \
        'https://<your-immuta-url.com>/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>' \
        -d '{
        "type": "Native S3",
        "autoBootstrap": false,
        "config": {
          "name": "<name-of-your-integration>",
          "awsAccountId": "<your-aws-account-id>",
          "awsRegion": "<your-aws-region>",
          "awsLocationRole": "<arn:aws:iam::your-location-role-arn:role/access-grants-instance-role>",
          "awsLocationPath": "<your-s3-location-path>",
          "authenticationType": "auto"
        }
        }'
    1. Copy the request example. The example uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    3. Change the config values to your own, where

      • name is the name for the integration that is unique across all Amazon S3 integrations configured in Immuta.

      • awsAccountId is the ID of your AWS account.

    editable values:

    • name is the name for the integration that is unique across all Amazon S3 integrations configured in Immuta.

    • authenticationType is the method used to authenticate with AWS when configuring the S3 integration (accepted values are auto or accessKey).

    • awsAccessKeyId is the AWS access key ID for the AWS account editing the integration.

    • awsSecretAccessKey is the AWS secret access key for the AWS account editing the integration.

  • required values from existing configuration:

    • awsRoleToAssume is the optional AWS IAM role ARN Immuta assumes when interacting with AWS.

    • awsAccountId is the ID of your AWS account.

    • awsRegion is the account's AWS region (such as us-east-1).

    • awsLocationRole is the AWS IAM role ARN assigned to the base access grants location. This is the role the AWS Access Grants service assumes to vend credentials to the grantee.

    • awsLocationPath is the base S3 location that Immuta will use for this connection when registering S3 data sources. This path must be unique across all S3 integrations configured in Immuta.

  • {
      "Version": "2012-10-17",
        "Statement": [
        {
          "Sid": "Stmt1234567891011",
          "Effect": "Allow",
          "Principal": {
            "Service":"access-grants.s3.amazonaws.com"
          },
          "Action": [
            "sts:AssumeRole", 
            "sts:SetSourceIdentity"
          ]
        }
      ]
    }           
    curl -X 'POST' \
        'https://<your-immuta-url.com>/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>' \
        -d '{
        "type": "Native S3",
        "autoBootstrap": false,
        "config": {
          "name": "<name-of-your-integration>",
          "awsAccountId": "<your-aws-account-id>",
          "awsRegion": "<your-aws-region>",
          "awsLocationRole": "<arn:aws:iam::your-location-role-arn:role/access-grants-instance-role>",
          "awsLocationPath": "<your-s3-location-path>",
          "authenticationType": "accessKey",
          "awsAccessKeyId": "<your-access-key-id>",
          "awsSecretAccessKey": "<your-secret-access-key>"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "There is no existing integration matching this configuration",
          "status": "passed"
        },
        {
          "name": "The provided integration name is unique across Immuta S3 integrations",
          "status": "passed"
        },
        {
          "name": "The provided access grants location role is a valid ARN format",
          "status": "passed"
        },
        {
          "name": "The provided AWS credentials allow fetching the caller's identity via the AWS STS API",
          "status": "passed"
        },
        {
          "name": "An AWS Access Grants instance is configured in the provided AWS account and region",
          "status": "passed"
        },
        {
          "name": "The provided S3 path exists and Immuta can list prefixes",
          "status": "passed"
        },
        {
          "name": "An AWS Access Grants location does not yet exist for the provided path",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Access Grants location already exists on provided path."
    }
    curl -X 'GET' \
        'https://<your-immuta-url.com>/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>'
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
          {
            "name": "There is no existing integration matching this configuration",
            "status": "passed"
          },
          {
            "name": "The provided integration name is unique across Immuta S3 integrations",
            "status": "passed"
          },
          {
            "name": "The provided access grants location role is a valid ARN format",
            "status": "passed"
          },
          {
            "name": "The provided AWS credentials allow fetching the caller's identity via the AWS STS API",
            "status": "passed"
          },
          {
            "name": "An AWS Access Grants instance is configured in the provided AWS account and region",
            "status": "passed"
          },
          {
            "name": "The provided S3 path exists and Immuta can list prefixes",
            "status": "passed"
          },
          {
            "name": "An AWS Access Grants location does not yet exist for the provided path",
            "status": "passed"
          }
        ]
      },
      "type": "Native S3",
      "autoBootstrap": false,
      "config": {
        "port": 443,
        "name": "S3 integration",
        "awsAccountId": "123456789",
        "awsRegion": "us-east-1",
        "awsLocationRole": "arn:aws:iam::123456789:role/access-grants-instance-role",
        "awsLocationPath": "s3://",
        "authenticationType": "accessKey",
        "awsAccessKeyId": "123456789",
        "awsSecretAccessKey": "123456789"
      }
      }
    curl -X 'GET' \
        'https://<your-immuta-url.com>/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
          {
            "name": "Initial Validation: Basic Connection Test",
            "status": "passed"
          },
          {
            "name": "Initial Validation: Default Warehouse Access Test",
            "status": "passed",
            "result": []
          },
          {
            "name": "Initial Validation: Validate access to Privileged Role",
            "status": "passed",
            "result": []
          },
          {
            "name": "Validate Automatic: Database Does Not Exist",
            "status": "passed"
          },
          {
            "name": "Validate Automatic: Impersonation Role Does Not Exist",
            "status": "skipped"
          },
          {
            "name": "Validate Automatic Bootstrap User Grants",
            "status": "passed"
          }
        ] },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
        },
      {
        "id": "123456789",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "There is no existing integration matching this configuration",
              "status": "passed"
            },
            {
              "name": "The provided integration name is unique across Immuta S3 integrations",
              "status": "passed"
            },
            {
              "name": "The provided access grants location role is a valid ARN format",
              "status": "passed"
            },
            {
              "name": "The provided AWS credentials allow fetching the caller's identity via the AWS STS API",
              "status": "passed"
            },
            {
              "name": "An AWS Access Grants instance is configured in the provided AWS account and region",
              "status": "passed"
            },
            {
              "name": "The provided S3 path exists and Immuta can list prefixes",
              "status": "passed"
            },
            {
              "name": "An AWS Access Grants location does not yet exist for the provided path",
              "status": "passed"
            }
          ] },
          "type": "Native S3",
          "autoBootstrap": false,
          "config": {
            "port": 443,
            "name": "S3 integration",
            "awsAccountId": "123456789",
            "awsRegion": "us-east-1",
            "awsLocationRole": "arn:aws:iam::123456789:role/access-grants-instance-role",
            "awsLocationPath": "s3://",
            "authenticationType": "accessKey",
            "awsAccessKeyId": "123456789",
            "awsSecretAccessKey": "123456789"
          }
      }
    ]
    curl -X 'PUT' \
        'https://<your-immuta-url.com>/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>' \
        -d '{
        "type": "Native S3",
        "autoBootstrap": false,
        "config": {
          "name": "<your-edited-integration-name>",
          "awsAccountId": "<your-aws-account-id>",
          "awsRegion": "<your-aws-region>",
          "awsLocationRole": "<arn:aws:iam::your-location-role-arn:role/access-grants-instance-role>",
          "awsLocationPath": "<your-s3-location-path>",
          "authenticationType": "<accessKey-or-auto>",
          "awsAccessKeyId": "<your-aws-access-key-id>",
          "awsSecretAccessKey": "<your-secret-access-key>"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "There is no existing integration matching this configuration",
          "status": "passed"
        },
        {
          "name": "The provided integration name is unique across Immuta S3 integrations",
          "status": "passed"
        },
        {
          "name": "The provided access grants location role is a valid ARN format",
          "status": "passed"
        },
        {
          "name": "The provided AWS credentials allow fetching the caller's identity via the AWS STS API",
          "status": "passed"
        },
        {
          "name": "An AWS Access Grants instance is configured in the provided AWS account and region",
          "status": "passed"
        },
        {
          "name": "The provided S3 path exists and Immuta can list prefixes",
          "status": "passed"
        },
        {
          "name": "An AWS Access Grants location does not yet exist for the provided path",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'DELETE' \
        'https://<your-immuta-url.com>/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": [
          {
            "name": "The provided access grants location role is a valid ARN format",
            "status": "passed"
          },
          {
            "name": "The provided AWS credentials allow fetching the caller's identity via the AWS STS API",
            "status": "passed"
          },
          {
            "name": "An AWS Access Grants instance is configured in the provided AWS account and region",
            "status": "passed"
          },
          {
            "name": "The provided S3 path exists and Immuta can list prefixes",
            "status": "passed"
          }
        ]
      }
    }

    Requirements

    Permissions

    Set up S3 Access Grants instance and IAM roles

    Location IAM role

    Authentication IAM role (or user)

    Configure the integration in Immuta

    Response

    Get an integration

    Response

    Get all integrations

    Response

    Update an integration configuration

    Response

    Delete an integration

    Response

    get an Amazon S3 integration
    get all integrations
    update an Amazon S3 integration
    delete an Amazon S3 integration
    Write policies private preview enabled for your account
    Follow AWS documentation to create an Access Grants instance using the S3 console, AWS CLI, AWS SDKs, or the REST API
    Create an AWS IAM
    API key
    config object description
    response schema reference
    HTTP status codes and error messages
    API key
    GET /integrations endpoint
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    config object description
    API key
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    {
        "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:ListAllMyBuckets",
                    "s3:ListBucket"
                ],
                "Resource": [
                    <bucket arn>
                ]
            }
        ]
    }
    {
        "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>"
                ]
            }
        ]
    }

    s3:UpdateAccessGrantsLocation

    s3:DeleteAccessGrantsInstance

  • s3:GetAccessGrantsInstance

  • s3:GetAccessGrantsInstanceForPrefix

  • s3:GetAccessGrantsInstanceResourcePolicy

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • awsRegion is the account's AWS region (such as us-east-1).
  • awsLocationRole is the AWS IAM role ARN assigned to the base access grants location. This is the role the AWS Access Grants service assumes to vend credentials to the grantee.

  • awsLocationPath is the base S3 location that Immuta will use for this connection when registering S3 data sources. This path must be unique across all S3 integrations configured in Immuta.

  • ARN of the S3 Access Grants instance (ApplicationArn)
    unique identifier for the identity store (IdentityStoreId)
    API key
    {
      "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>"
      ]
    }

    Configure an Azure Synapse Analytics Integration

    Use the API to set up your Azure Synapse Analytics integration

    The Azure Synapse Analytics resource allows you to create, configure, and manage your Azure Synapse Analytics integration. 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.

    Use the /integrations endpoint to

    • configure an Azure Synapse Analytics integration

    • APPLICATION_ADMIN Immuta permission

    • A running Dedicated SQL pool

    • Account used to configure or edit the integration must have the Azure Synapse Analytics permission to manage GRANTS

    You have two options for configuring your Azure Synapse Analytics integration:

    • : Grant Immuta one-time use of credentials to automatically configure your Azure Synapse Analytics environment and the integration. When performing an automated installation, Immuta requires temporary, one-time use of credentials with the permission to manage GRANTS.

    • : Run the Immuta script in your Azure Synapse Analytics environment yourself to configure your environment and the integration. The specified role used to run the bootstrap needs to have the permission to manage GRANTS.

    Copy the request example from one of the tabs below, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Change the config values to your own, where

      • host is the URL of your Azure Synapse Analytics account.

    The response returns the status of the Azure Synapse Analytics integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    To manually configure the integration, complete the following steps:

    1. Note: This script is not required when using the OAuth authentication method. Go to the next step.

    Copy the request example from one of the tabs below, and replace the values with your own as directed to generate the script. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Change the config values to your own, where

      • host is the URL of your Azure Synapse Analytics account.

    Response

    The response returns the script for you to run in your environment.

    Copy the request example from one of the tabs below, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML. The payload you provide must match the payload sent when .

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Pass the same payload you sent when , where

      • host is the URL of your Azure Synapse Analytics account.

    Response

    The response returns the script for you to run in your environment.

    Copy the request example from one of the tabs below, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML. The payload you provide must match the payload sent when .

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Pass the same payload you sent when , where

      • host is the URL of your Azure Synapse Analytics account.

    The response returns the status of the Azure Synapse Analytics integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the .

    The response returns an Azure Synapse Analytics integration configuration. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    You have two options for updating your integration. Follow the steps that match your initial configuration of autoBootstrap:

    • (autoBootstrap is true)

    • (autoBootstrap is false)

    Copy the request example, and replace the values with your own as directed to update the integration settings. The example provided uses JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

    The response returns the status of the Azure Synapse Analytics integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    To manually update the integration, complete the following steps:

    Copy the request example, and replace the values with your own as directed to generate the script. The example provided uses JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

    Response

    The response returns the script for you to run in your environment.

    Copy the request example, and replace the values with your own as directed to update the integration settings. The example provided uses JSON format, but the request also accepts YAML. The payload you provide must match the payload sent when .

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Pass the same payload you sent when , where

    The response returns the status of the Azure Synapse Analytics integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to delete.

    The response returns the status of the Azure Synapse Analytics integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

  • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

  • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

  • This request enables impersonation to allow Immuta administrators to grant users permission to query Azure Synapse Analytics data as other Immuta users.

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": true,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "taylor@synapse.com",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • host is the URL of your Azure Synapse Analytics account.

      • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

      • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

      • metadataDelimiters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the for child parameters.

      • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

  • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters. 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.

  • metadataDelimiters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the object description for child parameters.

  • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

  • Run the script returned in the response in your Azure Synapse Analytics environment.

  • This request enables impersonation to allow Immuta administrators to grant users permission to query Azure Synapse Analytics data as other Immuta users.

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/initial-create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "taylor@synapse.com",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • host is the URL of your Azure Synapse Analytics account.

      • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

      • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

      • metadataDelimiters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the for child parameters.

      • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    3. Run the script returned in the response in your Azure Synapse Analytics environment.

    schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

  • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters. 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.

  • metadataDelimiters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the object description for child parameters.

  • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

  • Run the script returned in the response in your Azure Synapse Analytics environment.

  • This request enables impersonation to allow Immuta administrators to grant users permission to query Azure Synapse Analytics data as other Immuta users.

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "taylor@synapse.com",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Pass the same payload you sent when generating the first script, where

      • host is the URL of your Azure Synapse Analytics account.

      • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

      • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

      • metadataDelimiters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the for child parameters.

      • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    3. Run the script returned in the response in your Azure Synapse Analytics environment.

    schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

  • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters. 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.

  • metadataDelimiters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the object description for child parameters.

  • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

  • This request enables impersonation to allow Immuta administrators to grant users permission to query Azure Synapse Analytics data as other Immuta users.

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "taylor@synapse.com",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Pass the same payload you sent when generating the scripts, where

      • host is the URL of your Azure Synapse Analytics account.

      • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

      • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

      • metadataDelimiters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the for child parameters.

      • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    host is the URL of your Azure Synapse Analytics account.

  • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

  • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

  • metadataDelimiters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the object description for child parameters.

  • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

  • host is the URL of your Azure Synapse Analytics account.

  • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

  • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters. 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.

  • metadataDelimiters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the object description for child parameters.

  • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

  • Run the script returned in the response in your Azure Synapse Analytics environment.

  • host is the URL of your Azure Synapse Analytics account.
  • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

  • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters. 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.

  • metadataDelimiters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the object description for child parameters.

  • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

  • If you set
    • autoBootstrap to true when enabling the integration, include the credentials you used to configure the integration in the payload, as illustrated in the example.

    • autoBootstrap to false when enabling the integration,

      • use the script endpoint (for integrations that were not successfully created) or the endpoint (for integrations that were successfully created) to remove Immuta-managed resources from your environment,

      • use the script endpoint to finish removing Immuta-managed resources from your environment (this step is not required for integrations that were configured using the OAuth authentication method),

      • make the request above without including a payload to remove the integration from Immuta.

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": true,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "username": "taylor@synapse.com",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "taylor@synapse.com",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "taylor@synapse.com"
          }
          ],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Azure Synapse Analytics integration already exists on host organization.azure.com (id = 123456789)"
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/initial-create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "taylor@synapse.com",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "taylor@synapse.com",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "taylor@synapse.com",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "taylor@synapse.com",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "taylor@synapse.com"
          }
          ],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Azure Synapse Analytics integration already exists on host organization.azure.com (id = 123456789)"
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "taylor@synapse.com",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "taylor@synapse.com"
          }
          ],
          "status": "passed"
        }
        ]
      },
      "type": "Azure Synapse Analytics",
      "autoBootstrap": true,
      "config": {
        "host": "organization.azure.com",
        "schema": "sample_schema",
        "database": "immuta",
        "port": 1433,
        "impersonation": {
          "enabled": false
        },
        "metadataDelimiters": {
          "hashDelimiter": "|",
          "hashKeyDelimiter": "-",
          "arrayDelimiter": ","
        },
        "username": "<REDACTED>"
      }
    }
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "taylor@synapse.com",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "taylor@synapse.com"
          }
          ],
          "status": "passed"
        }
        ]
      },
      "type": "Azure Synapse Analytics",
      "autoBootstrap": true,
      "config": {
        "host": "organization.azure.com",
        "schema": "sample_schema",
        "database": "immuta",
        "port": 1433,
        "impersonation": {
          "enabled": true,
          "role": "IMMUTA_IMPERSONATION"
        },
        "metadataDelimiters": {
          "hashDelimiter": "|",
          "hashKeyDelimiter": "-",
          "arrayDelimiter": ","
        },
        "username": "<REDACTED>"
      }
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Initial Validation: Basic Connection Test",
              "status": "passed"
            },
            {
              "name": "Initial Validation: Default Warehouse Access Test",
              "status": "passed",
              "result": []
            },
            {
              "name": "Initial Validation: Validate access to Privileged Role",
              "status": "passed",
              "result": []
            },
            {
              "name": "Validate Automatic: Database Does Not Exist",
              "status": "passed"
            },
            {
              "name": "Validate Automatic: Impersonation Role Does Not Exist",
              "status": "skipped"
            },
            {
              "name": "Validate Automatic Bootstrap User Grants",
              "status": "passed"
            }
          ]
        },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
      },
      {
        "id": "2",
        "status": "enabled",
        "type": "Databricks",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Metastore validation",
              "status": "passed"
            },
            {
              "name": "Basic Connection Test",
              "result": [
                {
                  "1": 1
                }
              ],
              "status": "passed"
            }
          ]
        },
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "token": "REDACTED",
          "audit": {
            "enabled": false
          },
          "catalog": "immuta"
        }
      }
    ]
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": true,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "taylor@synapse.com",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "taylor@synapse.com",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "taylor@synapse.com"
          }
          ],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/{id}/scripts/edit' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "taylor@synapse.com",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "taylor@synapse.com",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "taylor@synapse.com",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "taylor@synapse.com"
          }
          ],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "authenticationType": "userPassword",
        "username": "taylor@synapse.com",
        "password": "abc1234"
        }'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "taylor@synapse.com",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "taylor@synapse.com"
          }
          ],
          "status": "passed"
        }
        ]
      }
    }

    Requirements

    Configure the integration

    Automatic setup

    Response

    Manual setup

    Generate the first script

    This script is not required when using the OAuth authentication method. Go to the next section.

    Generate the second script

    Configure the integration in Immuta

    Response

    Get an integration

    Response

    Get all integrations

    Response

    Update an integration configuration

    Automatic update

    Response

    Manual update

    Generate the updated script

    Update the integration in Immuta

    Response

    Delete an integration

    Response

    get an Azure Synapse Analytics integration
    get all integrations
    update an Azure Synapse Analytics integration
    delete an Azure Synapse Analytics integration
    Automatic setup
    Manual setup
    config object description
    API key
    response schema reference
    HTTP status codes and error messages
    Generate the first Immuta script and run it in your Azure Synapse Analytics environment.
    Generate the second Immuta script and run it in your Azure Synapse Analytics environment.
    Configure the integration in Immuta.
    config object description
    API key
    generating the first script
    config object description
    API key
    generating the first script
    generating the scripts
    config object description
    API key
    generating the scripts
    response schema reference
    HTTP status codes and error messages
    API key
    GET /integrations endpoint
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    automatic update
    manual update
    config object description
    API key
    response schema reference
    HTTP status codes and error messages
    Generate the updated Immuta script and run it in your Azure Synapse Analytics environment.
    Update the integration in Immuta.
    config object description
    API key
    generating the updated script
    config object description
    API key
    generating the script
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    object description
    Managing users and permissions guide
    object description
    object description
    Managing users and permissions guide
    object description
    object description
    Managing users and permissions guide
    object description
    object description
    Managing users and permissions guide
    object description
    cleanup
    delete
    post-cleanup

    Configure a Snowflake Integration

    Support for this endpoint is only available using this legacy Snowflake workflow. .

    In the Snowflake integration, Immuta manages access to Snowflake tables by administering Snowflake row access policies and column masking policies on those tables, allowing users to query tables directly in Snowflake while dynamic policies are enforced.

    Use the /integrations endpoint to

    • configure a Snowflake integration

    • get a Snowflake integration

    • APPLICATION_ADMIN Immuta permission

    • The Snowflake user running the installation, edit, or delete script must have the following privileges:

    You have two options for configuring your Snowflake integration:

    • : Grant Immuta one-time use of credentials to automatically configure your Snowflake environment and the integration. When performing an automated installation, Immuta requires temporary, one-time use of credentials with the Snowflake privileges listed in the .

      These privileges will be used to create and configure a new Immuta-managed database within the specified Snowflake instance. The credentials are not stored or saved by Immuta, and Immuta doesn’t retain access to them after initial setup is complete.

      You can create a new account for Immuta to use that has these privileges, or you can grant temporary use of a pre-existing account. By default, the pre-existing account with appropriate privileges is ACCOUNTADMIN. If you create a new account, it can be deleted after initial setup is complete.

    • : Run the Immuta script in your Snowflake environment yourself to configure your Snowflake environment and the integration. The specified role used to run the bootstrap needs to have the Snowflake privileges listed in the

    1. Select the section below that matches your authentication method.

    2. Copy the request example and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Change the config values to your own, where

      • host is the URL of your Snowflake account.

    The response returns the status of the Snowflake integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    To manually configure the integration, complete the following steps:

    1. Select the tab below that matches your authentication method.

    2. Copy the request example and replace the values with your own as directed to generate the script. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Change the config values to your own, where

      • host is the URL of your Snowflake account.

    Response

    The response returns the script for you to run in your environment.

    1. Select the tab below that matches your authentication method.

    2. Copy the request example and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML. The parameters and values you provide in this payload must match those you provided when .

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Pass the same payload you sent when , where

      • host is the URL of your Snowflake account.

    The response returns the status of the Snowflake integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the .

    The response returns the Snowflake integration configuration. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    You have two options for updating your integration. Follow the steps that match your initial configuration of autoBootstrap:

    • (autoBootstrap is true)

    • (autoBootstrap is false)

    1. Select the section below that matches your authentication method.

    2. Copy the request example and replace the values with your own as directed to update the integration settings. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    This request updates the configuration to enable query audit in Snowflake.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the

    The response returns the status of the Snowflake integration configuration. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    To manually update the integration, complete the following steps:

    1. Select the tab below that matches your authentication method.

    2. Copy the request example and replace the values with your own as directed to generate the script. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    This request updates the configuration to enable query audit in Snowflake.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config

    Response

    The response returns the script for you to run in your environment.

    1. Select the section below that matches your authentication method.

    2. Copy the request example and replace the values with your own as directed to update the integration settings. The examples provided use JSON format, but the request also accepts YAML. The payload you provide must match the one you provided when .

    See the for parameter definitions, value types, and additional configuration options.

    This request updates the configuration to enable query audit in Snowflake.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Pass the same payload you sent when

    The response returns the status of the Snowflake integration configuration. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    You can enable impersonation for an existing Snowflake integration or edit the impersonation role name for an existing integration. Select one of the tabs below for guidance.

    1. If enabling impersonation for the first time, create the impersonation role in Snowflake:

    2. Update the integration:

      1. Replace the Immuta URL and with your own.

    The response returns the status of the Snowflake integration configuration. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to delete.

    The response returns the status of the Snowflake integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    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

  • .

    warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • username and password are credentials of a Snowflake account attached to a role with the privileges outlined above. These credentials are not stored; they are used by Immuta to configure the integration.

  • role is a Snowflake role that has been granted the privileges outlined above.

  • Immuta will use the provided credentials to create a user called IMMUTA_SYSTEM_ACCOUNT and grant the following privileges to that user:

    • CREATE ROLE ON ACCOUNT WITH GRANT OPTION

    • APPLY MASKING POLICY ON ACCOUNT WITH GRANT OPTION

    • APPLY ROW ACCESS POLICY ON ACCOUNT WITH GRANT OPTION

    • MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION

    Alternatively, you can use the manual setup method and edit the provided script to grant the Immuta system account OWNERSHIP on the objects that Immuta will secure, instead of granting MANAGE GRANTS ON ACCOUNT. The current role that has OWNERSHIP on the securables will need to be granted to the Immuta system role. However, if granting OWNERSHIP instead of MANAGE GRANTS ON ACCOUNT, Immuta will not be able to manage the role that is granted to the account.

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "authenticationType": "keyPair",
          "username": "SYSTEM_ACCOUNT",
          "privateKey": "-----BEGIN PRIVATE KEY-----\n<first line of private key content>\n<another line of private key content>\n<another line of private key content>\n-----END PRIVATE KEY-----"
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • username is the system account user that can assume the role to manage the database and administer Snowflake masking and row access policies.

      • privateKey is your private key. If you are using curl, 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.

      • connectArgs is used to set PRIV_KEY_FILE_PWD if the private key is encrypted.

    Immuta will use the provided credentials to create a user called IMMUTA_SYSTEM_ACCOUNT and grant the following privileges to that user:

    • CREATE ROLE ON ACCOUNT WITH GRANT OPTION

    • APPLY MASKING POLICY ON ACCOUNT WITH GRANT OPTION

    • APPLY ROW ACCESS POLICY ON ACCOUNT WITH GRANT OPTION

    Alternatively, you can use the and edit the provided script to grant the Immuta system account OWNERSHIP on the objects that Immuta will secure, instead of granting MANAGE GRANTS ON ACCOUNT. The current role that has OWNERSHIP on the securables will need to be granted to the Immuta system role. However, if granting OWNERSHIP instead of MANAGE GRANTS ON ACCOUNT, Immuta will not be able to manage the role that is granted to the account.

    warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • audit specifies whether query audit is enabled for Snowflake. See the object description for child parameters.

  • workspaces represents an Immuta project workspace configured for Snowflake. See the object description for child parameters.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters. 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.

  • username and password are the credentials for the system account that can assume the role to manage the database and administer Snowflake masking and row access policies.

  • Run the script returned in the response in your Snowflake environment. Running this script grants the following privileges to the Immuta system account:

    • CREATE ROLE ON ACCOUNT WITH GRANT OPTION

    • APPLY MASKING POLICY ON ACCOUNT WITH GRANT OPTION

    • APPLY ROW ACCESS POLICY ON ACCOUNT WITH GRANT OPTION

    • MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION

    Alternatively, you can grant the Immuta system account OWNERSHIP on the objects that Immuta will secure, instead of granting MANAGE GRANTS ON ACCOUNT. The current role that has OWNERSHIP on the securables will need to be granted to the Immuta system role. However, if granting OWNERSHIP instead of MANAGE GRANTS ON ACCOUNT, Immuta will not be able to manage the role that is granted to the account, so it is recommended to run the script as-is, without changes.

  • curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": false,
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "keyPair",
          "username": "SYSTEM_ACCOUNT",
          "privateKey": "-----BEGIN PRIVATE KEY-----\n<first line of private key content>\n<another line of private key content>\n<another line of private key content>\n-----END PRIVATE KEY-----"
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

      • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

      • username is the system account user that can assume the role to manage the database and administer Snowflake masking and row access policies.

      • privateKey is your private key. If you are using curl, 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.

      • connectArgs is used to set PRIV_KEY_FILE_PWD if the private key is encrypted.

    3. Run the script returned in the response in your Snowflake environment. Running this script grants the following privileges to the Immuta system account:

      • CREATE ROLE ON ACCOUNT WITH GRANT OPTION

      • APPLY MASKING POLICY ON ACCOUNT WITH GRANT OPTION

    In this example, Snowflake External OAuth is used to authenticate the system account user, ensuring secure communication between Immuta and Snowflake. To use this authentication method, autoBootstrap must be false.

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": true,
            "warehouses": ["SAMPLE_WAREHOUSE"]
          },
          "authenticationType": "oAuthClientCredentials",
          "oAuthClientConfig": {
            "provider": "Okta",
            "clientId": "123456abc",
            "useCertificate": false,
            "clientSecret": "secret",
            "authorityUrl": "example.authority.com"
          }
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

      • workspaces.enabled specifies whether Immuta project workspaces are enabled for Snowflake.

      • workspaces.warehouses is a list of warehouses that workspace users have usage privileges on.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

      • username is the system account user that can act on Snowflake objects and configure the integration.

      • oAuthClientConfig specifies your provider, client ID, client secret, authority URL, and your encoded public and private keys. See the for details about child parameters.

    3. Run the script returned in the response in your Snowflake environment. Running this script grants the following privileges to the Immuta system account:

      • CREATE ROLE ON ACCOUNT WITH GRANT OPTION

      • APPLY MASKING POLICY ON ACCOUNT WITH GRANT OPTION

    warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • audit specifies whether query audit is enabled for Snowflake. See the object description for child parameters.

  • workspaces represents an Immuta project workspace configured for Snowflake. See the object description for child parameters.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters. 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.

  • username and password are the credentials for the system account that can assume the role to manage the database and administer Snowflake masking and row access policies.

  • curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": false,
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "keyPair",
          "username": "SYSTEM_ACCOUNT",
          "privateKey": "-----BEGIN PRIVATE KEY-----\n<first line of private key content>\n<another line of private key content>\n<another line of private key content>\n-----END PRIVATE KEY-----"
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Pass the same payload you sent when generating the script, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

      • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

      • username is the system account user that can assume the role to manage the database and administer Snowflake masking and row access policies.

      • privateKey is your private key. If you are using curl, 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.

      • connectArgs is used to set PRIV_KEY_FILE_PWD if the private key is encrypted.

    In this example, Snowflake External OAuth is used to authenticate the system account user, ensuring secure communication between Immuta and Snowflake. To use this authentication method, autoBootstrap must be false.

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "workspaces": {
            "enabled": true,
            "warehouses": ["SAMPLE_WAREHOUSE"]
          },
          "authenticationType": "oAuthClientCredentials",
          "oAuthClientConfig": {
            "provider": "Okta",
            "clientId": "123456abc",
            "useCertificate": false,
            "clientSecret": "secret",
            "authorityUrl": "example.authority.com"
          }
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Pass the same payload you sent when generating the script, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

      • workspaces specifies whether Immuta project workspaces are enabled for Snowflake. See the for details about child parameters.

      • oAuthClientConfig specifies your provider, client ID, client secret, authority URL, and your encoded public and private keys. See the for details about child parameters.

    config
    values to your own, where
    • host is the URL of your Snowflake account.

    • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

    • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

    • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

    • username and password are credentials of a . These credentials are not stored; they are used by Immuta to enable or disable configuration settings.

    • role is a Snowflake role that has been granted the .

    This request updates the configuration to enable query audit in Snowflake.

    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "authenticationType": "keyPair",
          "username": "SYSTEM_ACCOUNT",
          "privateKey": "-----BEGIN PRIVATE KEY-----\n<first line of private key content>\n<another line of private key content>\n<another line of private key content>\n-----END PRIVATE KEY-----"
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

    values to your own, where
    • host is the URL of your Snowflake account.

    • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

    • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

    • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

    • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

    • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

    • username and password are the credentials for the system account that can assume the role to manage the database and administer Snowflake masking and row access policies.

  • Run the script returned in the response in your Snowflake environment.

  • This request updates the configuration to enable query audit in Snowflake.

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/{id}/scripts/edit' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "keyPair",
          "username": "SYSTEM_ACCOUNT",
          "privateKey": "-----BEGIN PRIVATE KEY-----\n<first line of private key content>\n<another line of private key content>\n<another line of private key content>\n-----END PRIVATE KEY-----"
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

    4. Run the script returned in the response in your Snowflake environment.

    This request updates the configuration to disable Snowflake workspaces for the integration.

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/{id}/scripts/edit' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "authenticationType": "oAuthClientCredentials",
          "oAuthClientConfig": {
            "provider": "Okta",
            "clientId": "123456abc",
            "useCertificate": false,
            "clientSecret": "secret",
            "authorityUrl": "example.authority.com"
          }
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

    4. Run the script returned in the response in your Snowflake environment.

    , where
    • host is the URL of your Snowflake account.

    • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

    • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

    • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

    • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

    • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

    • username and password are the credentials for the system account that can assume the role to manage the database and administer Snowflake masking and row access policies.

    This request updates the configuration to enable query audit in Snowflake.

    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "keyPair",
          "username": "SYSTEM_ACCOUNT",
          "privateKey": "-----BEGIN PRIVATE KEY-----\n<first line of private key content>\n<another line of private key content>\n<another line of private key content>\n-----END PRIVATE KEY-----"
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Pass the same payload you sent when generating the script, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

    This request updates the configuration to disable Snowflake workspaces and enable Snowflake query audit for the integration.

    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "authenticationType": "oAuthClientCredentials",
          "oAuthClientConfig": {
            "provider": "Okta",
            "clientId": "123456abc",
            "useCertificate": false,
            "clientSecret": "secret",
            "authorityUrl": "example.authority.com"
          }
        }
        }'
    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Pass the same payload you sent when , where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

    Replace the {id} request parameter with the unique identifier of the integration you want to update.

  • Pass the same payload you sent when generating the script, where

    • host is the URL of your Snowflake account.

    • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

    • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

    • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

    • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

    • impersonation.enabled specifies whether user impersonation is enabled.

    • impersonation.role is the name of the Snowflake role that will be used to impersonate other users. This should match the name of the role you created in Snowflake in the previous step.

    • username and password are the credentials for the system account that can assume the role to manage the database and administer Snowflake masking and row access policies.

  • 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.

    1. Copy the request below and update the impersonation.role in the integration configuration:

      curl -X 'PUT' \
          'https://www.organization.immuta.com/integrations/{id}' \
          -H 'accept: application/json' \
          -H 'Content-Type: application/json' \
          -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
          -d '{
          "type": "Snowflake",
          "autoBootstrap": false,
          "config": {
            "host": "organization.us-east-1.snowflakecomputing.com",
            "warehouse": "SAMPLE_WAREHOUSE",
            "database": "SNOWFLAKE_SAMPLE_DATA",
            "audit": {
              "enabled": true
            },
            "workspaces": {
              "enabled": false
            },
            "impersonation": {
              "enabled": true,
              "role": "IMPERSONATION_ROLE"
            },
            "authenticationType": "userPassword",
            "username": "taylor@snowflake.com",
            "password": "abc1234"
          }
          }'
    2. Replace the Immuta URL and API key with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    4. Pass the same payload you sent when , where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

    Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

    If you set
    • autoBootstrap to true when enabling the integration, specify the authenticationType and the credentials you used to configure the integration in the payload, as illustrated in the example. See the Integrations API endpoints guide for details.

    • autoBootstrap to false when enabling the integration,

  • Use the script cleanup endpoint (for integrations that were not successfully created) or the delete endpoint (for integrations that were successfully created) to generate a script that will remove Immuta-managed resources and policies from your environment.

  • Make the request above without including a payload to remove the integration from Immuta.

  • Run the generated script in Snowflake.

  • curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "authenticationType": "userPassword",
          "username": "taylor@snowflake.com",
          "password": "abc1234",
          "role": "ACCOUNTADMIN"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Snowflake integration already exists on host organization.us-east-1.snowflakecomputing.com (id = 123456789)"
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": false,
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "taylor@snowflake.com",
          "password": "abc1234"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": false,
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "taylor@snowflake.com",
          "password": "abc1234"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Snowflake integration already exists on host organization.us-east-1.snowflakecomputing.com (id = 123456789)"
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      },
      "type": "Snowflake",
      "autoBootstrap": true,
      "config": {
        "host": "organization.us-east-1.snowflakecomputing.com",
        "warehouse": "SAMPLE_WAREHOUSE",
        "database": "SNOWFLAKE_SAMPLE_DATA",
        "port": 443,
        "audit": {
          "enabled": false,
          },
        "workspaces": {
          "enabled": false
        },
        "impersonation": {
          "enabled": false
        },
        "lineage": {
          "enabled": false
        },
        "authenticationType": "userPassword",
        "username": "<REDACTED>",
        "password": "<REDACTED>",
        "role": "ACCOUNTADMIN"
      }
    }
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      },
      "type": "Snowflake",
      "autoBootstrap": false,
      "config": {
        "host": "organization.us-east-1.snowflakecomputing.com",
        "warehouse": "SAMPLE_WAREHOUSE",
        "database": "SNOWFLAKE_SAMPLE_DATA",
        "port": 443,
        "impersonation": {
          "enabled": true,
          "role": "IMMUTA_IMPERSONATION"
        },
        "audit": {
          "enabled": false
        },
        "workspaces": {
          "enabled": true,
          "warehouses": ["SAMPLE_WAREHOUSE"]
        },
        "lineage": {
          "enabled": false
        },
        "authenticationType": "oAuthClientCredentials",
        "oAuthClientConfig": {
          "provider": "Okta",
          "clientId": "123456abc",
          "useCertificate": false,
          "clientSecret": "secret",
          "authorityUrl": "example.authority.com"
        }
      }
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Initial Validation: Basic Connection Test",
              "status": "passed"
            },
            {
              "name": "Initial Validation: Default Warehouse Access Test",
              "status": "passed",
              "result": []
            },
            {
              "name": "Initial Validation: Validate access to Privileged Role",
              "status": "passed",
              "result": []
            },
            {
              "name": "Validate Automatic: Database Does Not Exist",
              "status": "passed"
            },
            {
              "name": "Validate Automatic: Impersonation Role Does Not Exist",
              "status": "skipped"
            },
            {
              "name": "Validate Automatic Bootstrap User Grants",
              "status": "passed"
            }
          ]
        },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
      },
      {
        "id": "2",
        "status": "enabled",
        "type": "Databricks",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Metastore validation",
              "status": "passed"
            },
            {
              "name": "Basic Connection Test",
              "result": [
                {
                  "1": 1
                }
              ],
              "status": "passed"
            }
          ]
        },
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "token": "REDACTED",
          "audit": {
            "enabled": false
          },
          "catalog": "immuta"
        }
      }
    ]
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true,
          },
          "authenticationType": "userPassword",
          "username": "taylor@snowflake.com",
          "password": "abc1234",
          "role": "ACCOUNTADMIN"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/{id}/scripts/edit' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "taylor@snowflake.com",
          "password": "abc1234"
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "taylor@snowflake.com",
          "password": "abc1234"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    CREATE ROLE "YOUR IMPERSONATION ROLE NAME";
    GRANT OWNERSHIP ON ROLE "YOUR IMPERSONATION ROLE NAME" TO ROLE "SYSTEM ACCOUNT ROLE";
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": true,
            "role": "IMPERSONATION_ROLE"
          },
          "authenticationType": "userPassword",
          "username": "taylor@snowflake.com",
          "password": "abc1234"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "authenticationType": "userPassword",
        "username": "taylor@snowflake.com",
        "password": "abc1234",
        "role": "ACCOUNTADMIN"
        }'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }

    Requirements

    Configure the integration

    Automatic setup

    Response

    Manual setup

    Best practices

    The account you create for Immuta should only be used for the integration and should not be used as the credentials for creating data sources in Immuta; doing so will cause issues. Instead, create a separate, dedicated READ-ONLY account for creating and registering data sources within Immuta.

    Generate the script

    Configure the integration in Immuta

    Response

    Get an integration

    Response

    Get all integrations

    Response

    Update an integration configuration

    Automatic update

    Response

    Manual update

    Generate the updated script

    Update the integration in Immuta

    Response

    Enable or edit impersonation for an existing integration

    Response

    Delete an integration

    Cleaning up your Snowflake environment Until you manually run the cleanup script in your Snowflake environment, Immuta-managed roles and Immuta policies will still exist in Snowflake.

    Response

    get all integrations
    update a Snowflake integration
    enable or edit impersonation for an existing integration
    delete a Snowflake integration
    Automatic setup
    requirements section
    Manual setup
    config object description
    API key
    response schema reference
    HTTP status codes and error messages
    Generate the Immuta script and run it in your Snowflake environment.
    Configure the integration in Immuta.
    config object description
    API key
    generating the script
    config object description
    API key
    generating the script
    response schema reference
    HTTP status codes and error messages
    API key
    GET /integrations endpoint
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    automatic update
    manual update
    config object description
    API key
    response schema reference
    HTTP status codes and error messages
    Generate the updated Immuta script and run it in your Snowflake environment.
    Update the integration in Immuta.
    config object description
    API key
    generating the updated script
    config object description
    API key
    generating the script
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    Use the /data endpoint for a Snowflake connection
    requirements section

    MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION

    APPLY ROW ACCESS POLICY ON ACCOUNT WITH GRANT OPTION

  • MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION

  • Alternatively, you can grant the Immuta system account OWNERSHIP on the objects that Immuta will secure, instead of granting MANAGE GRANTS ON ACCOUNT. The current role that has OWNERSHIP on the securables will need to be granted to the Immuta system role. However, if granting OWNERSHIP instead of MANAGE GRANTS ON ACCOUNT, Immuta will not be able to manage the role that is granted to the account, so it is recommended to run the script as-is, without changes.

    APPLY ROW ACCESS POLICY ON ACCOUNT WITH GRANT OPTION

  • MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION

  • Alternatively, you can grant the Immuta system account OWNERSHIP on the objects that Immuta will secure, instead of granting MANAGE GRANTS ON ACCOUNT. The current role that has OWNERSHIP on the securables will need to be granted to the Immuta system role. However, if granting OWNERSHIP instead of MANAGE GRANTS ON ACCOUNT, Immuta will not be able to manage the role that is granted to the account, so it is recommended to run the script as-is, without changes.

    audit specifies whether query audit is enabled for Snowflake. See the for child parameters.
  • username is the system account user that can assume the role to manage the database and administer Snowflake masking and row access policies.

  • privateKey is your private key. If you are using curl, 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.

  • connectArgs is used to set PRIV_KEY_FILE_PWD if the private key is encrypted.

  • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.
  • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

  • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

  • username is the system account user that can assume the role to manage the database and administer Snowflake masking and row access policies.

  • privateKey is your private key. If you are using curl, 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.

  • connectArgs is used to set PRIV_KEY_FILE_PWD if the private key is encrypted.

  • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.
  • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

  • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

  • username is the system account user that can act on Snowflake objects and configure the integration.

  • oAuthClientConfig specifies your provider, client ID, client secret, authority URL, and your encoded public and private keys. See the for details about child parameters.

  • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.
  • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

  • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.

  • username is the system account user that can assume the role to manage the database and administer Snowflake masking and row access policies.

  • privateKey is your private key. If you are using curl, 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.

  • connectArgs is used to set PRIV_KEY_FILE_PWD if the private key is encrypted.

  • impersonation specifies whether user impersonation is enabled. See the for child parameters. Once you finish configuring the integration, you can grant the IMPERSONATE_USER permission to Immuta users. See the for instructions.
  • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

  • workspaces specifies whether Immuta project workspaces are enabled for Snowflake. See the for details about child parameters.

  • oAuthClientConfig specifies your provider, client ID, client secret, authority URL, and your encoded public and private keys. See the for details about child parameters.

  • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

  • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

  • impersonation.enabled specifies whether user impersonation is enabled.

  • impersonation.role is the name of the Snowflake role that will be used to impersonate other users.

  • username and password are the credentials for the system account that can assume the role to manage the database and administer Snowflake masking and row access policies.

  • manual setup method
    object description
    object description
    object description
    Managing users and permissions guide
    object description
    object description
    Managing users and permissions guide
    object description
    object description
    object description
    object description
    Managing users and permissions guide
    object description
    Managing users and permissions guide
    object description
    object description
    object description
    Snowflake account attached to a role with the privileges outlined above
    privileges outlined above
    object description
    object description
    object description
    Managing users and permissions guide
    object description
    object description
    object description
    Managing users and permissions guide
    generating the script
    object description
    object description
    generating the script
    Managing users and permissions guide
    object description
    object description
    object description
    object description
    Managing users and permissions guide
    object description
    object description
    object description
    Managing users and permissions guide
    object description
    object description
    object description
    object description
    Managing users and permissions guide
    object description
    Managing users and permissions guide
    object description
    object description
    object description
    object description
    object description