Snowflake 身份验证概述

以下部分介绍用户和应用程序可用于访问 Snowflake 的身份验证方法。它们还提供了关键注意事项,以帮助您为用例选择最佳身份验证方法。

为 Snowsight 选择身份验证

Snowsight 是 Snowflake 的用户界面。本部分概要介绍用户登录 Snowsight 时可使用的身份验证方法,并对各方法进行比较。

备注

当您为需要通过 Snowsight 进行身份验证的人员创建 Snowflake 用户对象时,请指定 TYPE = PERSON。有关用户类型的更多信息,请参阅 用户类型

单点登录 (SSO)

在 Snowsight 中使用 SSO 时,用户通过第三方身份提供商 (IdP) 进行身份验证,而非直接通过 Snowflake 进行验证。当用户访问 Snowsight 时,登录页面包含一个选项,用于通过 IdP 进行身份验证,而不是使用 Snowflake 管理的密码。IdP 确认用户身份后,会向 Snowflake 发送安全断言标记语言 (SAML) 断言。由于 Snowflake 与 IdP 事先建立了信任关系,因此 Snowflake 接受该断言作为用户身份凭证,并允许用户访问 Snowsight。

部分组织会使用同一个 IdP 为机构的所有应用程序提供 SSO 体验。此类组织只需将 Snowflake 添加为新的服务提供商 (SP),即可使其员工通过 IdP 访问 Snowsight。

带有多重身份验证 (MFA) 的密码

密码身份验证允许用户通过输入符合密码策略要求的字符串来访问 Snowsight。为增强此身份验证方法的安全性,Snowflake 要求所有密码用户启用 MFA。启用 MFA 后,用户需输入密码,并通过第二重身份验证因子确认身份。例如,用户可以使用存储在其计算机上的密钥作为身份验证的第二个因素。

下表比较了用户可用于登录 Snowsight 的身份验证方法:

方法

优点

挑战

单点登录 . 首选选项

允许组织集中管理身份验证。用户可通过相同的 IdP 对组织的所有应用程序(不仅限于 Snowflake)进行身份验证。

此方案非常适合已使用 IdP 为应用程序提供 SSO 的组织。

需要第三方 IdP 配置。

密码加 MFA

实施简单。

如果密码由 Snowflake 管理,组织必须为其所有应用程序重复身份验证设置。

应用程序身份验证方法概述

在本主题中,应用程序 指代任何以编程方式(而非通过 Snowsight 用户界面)访问 Snowflake 数据的主体。此定义包括自定义 Web 应用程序、第三方多租户应用程序、桌面应用程序、本地脚本和云中的工作负载。

在讨论可用的身份验证方法时,本主题区分了两种类型的应用程序:

  • 交互式应用程序,即可与人员交互并代表该人员向 Snowflake 进行身份验证的应用程式;例如,与分析师交互的商业智能 (BI) 工具。

  • 服务到服务应用程序,即不与人交互,并且具有专用的服务身份验证方法的应用程序;例如,CI/CD 管道。

工作负载身份联合 (WIF)

工作负载身份联合是一种无密钥身份验证形式,因其利用云工作负载已有的短期凭证而具备高安全性。它不需要管理和轮换密钥。

当工作负载在 AWS EC2、Microsoft Azure VMs 或 Google Cloud VMs 等云提供商上运行时,工作负载身份联合允许其通过云提供商的原生身份机制验证身份并访问 Snowflake。例如,在 AWS EC2 上运行的工作负载可从与其关联的 AWS 身份与访问管理 (IAM) 角色处获取身份验证证明。工作负载的驱动程序从原生身份机制获取该证明,并将其发送至 Snowflake 以完成工作负载的身份验证。

工作负载身份联合还支持 GitHub Actions 等第三方工作负载及在 Kubernetes 中运行的工作负载,通过兼容 OpenID Connect 的身份提供商 (IdP) 进行身份验证,此过程称为 OIDC 联合。Snowflake 接受由 IdP 生成的 ID 令牌,将其作为工作负载的身份凭证。

