All pages
Powered by GitBook
1 of 6

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Create a Data Source

Register a data source using the V2 API

The V2 API is built to easily enable an “as-code” approach to managing your data sources, so each time you POST data to this endpoint, you must provide complete details of what you want in Immuta. The two examples below illustrate this design:

  • If you POST once explicitly defining a single table under sources, and then POST a second time with a different table, this will result in a single data source in Immuta pointing to the second table and the first data source will be deleted or disabled (depending on the value specified for hardDelete).

  • If you POST once with two tableTags specified (e.g., Tag.A and Tag.B) and do a follow-up POST with tableTags: [Tag.C], only Tag.C will exist on all of the tables specified; tags Tag.A and Tag.B will be removed from all the data sources. Note: If you are frequently using the v2 API to update data tags, consider using the instead.

Through this endpoint, you can create or update all data sources for a given schema or database.

Create or update data sources.

Required Immuta permission: CREATE_DATA_SOURCE

Parameter
Description
Required or optional
Default value

The body of the request contains the details of the data source you want to create. The following table describes the attributes you can include in the body.

Attribute
Description
Required or optional

The connection object specifies the connection details required to connect to your data source. The tables below describes its child attributes.

Attribute
Description
Required or optional

Use the nameTemplate object to use the backing table, schema, or database names to systematically name the Immuta data sources created through the connection. All names will default to lowercase. The table below describes its child attributes.

Attribute
Description
Accepted values

Example

For the table, TPC.CUSTOMER, that is given the following nameTemplate:

This nameTemplate will produce a data source named tpc.customer in a schema project named tpc.

The options object allows you to override the default options for the data sources created through this connection. If not provided, Immuta will use the system defaults. The table below describes its child attributes.

Attribute
Description
Default values

There are three options for the owners object when POSTing to the /data endpoint:

  1. Include the object with data owners.

  2. Include the object, but leave the type, name, and iam out. This will remove all data owners from the data source (other than the calling user).

  3. Exclude the object from the payload. This will not impact your data owners and allow you to manage data owners through external processes or the UI.

The owners object is an array of objects for each owner. The table below describes its child attributes.

Attribute
Description
Accepted values

The sources array determines which tables are registered as data sources. The table below describes its child attributes.

Option
Description
Required or optional

Examples

This will register specific tables and add tags and column descriptions.

There are three options for the columns object when POSTing to the /data endpoint:

  1. Include the object with column details. Only the columns listed will be in the Immuta data source.

  2. Include the object, but leave it empty. This will turn on column detection, and Immuta will update the columns once a day to be accurate to the backing table.

  3. Exclude the object from the payload. This will register all the columns in the table, but column detection will be off.

The columns object is an array of objects for each column. The table below describes its child attributes.

Attribute
Description

You can add descriptions to columns without having to specify all the columns in the data source. columnDescriptions is an array of objects with the following schema:

Attribute
Description

You can add tags to columns or data sources. tags is an object with the following schema:

Attribute
Description

0

A template to override naming conventions. If not provided, system defaults will be used.

Optional

object

Override options for these data sources. If not provided, system defaults will be used.

Optional

object

Specify owners for all data sources created.

Optional

array

Configure which data sources are created. If not provided, all objects from the given connection will be created.

Optional

database string

The database name.

Required

schema string

The schema in the remote database.

Optional

hostname string

The hostname of the remote database instance.

Required

port number

The port of the remote database instance.

Optional

warehouse string

The default pool of compute resources Immuta will use to run queries and other Snowflake operations.

Required

connectionStringOptions string

Additional connection string options to be used when connecting to the remote database.

Optional

authenticationMethod string

The type of authentication method to use. Options include userPassword, keyPair, and oAuthClientCredentials.

Required

username string

The username used to connect to the remote database.

Required if using userPassword or keyPair.

password string

The password used to connect to the remote database.

Required if using userPassword.

useCertificate boolean

Set to true when using client certificate credentials to request an access token. Otherwise, set to false to use client secret.

Required if using oAuthClientCredentials.

userFiles object

Details about the files required for the request.

Required if using keyPair or oAuthClientCredentials with useCertificate set to true.

keyName string

The connection name of the key file. Must be PRIV_KEY_FILE if using keyPair, or must be oauth client certificate if using oAuthClientCredentials.

Required if using keyPair or oAuthClientCredentials with useCertificate set to true.

content string

The content of the file, base-64 encoded.

Required if using keyPair or oAuthClientCredentials with useCertificate set to true.

userFilename string

The name of the file - for display in the UI.

Required if using keyPair or oAuthClientCredentials with useCertificate set to true.

Attribute
Description
Required or optional

handler

Databricks

Required

ssl boolean

Set to true to enable SSL communication with the remote database.

Optional

Attribute
Description
Required or optional

handler

Redshift

Required

ssl boolean

Set to true to enable SSL communication with the remote database.

Optional

Attribute
Description

handler

Google BigQuery, Presto, and Trino

ssl boolean

Set to true to enable SSL communication with the remote database.

database string

The database name.

Format to be used to name the Immuta table created in this group.

  • <tablename>

  • <schema>

  • <database>

schemaProjectNameFormat string

Format to be used to name the Immuta schema project created in this group.

  • <tablename>

  • <schema>

  • <database>

The ID of the domain to assign the data sources to. Use the to retrieve domains and domain IDs.

-

hardDelete boolean

If true, when the table backing the data source is no longer available, the data source in Immuta is deleted. If this is false, the data source will be disabled.

false

tableTags array

An array of tags (strings) to place at the data source level on every data source.

-

The ID of the identity manager system the user or group comes from. If excluded, any user/group that matches will be added as an owner.

-

The specific schema to monitor with schema monitoring.

Optional

array

Details about the data source columns.

Optional

description string

A short description for the data source.

Optional

documentation string

Markdown-supported documentation for the data source.

Optional

naming object

Use this object to override the nameTemplate provided for the whole database/schema. .

Optional

owners object

Specify owners for an individual data source. .

Optional

object

Details about the tags to attach to the data source.

Optional

The actual data type in the remote database.

primaryKey string

Specifies whether this is the primary key of the remote table.

description string

Describes the column.

dryRun boolean

If true, no updates will actually be made.

Optional

false

wait number

The number of seconds to wait for data sources to be created before returning. Anything less than 0 will wait indefinitely.

connectionKey string

A key/name to uniquely identify this collection of data sources.

Required

