使用托管专用终结点,通过 Microsoft Fabric 连接到外部源或本地数据源

使用托管专用终结点,可以通过批准的专用链接设置安全地将 Microsoft Fabric 工作负载(如 Spark 或数据管道)连接到 本地自定义托管数据源
此方法可确保流量流经Microsoft主干网络而不是公共 Internet,从而维护端到端数据隐私和合规性。

常见用例包括访问:

  • SAP、Oracle 数据库、Elasticsearch、非原生 Azure 数据源(如 Confluent Kafka、Elasticsearch 或托管于本地环境中的数据源)等。
  • Azure VM 上的数据源
  • 在虚拟网络或自管理数据中心中托管的自定义 API 或服务。
  • 在不公开公共终结点的情况下保护公司数据存储。

概述

Fabric 托管专用终结点(MPE)允许 Fabric 使用专用链接服务(PLS)与已批准的数据源建立出站连接。
设置涉及三个主要步骤:

  1. 数据源所有者或管理员为通过专用 IP 地址在前端部署的资源配置 Azure 私有链接服务(PLS)。
  2. Fabric 工作区管理员创建一个托管专用终结点 (MPE),该终结点引用完全限定域名 (FQDN) 并使用专用链接服务的资源 ID。
  3. 数据源所有者或管理员在 Azure 中评审并批准连接请求。

批准后,所有 Fabric 数据工程工作负载(如 Notebook、Spark 作业定义、具体化 Lakeviews、Livy 终结点)都可以安全地连接到已批准的资源。


先决条件

开始之前:

  • 具有工作区管理员角色的 Microsoft Fabric 工作区。
  • Azure 订阅必须注册 Microsoft.Network 资源提供程序。
  • 让数据源或服务在标准负载均衡器后面运行,该负载均衡器可通过专用链接服务访问。 详细了解专用链接服务

若要向 Fabric 公开本地或自定义托管数据源(如 SQL Server),必须先在 Azure 中创建专用链接服务(PLS)。

  1. 登录到 Azure 门户
  2. 在搜索栏中,输入 专用链接服务 并选择“ 创建”。
  3. 指定:
    • 订阅资源组
    • Region
    • 专用链接服务的名称
  4. 前端 IP 配置下,关联用于将流量路由到本地部署或虚拟机的负载均衡器。
  5. 定义 自动审批订阅 ID ,以自动批准来自受信任 Fabric 租户的连接请求。

小窍门

如果数据源托管在本地,请在配置 PLS 之前使用 Azure VPN 网关或 Azure ExpressRoute 将本地网络连接到 Azure。


步骤 2:使用 Fabric REST API 创建托管专用终结点

专用链接服务准备就绪后,通过调用 托管专用终结点 REST API 在 Fabric 中创建托管专用终结点(MPE)。 当前支持的终结点形状使用路径:

POST https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/managedPrivateEndpoints

在您目标定位以下任一项时,请使用该选项:

  • 专用链接服务(使用targetPrivateLinkResourceId,可选targetSubresourceType),和/或
  • 希望 Fabric 在批准后私下解析一个或多个完全限定的域名(targetFQDNs)。

可以使用任何 REST API 客户端(如 BrunoInsomniaPostman )发送请求。

步骤 2.1:获取身份验证令牌

在调用 Fabric REST API 之前,请使用 Azure Active Directory (Entra ID) 凭据获取 持有者令牌

可以使用 Azure CLI 执行此作:

az login
az account get-access-token --resource https://api.fabric.microsoft.com

此命令返回包含访问令牌的 JSON 对象。 复制“accessToken”的值以用作授权标头。

步骤 2.2:构造 API 请求

使用以下端点和有效负载结构创建托管专用端点。 根据是绑定到专用链接服务、提供 FQDN 还是同时提供 FQDN 来调整字段。

请求

POST https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/managedPrivateEndpoints

Headers

Key 价值
Authorization Bearer 令牌<访问令牌>
Content-Type application/json

正文(针对专用链接服务 + FQDN 的示例)

