身份验证策略¶
身份验证策略允许您指定以下内容,从而控制客户端或用户的身份验证方式:
用户可用于连接到 Snowflake 的客户端,例如 Snowsight 或 Classic Console、驱动程序 或 SnowSQL(CLI 客户端)。有关更多信息,请参阅 限制。
用户在登录体验期间可用的 SAML2 安全集成。例如,如果存在多个安全集成,则可指定可以选择哪个身份提供商 (IdP) 并使用其进行身份验证。
如果您使用身份验证策略来控制用户可以使用哪个 IdP 进行身份验证,则可以使用与 IdPs 关联的 SAML2 安全集成的
ALLOWED_USER_DOMAINS
和ALLOWED_EMAIL_PATTERNS
属性进一步细化该控制。有关更多详细信息,请参阅 使用多个身份提供商进行联合身份验证。
您可以对账户或账户中的用户设置身份验证策略。如果对账户设置身份验证策略,则身份验证策略将适用于账户中的所有用户。如果同时对账户和用户设置身份验证策略,则用户级身份验证策略将替换账户级身份验证策略。
备注
如果您已经可以访问标识符优先登录流,则需要使用 SYSTEM$MIGRATE_SAML_IDP_REGISTRATION 函数从不支持的 SAML_IDENTITY_PROVIDER 账户参数迁移账户。
用例¶
以下列表列出了身份验证策略的非详尽用例:
您希望在有多个登录选项时控制用户登录流。
您希望控制对特定用户或所有用户可用的身份验证方法、特定客户端类型和安全集成。
您有客户使用 Snowflake 驱动程序在 Snowflake 上构建服务,但客户不希望其用户通过 Snowsight 或 Classic Console 访问 Snowflake。
您希望为特定用户提供多个身份提供商作为身份验证选项。
限制¶
身份验证策略的 CLIENT_TYPES
属性是阻止基于特定客户端的用户登录的最佳方法。它不应用作确定安全边界的唯一控制手段。
注意事项¶
确保身份验证策略中列出的身份验证方法和安全集成不冲突。例如,如果在允许的安全集成列表中添加 SAML2 安全集成,并且仅允许 OAuth 作为允许的身份验证方法,则无法创建身份验证策略。
在用户被锁定的情况下,为管理员使用额外的非限制性身份验证策略。有关示例,请参阅 防止锁定。
安全策略优先顺序¶
当激活了多种类型的安全策略时,策略之间会发生优先顺序。例如,网络策略 优先于身份验证策略,因此,如果请求的 IP 地址与网络策略的阻止名单中的 IP 地址匹配,则不检查身份验证策略,且评估在网络策略处停止。
以下列表描述了评估安全策略的顺序:
网络策略:允许或拒绝 IP 地址、VPC IDs 和 VPCE IDs。
身份验证策略 - 允许或拒绝客户端、身份验证方法和安全集成。
密码策略 (仅适用于本地身份验证):指定密码要求,如字符长度、字符、密码有效期、重试次数和锁定时间。
会话策略:要求用户在一段时间不活动后重新进行身份验证
如果为账户和用户身份验证都分配了策略,则会强制执行用户级别策略。
将标识符优先登录与身份验证策略相结合¶
默认情况下,Snowsight 或 Classic Console 提供通用登录体验,其中提供多个登录选项,无论这些选项是否与用户相关。这意味着无论登录选项是否是用户的有效选项,都会尝试进行身份验证。
您可以更改此行为,以便为 Snowsight 或 Classic Console 启用标识符优先登录流。在此流中,Snowflake 会在显示身份验证选项前提示用户输入电子邮件地址或用户名。Snowflake 使用电子邮件地址或用户名来识别用户,然后只显示与用户相关,并且账户或用户设置的身份验证策略允许的登录选项。
有关启用标识符优先登录流的说明,请参阅 标识符优先登录。
下表提供了如何组合标识符优先登录和身份验证策略以控制用户登录体验的示例配置。
配置 |
结果 |
---|---|
身份验证策略的 AUTHENTICATION_METHODS 参数仅包含 PASSWORD。 |
Snowflake 提示用户输入电子邮件地址或用户名,以及密码。 |
身份验证策略的 AUTHENTICATION_METHODS 参数仅包含 SAML,并且存在活动的 SAML2 安全集成。 |
如果电子邮件地址或用户名仅与一个 SAML2 安全集成匹配,Snowflake 会将用户重定向到身份提供商的登录页面。 |
身份验证策略的 AUTHENTICATION_METHODS 参数同时包含 PASSWORD 和 SAML,并且存在活动的 SAML2 安全集成。 |
如果电子邮件地址或用户名仅与一个 SAML2 安全集成匹配,则 Snowflake 显示 SAML SSO 按钮,以及使用电子邮件地址或用户名和密码登录的选项。 |
身份验证策略的 AUTHENTICATION_METHODS 参数仅包含 SAML,并且有多个活动的 SAML2 安全集成。 |
如果电子邮件地址或用户名与多个 SAML2 安全集成匹配,则 Snowflake 会显示多个 SAML SSO 按钮。 |
身份验证策略的 AUTHENTICATION_METHODS 参数同时包含 PASSWORD 和 SAML,并且有多个活动的 SAML2 安全集成。 |
如果电子邮件地址或用户名与多个 SAML2 安全集成匹配,则 Snowflake 会显示多个 SAML SSO 按钮,以及使用电子邮件地址或用户名和密码登录的选项。 |
创建身份验证策略¶
管理员可以使用 CREATE AUTHENTICATION POLICY 命令创建新的身份验证策略,指定哪些客户端可以连接到 Snowflake,可以使用哪些身份验证方法,以及用户可以使用哪些安全集成。默认情况下,所有客户端类型、身份验证方法和安全集成都可以用于连接到 Snowflake。See client type limitations in authentication policies。
例如,您可以使用以下命令创建自定义 policy_admin
角色和身份验证策略,仅允许使用 Snowsight 或 Classic Console 进行身份验证,仅允许账户或用户使用 OAuth 或密码进行身份验证:
USE ROLE ACCOUNTADMIN;
CREATE OR REPLACE DATABASE my_database;
USE DATABASE my_database;
CREATE OR REPLACE SCHEMA my_schema;
USE SCHEMA my_schema;
CREATE ROLE policy_admin;
GRANT USAGE ON DATABASE my_database TO ROLE policy_admin;
GRANT USAGE ON SCHEMA my_database.my_schema TO ROLE policy_admin;
GRANT CREATE AUTHENTICATION POLICY ON SCHEMA my_database.my_schema TO ROLE policy_admin;
GRANT APPLY AUTHENTICATION POLICY ON ACCOUNT TO ROLE policy_admin;
USE ROLE policy_admin;
CREATE AUTHENTICATION POLICY my_example_authentication_policy
CLIENT_TYPES = ('SNOWFLAKE_UI')
AUTHENTICATION_METHODS = ('OAUTH', 'PASSWORD');
有关详细示例,请参阅 登录配置示例。
对账户或用户设置身份验证策略¶
对账户或用户设置身份验证策略时,身份验证策略中指定的限制将应用于该账户或用户。您可以使用 ALTER ACCOUNT 或 ALTER USER 命令对账户或用户设置身份验证策略。
在 Snowsight 工作表中,使用以下命令之一对账户或用户设置身份验证策略:
ALTER ACCOUNT SET AUTHENTICATION POLICY my_example_authentication_policy;
ALTER USER example_user SET AUTHENTICATION POLICY my_example_authentication_policy;
只有安全管理员(具有 SECURITYADMIN 角色的用户)或其角色拥有 APPLY AUTHENTICATION POLICY 的用户可以对账户或用户设置身份验证策略。要向角色授予此权限以便用户可以对账户或用户设置身份验证策略,请执行以下命令之一:
GRANT APPLY AUTHENTICATION POLICY ON ACCOUNT TO ROLE my_policy_admin
GRANT APPLY AUTHENTICATION POLICY ON USER TO ROLE my_policy_admin
有关详细示例,请参阅 登录配置示例。
跟踪身份验证策略使用情况¶
使用 Information Schema 表函数 POLICY_REFERENCES 为分配给指定身份验证策略的每个用户返回一行,并为分配给 Snowflake 账户的身份验证策略返回一行。
身份验证策略支持以下语法:
POLICY_REFERENCES( POLICY_NAME => '<authentication_policy_name>' )
POLICY_REFERENCES( REF_ENTITY_DOMAIN => 'USER', REF_ENTITY_NAME => '<username>')
POLICY_REFERENCES( REF_ENTITY_DOMAIN => 'ACCOUNT', REF_ENTITY_NAME => '<accountname>')
其中,authentication_policy_name
是身份验证策略的完全限定名称。
例如,执行以下查询,为分配了名为 authentication_policy_prod_1
的身份验证策略的每个用户返回一行,该策略存储在名为 my_db
的数据库和名为 my_schema
的架构中:
SELECT *
FROM TABLE(
my_db.INFORMATION_SCHEMA.POLICY_REFERENCES(
POLICY_NAME => 'my_db.my_schema.authentication_policy_prod_1'
)
);
防止锁定¶
在管理账户的身份验证策略非常严格的情况下,您可以创建一个非限制性身份验证策略,供管理员在安全集成导致锁定时用作恢复选项。例如,您可以仅为管理员包括 PASSWORD
身份验证方法。用户级身份验证策略将替换限制性更强的账户级策略。
CREATE AUTHENTICATION POLICY admin_authentication_policy
AUTHENTICATION_METHODS = ('SAML', 'PASSWORD')
CLIENT_TYPES = ('SNOWFLAKE_UI', 'SNOWSQL', 'DRIVERS')
SECURITY_INTEGRATIONS = ('EXAMPLE_OKTA_INTEGRATION');
然后,您可以将此策略分配给管理员:
ALTER USER <administrator_name> SET AUTHENTICATION POLICY admin_authentication_policy
复制身份验证策略¶
您可以使用故障转移组和复制组复制身份验证策略。有关详细信息,请参阅 复制与安全策略。
登录配置示例¶
本节提供了如何使用和组合身份验证策略与 SAML2 安全集成来控制登录流和安全的示例。
按客户端类型限制用户对 Snowflake 的访问权限¶
See client type limitations in authentication policies。
创建名为 restrict_client_type_policy
的身份验证策略,该策略仅允许通过 Snowsight 或 Classic Console 访问:
CREATE AUTHENTICATION POLICY restrict_client_type_policy
CLIENT_TYPES = ('SNOWFLAKE_UI')
COMMENT = 'Only allows access through the web interface';
对用户设置身份验证策略:
ALTER USER example_user SET AUTHENTICATION POLICY restrict_client_type_policy;
允许对账户使用多个身份提供商的身份验证¶
创建 SAML2 安全集成,允许用户使用 Okta 作为 IdP 并通过 SAML 登录:
CREATE SECURITY INTEGRATION example_okta_integration
TYPE = SAML2
SAML2_SSO_URL = 'https://okta.example.com';
...
创建安全集成,允许用户使用 Microsoft Azure 作为 IdP 并通过 SAML 登录:
CREATE SECURITY INTEGRATION example_azure_integration
TYPE = SAML2
SAML2_SSO_URL = 'https://azure-example_acme.com';
...
创建与 example_okta_integration
和 example_azure_integration
集成关联的身份验证策略:
CREATE AUTHENTICATION POLICY multiple_idps_authentication_policy
AUTHENTICATION_METHODS = ('SAML')
SECURITY_INTEGRATIONS = ('EXAMPLE_OKTA_INTEGRATION', 'EXAMPLE_AZURE_INTEGRATION');
对账户设置身份验证策略:
ALTER ACCOUNT SET AUTHENTICATION POLICY multiple_idps_authentication_policy;
权限和命令¶
身份验证策略权限参考¶
Snowflake 支持以下身份验证策略权限,以确定用户是否可以创建、设置和拥有身份验证策略。
请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。
权限 |
用途 |
---|---|
CREATE |
允许在架构中创建新的身份验证策略。 |
APPLY AUTHENTICATION POLICY |
允许在账户或用户级别应用身份验证策略。 |
OWNERSHIP |
授予对身份验证策略的完全控制权。更改身份验证策略的大多数属性时需要此权限。 |
身份验证策略 DDL 参考¶
有关身份验证策略权限和命令的详细信息,请参阅以下参考文档:
命令 |
权限 |
描述 |
---|---|---|
CREATE SCHEMA 的 AUTHENTICATION POLICY |
创建新的身份验证策略。 |
|
AUTHENTICATION POLICY 的 OWNERSHIP |
修改现有的身份验证策略。 |
|
AUTHENTICATION POLICY 的 OWNERSHIP |
从系统中移除现有的身份验证策略。 |
|
AUTHENTICATION POLICY 的 OWNERSHIP |
描述现有身份验证策略的属性。 |
|
AUTHENTICATION POLICY 的 OWNERSHIP 或 SCHEMA 的 USAGE |
列出系统中的所有身份验证策略。 |