connection object

Connection information.

Required

handler

Snowflake

Required

ssl boolean

Set to true to enable SSL communication with the remote database.

Optional

dataSourceFormat string

Format to be used to name the data sources created in this group.

  • <tablename>

  • <schema>

  • <database>

  • Any string

schemaFormat string

Format to be used to name the Immuta schema created in this group.

  • <tablename>

  • <schema>

  • <database>

  • Any string

dataSourceFormat: <schema> <tablename>
tableFormat: <tablename>
schemaFormat: <schema>
schemaProjectNameFormat: <schema>

staleDataTolerance integer

The length in seconds that data for these data sources can be cached.

-

disableSensitiveDataDiscovery boolean

If true, Immuta will not perform identification for the data sources created through this connection.

false

type string

The type of owner that is being added.

  • group

  • user

name string

The name of the group or the username of the user.

-

all boolean

If true, all tables will be registered in Immuta and schema monitoring will be on.

Required

table string

The specific table to register in Immuta as a data source.

Optional

sources:
  - all: true
sources:
  - table: name_of_table
    schema: name_of_schema
    tags:
      table:
        - Sensitive
        - Marketing
      columns:
        - columnName: acct_num
          tags:
            - unique_id
    columnDescriptions:
      - columnName: acct_num
        description: The account number

name string

The column name.

dataType string

The data type.

nullable boolean

If true, the column contains null.

columnName string

The column name.

description string

The description of the column.

table array

An array of tags (strings) to add to this table.

columns array

An array of objects that specifies columnName (string) and tags (an array of tags). The listed tags will be applied to the columns.

POST /api/v2/data

Technology-specific examples

Databricks data source with M2M OAuth - Azure Databricks

Databricks Unity Catalog behavior

If you register a connection and a data object has no subscription policy set on it, Immuta will REVOKE access to the data in Databricks for all Immuta users, even if they had been directly granted access to the table in Unity Catalog.

If you disable a Unity Catalog data source in Immuta, all existing grants and policies on that object will be removed in Databricks for all Immuta users. All existing grants and policies will be removed, regardless of whether they were set in Immuta or in Unity Catalog directly.

connectionKey: my-databricks
nameTemplate:
  dataSourceFormat:

Databricks data source with overriding the naming convention

Databricks Unity Catalog behavior

If you register a connection and a data object has no subscription policy set on it, Immuta will REVOKE access to the data in Databricks for all Immuta users, even if they had been directly granted access to the table in Unity Catalog.

If you disable a Unity Catalog data source in Immuta, all existing grants and policies on that object will be removed in Databricks for all Immuta users. All existing grants and policies will be removed, regardless of whether they were set in Immuta or in Unity Catalog directly.

connectionKey: ebock-databricks
nameTemplate:
  dataSourceFormat:

Redshift Spectrum data source

Your nativeSchemaFormat must contain _immuta to avoid schema name conflicts.

connectionKey: redshift
connection:
  hostname:

Snowflake data source only registering specific tables

Path parameters

Body parameters

connection object

nameTemplate object

options object

owners object

sources array

Best practices

  • Register everything and use subscription policies to control access: If you are not tagging individual columns, omit sources to create data sources for all tables in the schema or database, and then use subscription policies to control access to the tables instead of excluding them from Immuta.

  • Use schema monitoring: Specifying all: true will turn on automatic schema monitoring in Immuta. As tables are added or removed, Immuta will look for those changes on a schedule (by default, once a day) and either disable or delete data sources for removed tables or create data sources for new tables.

columns object

columnDescriptions array

tags object

custom REST catalog integration
connectionKey: my-databricks
connection:
  hostname: your.databricks.hostname.com
  port: 443
  ssl: true
  database: tpc
  username: token
  password: "${DATABRICKS_PASSWORD}"
  httpPath: sql/protocolv1/o/0/11101101
  handler: Databricks
connectionKey: my-databricks
nameTemplate:
  dataSourceFormat: Databricks <Tablename>
  tableFormat: <tablename>
  schemaFormat: databricks
connection:
  hostname: your.databricks.hostname.com
  port: 443
  ssl: true
  database: data
  username: token
  password: "${DATABRICKS_PASSWORD}"
  httpPath: sql/protocolv1/o/0/1110-11123
  handler: Databricks
sources:
  - table: credit_card_transactions
    schema: data
    tags:
      table:
        - PCI
        - SENSITIVE
      columns:
        - columnName: transaction_date
          tags:
            - PCI
            - DATE
  - table: crime_data
    schema: data
    naming:
      datasource: Crime Data
      table: crime_data
      schema: databricks

Optional

object

tableFormat string

domainCollectionId string

iam string

schema string

remoteType string

Create a Project

Required Immuta permission: CREATE_PROJECT

This project will be created with an Anyone subscription policy, where anyone can request and will automatically be granted access.

This project will be created with an Anyone who asks (and is approved) subscription policy, where anyone can request access and they will get access when their request is approved.

Any string

Any string

If a user is not registered in Immuta, Immuta will have no effect on that user's access to data in Unity Catalog.

See the Databricks Unity Catalog reference guide for more details about permissions Immuta revokes and how to configure this behavior for your connection.

If a user is not registered in Immuta, Immuta will have no effect on that user's access to data in Unity Catalog.

See the Databricks Unity Catalog reference guide for more details about permissions Immuta revokes and how to configure this behavior for your connection.

Databricks <Tablename>
tableFormat: <tablename>
schemaFormat: databricks
schemaProjectNameFormat: <schema>
connection:
hostname: your.databricks.hostname.com
port: 443
ssl: true
database: data
authenticationMethod: oAuthM2M
useCertificate: false
clientId: "${service_principal_clientId}"
audience: https://your.databricks.hostname.com/oidc/v1/token
scope: all-apis
clientSecret: "${clientSecret}"
httpPath: sql/protocolv1/o/0/1110-11123
handler: Databricks
Databricks <Tablename>
tableFormat: <tablename>
schemaFormat: databricks
connection:
hostname: your.databricks.hostname.com
port: 443
ssl: true
database: ebock
username: token
password: "${DATABRICKS_PASSWORD}"
httpPath: sql/protocolv1/o/0/1110-185737-wove
handler: Databricks
sources:
- table: credit_card_transactions
schema: ebock
- table: crime_data_delta
schema: ebock
naming:
datasource: Crime Data
table: crime_data
schema: databricks
- table: hipaa_data
schema: ebock
your-redshift-cluster.djie25k.us-east-1.redshift.amazonaws.com
port: 5439
ssl: true
database: your_database_with_external_schema
username: awsuser
password: your_password
handler: Redshift
schema: external_schema
nameTemplate:
dataSourceFormat: <Tablename>
schemaFormat: <schema>
tableFormat: <tablename>
schemaProjectNameFormat: <Schema>
nativeSchemaFormat: <schema>_immuta
nativeViewFormat: <tablename>
sources:
- all: true

