具有外部函数的专用连接:Azure 门户¶
本主题提供配置详情,以便通过调用 Microsoft Azure 上的 Snowflake 账户的外部函数来设置与外部服务的出站专用连接,如下所示:
使用 Azure 门户的用户界面在 Microsoft Azure 中配置资源。
在 Snowflake 中创建 API 集成和外部函数。
在 Snowflake 中调用外部函数以验证与外部服务的专用连接。
出站专用连接成本¶
您为每个专用连接端点以及处理的总数据量付费。有关这些项目的定价,请参阅 Snowflake 服务使用量表。
在 ACCOUNT_USAGE 和 ORGANIZATION_USAGE 架构中查询计费视图时,可以通过筛选以下服务类型来查看这些项目的成本:
OUTBOUND_PRIVATELINK_ENDPOINT
OUTBOUND_PRIVATELINK_DATA_PROCESSED
例如,您可以查询 USAGE_IN_CURRENCY_DAILY 视图并筛选这些服务类型。
过程概述¶
以下是配置过程的总体概述。Snowflake 中的步骤必须由具有 ACCOUNTADMIN 角色的用户完成。除非另有说明,否则 Azure 门户中的步骤由有权使用相应资源的用户完成。
以下步骤与在公共互联网上使用外部函数相同:
在 Microsoft Azure 上完成外部函数的前提步骤。
在 Azure 门户中,创建远程服务。
在 Azure 门户中,创建代理服务。
但是,您可能需要创建新的资源,以充分区分专用连接需求和公共互联网需求。请咨询内部安全管理员,以确定满足您需求的最佳方法。
这些步骤是使用专用连接进行外部服务的外部函数所独有的:
在 Snowflake 中,创建专用端点。
Snowflake 在内部存储专用端点的专用 IP 地址。
在 Azure 门户中,批准专用端点。
由 Azure API Management 资源(外部服务)的所有者完成此操作。
在 Snowflake 中,创建新的 API 集成。
您需要专用的 API 集成来支持与外部服务的专用连接。
在 Snowflake 中,创建外部函数。专用连接 URL 是外部函数中调用 URL 的值。
在 Snowflake 中,调用外部函数来使 Snowflake 能够通过专用连接连接到外部服务。
取消配置任何不必要的专用连接端点。
配置¶
在 Azure 门户中完成以下步骤:
如果您已经设置了 Azure API Management 资源并且想要重复使用远程服务和代理服务,请跳到专用连接步骤。否则,请完成以下步骤:
在 Microsoft Azure 上完成外部函数的 先决条件。
在 Azure 门户中,创建远程服务。
在 Azure 门户中,创建代理服务。
完成以下步骤以配置专用连接:
在 Snowflake 中,运行 CREATE API INTEGRATION 命令以创建新的 API 集成以支持与外部服务的专用连接。更新属性值以使其与 Microsoft Azure 订阅保持一致:
CREATE API INTEGRATION external_api_integration_azure_private API_PROVIDER = azure_private_api_management AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9' AZURE_AD_APPLICATION_ID = 'dv3421nq-1g4s-4ap4-x89c-xrf28hna7m2o' API_ALLOWED_PREFIXES = ('https://aztest1-external-function-api.azure.net') ENABLED = TRUE COMMENT = 'API integration for private connectivity to an external service with external functions on Azure.';
在 Snowflake 中,调用 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 系统函数来创建专用端点。更新实参值以使其与 Microsoft Azure 订阅保持一致:
USE ROLE ACCOUNTADMIN; SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT( '/subscriptions/f4b00c5f-f6bf-41d6-806b-e1cac4f1f36f/resourceGroups/aztest1-external-function-rg/providers/Microsoft.ApiManagement/service/aztest1-external-function-api', 'aztest1-external-function-api.azure.net', 'Gateway' );
在 Azure 门户中,作为 Azure API Management 资源的所有者,批准专用端点。有关详细信息,请参阅 审批流程 (https://learn.microsoft.com/en-us/azure/private-link/manage-private-endpoint?tabs=manage-private-link-powershell#private-endpoint-connections)。
将 Azure 的 API 集成链接到代理服务,使 Snowflake 能够向 Azure API Management 服务发送 API 请求。
您可以选择阻止公共访问 Azure API Management 资源。有关更多信息,请参阅 `安全访问 Azure API Management 资源`_(本主题内容)。
在 Snowflake 中,如果您已有用于存储外部函数的数据库和架构并想要使用这些对象,请确保 正在使用 这些对象,或在 Snowsight 中选择这些对象。否则,创建数据库和架构来存储外部函数,以将外部函数用于与外部服务的专用连接:
CREATE DATABASE private_external_service_db; CREATE SCHEMA private_ext_functions;
在 Snowflake 中,运行 CREATE EXTERNAL FUNCTION 命令创建外部函数,以将外部函数用于与外部服务的专用连接。请务必使用外部服务专用连接 URL 更新调用 URL:
CREATE OR REPLACE SECURE EXTERNAL FUNCTION private_ext_function_azure_portal( a INTEGER , b VARCHAR) RETURNS VARIANT API_INTEGRATION = external_api_integration_azure_private AS 'https://aztest1-external-function-api.azure.net/my-api-url-suffix/http-function-name';
URL 格式取决于您是使用 Azure 门户还是使用 Azure ARM 模板创建外部函数。有关详细信息,请参阅 调用 URL 格式。
在 Snowflake 中,调用外部函数来测试与外部服务的专用连接:
SELECT private_ext_function_azure(66, 'Mario');
[0, 66, 'Mario']
如果函数的输出返回的结果与过程开始时远程服务的配置相匹配,则表明您已确认与外部服务的专用连接按预期运行。
安全访问 Azure API Management 资源¶
您可以保护与专用端点关联的 Azure API Management 资源的访问权限,以将其用于外部函数。从 Azure API Management 资源的角度来看,Snowflake 是一个入站连接。通过保护访问权限,您可以降低可能危及您使用外部函数的攻击的可能性。
例如,您可能需要运行以下 Azure CLI apim 命令 (https://learn.microsoft.com/en-us/cli/azure/apim?view=azure-cli-latest#az-apim-update) 来阻止公共访问:
az apim update --name <api-name> --resource-group <resource group name> --public-network-access false
使用与 API Management 资源名称和资源组名称对应的值更新占位符值。
有关详细信息和选项,请参阅以下主题:
使用虚拟网络保护 Azure API Management 的入站和出站流量 (https://learn.microsoft.com/en-us/azure/api-management/virtual-network-concepts?tabs=stv2)。
使用入站专用端点私密连接到 API Management (https://learn.microsoft.com/en-us/azure/api-management/private-endpoint)。