保护外部函数

本主题介绍与保护外部函数相关的详细信息,本主题的内容适用于所有平台。

本主题内容:

访问控制

外部函数

外部函数像任何用户定义的函数 (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>

语言: 中文