What you will be able to do
- Explain what SCIM does in Snowflake and which identity providers it supports
- Create a SCIM security integration with the correct provisioner role
- Predict which users and roles an identity provider can and cannot manage
- Monitor and secure SCIM traffic with rest_event_history and a SCIM-specific network policy
Key concept
SCIM provisioner role ownership — Every user and role that SCIM creates in Snowflake is owned by one dedicated provisioner role. If that role does not own an object, changes made in the identity provider never reach it.
1.What SCIM does for Snowflake
SCIM 2.0 lets your organization's identity provider (IdP) act as the single source of truth for who can reach Snowflake. The IdP pushes users and groups into Snowflake, and Snowflake acts as the service provider. Snowflake has dedicated integrations for Okta and Microsoft Entra ID (formerly Azure AD). Any other IdP uses a custom integration. In Snowflake terms, an IdP group becomes a role, and both users and roles are mapped one-to-one.
The SCIM API covers three use cases: managing users, managing groups (roles), and auditing the SCIM API requests the IdP sends. The first two cover the full lifecycle. The third is how you confirm that provisioning is actually happening.
Ownership holds all of this together. Each IdP has its own provisioner role in Snowflake, and that role must own whatever SCIM creates. If the SCIM role does not own an imported user or role, the IdP's updates stop reaching that object. Exam questions that describe changes in Okta not showing up in Snowflake usually come down to this.
Checkpoint 1 of 5· Match them up
Match each identity provider integration to the Snowflake role that must own the objects it provisions.
Tap a term, then the definition that fits it.
Each IdP has its own SCIM role. The custom role is for IdPs that are neither Okta nor Microsoft Entra ID.
“Okta SCIM Role: OKTA_PROVISIONER”Source: docs.snowflake.com
2.Enabling and configuring the SCIM security integration
Setup happens in four stages. First, choose the IdP. Then create a SCIM security integration in Snowflake, which is the interface between Snowflake and the IdP. Next, set up authentication for SCIM requests. Finally, have the IdP send requests. The integration is a normal security integration with type = scim. Two properties matter most: scim_client, which names the IdP, and run_as_role, which names the provisioner role that will own everything created.
Checkpoint 2 of 5· Put it in order
Put the SCIM enablement stages in order.
- 1.Choose the identity provider that will send SCIM requests
- 2.Configure Snowflake to authenticate SCIM requests
- 3.Create a SCIM security integration in Snowflake
- 4.Use the identity provider to send SCIM requests
The integration has to exist before you can set up authentication for it, and requests can only be sent once authentication is in place.
“Create a SCIM security integration to establish an interface between Snowflake and your IdP.”Source: docs.snowflake.com
use role accountadmin;
create role if not exists okta_provisioner;
grant create user on account to role okta_provisioner;
grant create role on account to role okta_provisioner;
grant role okta_provisioner to role accountadmin;
create or replace security integration okta_provisioning
type = scim
scim_client = 'okta'
run_as_role = 'OKTA_PROVISIONER';The provisioner role gets only CREATE USER and CREATE ROLE on the account, so it is scoped down on purpose. A less-privileged role than ACCOUNTADMIN can run the setup, but the documentation warns this can cause errors when SCIM tries to manage roles in the resulting hierarchy. It lists three options, in order of preference: use ACCOUNTADMIN, use a role with the global MANAGE GRANTS privilege, or use a custom role that has OWNERSHIP on every role SCIM will manage. For Microsoft Entra ID, create a new enterprise application in Entra rather than reusing an existing one. The SCIM integration also supports replication and failover/failback from a source account to a target account.
Checkpoint 3 of 5· Fill the gap
Complete the Microsoft Entra ID SCIM integration.
use role accountadmin;
create role if not exists aad_provisioner;
grant create user on account to role aad_provisioner;
grant create role on account to role aad_provisioner;
grant role aad_provisioner to role accountadmin;
create or replace security integration aad_provisioning
type = scim
scim_client = ?
run_as_role = 'AAD_PROVISIONER';The product is now called Microsoft Entra ID, but the scim_client value in the documented setup is still 'azure'.
Source: docs.snowflake.com3.Managing users and groups through the IdP
With Okta, provisioning covers the user lifecycle (create, update, delete), the role lifecycle, and user-to-role assignments. Push New Users creates users in Snowflake. Push Profile Updates sends profile changes. Push User Deactivation deactivates the user in Snowflake, which means setting the user's DISABLED property to TRUE. Push Groups creates roles with the same names as in Okta, but it does not create users. Users are created when the Snowflake app is assigned to them in Okta. Always create roles in Okta first: OKTA_PROVISIONER cannot manage roles created by hand in Snowflake.
To bring an existing user under Okta, transfer its ownership (grant ownership on user <user_name> to role okta_provisioner;) and make sure login_name is set. The user's name will then be changed to match the Okta username, which can break integrations that connect with the old name. Passwords need attention too. Okta's Sync Password feature can create a random Snowflake password by default, which gives users a way in without SSO. To stop this, turn the setting off in Okta and set SYNC_PASSWORD to False on the integration. Both IdP integrations also support the allowedInterfaces attribute, which blocks a provisioned user from specific interfaces.
| Behaviour | Okta | Microsoft Entra ID |
|---|---|---|
| Owning SCIM role | OKTA_PROVISIONER | AAD_PROVISIONER |
| Take over existing Snowflake users | Yes, by transferring ownership | No, existing users cannot be transferred |
| Take over existing Snowflake roles | No, only new roles created through Okta | No, existing groups cannot be transferred |
| SYNC_PASSWORD | Set to False (and turn off in Okta) to stop password sync | Has no effect; Entra does not sync passwords |
| Nested groups | AD nested groups not supported | Not supported |
Entra ID is stricter. It is the authoritative source for its users and groups, and existing Snowflake users and groups cannot be transferred to it. By default, users it provisions get no Snowflake password, so they sign in through SAML SSO if that is configured. SAML SSO is not required to use SCIM, though.
Checkpoint 4 of 5· Check yourself
An Okta admin pushes a group called ANALYSTS to Snowflake with Push Groups. Nobody in Okta has been assigned the Snowflake application. What exists in Snowflake afterwards?
Push Groups creates roles with matching names. Users are created only when the Snowflake application is assigned to them in Okta.
“Push Groups do not create users in Snowflake.”Source: docs.snowflake.com
4.Monitoring and running SCIM day to day
To check whether provisioning is working, query the rest_event_history table. It shows whether the IdP is actually sending SCIM API requests. Snowflake allows at most 500 concurrent requests per account per SCIM endpoint, such as /Users or /Groups. Past that, it returns HTTP 429. This normally only happens during initial provisioning of very large numbers of users or groups. The SCIM endpoint is the account URL followed by /scim/v2/. Use the public endpoint, without .privatelink.
Network access is a common reason provisioning fails. The IdP's IP addresses must be allowed; for Entra ID, that means all Azure IP addresses. You don't need to add those addresses to the account-wide policy. Instead, attach a network policy to the SCIM integration itself (alter security integration okta_provisioning set network_policy = <scim_network_policy>;). A network policy on the SCIM integration overrides the account-level policy.
A few other behaviours are worth knowing. SCIM does not turn on SSO; you enable Snowflake-initiated SSO separately. By default, Snowflake sends invitation emails to SCIM-created users within 24–48 hours, and only Snowflake Support can turn this off. SCIM can set DEFAULT_SECONDARY_ROLES to 'ALL'. The snowflakeTags attribute can apply tags, provided the tag already exists and the provisioner role has USAGE on the tag's schema and APPLY on the tag. Entra ID can add and update tags but cannot remove them; remove them with ALTER USER <user_name> UNSET TAG <database_name>.<schema_name>.<tag_name>;. If you need a user's name and login_name to differ, enable this account parameter:
ALTER ACCOUNT SET MAP_SCIM_USERNAME_TO_ENTERPRISE_ATTR = TRUE;Once this is enabled, every SCIM POST and PUT must include snowflakeUserName in the enterprise extension schema. Requests without it fail.
Checkpoint 5 of 5· Check yourself
The account network policy allows only corporate IP ranges. Okta provisioning is failing. You don't want Okta's addresses in the policy that applies to normal users. What should you do?
A SCIM-specific network policy overrides the account policy, but only for SCIM traffic. Private connectivity URLs are not supported in the Okta integration settings.
“A network policy applied to a SCIM integration overrides a network policy applied to the entire Snowflake account.”Source: docs.snowflake.com
Exam traps
Each one states something that sounds right. Open it to see what is actually true.
1.Okta Push Groups creates both the role and its member users in Snowflake.Why is that wrong?
Push Groups only creates and manages roles. A user is created only when the Snowflake application is assigned to that user in Okta.
Covered in Managing users and groups through the IdP
2.Setting SYNC_PASSWORD on a Microsoft Entra ID SCIM integration controls whether Entra passwords sync to Snowflake.Why is that wrong?
Entra ID does not sync passwords to Snowflake, whatever SYNC_PASSWORD is set to. This is an Entra limitation; the property only has an effect for Okta.
Covered in Managing users and groups through the IdP
3.Once SCIM provisioning works, users can sign in with SSO automatically.Why is that wrong?
SCIM only provisions identities. Snowflake-initiated SSO has to be enabled separately.
Covered in Monitoring and running SCIM day to day
Sources
Every claim above is drawn from one of these pages, quoted as it was written on the date shown.
- 1.https://docs.snowflake.com/en/user-guide/scim-introOfficial docs
“Role management is a one-to-one mapping from the identity provider to Snowflake.”
↩︎ What SCIM does for Snowflake“If the Snowflake SCIM role does not own the imported users or roles, updates in the identity provider will not be synced to Snowflake.”
↩︎ What SCIM does for Snowflake“Administrators can query the rest_event_history table to determine whether the identity provider is sending updates”
↩︎ Monitoring and running SCIM day to day“Snowflake sends invitation emails to users created using SCIM by default.”
↩︎ Monitoring and running SCIM day to day“SCIM roles in Snowflake must own any users or roles that are imported from the identity provider.”
↩︎ Key concept“Okta SCIM Role: OKTA_PROVISIONER”
↩︎ Checkpoint“Create a SCIM security integration to establish an interface between Snowflake and your IdP.”
↩︎ Checkpoint - 2.
“You should use custom SCIM integrations for identity providers that are neither Okta nor Microsoft Azure AD.”
↩︎ What SCIM does for Snowflake“Snowflake supports replication and failover/failback with the SCIM security integration from the source account to the target account.”
↩︎ Enabling and configuring the SCIM security integration - 3.https://docs.snowflake.com/en/user-guide/scim-oktaOfficial docs
“Use a role with the global MANAGE GRANTS privilege.”
↩︎ Enabling and configuring the SCIM security integration“For Snowflake, deactivating a user means setting the DISABLED property for the user to TRUE.”
↩︎ Managing users and groups through the IdP“This could result in a pathway for users to access Snowflake without SSO.”
↩︎ Managing users and groups through the IdP“Snowflake supports a maximum of 500 concurrent requests per account per SCIM endpoint”
↩︎ Monitoring and running SCIM day to day“Push Groups do not create users in Snowflake.”
↩︎ Exam trap 1“The SCIM provisioning process does not automatically enable single sign-on (SSO).”
↩︎ Exam trap 3“Existing Snowflake roles cannot be brought under Okta’s management through transfer of ownership.”
↩︎ Prediction“Push Groups do not create users in Snowflake.”
↩︎ Checkpoint“A network policy applied to a SCIM integration overrides a network policy applied to the entire Snowflake account.”
↩︎ Checkpoint - 4.https://docs.snowflake.com/en/user-guide/scim-azureOfficial docs
“do not re-use an existing enterprise application in Microsoft Entra ID.”
↩︎ Enabling and configuring the SCIM security integration“existing users and groups in Snowflake cannot be transferred to Microsoft Entra ID.”
↩︎ Managing users and groups through the IdP“When this parameter is enabled, all SCIM POST and PUT requests must include the snowflakeUserName attribute in the enterprise extension schema.”
↩︎ Monitoring and running SCIM day to day“Setting the SYNC_PASSWORD property in the Snowflake security integration will not synchronize user passwords from Microsoft Entra ID to Snowflake.”
↩︎ Exam trap 2