database string

The database name.

Optional

hostname string

The hostname of the remote database instance.

Required

port number

The port of the remote database instance.

Optional

connectionStringOptions string

Additional connection string options to be used when connecting to the remote database.

Optional

authenticationMethod string

The type of authentication method to use. Options include oAuthM2M and token.

Required

token string

The Databricks personal access token for the service principal created for Immuta.

Required if using token authentication.

useCertificate boolean

Set to true when using client certificate credentials to request an access token. Otherwise, client secret.

Required if using oAuthM2M.

clientId string

The client identifier of the Immuta service principal you configured. This is the client ID displayed in Databricks when creating the client secret for the service principal.

Required if using oAuthM2M.

audience string

The audience for the OAuth Client Credential token request.

Required if using oAuthM2M.

clientSecret string

An application password an app can use in place of a certificate to identity itself.

Required if using oAuthM2M and useCertificate is set to false.

certificateThumbprint string

The certificate thumbprint to use to generate the JWT for the OAuth Client Credential request.

Required if using oAuthM2M and useCertificate is set to true.

scope string

The scope limits the operations and roles allowed in Databricks by the access token. See the OAuth 2.0 documentation for details about scopes.

Optional

httpPath string

The HTTP path of your Databricks cluster or SQL warehouse.

Required

database string

The database name.

Optional

schema string

The schema in the remote database.

Required

connectionStringOptions string

Additional connection string options to be used when connecting to the remote database.

Optional

hostname string

The hostname of the remote database instance.

Required

port number

The port of the remote database instance.

Optional

authenticationMethod string

The type of authentication method to use. Options include userPassword and okta.

Required

username string

The username used to connect to the remote database.

Required

password string

The password used to connect to the remote database.

Required

idpHost string

The Okta identity provider host URL.

Required if using okta.

appID string

The Okta application ID.

Required if using okta.

role string

The Okta role.

Required if using okta.

schema string

The schema in the remote database.

userFiles array

Array of objects; each object must have keyName (corresponds to a connection string option), content (base-64 encoded content), and userFilename (the name of the file - for display purposes in the app).

connectionStringOptions string

Additional connection string options to be used when connecting to the remote database.

hostname string

The hostname of the remote database instance.

port number

The port of the remote database instance.

authenticationMethod string

The type of authentication method to use. Starburst (Trino) and Trino (Presto) options include No Authentication, LDAP Authentication, or Kerberos Authentication. Google BigQuery (Google BigQuery) option is keyFile.

username string

The username used to connect to the remote database.

password string

The password used to connect to the remote database.

sid string

Required for Google BigQuery, the BigQuery project ID used to build the connection string.

nameTemplate
options
owners
sources
GET /domain endpoint
columnDescriptions
This object's attributes are the same as the nameTemplate object
This object is the same as owners object
tags
connectionKey: tpc-snowflake
nameTemplate:
  dataSourceFormat: Snowflake <Tablename>
  tableFormat: <tablename>
  schemaFormat: snowflake
connection:
  hostname: example.hostname.snowflakecomputing.com
  port: 443
  ssl: true
  database: TPC
  username: USERA
  password: "${SNOWFLAKE_PASSWORD}"
  schema: PUBLIC
  warehouse: IT_WH
  handler: Snowflake
sources:
  - table: CASE
    schema: PUBLIC
  - table: CASE2
    schema: PUBLIC
  - table: CUSTOMER
    schema: PUBLIC
  - table: WEB_SALES
    schema: PUBLIC
This project will be created with an
Users with specific groups or attributes
subscription policy, where users with a specific attribute or in a specific group will automatically be granted access.
Parameter
Description
Default value

dryRun boolean

If true, no updates will actually be made.

false

deleteDataSourcesOnWorkspaceDelete boolean

If true, will delete all data and the data sources associated with a project workspace when the workspace is deleted.

false

Attribute
Description
Required or optional
Default values
Accepted values

projectKey string

A key to uniquely identify this project for future API calls.

Required

-

-

The subscriptionPolicy object allows you to define the policy for how users can subscribe to the project.

Attribute
Description
Required or optional
Default values
Accepted values

type string

The type of subscription policy the project will have.

Required

-

  • anyone: Anyone can subscribe

  • approval: Anyone can request approval and will be subscribed when it is approved

  • entitlements: Users with the listed attributes or groups will be subscribed

This array is required if the policy type is approval in the subscriptionPolicy object. It allows you to define the users who can approve subscription requests.

Attribute
Description
Required or optional
Default values
Accepted values

specificApproverRequired boolean

If true, the user to approve the request will be selected by the user requesting access. If false, any user with the required permission can approve the request.

Required if type is approval

-

  • true

  • false

This object is required if the policy type is entitlements in the subscriptionPolicy object. It allows you to define the groups or attributes that users must have to subscribe to the project.

Attribute
Description
Required or optional
Default values
Accepted values

operator string

Specify whether all of the circumstances must be met for the user to be subscribed (AND), or just any of them (OR).

Required if type is entitlements

-

  • all

  • any

Attribute
Description
Required or optional
Default values
Accepted values

type string

The technology the workspace is in.

Required

-

  • snowflake

  • databricks

POST /api/v2/project

name: A Bare Bones Project
projectKey: simplest possible project
name: Anyone Project
projectKey: Anyone project
documentation: "# Anyone Can See This"
description: "Anyone can join this project"
allowMaskedJoins: false
subscriptionPolicy:
    type: anyone
    automaticSubscription: true
    description: "Auto-subscribe everyone"
tags:
  - Discovered.Person Name
purposes:
  - Use Purposes
  - Purpose Hierarchy.Child 2.Grandchild 2
name: Approval Project
projectKey: Approval project
description: "Need approval to join this project"
allowMaskedJoins: true
subscriptionPolicy:
    type: approval
    approvals:
      - requiredPermission: GOVERNANCE
        specificApproverRequired: true
      - requiredPermission: ADMIN
        specificApproverRequired: false
