This page is the chronological setup guide for a Snowflake CloudLink. Follow it top to bottom: prerequisites, IP whitelisting, key-pair authentication, the Snowflake setup script, the Elementum-side connection, and verification. If you’re new to CloudLink or unsure how it differs from Snowflake itself, start with the CloudLink Overview.Documentation Index
Fetch the complete documentation index at: https://docs.elementum.io/llms.txt
Use this file to discover all available pages before exploring further.
How it works
Elementum connects directly to your Snowflake account using a dedicated service user, role, warehouse, and database. The connection is read/write where you grant it, and read-only where you don’t.| Side | What it owns |
|---|---|
| Your Snowflake account | Your data (databases, tables, views). You grant access to a dedicated ELEMENTUM user/role with the exact permissions you choose. You can restrict access to known Elementum IP addresses. |
| Elementum platform | A reader/writer service account that connects in-place to your Snowflake account. No data is copied or stored outside Snowflake; all operations execute in your Snowflake environment. |
Prerequisites
Before starting, confirm you have:Snowflake access
ACCOUNTADMINrole for setup- Tables/views with a primary key or unique identifier
- Permission to create network policies
Elementum access
- Admin privileges in Elementum to configure CloudLink connections
- Your organization domain is already whitelisted on the Elementum side (
[your-org].elementum.io)
Step 1: Whitelist Elementum IP addresses
Configure your Snowflake network policy to allow connections from Elementum.| Region | IP Addresses |
|---|---|
| US East | 44.210.166.136, 44.209.114.114, 52.72.254.246 |
| Europe | 18.185.13.42, 63.182.157.140, 3.65.106.188 |
ELEMENTUM user later in Step 4.
Step 2: Get the public key from Elementum
Elementum uses RSA key-pair authentication. The private key stays in Elementum’s infrastructure; you assign the public key to your Snowflake service user.Copy the public key
Step 3: Run the Snowflake setup script
The script below creates the user, role, warehouse, database, and platform schema that Elementum needs. Run each step in order, replacing<PASTE_PUBLIC_KEY_FROM_ELEMENTUM_UI> with the key you copied in Step 2.
Create the ELEMENTUM service user
-----BEGIN PUBLIC KEY----- and -----END PUBLIC KEY----- header/footer lines.Create the Elementum warehouse
Step 4: Grant permissions and set the network policy
Apply the network policy you created in Step 1, then grant theELEMENTUM role access to the data you want available in Elementum.
Apply the network policy
Grant data access
The pattern is database usage → schema usage → table grants. Choose the access level you need.- Full access (read/write)
- Read-only
- Schema-level (all tables)
Optional grants
The following grants are only needed if you plan to use the matching capability. Skip any that don’t apply.Enable change tracking (for change-based automations)
Enable change tracking (for change-based automations)
Grant Cortex AI access (for Snowflake Cortex provider, AI Search, AI Automations)
Grant Cortex AI access (for Snowflake Cortex provider, AI Search, AI Automations)
Grant BI view permissions (for external BI tools)
Grant BI view permissions (for external BI tools)
SELECT grants to query the views Elementum creates. See Tables for the full permission set.Step 5: Add credentials in Elementum
Return to the CloudLink dialog you opened in Step 2.Enter connection details
| Field | Value |
|---|---|
| Name | A descriptive name (for example, Production Snowflake) |
| Account URL | Your Snowflake account URL (for example, your-account.snowflakecomputing.com) |
| Username | ELEMENTUM |
| Authentication | RSA Key Pair (configured automatically using the public key from Step 2) |
| Role | ELEMENTUM |
| Warehouse | ELEMENTUM |
| Schema | ELEMENTUM_PLATFORM (Elementum’s platform schema, not your data schema) |
Test the connection
Select tables to integrate
- Database — Choose the database that contains your tables.
- Schema — Pick the schema with your data.
- Table — Choose the table(s) to bring into Elementum.
ELEMENTUM role has access to will appear.Performance check: when you select a table, Elementum runs a test query to measure response time. If the table responds slowly, you’ll see a warning before completing the connection.| Warning level | Query time | Recommendation |
|---|---|---|
| Optimal | Under 3 seconds | Proceed |
| Moderate | 3–5 seconds | Review optimization before proceeding |
| Slow | Over 5 seconds | Strongly consider optimization before connecting |
Add naming and field mapping
- App name — the application this data belongs to
- Table display name — user-friendly name shown in Elementum
- Description — optional context
- Primary key — the unique identifier column
- Field mappings — column-to-field-type, labels, and visibility
Set the resource scheduler
- Shorter intervals = fresher data, more Snowflake credits consumed.
- Longer intervals = lower cost, suitable for slower-changing data.
Provision the Query Profile Table
ACCOUNT_USAGE on every request.ACCOUNTADMIN role and grants the ELEMENTUM role the permissions it needs to read SNOWFLAKE.ACCOUNT_USAGE and execute the scheduled task. Once provisioned, the Query Profile Table status updates to Provisioned in the CloudLink dialog.Step 6: Verify the connection
Run these checks in Snowflake to confirm the role, warehouse, and data access work as expected.Use the connection
After verification, use the connection from elsewhere in Elementum:- Preview data — On the CloudLinks page, click Explore next to the connection to preview rows from any table that connection can access. Useful for confirming the data and column names match what you expect before referencing the table in a workflow.
-
Save Snowflake functions for automations — Click Functions next to the connection, choose the database and schema that contain the function, and select the function to save it. Saved functions are available in the Run Function action in automations. If a function doesn’t appear, confirm the function is set up correctly in Snowflake (see Snowflake’s function reference) and that the
ELEMENTUMrole has the privileges it needs:
Multi-environment setup
If you use organization environments for development, staging, and production, create separate Snowflake resources for each environment.Required isolation
| Environment | User | Role | Database | Schema |
|---|---|---|---|---|
| Production | ELEMENTUM_PROD | ELEMENTUM_PROD | ELEMENTUM_PROD | ELEMENTUM_PLATFORM |
| Staging | ELEMENTUM_STAGING | ELEMENTUM_STAGING | ELEMENTUM_STAGING | ELEMENTUM_PLATFORM |
| Development | ELEMENTUM_DEV | ELEMENTUM_DEV | ELEMENTUM_DEV | ELEMENTUM_PLATFORM |
Setup script for additional environments
Run this for each environment, replacingDEV with your environment name. Copy the public key separately from each Elementum environment’s CloudLink settings.
Sharing external data across environments (optional)
You can grant multiple environment users access to the same external business data tables if you need realistic data for testing.Key rotation
Snowflake supports two simultaneous public keys per user (RSA_PUBLIC_KEY and RSA_PUBLIC_KEY_2), enabling zero-downtime rotation. Elementum recommends rotating keys every 90 days.
Generate a new key pair in Elementum
Disable password authentication
If the Snowflake user was previously created with a password, disable password-based login after key-pair authentication is confirmed:Key-pair authentication reference
For background on how key-pair authentication works (private vs public key, why it’s required for Cortex features), see Authentication on the CloudLink Overview.Troubleshooting
Cannot connect from Elementum
Cannot connect from Elementum
- Verify Elementum IP addresses are whitelisted in your Snowflake network policy.
- Confirm the RSA public key was added correctly to the Snowflake user (run
DESC USER ELEMENTUMand checkRSA_PUBLIC_KEY_FP). - Check that the
ELEMENTUMuser has theELEMENTUMrole granted. - Verify the warehouse is not suspended and has available compute.
"User does not exist" error
"User does not exist" error
- Ensure the user was created with
TYPE = SERVICE. - Verify the user creation script ran successfully.
- Check that
ACCOUNTADMINwas the active role.
"JWT token is invalid" or authentication failures
"JWT token is invalid" or authentication failures
- Verify the public key was copied completely from the Elementum UI without extra whitespace or line breaks.
- Confirm the key was assigned to the correct user (
DESC USER ELEMENTUMshould show a value forRSA_PUBLIC_KEY_FP). - Ensure the key was pasted without the
-----BEGIN PUBLIC KEY-----and-----END PUBLIC KEY-----lines.
"Public key fingerprint mismatch"
"Public key fingerprint mismatch"
Connection stopped working after key rotation
Connection stopped working after key rotation
- Run
DESC USER ELEMENTUMto see which key slots have values. - Ensure the current Elementum public key is in either
RSA_PUBLIC_KEYorRSA_PUBLIC_KEY_2. - Follow the key rotation procedure to safely rotate without downtime.
Tables not visible in Elementum
Tables not visible in Elementum
- Most likely cause: you entered your data schema in the Schema field instead of
ELEMENTUM_PLATFORM. - Verify
GRANTstatements include all required tables. - Confirm database and schema usage is granted on top of table grants.
"Insufficient privileges" errors
"Insufficient privileges" errors
- Verify
GRANTstatements were executed for all required tables. - Check that the role has warehouse usage permission.
- Confirm database and schema
USAGEgrants exist.
Cannot use Cortex features
Cannot use Cortex features
- Verify
CORTEX_ENABLED_CROSS_REGIONis set to'ANY_REGION'. - Confirm
SNOWFLAKE.CORTEX_USERdatabase role is granted toELEMENTUM. - Check that Cortex is available in your Snowflake region.
- Verify
ACCOUNTADMINwas used to grant Cortex permissions. - Ensure the connection uses key-pair authentication (Cortex features require it).
Slow query performance or high credit consumption
Slow query performance or high credit consumption
- Increase warehouse size or cluster count.
- Add clustering keys / partitioning on large tables.
- Review sync interval—shorter intervals consume more credits.
- See Snowflake warehouses and Snowflake table types for tuning guidance.
Security best practices
- Least privilege
- Network
- Authentication
- Monitoring
- Grant only the permissions the
ELEMENTUMrole needs. - Use read-only access where write access isn’t required.
- Audit granted permissions regularly.
- Remove access to tables no longer in use.