保护外部函数¶
本主题介绍与保护外部函数相关的详细信息,本主题的内容适用于所有平台。
本主题内容:
访问控制¶
外部函数¶
外部函数像任何用户定义的函数 (UDFs) 一样,遵循 访问控制 规则:
外部函数具有所有者。
所有者必须向调用者(所有者以外的一方)授予对该函数的适当权限。
但外部函数还有一些额外的权限要求:
外部函数需要 API 集成,因此必须向外部函数的作者授予 API 集成的 USAGE 权限。
有关 UDFs 和访问控制的更多信息,请参阅 访问控制权限。
API 集成¶
权限和 API 集成¶
API 集成是一个数据库对象。要创建 API 集成,您需要具备 ACCOUNTADMIN 权限或具有 CREATE INTEGRATION 权限的 Snowflake 角色。账户管理员可以授予和撤消每个 API 集成的所有权和使用权限。
在 CREATE API INTEGRATION 中使用 API_KEY 选项¶
某些代理服务(API 网关)要求用户在调用代理服务时提供订阅信息(或其他产品相关信息)。订阅信息可用于验证用户是否为付费客户,还能强制执行使用量配额等。
Snowflake 现在支持 API 密钥,也称为 *订阅密钥*(Microsoft Azure 使用此术语),它们采用字母数字字符串值的形式,开发者可将其分发给需要提供订阅信息的用户。
用户可以使用 CREATE API INTEGRATION 语句或 ALTER API INTEGRATION 语句的 API_KEY 子句,向 Snowflake 提供这些密钥。API_KEY 子句是可选的;如果服务不需要密钥,则可以将其忽略。
API_KEY 是 IAM (身份和访问管理)的补充(而非替代)。
API 密钥属于敏感信息。它们不会在以下内容中显示:
查询历史记录命令。
DESCRIBE INTEGRATION 命令。
DESCRIBE API INTEGRATION 命令。
服务的开发者选择如何设置此类密钥的格式。该密钥对于 Snowflake 而言是不透明的,Snowflake 也不会对其进行验证。
您可以通过以下链接阅读特定平台上的 API 密钥的更多相关信息:
AWS API 密钥 (https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-usage-plans.html)
Microsoft Azure 订阅密钥 (https://docs.microsoft.com/en-us/azure/api-management/api-management-subscriptions#what-are-subscriptions)
保护代理服务¶
除非外部函数的意图就是可供公开访问,否则 Snowflake 强烈建议保护代理服务端点。
Snowflake 使用无凭据 API 集成对象,对代理服务端点进行身份验证。无凭据 API 集成将管理员与用户的责任区分开来。API 集成允许管理员使用云提供商的原生身份验证和授权机制,在 Snowflake 与云提供商之间创建信任策略。当 Snowflake 连接到云提供商时,云提供商通过此信任策略对访问进行身份验证和授权。使用特定 API 集成,管理员还可以指定 API 集成对象可访问端点的允许列表;这限制了 Snowflake 可以使用的代理服务和资源,从而使管理员能够针对数据出口和入口实施组织策略。
有关保护特定代理服务端点(例如 Amazon API Gateway)的更多详细说明,请参阅平台特定说明。
保护远程服务¶
如果您创建了自己的远程服务,切勿忘记保护此类服务。
具体详情取决于远程服务的实现,不在本文档的讨论范围之内。
大多数情况下,远程服务应该使用 HTTPS 而非 HTTP。
其他安全性信息¶
Snowflake 与代理服务器之间的通信使用 HTTPS 加密。
特定于平台的安全信息¶
AWS¶
对于 AWS,所有 Snowflake HTTP 请求(发往 API Gateway)均使用 AWS sigv4 身份验证进行签名。有关更多信息,请参阅 AWS sig4 身份验证 (https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html)。
通过添加资源策略来限制对 API Gateway 端点的访问。有关更多信息,请参阅 保护您的 Amazon API Gateway 端点。
如果您使用 私有端点,则可能需要参阅:doc:PrivateLink </user-guide/admin-security-privatelink>。