Snowflake SCIM provisioning from Google Workspace
Provision Snowflake users and roles from Google Workspace with a custom SCIM integration: the security integration SQL, the SCIM token and AnySCIM setup.
- SCIM base URL
https://{account_identifier}.snowflakecomputing.com/scim/v2- Vendor plan
- Any Snowflake account, with a custom (generic) SCIM integration
- Authentication
- SCIM access token from SYSTEM$GENERATE_SCIM_ACCESS_TOKEN, valid six months
- Provisions
- Users, roles (as groups), deactivation
Snowflake ships SCIM connectors for Okta and Microsoft Entra ID, and a custom SCIM integration for every other identity provider, including Google Workspace through AnySCIM. You create the integration with a few SQL statements, generate a SCIM access token, and AnySCIM uses it with https://{account_identifier}.snowflakecomputing.com/scim/v2 to create Snowflake users, sync Google groups as Snowflake roles and disable people who leave.
Requirements
- The ACCOUNTADMIN role in Snowflake, to create the integration and the provisioning role.
- Your account identifier, the first part of your Snowflake URL (
<account_identifier>.snowflakecomputing.com). If it contains underscores, use the hyphenated form. - A Google Workspace source already connected. See Connect Google Workspace.
Create the SCIM integration and token
Run these statements in a worksheet:
use role accountadmin;
create role if not exists generic_scim_provisioner;
grant create user on account to role generic_scim_provisioner;
grant create role on account to role generic_scim_provisioner;
grant role generic_scim_provisioner to role accountadmin;
create or replace security integration generic_scim_provisioning
type = scim
scim_client = 'generic'
run_as_role = 'GENERIC_SCIM_PROVISIONER';
select system$generate_scim_access_token('GENERIC_SCIM_PROVISIONING');
Copy the value returned by the last statement. Users and roles created through SCIM are owned by GENERIC_SCIM_PROVISIONER.
Connect Snowflake in AnySCIM
- Open Connections → New connection and choose Snowflake.
- Replace
{account_identifier}in the base URL with your account identifier, paste the token and click Test connection. - In Scope, select the people who should have Snowflake, for example your data and analytics groups. Turn on Push group membership to create a Snowflake role for each Google group.
- Review the dry-run and activate.
How users are synced
- New users in scope are created in Snowflake with their Google email as the user name and login name, and their full name as the display name.
- AnySCIM looks users up with
userName eq, the only filter Snowflake's SCIM API supports. - When a Google user is suspended, AnySCIM sets
active: false, which setsDISABLED = TRUEon the Snowflake user. - Each Google group becomes a Snowflake role with the same name, and its members are granted that role. Nested Google groups are expanded first. Grant privileges to these roles in Snowflake as usual: AnySCIM manages who has the role, not what the role can do.
- AnySCIM doesn't send passwords. Users sign in through SSO, which you enable separately in Snowflake.
Troubleshooting
- 401 after months of working: the six-month token expired. Generate a new one and update the connection.
- Errors when changing roles: the provisioning role must own the roles it manages. Don't change the owner of SCIM-created roles, or use a role with
MANAGE GRANTSasrun_as_role. - Requests blocked by a network policy: a network policy set on the SCIM integration overrides the account-level one. Set one with
alter security integration generic_scim_provisioning set network_policy = <policy>that allows AnySCIM's servers. - Changes made in Snowflake are overwritten: edits made directly in Snowflake are not synced back to Google Workspace. Make changes in Google and let the next sync apply them.
FAQ
Does Snowflake support SCIM with Google Workspace?
Snowflake has no built-in Google Workspace connector, but its custom SCIM integration (scim_client = 'generic') works with any SCIM client. AnySCIM connects Google Workspace to it.
Do Google groups become Snowflake roles?
Yes. With Push group membership enabled, each Google group becomes a Snowflake role of the same name and its members are granted it. You then grant privileges to that role in Snowflake.
How long does the Snowflake SCIM token last?
Six months. Generate a new one with system$generate_scim_access_token('GENERIC_SCIM_PROVISIONING') and update the AnySCIM connection before it expires.
Try it on your own directory
Connect Google Workspace and preview the first sync in dry-run: nothing is sent until you activate the connection.