name: Entitlement Project
projectKey: entitlement project
description: "Need specific entitlements to join this project"
subscriptionPolicy:
    type: entitlements
    automaticSubscription: false
    allowDiscovery: true
    entitlements:
      operator: any
      groups:
        - Engineers
        - Founders
      attributes:
        - name: Auth1
          value: super secret
Projects with workspaces examples

Project with Databricks Spark workspace

Project with Snowflake workspace

Path parameters

Body parameters

subscriptionPolicy object

approvals array

entitlements object

workspace object

  • manual: Users must be manually added to be subscribed

  • name string

    The name of the project.

    Required

    -

    -

    description string

    A short description for the project.

    Optional

    -

    -

    documentation string

    Markdown-supported documentation for this project.

    Optional

    -

    -

    allowedMaskedJoins boolean

    If true, will allow joining on masked columns between data sources in this project. Only certain policies allow masked join.

    Optional

    false

    • true

    • false

    purposes string[]

    The list of purposes to add to this project.

    Optional

    -

    -

    datasources string[]

    The list of data sources to add to this project.

    Optional

    -

    -

    subscriptionPolicy object

    The policy that determines which users can subscribe to the project.

    Optional

    Defaults to manual subscription if the object is omitted

    -

    workspace object

    If this is a workspace project, this is the workspace configuration. The project will automatically be equalized.

    Optional

    -

    -

    equalization boolean

    If true, will normalize all users to the same entitlements so that everyone sees the same data.

    Optional

    false

    • true

    • false

    tags array[]

    Tags to add to the project.

    Optional

    -

    -

    automaticSubscription boolean

    If true, users will be automatically subscribed if they meet the policy requirements without any manual intervention.

    Optional

    false

    • true

    • false

    description string

    A description of the policy.

    Optional

    -

    -

    approvals array[object]

    Details about the user that will approve subscription requests.

    Required if type is approval

    -

    -

    entitlements object

    Details about the entitlements required for users to subscribe to the project.

    Required if type is entitlements

    -

    -

    requiredPermission string

    The required permissions for the user approving the subscription request.

    Required if type is approval

    -

    • USER_ADMIN

    • GOVERNANCE

    • AUDIT

    groups string

    The name of the group the user must be a member of to subscribe to the project.

    Requires either groups or attributes

    -

    -

    attributes object

    Details about attributes the user must have to subscribe to the project.

    Requires either groups or attributes

    -

    -

    attributes.name string

    The name of the attribute the user must have to subscribe to the project. This is commonly referred to as a key.

    Required if using attributes

    -

    -

    attributes.value string

    The value of the attribute the user must have to subscribe to the project.

    Required if using attributes

    -

    -

    config object

    Details about the workspace configuration.

    Required

    -

    -

    config.schema string

    Your project workspace will exist within this schema in Snowflake under the database configured by the application admin.

    Required when type is snowflake

    -

    config.warehouses array

    These are the Snowflake warehouses that will be available to project members when they are working in the Snowflake workspace.

    Required when type is snowflake

    -

    config.database string

    The Databricks database the workspace will be in.

    Required when type is databricks

    -

    config.directory string

    The Databricks directory the workspace will be in.

    Required when type is databricks

    -

    config.workspaceConfigurationName string

    The Databricks workspace configuration name.

    Required when type is databricks

    -

    name: Databricks Spark Project
    projectKey: databricks spark project
    datasources:
      - Crime Data
      - Databricks Credit Card Transactions
      - Databricks Hipaa Data
    purposes:
      - Use Purposes
    workspace:
      type: databricks
      config:
        database: native
        directory: native
        workspaceConfigurationName: S3
    name: Snowflake Project
    projectKey: snowflake project
    datasources:
      - Snowflake Case
      - Snowflake Customer
      - Snowflake Web Sales
    workspace:
      type: snowflake
      config:
        schema:
          SNOWFLAKE_NATIVE
        warehouses:
          - DEMO_WH
    tags:
      - Discovered.Passport

    Immuta V2 API

    Learn about managing data sources and policies using the V2 API

    Policy as code benefits

    • Reduces complexity: The data source API has been simplified to only require the connection information in most instances and one endpoint for all database technologies.

    • Maintains less state: Whether updating or creating, the same endpoint is used, and the same data is passed. No ids are required, so no additional state is required.

    • Requires fewer steps: Only an API key is required; no additional authentication step is required before using the API.

    • Integrates with Git: Define data sources and policies in files that can be tracked in Git and easily pushed to Immuta. Both JSON and YAML are supported for more flexibility. (For example, use YAML to add comments in files.)

    All of the API endpoints described below take either JSON or YAML, and the endpoint and payload are the same for both creating and updating data sources, policies, projects, and purposes.

    • : Create data sources

    • /api/v2/policy: Create policies

  • : Create projects

  • : Create purposes

  • Endpoints and details

    /api/v2/data
    Data policies
    Subscription policies
    /api/v2/project
    /api/v2/purpose

    Create a Subscription Policy

    Author a subscription policy using the V2 API

    POST /api/v2/policy

    Required Immuta permission: GOVERNANCE

    Create an Anyone can subscribe subscription policy.

    name: Anyone
    policyKey: subscription anyone
    type
    

    Create an anyone can subscribe when approved subscription policy.

    name: Approval
    policyKey: subscription approval
    type
    

    Create a users with specific groups or attributes subscription policy.

    name: Entitlement
    policyKey: subscription entitlements
    type: subscription
    actions:
      type: entitlements
      entitlements:
        operator: any
        groups:
          - Employee
        attributes:
          - name: auth1
            value: SOMETHING_ELSE
      automaticSubscription: true
      allowDiscovery: false
      description: Some description here
    circumstances:
      - type: columnRegex
        regex: ssn
        caseInsensitive: false
    staged: false

    Create a using advanced functions.

    Create an .

    Parameter
    Description
    Required or optional
    Default value

    The body of the request contains the details of the policy you want to create. The following table describes the attributes you can include in the body.

    Attribute
    Description
    Required or optional
    Default value
    Accepted values

    The actions object describes the rules of the policy.

    Attribute
    Description
    Required or optional
    Default value
    Accepted values

    This array is required if the policy type is approval in the . It allows you to define the users who can approve subscription requests.

    Attribute
    Description
    Required or optional
    Default value
    Accepted values

    This object is required if the policy type is entitlements in the . It allows you to define the groups or attributes that users must have to subscribe to the project.

    Attribute
    Description
    Required or optional
    Default value
    Accepted values

    The circumstances array dictates what data sources the policy will be applied to. For example, you could specify to apply the policy to data sources that have specific tags or to data sources created during a certain time period.

    Attribute
    Description
    Required or optional
    Default value
    Accepted values

    The certification object contains the details of the certification for the policy.

    Attribute
    Description
    Required or optional
    Default value
    Accepted values

    false

    The name of the policy that will be displayed in the Immuta UI.

    Required

    -

    -

    type string

    The type of policy.

    Required

    -

    • subscription

    • data

    object

    The actual rules for this policy.

    Required

    -

    -

    array

    When and where the policy should get applied.

    Optional

    -

    -

    circumstanceOperator string

    Specifies whether all of the circumstances must be met for the policy to be applied (AND), or just any of them (OR).

    Optional

    any

    • all

    • any

    staged boolean

    If true, this global policy is in a staged status.

    Optional

    false

    • true

    • false

    object

    Certification information for the global policy.

    Optional

    -

    -

    When true, users will be automatically subscribed to the data source without having to take action.

    Optional

    false

    • true

    • false

    allowDiscovery boolean

    When true, users can see the data source in the Immuta UI, even if they do not have the attributes and groups specified by the policy.

    Optional

    false

    • true

    • false

    advanced string

    An advanced function to use as the subscription policy. See the for details about the functions Immuta supports.

    Optional

    -

    -

    description string

    The rationale for your policy.

    Optional

    -

    -

    array

    Details about the user(s) that will approve subscription requests.

    Required if type is approval

    -

    -

    object

    Details about the entitlements required for users to subscribe to the data sources.

    Required if type is entitlements

    -

    -

    The required permissions for the user approving the subscription request.

    Required

    -

    • USER_ADMIN

    • GOVERNANCE

    • AUDIT

    The names of the groups the user must be a member of to subscribe to the data source.

    Requires either groups or attributes

    -

    -

    attributes array[object]

    Details about attributes the user must have to subscribe to the data source.

    Requires either groups or attributes

    -

    -

    attributes.name string

    The name of the attribute the user must have to subscribe to the data source. This is commonly referred to as a key.

    Required if using attributes

    -

    -

    attributes.value string

    The value of the attribute the user must have to subscribe to the data source.

    Required if using attributes

    -

    -

    The tag to dictate when the policy is applied.

    Required if type is tags.

    -

    -

    columnTag string

    The column tag to dictate when the policy is applied.

    Required if type is columnTags.

    -

    -

    regex string

    The regex to match against column names and apply the policy when found.

    Required if type is columnRegex.

    -

    -

    caseInsensitive boolean

    If true, the regex is case insensitive. Use with type columnRegex.

    Optional

    -

    • true

    • false

    server string

    Specifies the server that contains the data sources the policy should be applied to.

    Required if type is server

    -

    -

    startDate string

    Specifies to apply policies to data sources created on or after this date and before the endDate.

    Required if type is time

    -

    -

    endDate string

    Specifies to apply policies to data sources created before this date and after the startDate.

    Optional

    -

    -

    domains array[object]

    Specifies to apply policies to data sources in the listed domains.

    Required if type is domains.

    -

    -

    domains.id string

    The unique ID of the domain.

    Requires either domains.id or domains.name if type is domains.

    -

    -

    domains.name string

    The name of the domain.

    Requires either domains.id or domains.name if type is domains.

    -

    -

    The label that appears when the policy has been certified.

    Required

    -

    -

    tags array[string]

    Tags that impact the certification.

    Optional

    -

    -

    recertify boolean

    When true, data owners must re-certify all data sources this policy applies to.

    Optional

    false

    • true

    • false

    :
    subscription
    actions:
    type: anyone
    automaticSubscription: false
    description: Rationale
    circumstances:
    - type: tags
    tag: Discovered
    :
    subscription
    actions:
    type: approval
    approvals:
    - specificApproverRequired: false
    requiredPermissions: OWNER
    - specificApproverRequired: true
    requiredPermissions: GOVERNANCE
    description: Rationale
    circumstances:
    - type: columnTags
    columnTag: Discovered
    name: Advanced Entitlement
    policyKey: subscription entitlements advanced boolean
    type: subscription
    actions:
      type: entitlements
      advanced: "@isInGroups('Engineers', 'Founders') AND @hasAttribute('Auth1', 'Super Secret')"
      automaticSubscription: true
      allowDiscovery: false
      description: Some description here
    circumstances:
      - type: columnRegex
        regex: ssn
        caseInsensitive: false
    staged: false
    name: Manual
    policyKey: subscription manual
    type: subscription
    actions:
      type: manual
      description: Rationale

    dryRun boolean

    If true, no updates will actually be made.

    Optional

    false

    reCertify boolean

    If true (and if the certification has changed), someone will need to re-certify this policy on all impacted data sources.

    policyKey string

    A key/name to uniquely identify this policy.

    Required

    -

    -

    type string

    The type of subscription policy.

    Required

    -

    • anyone: Anyone can subscribe

    • approval: Anyone can request approval and will be subscribed when it is approved

    • entitlements: Users with the listed attributes or groups will be subscribed

    • manual: Users must be manually added to be subscribed

    specificApproverRequired boolean

    If true, the user to approve the request will be selected by the user requesting access. If false, any user with the required permission can approve the request.

    Required

    -

    • true

    • false

    operator string

    Specifies whether users must have all or any of the entitlements to be eligible to subscribe to the data source.

    Required

    -

    • all

    • any

    type string

    Specifies how to determine whether or not to apply the policy to the data source.

    Optional

    Defaults to all data sources

    • tags: Apply the policy when the data source has these tags.

    • columnRegex: Apply the policy when the data source has column names that match the regex.

    • columnTags: Apply the policy when the data source has columns with these tags.

    • domains: Apply the policy to data sources in these domains.

    • null: Apply the policy to data sources when it is selected by data owners.

    • server: Apply the policy to data sources in this server.

    • time: Apply the policy to data sources created in a specific time period.

    text string

    The text that appears when a data owner attempts to certify a policy.

    Required

    -

    -

    Path parameters

    Body parameters

    actions object

    approvals array

    entitlements object

    circumstances array

    certification object

    users with specific groups or attributes subscription policy
    individual users you select subscription policy
    actions object
    actions object

    Optional

    name string

    automaticSubscription boolean

    requiredPermissions string

    groups array[string]

    tag string

    label string

    actions
    circumstances
    certification
    Advanced use of special functions guide
    approvals
    entitlements

    Create a Purpose

    POST /api/v2/purpose

    Required Immuta permission: GOVERNANCE

    name: A basic purpose
    name: Purpose Hierarchy
    acknowledgement: The root acknowledgement
    
    

    Path parameters

    Parameter
    Description
    Default value

    dryRun boolean

    The body of the request contains the purpose details. The following attributes are available:

    Attribute
    Description
    Required or optional

    The subpurposes array allows you to define a hierarchy of purposes, where each subpurpose can have its own acknowledgement and can be used to further categorize data usage. Each subpurpose can itself have a subpurposes array, allowing for nested hierarchies.

    Attribute
    Description
    Required or optional

    The acknowledgement that users must agree to when joining a project with this purpose. If not provided, the system default will be used.

    Optional

    array

    The subpurposes of the purpose.

    Optional

    Nested subpurposes.

    Optional

    subpurposes:
    - name: Purpose Hierarchy.Child 1
    acknowledgement: Override the root acknowledgement
    subpurposes:
    - name: Purpose Hierarchy.Child 1.Grandchild 1
    - name: Purpose Hierarchy.Child 1.Grandchild 2
    - name: Purpose Hierarchy.Child 2
    subpurposes:
    - name: Purpose Hierarchy.Child 2.Grandchild 1
    - name: Purpose Hierarchy.Child 2.Grandchild 2

    If true, no updates will actually be made.

    false

    reAcknowledgeRequired boolean

    If true, will require all users of any projects using this purpose to re-acknowledge any updated acknowledgement statements.

    false

    name string

    The name of the purpose.

    Required

    description string

    A short description for the purpose.

    Optional

    name string

    The name of the subpurpose.

    Required

    acknowledgement string

    The acknowledgement that users must agree to when joining a project with this subpurpose. If not provided, the system default will be used.

    Optional

    Body parameters

    subpurposes array

    acknowledgement string

    subpurposes array

    subpurposes

    Create a Data Policy

    Author a data policy using the V2 API

    POST /api/v2/policy

    Required Immuta permission: GOVERNANCE

    This simple masking policy masks all columns with no tags using a hash function.

    name: Hashing
    policyKey: data mask hashing
    type
    

    This complex masking policy masks columns with specific tags using a constant value, but only if the user does not have certain attributes. If the user has the auth attribute set to SOMETHING_ELSE or auth1 set to super secret, the masking policy will not be applied.

    Parameter
    Description
    Required or optional
    Default value

    The body of the request contains the details of the policy you want to create. The following table describes the attributes you can include in the body.

    Attribute
    Description
    Required or optional
    Default value
    Accepted values

    The actions array contains one or more rules arrays that describe the rules of the policy. Each rules array can have its own configuration and exceptions.

    Attribute
    Description
    Required or optional
    Accepted values

    The config object contains the details of the policy configuration. This includes the fields the policy will be applied to and the masking configuration.

    Attribute
    Description
    Required or optional
    Accepted values

    The fields array specifies which columns the policy will be applied to. You can specify columns by tags, regex, or all columns.

    Attribute
    Description
    Required or optional
    Accepted values

    The maskingConfig object contains the details of the masking policy. You can specify the type of masking, the constant value to use, or a regular expression to match against.

    Attribute
    Description
    Required or optional
    Accepted values

    The exceptions object specifies the users that will not be affected by the policy. You can specify exceptions based on purposes or attributes.

    Attribute
    Description
    Required or optional
    Accepted values

    The circumstances array dictates what data sources the policy will be applied to. For example, you could specify to apply the policy to data sources that have specific tags or to data sources created during a certain time period.

    Attribute
    Description
    Required or optional
    Default value
    Accepted values

    The certification object contains the details of the certification for the policy.

    Attribute
    Description
    Required or optional
    Default value
    Accepted values

    false

    The name of the policy that will be displayed in the Immuta UI.

    Required

    -

    -

    type string

    The type of policy.

    Required

    -

    • subscription

    • data

    array

    The actual rules for this policy.

    Required

    -

    -

    array

    When and where the policy should get applied.

    Optional

    -

    -

    circumstanceOperator string

    Specifies whether all of the circumstances must be met for the policy to be applied (AND), or just any of them (OR).

    Optional

    any

    • all

    • any

    staged boolean

    If true, this global policy is in a staged status.

    Optional

    false

    • true

    • false

    object

    Certification information for the global policy.

    Optional

    -

    -

    • Masking

    • Minimization

    • Purpose Restriction

    object

    Details about the configuration of the policy.

    Required

    -

    rules.inclusions object

    The specific users this policy is meant to affect. If you use inclusions, you must add a second rules array for the other users. .

    Optional

    -

    rules.inclusions.groups array[string]

    Group names. Users in these groups will be affected by the rules in this rules array.

    Required for rules.inclusions

    -

    object

    These are the users the policy is not meant to target.

    Optional

    -

    -

    conditionalPredicate string

    to dictate where the policy is applied.

    Optional

    -

    operator string

    Specifies whether all of the circumstances must be met for the policy to be applied (AND), or just any of them (OR).

    Optional

    any

    purposes array[string]

    Purpose names. Restriction to the data will be applied to everyone except users acting under these purposes.

    Required if rules.type is Purpose Restriction

    -

    percent integer

    Specifies the percentage of the data to show.

    Required if rules.type is Minimization

    -

    isOlderOrNewer string

    Specifies if the policy should be applied to columns older or newer than the provided time.

    Required if rules.type is Time Restriction

    • newer

    • older

    time integer

    The time (in seconds) that the row must be older or newer than to be visible.

    Required if rules.type is Time Restriction

    -

    predicate string

    to dictate what rows are visible.

    Required if rules.type is Row Restriction by Custom Where Clause

    -

    matches object

    The user entitlements that must match the value in the specified column for the row to show.

    Required if rules.type is Row Restriction By User Entitlements

    -

    matches.type string

    The type of user entitlements to base the policy on.

    Required if rules.type is Row Restriction By User Entitlements

    • Group

    • Attribute

    • Purpose

    matches.tag string

    The tag of the column that's data must match the user's entitlement.

    Required if rules.type is Row Restriction By User Entitlements

    -

    -

    regex string

    The regex to match against column names and apply the policy when found.

    Required if type is columnRegex

    -

    caseInsensitive boolean

    If true, the regex is case insensitive. Use with columnRegex type.

    Optional

    • true

    • false

    -

    regex string

    The regular expression that identifies the portion of the value to mask.

    Required if type is Regular Expression

    -

    replacement string

    The string that will replace the portion of the value identified by the regular expression to mask.

    Required if type is Regular Expression

    -

    caseInsensitive boolean

    If true, the regex is case insensitive. Use with Regular Expression type.

    Optional

    • true

    • false

    timePrecision string

    Specifies where Immuta will round the time to.

    Requires timePrecision or bucketSize if type is Grouping

    • HOUR

    • DAY

    • MONTH

    bucketSize integer

    The bucket size to round to.

    Requires timePrecision or bucketSize if type is Grouping

    -

    -

    attributes array[object]

    Attribute names and values. Users with these attributes will not be affected by this policy.

    Requires either purposes or attributes

    -

    attributes.name string

    An attribute name.

    Required if attributes is used

    -

    attributes.value string

    An attribute value.

    Required if attributes is used

    -

    The tag to dictate when the policy is applied.

    Required if type is tags

    -

    -

    columnTag string

    The column tag to dictate when the policy is applied.

    Required if type is columnTags

    -

    -

    regex string

    The regex to match against column names and apply the policy when found.

    Required if type is columnRegex

    -

    -

    caseInsensitive boolean

    If true, the regex is case insensitive. Use with columnRegex type.

    Optional

    -

    • true

    • false

    server string

    Specifies the server that contains the data sources the policy should be applied to.

    Required if type is server

    -

    -

    startDate string

    Specifies to apply policies to data sources created on or after this date and before the endDate.

    Required if type is time

    -

    -

    endDate string

    Specifies to apply policies to data sources created before this date and after the startDate.

    Optional

    -

    -

    domains array[object]

    Specifies to apply policies to data sources in the listed domains.

    Required if type is domains

    -

    -

    domains.id string

    The unique ID of the domain.

    Requires either domains.id or domains.name if type is domains

    -

    -

    domains.name string

    The name of the domain.

    Requires either domains.id or domains.name if type is domains

    -

    -

    The label that appears when the policy has been certified.

    Required

    -

    -

    tags array[string]

    Tags that impact the certification.

    Optional

    -

    -

    recertify boolean

    When true, data owners must re-certify all data sources this policy applies to.

    Optional

    false

    • true

    • false

    :
    data
    actions:
    - rules:
    - type: Masking
    config:
    fields:
    - type: noTags
    maskingConfig:
    type: Hash
    circumstances:
    - type: noTags

    dryRun boolean

    If true, no updates will actually be made.

    Optional

    false

    reCertify boolean

    If true (and if the certification has changed), someone will need to re-certify this policy on all impacted data sources.

    policyKey string

    A key/name to uniquely identify this policy.

    Required

    -

    -

    rules array

    Details about the rules of the policy.

    Required

    -

    rules.type string

    The type of data policy.

    fields array

    Details about the fields where the policy should be applied.

    Required

    -

    maskingConfig object

    The details of the masking policy.

    type string

    The type of Immuta source to build the policy off of.

    Required

    • columnTags

    • noTags

    • columnRegex

    • allColumns

    columnTag string

    The column tag to determine which column the policy is applied to.

    type string

    The type of masking policy to apply.

    Required if rules.type is Masking

    • Hash

    • Null

    • Constant

    • Format Preserving Masking

    • Randomized Response

    • Regular Expression

    • Reversible

    • Grouping

    constant string

    Specifies the string that will replace the value in the column.

    operator string

    Specifies whether all of the circumstances must be met for the policy to be applied (AND), or just any of them (OR).

    Optional

    • all

    • any

    purposes array[string]

    Purpose names. Users acting under these purposes will not be affected by this policy.

    type string

    Specifies how to determine whether or not to apply the policy to the data source.

    Optional

    Defaults to all data sources

    • tags: Apply the policy when the data source has these tags.

    • columnRegex: Apply the policy when the data source has column names that match the regex.

    • columnTags: Apply the policy when the data source has columns with these tags.

    • domains: Apply the policy to data sources in these domains.

    • null: Apply the policy to data sources when it is selected by data owners.

    • server: Apply the policy to data sources in this server.

    • time: Apply the policy to data sources created in a specific time period.

    text string

    The text that appears when a data owner attempts to certify a policy.

    Required

    -

    -

    Other policy type examples

    Masking policies

    Conditional masking

    name: Conditional Masking
    policyKey: data conditional masking
    type
    

    Conditional masking with an otherwise clause

    name: Conditional
    policyKey: data mask otherwise
    type
    

    Format preserving masking

    Support limitation: This policy is only supported in Snowflake integrations.

    name: Format Preserving Masking
    policyKey: data mask fpe
    type
    

    Make null with column regex

    name: Null using column regex
    policyKey: data mask null
    type
    

    Randomized response

    Support limitation: This policy is only supported in Snowflake integrations.

    name: Random Categorical
    policyKey: data mask random response
    type
    

    Randomized response with a standard deviation

    Sample data is processed during computation of randomized response policies When a randomized response policy is applied to a data source, the columns targeted by the policy are queried under a fingerprinting process. To enforce the policy, Immuta generates and stores predicates and a list of allowed replacement values that may contain data that is subject to regulatory constraints (such as GDPR or HIPAA) in Immuta's metadata database. The location of the metadata database depends on your deployment:

    • Self-managed Immuta deployment: The metadata database is located in the server where you have your external metadata database deployed.

    • SaaS Immuta deployment: The metadata database is located in the AWS global segment you have chosen to deploy Immuta. To ensure this process does not violate your organization's data localization regulations, you need to first activate this masking policy type before you can use it in your Immuta tenant. To enable randomized response for your account, see the .

    Using a regex

    With reversibility

    Using date rounding

    Using rounding with fingerprint

    Using numeric rounding

    Minimization

    Purpose restrictions

    Row-level

    By time

    Where user

    Custom where clause

    Path parameters

    Body parameters

    actions array

    config object

    fields array

    maskingConfig object

    exceptions object

    circumstances array

    certification object

    name: Mask with Constant
    policyKey: data mask constant
    type: data
    actions:
      - rules:
          - type: Masking
            exceptions:
              operator: any
              attributes:
                - name: auth
                  value: SOMETHING_ELSE
                - name: auth1
                  value: super secret
            config:
              fields:
                - type: columnTags
                  columnTag: Discovered.Country
                - type: columnTags
                  columnTag: Discovered.Passport
              maskingConfig:
                type: Constant
                constant: REDACTED
    circumstanceOperator: any
    circumstances:
      - type: columnTags
        columnTag: Discovered.Country
      - type: columnTags
        columnTag: Discovered.Passport

    Optional

    name string

    Required

    Required if rules.type is Masking

    Required if type is columnTags

    Required if type is Constant

    Requires either purposes or attributes

    tag string

    label string

    Time Restriction

  • Row Restriction By User Entitlements

  • Row Restriction by Custom Where Clause

  • QUARTER

  • YEAR

  • :
    data
    actions:
    - rules:
    - type: Masking
    config:
    fields:
    - type: columnTags
    columnTag: Discovered.Passport
    conditionalPredicate: "@columnTagged('Discovered.Country') = 'USA'"
    maskingConfig:
    type: Hash
    circumstanceOperator: all
    circumstances:
    - type: columnTags
    columnTag: Discovered.Passport
    - type: columnTags
    columnTag: Discovered.Country
    :
    data
    actions:
    - rules:
    - type: Masking
    config:
    fields:
    - type: columnTags
    columnTag: Discovered.Country
    maskingConfig:
    type: "Null"
    inclusions:
    groups:
    - Employee
    - type: Masking
    exceptions:
    purposes:
    - Re-identification Prohibited
    config:
    fields:
    - type: columnTags
    columnTag: Discovered.Country
    maskingConfig:
    type: Hash
    circumstances:
    - type: columnTags
    columnTag: Discovered.Country
    :
    data
    actions:
    - rules:
    - type: Masking
    config:
    fields:
    - type: columnTags
    columnTag: Discovered
    maskingConfig:
    type: Format Preserving Masking
    circumstances:
    - type: columnTags
    columnTag: Discovered
    :
    data
    actions:
    - rules:
    - type: Masking
    config:
    fields:
    - type: columnRegex
    regex: ssn
    caseInsensitive: true
    maskingConfig:
    type: Null
    circumstances:
    - type: columnRegex
    regex: ssn
    caseInsensitive: true
    :
    data
    actions:
    - rules:
    - type: Masking
    config:
    fields:
    - type: allColumns
    maskingConfig:
    type: Randomized Response
    replacementRatePercent: 10

    Support limitation: This policy is only supported in Snowflake integrations.

    Support limitation: This policy is only supported in Snowflake integrations.

    Support limitation: This policy is only supported in Snowflake integrations.

    randomized response section on the app settings how-to guide
    actions
    circumstances
    certification
    rules.config
    See the example
    rules.exceptions
    A where clause
    A where clause
    name: Random Numeric
    policyKey: data mask random response specifying stddev
    type: data
    actions:
      - rules:
          - type: Masking
            config:
              fields:
                - type: allColumns
              maskingConfig:
                type: Randomized Response
                stddev: 2
                clip: false
    name: Regex
    policyKey: data mask regex
    type: data
    actions:
      - rules:
          - type: Masking
            config:
              fields:
                - type: columnTags
                  columnTag: Discovered.Entity.Postal Code
              maskingConfig:
                type: Regular Expression
                regex: "(\\d{4})(\\d)"
                replacement: "$1X"
                caseInsensitive: true
                global: true
    circumstances:
      - type: columnTags
        columnTag: Discovered.Entity.Postal Code
    name: Mask using Reversible
    policyKey: data mask reversible
    type: data
    actions:
      - rules:
          - type: Masking
            config:
              fields:
                - type: columnTags
                  columnTag: Discovered.Entity.Social Security Number
              maskingConfig:
                type: Reversible
            exceptions:
              groups:
                - founders
    circumstances:
      - type: columnTags
        columnTag: Discovered.Entity.Social Security Number
    name: RoundingDate
    policyKey: data mask rounding by date
    type: data
    actions:
      - rules:
          - type: Masking
            config:
              fields:
                - type: columnTags
                  columnTag: Discovered.Entity.Date
              maskingConfig:
                type: Grouping
                timePrecision: MONTH
    circumstances:
      - type: columnTags
        columnTag: Discovered.Entity.Date
    name: RoundingFingerprint
    policyKey: data mask round using fingerprint
    type: data
    actions:
      - rules:
          - type: Masking
            config:
              fields:
                - type: columnTags
                  columnTag: Discovered.Entity.Date
              maskingConfig:
                type: Grouping
    circumstances:
      - type: columnTags
        columnTag: Discovered.Entity.Date
    name: RoundingNumeric
    policyKey: data mask round numeric
    type: data
    actions:
      - rules:
          - type: Masking
            config:
              fields:
                - type: columnTags
                  columnTag: Discovered.Entity.Date
              maskingConfig:
                type: Grouping
                bucketSize: 10
    circumstances:
      - type: columnTags
        columnTag: Discovered.Entity.Date
    name: Minimize
    policyKey: data minimize
    type: data
    actions:
      - rules:
          - type: Minimization
            config:
              percent: 15
    circumstances:
      - type: time
        startDate: '2020-12-01T16:23:54.734Z'
        endDate: '2020-12-31T16:23:54.745Z'
    name: Purpose
    policyKey: data purpose restriction
    type: data
    actions:
      - rules:
          - type: Purpose Restriction
            config:
              operator: any
              purposes:
                - "<ANY PURPOSE>"
    name: Row Level By Time
    policyKey: data row-level
    type: data
    actions:
      - rules:
          - type: Time Restriction
            config:
              isOlderOrNewer: newer
              time: 2592000
    circumstances:
      - type: tags
        tag: Discovered.PCI
    name: Row Level Where User
    policyKey: data where user
    type: data
    actions:
      - rules:
          - type: Row Restriction By User Entitlements
            config:
              operator: all
              matches:
                type: Group
                tag: Discovered.Entity
    circumstanceOperator: any
    circumstances:
      - type: columnTags
        columnTag: Discovered.Entity
    name: Row Level Where
    policyKey: data custom where
    type: data
    actions:
      - rules:
          - type: Row Restriction by Custom Where Clause
            config:
              predicate: "@columnTagged('Discovered.Country') in ('USA', 'CANADA', 'MEXICO')"
    circumstances:
      - type: tags
        tag: Discovered.Country