{
   "name": "onprem-sql-endpoint",
   "targetPrivateLinkResourceId": "/subscriptions/<subId>/resourceGroups/<rg>/providers/Microsoft.Network/privateLinkServices/<plsName>",
   "targetSubresourceType": "sql", 
   "targetFQDNs": ["sqlserver.corp.contoso.com"],
   "requestMessage": "Private connection request from Fabric to on-premises SQL"
}

正文字段参考:

领域 必选 类型 注释
姓名 是的 字符串 <= 64 个字符。 工作区中唯一。
targetPrivateLinkResourceId 是* 字符串 专用链接服务或其他受支持的专用链接资源的资源 ID(*必要信息,除非将来的变体中仅支持 FQDN 工作流—请查阅当前文档)。
requestMessage 字符串 <= 140 个字符。 展示给审批者。
targetFQDN 字符串[] 最多关联 20 个 FQDN 用于私有解析。
目标子资源类型 字符串 子资源组(例如,sqlblob特定于服务)。

执行步骤:

  1. 打开 REST 客户端。
  2. 将方法设置为 POST 并粘贴终结点 URL(替换 {workspaceId})。
  3. 使用步骤 2.1 中的持有者令牌添加 Authorization 标头。
  4. 粘贴 JSON 正文并调整值。
  5. 发送请求。

步骤 2.3:验证连接请求

一个简化的成功响应有效负载示例可能如下:

{
   "id": "f2cbd8d1-23f1-4b9a-9db2-23ad1e7b5129",
   "name": "onprem-sql-endpoint",
   "targetPrivateLinkResourceId": "/subscriptions/<subId>/resourceGroups/<rg>/providers/Microsoft.Network/privateLinkServices/<plsName>",
   "targetFQDNs": ["sqlserver.corp.contoso.com"],
   "targetSubresourceType": "sql",
   "provisioningState": "PendingApproval",
   "createdBy": "user@contoso.com",
   "createdDateTime": "2025-10-14T10:12:37Z"
}

字段名称可以演变;如果缺少所需的字段,请重新检查最新的官方文档。 此时,专用连接请求已发送到目标数据源管理员(例如,Azure 中的专用链接服务的所有者)。 批准连接后,预配状态会更新为“已批准”,你可以开始从 Fabric 安全地访问本地数据。

示例:使用 Bruno 或 Insomnia

还可以直接在 Bruno失眠中创建和测试终结点:

  1. 将请求类型设置为 POST
  2. 粘贴 Fabric REST API 终结点
  3. “身份验证”中,选择 持有者令牌,并粘贴之前检索的令牌。
  4. 正文中,粘贴 JSON 有效负载。
  5. 单击“ 发送”。

API 将响应托管专用终结点详细信息和连接状态。

发送请求后,Fabric 将尝试启动专用连接。

网络管理员将在 Azure 门户中看到以下 挂起的连接请求

专用链接服务→专用终结点连接 窗口。

步骤 3:批准专用终结点连接请求

  1. 登录到 Azure 门户
  2. 导航到 专用链接服务 资源。
  3. “网络”部分下选择“专用终结点连接”。
  4. 查看来自 Microsoft Fabric 的挂起连接请求。
  5. 选择 “批准 ”并提供可选理由。

步骤 4:从 Fabric 笔记本访问本地 SQL Server

批准后,托管的专用终结点将变为活动状态,可以从 Spark 笔记本或数据管道中使用。

使用 PySpark 连接到本地 SQL Server 的示例:

serverName = "sqlserver.corp.contoso.com"
database = "SalesDB"
dbPort = 1433
dbUserName = "<username>"
dbPassword = "<password or Key Vault reference>"

