External OAuth 概览

本主题教您如何配置使用 OAuth 2.0 访问 Snowflake 的 External OAuth 服务器。

External OAuth 集成了客户的 OAuth 2.0 服务器,提供无缝 SSO 体验,使外部客户端能够访问 Snowflake。

Snowflake 支持以下外部授权服务器、自定义客户端和合作伙伴应用程序:

配置组织的 External OAuth 服务器(包括映射到 Snowflake 角色的任何必要 OAuth 2.0 范围 (https://oauth.net/2/scope/) )后,用户可以安全地以编程方式连接到 Snowflake,而无需输入任何额外的身份验证或授权因素或方法。用户对 Snowflake 数据的访问权限取决于其角色以及集成到会话访问令牌中的角色。有关更多信息,请参阅 范围 (本主题内容)。

使用案例和优势

  1. Snowflake 委托专门的授权服务器办法令牌,确保 OAuth 客户端和用户正确进行身份验证。其结果是集中管理向 Snowflake 发放的令牌。

  2. 客户可以将其身份验证策略(例如多因素、子网、生物识别)和授权策略(例如无需批准、需要经理批准)集成到授权服务器中。通过向用户发出质询,可以提高安全性,从而提供更强大的数据保护。如果用户未通过策略质询,则不会实例化 Snowflake 会话,也就无法访问 Snowflake 数据。

  3. 对于可以访问 Snowflake 的编程客户端和仅通过 External OAuth 启动其 Snowflake 会话的用户,在 Snowflake 中不需要额外的身份验证配置(即设置密码)。结果是,专门用于编程访问的服务账户或用户在通过 External OAuth 配置的服务时只能使用 Snowflake 数据。

  4. 客户端无需访问浏览器即可对 Snowflake 进行身份验证,便于与External OAuth 服务器集成。

  5. Snowflake 与 External OAuth 服务器的集成与云无关。

    • 无论授权服务器存在于云提供商的云中,还是位于本地,都没有关系。因此,客户在配置授权服务器与 Snowflake 交互方面有许多选择。

常规工作流程

对于每个受支持的身份提供商,与 External OAuth 授权服务器相关的 OAuth 工作流程可总结如下。请注意,第一步仅发生一次,其余步骤在每次尝试访问 Snowflake 数据时发生。

工作流程概览
  1. 在您的环境中配置 External OAuth 授权服务器,并在 Snowflake 中配置安全集成以建立信任。

  2. 用户尝试通过其商业智能应用程序访问 Snowflake 数据,并且应用程序尝试验证用户。

  3. 通过验证后,授权服务器会向客户端应用程序发送一个 JSON Web 令牌(即 OAuth 令牌)。

  4. Snowflake 驱动程序将连接字符串与 OAuth 令牌一起传递给 Snowflake。

  5. Snowflake 对 OAuth 令牌进行验证。

  6. Snowflake 执行用户查找。

  7. 通过验证后,Snowflake 会根据用户的角色为其实例化一个会话,以便其访问 Snowflake 中的数据。

范围

授权服务器中的范围参数限制了访问令牌允许的操作和角色,以及用户在实例化 Snowflake 会话后可以访问的内容。

请注意,在默认情况下, ACCOUNTADMIN ORGADMIN 和 SECURITYADMIN 角色处于受阻止状态。如果需要使用其中一个或多个角色,请使用 ALTER ACCOUNT 命令将 EXTERNAL_OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LIST 账户参数设置为 FALSE。

  • 对于 Okta、 PingFederate 和 Custom,请使用下表中的角色范围模式。

  • 对于 Azure AD,请参阅 前提步骤:确定 Azure AD 中的 OAuth 流程

  • 如果您不想在 External OAuth 服务器中管理 Snowflake 角色,请在令牌的范围属性中传递 SESSION:ROLE-ANY 的静态值。

下表汇总了 External OAuth 作范围。请注意, 如果未定义范围,则与 Snowflake 的连接尝试将失败

范围/角色连接参数

描述

session:role-any

映射到 Snowflake 中的 ANY 角色。

如果用户在 Snowflake 中的默认角色是必需的,请使用此范围。

必须配置 external_oauth_any_role_mode 安全集成参数才能为给定的 External OAuth 提供商启用 ANY 角色。有关配置详情,请参阅 OktaAzure ADPingFederateCustom 中的 ANY 角色部分。

请注意,在 Power BI 与 Snowflake 集成 时,PowerBI 用户无法使用此范围切换角色。

session:role:custom_role

映射到自定义 Snowflake 角色。例如,如果自定义角色是 ANALYST,则范围为 session:role:analyst

session:role:public

映射到 PUBLIC Snowflake 角色。

将次要角色与 External OAuth 结合使用

Snowflake 支持将 辅助角色 与 External OAuth 配合使用。

Snowflake OAuth 不支持在会话中将角色切换为辅助角色。

有关更多信息,请参阅:

配置 External OAuth 支持

Snowflake 支持使用支持 External OAuth 的合作伙伴应用程序和自定义客户端。

如果需要配置合作伙伴应用程序或自定义客户端,请参阅以下列表:

OAuth 和辅助角色

Snowflake 支持将 辅助角色 与 External Oauth 配合使用。

有关更多信息,请参阅 将次要角色与 External OAuth 结合使用

错误代码

有关与 External OAuth 相关的错误代码的说明,请参阅下表:

错误代码

错误

描述

390318

OAUTH_ACCESS_TOKEN_EXPIRED

OAuth 访问令牌已过期。 {0}

390144

JWT_TOKEN_INVALID

JWT 令牌无效。

故障排除

  • 使用 SYSTEM$VERIFY_EXTERNAL_OAUTH_TOKEN 函数确定 External OAuth 访问令牌是否有效或需要重新生成。

  • 如果遇到与 External OAuth 登录尝试失败相关的错误消息,并且该错误消息具有 UUID,则可要求角色中分配有 MONITOR 权限的管理员使用 SYSTEM$GET_LOGIN_FAILURE_DETAILS 函数,利用错误消息中的 UUID 获取更详细的错误描述。

语言: 中文