管理/使用联合身份验证¶
本主题介绍在 配置 联合身份验证后,如何管理和使用这种身份验证。
本主题内容:
管理启用联合身份验证的用户¶
管理 Snowflake 用户密码¶
为账户启用联合身份验证后,Snowflake 仍然允许维护和使用 Snowflake 用户凭据(登录名和密码)。换言之:
账户和安全管理员仍可创建在 Snowflake 中维护密码的用户。
用户仍可使用其 Snowflake 凭据登录 Snowflake。
但如果为账户启用了联合身份验证,Snowflake 不 建议在 Snowflake 中维护用户密码。而是应该仅在 IdP 中维护用户密码。
如果创建无密码的用户(或更改现有用户并删除其密码),则实际效果就是禁用该用户的 Snowflake 身份验证。如果在 Snowflake 中没有密码,用户将无法使用 Snowflake 身份验证登录,必须改用联合身份验证。请注意,不能使用 Snowflake Web 界面创建无密码的用户,或是删除现有用户的密码。您必须使用 CREATE USER 或 ALTER USER。
具体来说,我们建议您为所有非管理员用户禁用 Snowflake 身份验证。
重要
MUST_CHANGE_PASSWORD 用户属性不适用于联合身份验证,因此不应使用该属性。请特别注意,如果选择不在 Snowflake 中维护用户密码,请 确保 将这些用户的这项属性设置为 FALSE。
此外,您必须维护 至少 一个具有 Snowflake 密码的 Snowflake 账户管理员。这可确保账户管理员随时均可访问 Snowflake,以管理联合身份验证并排查发生的任何问题。
禁用和删除用户¶
作为 Snowflake 的账户或安全管理员,您可能会发现有必要删除或禁用某个用户。在 Snowflake 中被删除或禁用的用户仍能登录其 Okta 账户,但在尝试连接到 Snowflake 时会收到错误消息。必须重新创建或启用用户,随后此用户才能登录。
您可以使用 Snowflake Web 界面或等效的 SQL 命令删除/创建和禁用/启用用户。
为连接到 Snowflake 的客户端应用程序使用 SSO¶
为账户配置 IdP 后,Snowflake 支持使用 SSO 连接 Snowflake 提供的以下客户端,并向其进行身份验证:
- SnowSQL:
v1.1.43 或更高版本
- Python Connector:
v1.4.8 或更高版本
- JDBC 驱动程序:
v3.2.7 或更高版本
- ODBC 驱动程序:
v2.13.11 或更高版本
- .NET 驱动程序:
v1.0.13 或更高版本
- Node.js 驱动程序:
v1.6.0 或更高版本(适用于基于浏览器的 SSO);v1.6.1 或更高版本(适用于通过 Okta 进行的原生 SSO 身份验证)
- Go 驱动程序:
v1.1.5 或更高版本
Snowflake 支持两种身份验证方法:
基于浏览器的 SSO
程序化 SSO (仅适用于 Okta)
重要
为连接到 Snowflake 的客户端应用程序使用 SSO 时,用户必须在收到提示时输入其登录凭据;但出于安全原因,这些凭据从不会通过客户端处理。与此不同,凭据会发送到 IdP 进行身份验证,IdP 会发回一个有效的 SAML 响应,使客户端能够启动 Snowflake 会话。
基于浏览器的 SSO¶
如果用户安装了 Snowflake 提供的客户端的必要版本(或更高版本),则可以使用基于浏览器的 SSO 登录 Snowflake。
基于浏览器的 SSO 的工作原理¶
如果客户端应用程序配置为使用基于浏览器的 SSO,应用程序将使用以下工作流程进行用户身份验证:
应用程序会启动用户操作系统中的默认 Web 浏览器,或打开一个新的浏览器选项卡/窗口,显示 IdP 的身份验证页面。
用户输入其 IdP 凭据(用户名和密码)。
如果用户已在 Snowflake 中注册 MFA(多因素身份验证),系统会提示其键入 MFA 密码(从另一台设备发送)或确认身份验证(在另一台设备上)。
IdP 对用户凭据进行身份验证后,浏览器将显示一条成功消息。然后,用户可以关闭浏览器选项卡/窗口(在完成身份验证后无需保持打开状态),返回到应用程序,并使用已启动的 Snowflake 会话。
使用基于浏览器的 SSO 的要求¶
对于基于浏览器的 SSO,Snowflake 提供的客户端(例如 Snowflake JDBC 驱动程序)需要能打开用户的 Web 浏览器。因此,用户的机器上需要安装 Snowflake 提供的客户端,以及使用它的客户端应用程序。如果 Snowflake 提供的客户端由在服务器上运行的代码使用,则基于浏览器的 SSO 不起作用。
设置基于浏览器的 SSO¶
要为身份验证设置基于浏览器的 SSO,请将客户端的 authenticator
登录参数/选项设置为 externalbrowser
。
客户端 |
说明 |
---|---|
SnowSQL |
启动客户端时,指定 |
Python |
将 |
JDBC |
在驱动程序的连接字符串中设置 |
ODBC (Linux/macOS) |
在 |
ODBC (Windows) |
在 ODBC Data Source Administrator 工具中,为 Snowflake 编辑 DSN,并将 Authenticator 设置为 |
.NET |
在驱动程序的连接字符串中设置 |
Node.js |
在调用 |
Go |
在驱动程序的连接字符串中设置 |
使用连接缓存,尽可能减少身份验证提示的数量 – 可选¶
每当客户端应用程序建立到 Snowflake 的新连接时,都会提示用户进行身份验证。如果客户端应用程序多次建立一个连接,可能会导致多次发出身份验证提示。
为了尽可能减少提示用户进行身份验证的次数,账户管理员可以启用连接缓存。
连接缓存处于启用状态时,客户端应用程序会存储一个连接令牌,供后续连接使用。为保证安全性,连接令牌存储在操作系统的密钥库中。在启用连接缓存之前,请咨询安全团队,以确定这是否符合您的安全策略。
在 macOS 和 Windows 上,Snowflake 支持使用以下驱动程序和连接器进行连接缓存(目前此功能还不支持 Linux):
Go 驱动程序 1.6.15 版本(或更高版本)
JDBC 驱动程序 3.12.8 版本(或更高版本)
ODBC 驱动程序 2.21.2 版本(或更高版本)
Snowflake Connector for Python 2.2.8(或更高版本)
要启用连接缓存,请执行以下操作:
将账户级参数 ALLOW_ID_TOKEN 设置为
true
:alter account set allow_id_token = true;
备注
您必须是账户管理员(即具有 ACCOUNTADMIN 角色的用户)才能启用连接缓存。
添加驱动程序或连接器所需的包或库:
如果您使用的是 Snowflake Connector for Python,请运行以下命令来安装可选的 keyring 包:
pip install "snowflake-connector-python[secure-local-storage]"
必须输入方括号(
[
和]
),如命令中所示。方括号指定应该安装的 包的额外部分 (https://www.python.org/dev/peps/pep-0508/#extras)。如图所示,使用引号将包名称括起来,以防止系统将方括号解释为通配符。
如果您需要安装其他附加内容(例如,安装
pandas
,以 使用 Python Connector APIs for Pandas,请使用逗号分隔多个附加内容。pip install "snowflake-connector-python[secure-local-storage,pandas]"
对于 Snowflake JDBC 驱动程序,请参阅 将 JNA 类添加到类路径。
原生 SSO – 仅限 Okta¶
如果您的 IdP 是 Okta,Snowflake 还支持通过 Okta 进行原生身份验证。如果与 SSO 配合使用的客户端无法访问 Web 浏览器(例如,通过 Python Connector 或者是 JDBC 或 ODBC 驱动程序以编程方式进行连接),这种身份验证方法非常有用。
备注
对于将原生 SSO 身份验证与客户端驱动程序配合使用的用户,请禁用 Okta MFA。有关更多信息,请咨询 Okta 管理员。
要通过 Okta 启用原生 SSO,请将客户端的 authenticator
登录参数/选项设置为您的 Okta 账户(由 Okta 提供)的 Okta URL 端点,其形式通常为 https://<okta_account_name>.okta.com
:
客户端 |
说明 |
---|---|
SnowSQL |
启动客户端时指定命令行标志 |
Python |
将 |
JDBC |
在驱动程序的连接字符串中设置 |
ODBC (Linux/macOS) |
在 |
ODBC (Windows) |
在 ODBC Data Source Administrator 工具中,为 Snowflake 编辑 DSN,并将 Authenticator 设置为 |
.NET |
在驱动程序的连接字符串中设置 |
Node.js |
调用 |
升级到 Okta Identity Engine¶
如需从 Okta Classic 升级到 Okta Identity Engine,以使用原生 SSO,则需要在升级之前更新 Snowflake 客户端驱动程序。
如果您在升级后遇到 HTTP 429 错误,原因很可能是已经达到最新客户端驱动程序使用的身份验证端点强制执行的速率限制。有关详细信息,请参阅 HTTP 429 错误 (位于本主题中)。
HTTP 429 错误¶
Okta Identity Engine 需要通过其身份验证端点 (/api/v1/authn
) 进行通信,该端点的当前速率限制为每用户每 5 秒 20 个请求。为了支持 Okta Identity Engine,最新 Snowflake 客户端驱动程序使用此身份验证端点,因此受此速率限制影响。如果此限制过于严格,请联系 Okta 支持团队,以提高身份验证端点的速率限制。
Snowflake 客户端驱动程序在以下版本中切换为身份验证端点:
Go:1.6.20
JDBC:3.13.22
.NET:2.0.20
Node.js:1.6.21
ODBC:2.25.5
Python:2.7.12
SnowSQL:1.2.24
SQLAlchemy:1.4.6
将 SSO 与 MFA 配合使用¶
Snowflake 支持将 MFA 与 SSO 配合使用,以提供额外的安全级别:
Snowflake 中的个人用户可注册 MFA。如果 Snowflake 用户已注册 MFA,以使用 SSO 建立连接,则 MFA 登录工作流将在 SSO 工作流程中启动,并且需要成功完成身份验证。有关 Snowflake 中的 MFA 详细信息,请参阅 MFA(多重身份验证)。
备注
若要通过 Okta SSO 及 MFA 进行连接,Snowflake 需要使用基于浏览器的 SSO。如果您目前使用 Okta 的原生 SSO,则不支持 MFA。
此外,您的 IdP 也可能支持 MFA,但这与 Snowflake 中的 MFA 不同,必须通过 IdP 单独进行配置。如果为 IdP 启用了 MFA,则由 IdP 确定工作流程。要确定 IdP 是否支持 MFA 及其实现方式,请参阅 IdP 的相关文档。
对于某些由 Snowflake 提供的客户端,您可以将 MFA 令牌缓存长达四个小时。有关更多信息,请参阅 使用 MFA 令牌缓存,最大限度地减少身份验证过程中的提示次数 – 可选。
将 SSO 与多个受众值配合使用¶
在从身份提供商到 Snowflake 的 SAML 2.0 断言中,Snowflake 支持多个受众值(即受众或受众限制字段)。
此功能支持将访问 Snowflake 所用的 URLs 作为受众值。支持用于多个 Snowflake 账户的 URLs,因为每个账户都有一个具有唯一 账户标识符 的 URL,用于访问 Snowflake。Snowflake 还接受将账户域名以及使用到 Snowflake 服务的专用连接访问 Snowflake 的 URLs 作为受众值。
有关 SSO 和避免使用公共互联网的详细信息,请参阅 SSO 与专用连接结合使用。
目前,Snowflake 支持并接受多达四个不同的受众值。无需在 Snowflake 中进行任何配置。如果需要包括四个以上的受众值,请联系 Snowflake 支持 (https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge)。
如需 SAML 2.0 受众值配置方面的帮助,请联系贵组织的身份提供商管理员。
将 SSO 与专用连接配合使用¶
Snowflake 支持使用 SSO 与 Snowflake 服务建立专用连接,这适用于部署在 Amazon Web Services (AWS)、Microsoft Azure 和 Google Cloud Platform (GCP) 上的 Snowflake 账户。
有关详细信息,请参阅 SSO 与专用连接结合使用。