This article is a cross-post from the Snowflake forums. Check it out here for further discussion/questions.
As part of furthering our commitment to protect against cybersecurity threats and to champion the advancement of industry standards for security, we recently announced that Snowflake signed the Cybersecurity and Infrastructure Security Agency (CISA) Secure By Design Pledge, and inline with that, announced a number of security enhancements in the platform — most notably the general availability of Trust Center and a new multi-factor authentication (MFA) policy. As part of our continuing efforts, we are beginning to enforce MFA for all human users in any new Snowflake account starting in October 2024. Service users — accounts designed for service-to-service communication — will not be subject to this MFA requirement. Please see the Timeline and Implementation section below for details on how this will be enforced.
What you need to know:
This new MFA policy only applies to Snowflake users with the TYPE=PERSON or NULL (i.e., human users) that use a Snowflake built-in password to login. Please see the documentation for more information on user types and see the Timeline and Implementation below for additional details on how these policies will be applied.
Timeline and Implementation
The rollout for these changes will follow the standard protocol in Snowflake’s Behavior Change Policy (BCR). Below is a summary of how this change will be enforced over the lifecycle of BCR bundle 2024_08:
- Opt-in Period (Oct-Early Jan): During this period, in order for new Snowflake accounts to have the new built-in authentication policy, you must enable the BCR bundle. This policy will not apply to any new Snowflake account created before you enable the bundle.
- Enabled by default (Early Jan to Early Feb): All new Snowflake accounts will have the new built-in authentication policy by default unless your Snowflake Account Admin explicitly opts out of BCR 2024_08.
- Generally Enabled - built-in policy enforced (Early Feb): All new Snowflake accounts will have the new built-in authentication policy. Your Snowflake Account Admin will not be able to opt-out. Your Snowflake Account Admin can override the new built-in authentication by creating a custom authentication policy and assigning it to the account.
- MFA policy for existing users: Over the next few quarters, Snowflake is looking to extend this new built-in authentication policy to all existing accounts.
Exemptions
Reader accounts and trial accounts are exempted. However, if your account converts from a trial account to a paid account, the new account will have a new built-in authentication policy that requires multi-factor authentication (MFA) for password logins for human users. This behavior is NOT controlled by the BCR bundle and the only way to override it is to define a custom authentication policy for your account and setting MFA_ENROLLMENT to OPTIONAL.
What you need to do
We recommend that you start familiarize yourself with whitepaper and this companion migration guide video then depending on how you interact with Snowflake:
- If you are building applications that connect to Snowflake (e.g., managed apps, connected apps, native apps, Snowpark Container Services, streamlit), we recommend moving away from using passwords to connect to Snowflake and instead, leveraging strong authentication in your application, by default. Depending on the user type, the recommended strong authentication is as follows:
- For human user type:
- For SSO users, Multi-Factor Authentication (MFA) on the 3rd party IDP side should be used (preferred)
- For Snowflake local users, Snowflake MFA should be used
- For service user type:
- External OAuth (preferred)
- Or key pair combined with network policy should be used
- If you manage Snowflake accounts, we recommend following the steps in this whitepaper and this companion migration guide video . More specifically:
- When creating new accounts programmatically, use the newly introduced ADMIN_USER_TYPE property for the admin as part of account creation
CREATE ACCOUNT [ ADMIN_USER_TYPE = PERSON | SERVICE | LEGACY_SERVICE | NULL ]
- For human users, set ADMIN_USER_TYPE=PERSON. PERSON users will be subject to MFA policies.
- For service users, set ADMIN_USER_TYPE=SERVICE. SERVICE users will not be subject to MFA policies.
- Service users will not be allowed to use passwords by policy and the caller should specify ADMIN_RSA_PUBLIC_KEY instead of admin password as part of account creation.
- If your service users cannot use key pair authentication, set ADMIN_USER_TYPE=LEGACY_SERVICE during account creation and continue setting up passwords. LEGACY_SERVICE users will not be subject to MFA policies.
- LEGACY_SERVICE users are not allowed to log in via UI and cannot have a first name / last name. See this link for more details.
- LEGACY_SERVICE is a temporary solution and we highly recommend that you fix your tooling.
- Read more about user types and their limitations in the create user documentation.
- For users created after a new account is bootstrapped,
- Make sure to mark the TYPE for all users
- For human users TYPE=PERSON, follow the DUO enrollment process and start using MFA
- For service users TYPE=SERVICE, make sure to either: 1) use external OAuth (preferred), or 2) use key pair authentication combined with network policy.
- If a service user cannot leverage a key pair, mark them as TYPE= LEGACY_SERVICE. This is a temporary solution and we highly recommend that you fix your deployment based on the above.
NOTE: we recommend that you leverage SCIM to automatically provision the user types as outlined in this KB article .
Need help?
For frequently asked questions, please see this KB article .