适合

  • 服务到服务应用程序

OAuth 使用 Snowflake 作为授权服务器 (Snowflake OAuth)

Snowflake OAuth 提供的安全性遵循 OAuth 2.0 授权框架 (https://datatracker.ietf.org/doc/html/rfc6749) 标准。通过 Snowflake OAuth,Snowflake 既是验证 Snowflake 用户身份的服务授权服务器,也是接受客户端访问令牌以获取该用户数据的资源服务器。Snowflake OAuth 允许客户端使用授权代码授予类型。

由于 Snowflake 同时作为授权服务器,与应用程序交互的用户需通过 Snowflake 用户界面进行身份验证。您可将 Snowflake 配置为通过单点登录 (SSO) 或密码验证用户身份。关于 SSO 与密码身份验证的优点与挑战,请参阅 为 Snowsight 选择身份验证

适合

  • 交互式应用程序

OAuth 使用第三方授权服务器 (External OAuth)

外部 OAuth 同样遵循 OAuth 2.0 的安全标准,但此时授权服务器由第三方 IdP(而非 Snowflake)担任。应用程序从第三方 IdP 获取访问令牌,随后将该令牌作为凭证访问 Snowflake 资源。

服务到服务应用程序可通过客户端凭据授权类型访问其自身的 Snowflake 数据。交互式应用程序可通过授权码授权类型,访问应用程序使用者的 Snowflake 数据。

适合

  • 交互式应用程序

  • 服务到服务应用程序

密钥对身份验证

密钥对身份验证依赖于 加密密钥对:私钥和公钥。私钥由应用程序保密存储,公钥则与 Snowflake 用户对象关联。在身份验证过程中,应用程序发送其持有私钥的证明,Snowflake 通过验证该私钥是否与 Snowflake 用户关联的公钥匹配来响应验证请求。此身份验证方法无需传输或存储密码,从而降低了凭证被盗的风险。

适合

  • 服务到服务应用程序

尽管非标准使用场景,密钥对身份验证也可用于交互式应用程序。

编程访问令牌 (PATs)

PAT 是一种有时限的凭证,允许应用程序在不使用密码的情况下完成身份验证。在 MFA 或其他更安全的身份验证方法无法使用的场景中,PAT 可作为单因素密码的直接替代方案。PAT 的安全性高于密码,因为它是短期有效的凭证,要求实施额外的安全措施,并且可限定为特定的访问控制角色。

适合

  • 交互式应用程序

  • 服务到服务应用程序

为交互式应用程序选择身份验证

交互式应用程序指与用户交互并代表该用户向 Snowflake 进行身份验证的应用程序。以下表格列出了可用于交互式应用程序的身份验证方法对应的优势与挑战。有关这些身份验证方法的概述,请参阅 应用程序身份验证方法概述

备注

为使用交互式应用程序的用户创建 Snowflake 用户对象时,请指定 TYPE = PERSON。有关用户类型的更多信息,请参阅 用户类型

方法

优点

挑战

Snowflake OAuth . Strong 选项

  • 比 External OAuth 更容易实施。

  • 本地应用程序(如在 VS 代码中运行的脚本)可使用内置的 Snowflake OAuth 实现,该实现无需管理配置即可提供 OAuth 级别的安全性。了解详情

  • 避免驱动程序限制。

  • 用户可以通过单点登录 (SSO) 进行授权访问,这允许他们使用第三方 IdP 的安全身份验证方法。

无。

External OAuth . Strong 选项

  • 若 IdP 支持,应用程序用户可采用无密钥形式的身份验证。

  • 此方案非常适合已采用第三方 IdP 作为应用程序授权服务器的组织。

需具备将第三方 IdP 配置为授权服务器的专业知识。

编程访问令牌 (PAT)

  • 轻松替换单因素密码。

  • Snowflake 生成的凭据,因此不能在 Snowflake 之外重复使用。

  • 可限定为特定访问控制角色,以便在凭证泄露时限制损害范围。

  • Snowflake 要求 您实施额外的安全措施,以缓解使用长期有效密钥所带来的风险。

  • GitHub 密钥扫描程序 (https://docs.github.com/en/code-security/secret-scanning/secret-scanning-partnership-program/secret-scanning-partner-program) 会自动检测公共代码库中泄露的 Snowflake PATs,将其禁用并通知 Snowflake 管理员。

  • 与密钥对不同,其需在客户端与服务器端同时进行安全保护。

  • 与密钥对不同,密钥需在发送至 Snowflake 的请求中传递,增加了暴露风险。

  • 若遭泄露,任何持有者均可冒用该应用程序身份。

  • 与长期有效凭证相关的安全风险,必须通过健全的存储与轮换策略等其他安全措施来缓解。

  • 由于必须配置网络策略,如果您运营多租户云应用程序,则需向客户提供 IP 地址,以便客户创建允许这些地址范围的网络策略。

  • 接收 PATs 的输入字段长度需至少为 256 个字符。

密钥对

  • 灵活的身份验证方法。

  • 不在请求中暴露的无密码凭证。

  • 通常不用于交互式应用程序。

  • 与长期有效凭证相关的安全风险,必须通过网络策略、健全的存储与轮换策略等其他安全措施来缓解。与编程访问令牌不同,密钥对 并非 必须采取额外措施,可能导致身份验证安全性降低。

为服务到服务应用程序选择身份验证

服务到服务应用程序不与用户直接交互,并采用专为服务设计的身份验证方法。以下表格列出了可用于服务到服务应用程序的身份验证方法对应的优势与挑战。有关这些身份验证方法的概述,请参阅 应用程序身份验证方法概述

备注

为服务到服务应用程序创建 Snowflake 用户对象时,请指定 TYPE = SERVICE。有关用户类型的更多信息,请参阅 用户类型

方法

优点

挑战

工作负载身份联合 . 首选选项

  • 无密钥身份验证。

  • 管理员不必持续保护和轮换客户端 IDs 和密钥。

无。

External OAuth . Strong 选项

  • 若 IdP 支持,应用程序可采用无密钥形式的身份验证。

  • 此方案非常适合已采用第三方 IdP 作为应用程序授权服务器的组织。

需具备将第三方 IdP 配置为授权服务器的专业知识。

密钥对

  • 灵活的身份验证方法。

  • 不在请求中暴露的无密码凭证。

与长期有效凭证相关的安全风险,必须通过网络策略、健全的存储与轮换策略等其他安全措施来缓解。与编程访问令牌不同,密钥对 并非 必须采取额外措施,可能导致身份验证安全性降低。

编程访问令牌 (PAT)

  • 轻松替换单因素密码。

  • Snowflake 生成的凭据,因此不能在 Snowflake 之外重复使用。

  • 可限定为特定访问控制角色,以便在凭证泄露时限制损害范围。

  • Snowflake 要求 您实施额外的安全措施,以缓解使用长期有效密钥所带来的风险。

  • GitHub 密钥扫描程序 (https://docs.github.com/en/code-security/secret-scanning/secret-scanning-partnership-program/secret-scanning-partner-program) 会自动检测公共代码库中泄露的 Snowflake PATs,将其禁用并通知 Snowflake 管理员。

  • 与密钥对不同,其需在客户端与服务器端同时进行安全保护。

  • 与密钥对不同,密钥需在发送至 Snowflake 的请求中传递,增加了暴露风险。

  • 若遭泄露,任何持有者均可冒用该应用程序身份。

  • 与长期有效凭证相关的安全风险,必须通过健全的存储与轮换策略等其他安全措施来缓解。

语言: 中文