jdbcURL = f"jdbc:sqlserver://{serverName}:{dbPort};database={database}"
connectionProps = {
    "user": dbUserName,
    "password": dbPassword,
    "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

df = spark.read.jdbc(url=jdbcURL, table="dbo.Customers", properties=connectionProps)
display(df)

# Write back to your Fabric Lakehouse
df.write.mode("overwrite").format("delta").saveAsTable("Customers")

步骤 5:验证和排查专用连接问题

批准连接后,请务必确认 Fabric 流量以私密方式流动,且未使用公共终结点。

在 Fabric 中验证终结点状态

  1. 在 Fabric 工作区中,导航到 “设置”→“网络安全”。
  2. “托管专用终结点”下,验证连接 状态 是否显示 “已批准”。
  3. 选择终结点名称以查看详细信息,例如:
    • FQDN
    • 连接状态
    • 审批日期
    • 专用链接资源 ID

如果状态显示 “挂起 ”或 “失败”,请检查:

  • Azure 管理员已批准链接的专用链接服务中的请求。
  • FQDN 的 DNS 解析指向专用终结点 IP 地址。
  • 专用链接和 Fabric 区域位于同一 Azure 地理位置中。

验证 DNS 路由

从同一虚拟网络中的 Fabric Notebook 或连接的 VM 运行以下命令:

nslookup sqlserver.corp.contoso.com

确认返回的 IP 地址为 10.x.x.x 或 172.x.x.x.x 专用 IP,而不是公共 IP。 这确认 Fabric 正在通过专用链接路由解析 FQDN。

[!提示] 如果 DNS 仍解析为公共 IP,请更新 Azure 中的专用 DNS 区域,以包含映射到专用终结点的 FQDN 的 A 记录。

常见问题和解决方法

问题 可能的原因 解决方案
ProvisioningState = Failed 本地管理员拒绝或删除了专用链接服务(PLS)。 重新创建托管专用终结点(MPE),并验证 PLS 是否仍然存在且可访问。
DNS 解析为公共 IP 地址 DNS 区域未链接到 Fabric 专用 DNS 区域。 添加或链接专用 DNS 区域到工作区虚拟网络,并为指向专用 IP 的 FQDN 创建 A 记录
Spark 或数据管道的连接超时 网络 ACL 或防火墙正在阻止 Fabric 子网。 打开所需的端口(例如 1433 用于 SQL Server,1521 用于 Oracle),并确保允许出站访问私有链接终结点。
审批请求在 Azure 中不可见 专用链接服务所有者未启用 “自动审批” 或未列出 Fabric 租户 ID。 要求网络管理员在 Azure 门户中的 专用链接服务下查看挂起的连接→专用终结点连接
终结点意外删除 已重新分配 Fabric 工作区或容量,或更改了权限。 重新创建 MPE 并验证 Fabric 工作区所有权和网络设置。
审批后数据连接仍然失败 Azure 与本地网络之间的 DNS 或路由不匹配。 验证路由表并使用 nslookupTest-NetConnection 确认专用 IP 路径。

若要维护安全且合规的访问,请:

  • 使用 Azure Key Vault 存储凭据和连接机密,而不是硬编码密码。
  • 通过仅批准专用链接服务中所需的端点来限制网络暴露。
  • 监视 Fabric 审核日志 以记录终结点的创建、审批或删除活动。
  • 当从 Spark 工作负载进行连接时,为静态加密启用 客户管理密钥(CMK)
  • 使用 Fabric 的 出站访问保护(OAP)限制出站访问, 以确保工作负荷只能访问批准的专用终结点。
  • 定期轮换凭证并定期查看接口审批。

端到端设置:将 Fabric 连接到本地 SQL Server 或任何外部数据源

如果 尚未设置专用链接服务,请按照以下步骤生成整个拓扑,从网络层到 Fabric 集成。


先决条件


如果已知道本地或专用托管资源 的目标 IP 地址 ,则现在可以使用新的 专用链接服务 Direct Connect 功能(目前为 公共预览版)。
此功能允许将专用链接服务 直接连接到可专用路由的 IP 地址,而无需负载均衡器或 IP 转发虚拟机。

注释

专用链接服务 Direct Connect 目前为 公共预览版 ,可在选定区域中使用。
官方 Azure 文档中了解详细信息。

何时使用 Direct Connect

如果您需要使用这个选项:

  • 你已有数据源的 静态专用 IP 地址 (例如, 10.0.1.50 对于本地数据库或应用程序)。
  • 在 Azure 中不需要负载均衡或 NAT 转发。
  • 想要简化网络拓扑并减少延迟。

常见方案包括:

  • 通过 ExpressRoute 或 VPN 直接连接到本地数据库或服务器。
  • 通过专用 IP 访问第三方 SaaS 或网络设备。
  • 依赖于基于 IP 的路由而不是 DNS 的旧应用程序。

主要优势

Benefit 说明
简化设置 无需创建或维护内部负载均衡器或转发 VM。
较低的延迟 直接将流量路由到目标 IP,而无需中间跃点。
支持基于 IP 的工作负荷 非常适合需要静态 IP 连接的应用程序。
降低 Azure 成本占用 消除简单连接模式的 VM 和负载均衡器成本。

重要注意事项

  • 需要至少 2 个 IP 配置 (以 2 的倍数) 以实现高可用性。
  • 仅支持静态目标 IP 地址
  • 源专用终结点、专用链接服务和 Fabric 工作区必须位于 同一区域 (尚不支持跨区域)。
  • 仅在预览期的选定区域中可用: 美国中北部、美国东部 2、美国中部、美国中南部、美国西部、美国西部 2、美国西部 3、东南亚、澳大利亚东部、西班牙中部
  • 必须在 Azure 订阅中启用该功能标志 Microsoft.Network/AllowPrivateLinkserviceUDR

以下示例创建一个 Private Link Service Direct Connect,以直接连接到目标 IP 地址 10.0.1.100

# Variables
$resourceGroupName = "rg-pls-directconnect"
$location = "westus"
$vnetName = "pls-vnet"
$subnetName = "pls-subnet"
$plsName = "pls-directconnect"
$destinationIP = "10.0.1.100"

# Create resource group
New-AzResourceGroup -Name $resourceGroupName -Location $location

# Create VNet and subnet
$subnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix "10.0.1.0/24" -PrivateLinkServiceNetworkPoliciesFlag "Disabled"
$vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $resourceGroupName -Location $location -AddressPrefix "10.0.0.0/16" -Subnet $subnet

# Create IP configurations (minimum 2)
$subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name $subnetName
$ipConfig1 = @{ Name = "ipconfig1"; PrivateIpAllocationMethod = "Dynamic"; Subnet = $subnet; Primary = $true }
$ipConfig2 = @{ Name = "ipconfig2"; PrivateIpAllocationMethod = "Dynamic"; Subnet = $subnet; Primary = $false }

# Create Private Link Service Direct Connect
New-AzPrivateLinkService `
    -Name $plsName `
    -ResourceGroupName $resourceGroupName `
    -Location $location `
    -IpConfiguration @($ipConfig1, $ipConfig2) `
    -DestinationIPAddress $destinationIP

创建后,可以使用 此新的专用链接服务 ID/subscriptions/.../providers/Microsoft.Network/privateLinkServices/pls-directconnect
构造托管专用终结点 设置中,如 步骤 2 中所述:使用上面的 Fabric REST API 创建托管专用终结点

小窍门

对于 Fabric 来说,过程是相同的 — 你仍然创建引用 PLS 资源 ID 的 MPE,
但基础 Azure 资源现在直接路由 到目标 IP ,而不是通过负载均衡器路由。

比较:标准连接与直接连接

方面 标准专用链接服务 专用链接服务直接连接(预览版)
目标类型 负载均衡器前端 IP 静态专用目标 IP
典型使用 由负载均衡器或转发器虚拟机 (VM) 前置的应用程序或数据库 具有固定 IP 的数据库或自定义服务
设置复杂性 需要负载均衡器 + 可选的 NAT 转发 简单:直接指定目标 IP
可用性 普遍可用 公共预览版(受限区域)
Fabric 集成 已支持 通过相同的 MPE API 流进行支持
非常适合 多虚拟机或高可用性服务 单节点专用 IP 工作负载

摘要:
如果环境已公开 Fabric 需要访问的 静态专用 IP 地址 ,请使用 专用链接服务 Direct Connect(预览版) 简化设置并减少网络开销。
否则,请遵循本文档中已涵盖 的标准专用链接服务 + 负载均衡器 模式。

步骤 1:为资源创建子网

子网 Description
be-subnet 托管 IP 转发器虚拟机的后端子网
fe-subnet 内部负载均衡器的前端子网
pls-subnet 用于托管专用链接服务的子网

步骤 2:创建标准内部负载均衡器

  1. 转到 “创建资源 > 网络 > 负载均衡器”。
  2. 配置:
    • 类型: 内部
    • SKU: 标准
    • 子网: fe-subnet
    • IP 分配: 动态
  3. 创建后端池、运行状况探测(TCP 22 或 1433)和规则(TCP 1433 → 1433)。

步骤 3:创建后端转发虚拟机

be-subnet中创建一个或多个轻型 Ubuntu 虚拟机。 在创建过程中,将它们与负载均衡器后端池(myBackendPool)相关联。

预配后,请按照以下步骤启用 IP 转发并将 NAT 规则创建到本地 SQL Server IP(例如 10.0.0.47),

  1. 在 VM 上启用 IP 转发。
  2. 创建 DNAT 规则,将端口 1433 上的负载均衡器中的流量转发到端口 1433 上的本地 SQL Server IP(例如 10.0.0.47)。
  3. 为 NAT 创建 MASQUERADE 规则。

可以在 VM 上执行以下命令:

sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1433 -j DNAT --to-destination 10.0.0.47:1433
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

小窍门

可以使用 ip_fwd.sh 帮助程序脚本自动执行此作。


  1. 转到 专用链接中心→创建专用链接服务
  2. “出站设置”下:
    • 负载均衡器: 选择内部负载均衡器
    • 前端 IP: LoadBalancerFrontEnd
    • 源 NAT 子网:pls-subnet
  3. 保留默认值,然后选择“ 创建”。

此服务现在通过专用链接终结点公开内部 SQL Server。


步骤 5:使用 REST API 连接构造

创建并激活专用链接服务后,返回到上述指南中的步骤 2,在 Fabric 中创建托管专用终结点(MPE)。


步骤 6 - 创建托管专用终结点

使用已在主指南的步骤 2 中记录的 REST API。 在 JSON 正文中,将 targetPrivateLinkResourceId 设置为 PLS 资源 ID,并可选择在 targetFQDNs 中包含将在 Spark 代码中使用的 FQDN。

步骤 7 - 批准和测试

在 PLS 中批准待定的连接(Azure 门户→私有终结点连接)。 然后使用 FQDN 运行 Spark JDBC 读取,以确认专用连接。

ARM 模板示例(可选)

使用下面的模板作为起点部署网络组件。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "subscriptionId": { "type": "string", "defaultValue": "<subscriptionId>" },
    "resourceGroupName": { "type": "string", "defaultValue": "<resourceGroupName>" },
    "location": { "type": "string", "defaultValue": "eastus" },
    "vnetName": { "type": "string", "defaultValue": "fabric-onprem-vnet" }
  },
  "resources": [
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2023-09-01",
      "name": "[parameters('vnetName')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": { "addressPrefixes": ["192.168.0.0/16"] },
        "subnets": [
          { "name": "be-subnet", "properties": { "addressPrefix": "192.168.1.0/24" } },
          { "name": "fe-subnet", "properties": { "addressPrefix": "192.168.2.0/24" } },
          { "name": "pls-subnet", "properties": { "addressPrefix": "192.168.3.0/24" } }
        ]
      }
    },
    {
      "type": "Microsoft.Network/loadBalancers",
      "apiVersion": "2023-09-01",
      "name": "myLoadBalancer",
      "location": "[parameters('location')]",
      "sku": { "name": "Standard" },
      "properties": {
        "frontendIPConfigurations": [
          {
            "name": "LoadBalancerFrontEnd",
            "properties": { "subnet": { "id": "[concat(resourceId('Microsoft.Network/virtualNetworks', parameters('vnetName')), '/subnets/fe-subnet')]" } }
          }
        ]
      }
    }
  ]
}

可以扩展此模板以包括 VM 部署和专用链接服务定义。

常见高级模式注释

注意事项 Guidance
运行状况探测端口 使用一致可访问的端口(22 或轻型 TCP 侦听器),使 LB 看到后端正常。
Windows 防火墙 确保没有 Windows 防火墙阻止将流量转发到的端口
NAT VM 大小配置 小型VM通常足够,如果预期大规模并发会话,则需进行监控。
高可用性 对于生产环境,请在可用性集或区域中使用多个转发器 VM,并通过负载均衡进行分配。
Connectivity 确保已使用名称或 IP 地址在 IP 转发虚拟机与数据源之间建立连接。
安全性 将 NSG 限制为仅需要来自受信任范围的入站(1433 到转发器)和管理端口(22)。

了解详细信息