外部 API 身份验证和密钥¶
本主题提供有关外部 API 身份验证和密钥的概念。
本主题内容:
概述¶
外部 API 身份验证提供了一种向在 Snowflake 外部托管的服务进行身份验证的途径。通过 API 请求访问该服务时,API 请求需要接受身份验证。在使用外部 API 身份验证时,Snowflake 支持以下身份验证方法:
基本身份验证。
OAuth (使用代码许可流程)。
OAuth (使用客户端凭据流程)。
Snowflake 按照 RFC 7617 (https://datatracker.ietf.org/doc/html/rfc7617) 中的规定,支持 API 请求标头中的基本身份验证(即用户名和密码),其中身份验证凭据使用 Base64 进行编码。同样,Snowflake 按照 RFC 6749 (https://datatracker.ietf.org/doc/html/rfc6749) 中的规定,支持 OAuth 2.0。在 Snowflake 中,身份验证凭据通过称为密钥的对象安全地存储和访问。密钥与连接器(例如 Snowflake Connector for ServiceNow)结合使用,以访问 Snowflake 外部的服务。利用面向 外部 API 身份验证 的安全集成,Snowflake 在使用 OAuth 流程时能够连接到在 Snowflake 外部托管的服务。
密钥是存储敏感信息的架构级对象,其使用 RBAC 来限制对敏感信息的访问,并使用 Snowflake 密钥加密层次结构 进行加密。密钥对象中的信息使用密钥层次结构中的密钥进行加密。创建密钥后,只有专用的 Snowflake 组件(例如集成和外部函数)才能读取敏感信息。
例如,外部函数需要访问并读取密钥,以将身份验证凭据传递到 API 授权标头,以便向 Snowflake 外部的服务发起 API 请求。密钥与外部函数的绑定发生在连接器安装过程中。但是,如果用户对密钥运行 DESCRIBE SECRET 操作,则密钥中存储的密码值将永远不会公开。
对于密钥中用于 API 身份验证的凭据,Snowflake 提供集中管理和访问控制功能。您可以为密钥管理以及与连接器管理相关的角色实施权责分离(即 SoD)。连接器只需要使用密钥名称,而获授予连接器角色的用户不需要查看密钥中存储的敏感信息。
管理密钥¶
Snowflake 提供了以下命令来管理密钥对象:
Snowflake 支持以下权限,以便确定用户是否可以创建、使用和拥有密钥。
请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。
权限 |
用途 |
---|---|
CREATE |
允许在架构中创建新密钥。 |
USAGE |
允许使用密钥。 |
OWNERSHIP |
转移密钥的所有权,从而授予对密钥的完全控制权。需要更改密钥的大多数属性。 |
下表总结了密钥命令操作及其所需权限之间的关系。
操作 |
权限 |
---|---|
CREATE SECRET |
具有父数据库和架构的 USAGE 权限,以及同一架构中的 CREATE SECRET 权限的角色。 |
ALTER SECRET |
具有密钥 OWNERSHIP 权限的角色。 |
DROP SECRET |
具有密钥 OWNERSHIP 权限的角色。 |
DESCRIBE SECRET |
具有密钥 USAGE 权限的角色。 |
SHOW SECRETS |
具有密钥 USAGE 权限的角色。 |
USE SECRET |
具有密钥 USAGE 权限的角色。 如果密钥将与外部函数结合使用,则创建外部函数并在查询运行时调用外部函数的角色需要此权限。 |
使用外部 API 身份验证和密钥¶
有关代表性示例,请参阅: