标准虚拟网络注入方法

适用于: Azure 数据工厂 Azure Synapse Analytics

提示

试用 Microsoft Fabric 中的数据工厂,这是一种适用于企业的一站式分析解决方案。 Microsoft Fabric 涵盖从数据移动到数据科学、实时分析、商业智能和报告的所有内容。 了解如何免费开始新的试用

使用 Azure 数据工厂 (ADF) 或 Synapse Pipelines 中的 SQL Server Integration Services (SSIS) 时,可通过两种方法将 Azure-SSIS Integration Runtime (IR) 加入到虚拟网络:标准和快速。 如果使用标准方法,则需要配置虚拟网络以满足以下要求:

  • 请确保 Microsoft.Batch 是 Azure 订阅中已注册的资源提供程序,该提供程序具有可供 Azure-SSIS IR 加入的虚拟网络。 有关详细说明,请参阅将 Azure Batch 注册为资源提供程序部分。

  • 确保为创建 Azure-SSIS IR 的用户授予加入虚拟网络/子网所需的基于角色的访问控制 (RBAC) 权限。 有关详细信息,请参阅下面的选择虚拟网络权限部分。

  • 在虚拟网络中选择适当的子网,供 Azure-SSIS IR 加入。 有关详细信息,请参阅下面的选择子网部分。

根据具体的方案,可以选择配置以下各项:

  • 如果要对 Azure-SSIS IR 的出站流量使用自己的静态公共 IP (BYOIP) 地址,请参阅下面的配置静态公共 IP 地址部分。

  • 如果要在虚拟网络中使用自己的域名系统 (DNS) 服务器,请参阅下面的配置自定义 DNS 服务器部分。

  • 如果要使用网络安全组 (NSG) 来限制子网上的入站/出站流量,请参阅下面的配置 NSG 部分。

  • 如果要使用用户定义的路由 (UDR) 来审核/检查出站流量,请参阅下面的配置 UDR 部分。

  • 确保虚拟网络的资源组(如果使用自己的公共 IP 地址,则为公共 IP 地址的资源组)可以创建和删除特定的 Azure 网络资源。 有关详细信息,请参阅配置相关资源组

  • 如果自定义 Azure-SSIS IR,如 Azure-SSIS IR 的自定义设置文章中所述,用于管理其节点的内部过程将使用 172.16.0.0 至 172.31.255.255 的预定义范围内的专用 IP 地址。 因此,请确保虚拟网络和/或本地网络的专用 IP 地址范围不会与此范围冲突。

下图显示了 Azure-SSIS IR 所需的连接:

Diagram that shows the required connections for your Azure-SSIS IR.

选择虚拟网络权限

若要启用标准虚拟网络注入,必须为创建 Azure-SSIS IR 的用户授予加入虚拟网络/子网所需的 RBAC 权限。

  • 如果要将 Azure-SSIS IR 加入 Azure 资源管理器虚拟网络,则有两种选择:

    • 使用内置的“网络参与者”角色。 此角色具有 Microsoft.Network/* 权限,具有比所需作用域更大的作用域。

    • 创建一个仅包括必需 Microsoft.Network/virtualNetworks/*/join/action 权限的自定义角色。 如果还需要在将 Azure-SSIS IR 联接到 Azure 资源管理器虚拟网络时为它创建自己的公共静态 IP 地址,请同时在角色中添加 Microsoft.Network/publicIPAddresses/*/join/action 权限。

    • 有关详细说明,请参阅授予虚拟网络权限部分。

  • 如果要将 Azure-SSIS IR 加入经典虚拟网络,则建议使用内置的“经典虚拟机参与者”角色。 否则,必须创建包含加入虚拟网络权限的自定义角色。 还需要将 MicrosoftAzureBatch 分配到该内置/自定义角色。

选择子网

若要启用标准虚拟网络注入,必须选择合适的子网供 Azure-SSIS IR 加入:

  • 请勿选择 GatewaySubnet,因为它专用于虚拟网络网关。

  • 请确保所选子网的可用 IP 地址至少是 Azure-SSIS IR 节点数的两倍。 这些是在为 Azure-SSIS IR 推出补丁/升级时避免中断所必需的。 Azure 还会保留每个子网中无法使用的一些 IP 地址。 第一个和最后一个 IP 地址为协议合规性而保留,而其他三个地址保留用于 Azure 服务。 有关详细信息,请参阅子网 IP 地址限制部分。

  • 请勿使用其他 Azure 服务(例如,Azure SQL 托管实例、应用服务等)以独占方式占用的子网。

配置公共静态 IP 地址

如果需要在将 Azure-SSIS IR 的出站流量联接到虚拟网络的同时为它创建自己的公共静态 IP 地址,使其能够在防火墙上,请确保它们满足以下要求:

  • 应仅提供尚未与其他 Azure 资源关联的两个未使用的 IP 地址。 当我们定期升级你的 Azure-SSIS IR 时,将使用一个额外的 IP 地址。 请注意,不能在活动的 Azure-SSIS IR 之间共享一个公共 IP 地址。

  • 这些 IP 地址应该是标准类型的静态 IP。 有关更多详细信息,请参阅公共 IP 地址的 SKU 部分。

  • 它们应该都有 DNS 名称。 如果在创建时未提供 DNS 名称,则可以在 Azure 门户上执行此操作。

    Azure-SSIS IR

  • 这些 IP 地址和虚拟网络应位于同一区域中的同一订阅下。

配置自定义 DNS 服务器

如果要在虚拟网络中使用自己的 DNS 服务器来解析专用主机名,请确保它还可以解析全局 Azure 主机名(例如,名为 <your storage account>.blob.core.chinacloudapi.cn 的 Azure Blob 存储。)。

建议将自己的 DNS 服务器配置为将未解析的 DNS 请求转发到 Azure 递归解析程序 (168.63.129.16) 的 IP 地址。

有关详细信息,请参阅 DNS 服务器名称解析部分。

注意

请为专用主机名使用完全限定的域名 (FQDN)(例如,使用 <your_private_server>.contoso.com 而不是 <your_private_server>)。 或者,可以在 Azure-SSIS IR 上使用标准自定义设置自动将自己的 DNS 后缀(例如 contoso.com)追加到任何非限定的单标签域名,并将其转换为 FQDN,然后再在 DNS 查询中使用它,请参阅标准自定义设置示例部分。

配置 NSG

如果要在 Azure-SSIS IR 加入的子网上使用 NSG,请允许以下入站和出站流量:

方向 传输协议 源端口 目标 目标端口 注释
入站 TCP BatchNodeManagement * VirtualNetwork 29876、29877(如果将 SSIS IR 加入 Azure 资源管理器虚拟网络)

10100、20100、30100(如果将 SSIS IR 加入经典虚拟网络)
数据工厂服务使用这些端口与虚拟网络中的 Azure-SSIS IR 节点进行通信。

无论是否在子网上创建 NSG,数据工厂始终会在连接到托管 Azure-SSIS IR 的虚拟机的网络接口卡 (NIC) 上配置 NSG。

此 NIC 级别的 NSG 仅允许来自指定端口上的数据工厂 IP 地址的入站流量。

即使在子网级别向 Internet 流量打开这些端口,来自非数据工厂 IP 地址的流量也会在 NIC 级别被阻止。
入站 TCP CorpNetSaw * VirtualNetwork 3389 (可选)只有当 Microsoft 支持工程师要求客户打开端口 3389 以进行高级故障排除,并且可以在故障排除后立即关闭时,才需要此规则。

CorpNetSaw 服务标记仅允许 Microsoft 企业网络中的安全访问工作站 (SAW) 计算机通过远程桌面协议 (RDP) 访问 Azure-SSIS IR。

此服务标记无法在 Azure 门户中选择,只能通过 Azure PowerShell/CLI 使用。

在 NIC 级 NSG 中,端口 3389 默认情况下处于打开状态,但可以使用子网级 NSG 对其进行控制,同时,默认情况下,使用 Windows 防火墙规则在 Azure-SSIS IR 节点上不允许出站流量。
方向 传输协议 源端口 目标 目标端口 注释
出站 TCP VirtualNetwork * AzureCloud 443 Azure-SSIS IR 访问 Azure 服务需要,如 Azure 存储和 Azure 事件中心。
出站 TCP VirtualNetwork * Internet 80 (可选)Azure-SSIS IR 使用此端口从 Internet 下载证书吊销列表 (CRL)。

如果阻止此流量,则在启动 Azure-SSIS IR 时性能可能会降低,并且在使用证书时会失去检查 CRL 的功能,从安全角度来看不建议这样做。

如果要将目标缩小到特定的 FQDN,请参阅下面的配置 UDR 部分
出站 TCP VirtualNetwork * Sql/VirtualNetwork 1433、11000-11999 (可选)仅在使用 Azure SQL Database 服务器/托管实例托管 SSIS 目录 (SSISDB) 时需要。

如果 Azure SQL Database 服务器/托管实例配置了公共终结点/虚拟网络服务终结点,请使用 Sql 服务标记作为目标。

如果 Azure SQL Database 服务器/托管实例配置了专用终结点,请使用 VirtualNetwork 服务标记作为目标。

如果服务器连接策略设置为“代理”(而不是“重定向”),那么只需要端口 1433。
出站 TCP VirtualNetwork * Storage/VirtualNetwork 443 (可选)仅在使用 Azure 存储 blob 容器来存储标准自定义安装脚本/文件时才需要。

如果 Azure 存储配置了公共终结点/虚拟网络服务终结点,请使用 Storage 服务标记作为目标。

如果 Azure 存储配置了专用终结点,请使用 VirtualNetwork 服务标记作为目标。
出站 TCP VirtualNetwork * Storage/VirtualNetwork 445 (可选)仅在需要访问 Azure 文件时需要。

如果 Azure 存储配置了公共终结点/虚拟网络服务终结点,请使用 Storage 服务标记作为目标。

如果 Azure 存储配置了专用终结点,请使用 VirtualNetwork 服务标记作为目标。

配置 UDR

如果要审核/检查来自 Azure-SSIS IR 的出站流量,可以使用用户定义的路由 (UDR) 通过 Azure ExpressRoute 强制隧道将其重定向到本地防火墙设备,该隧道将边界网关协议 (BGP) 路由 0.0.0.0/0 播发到虚拟网络,并路由到配置为防火墙的网络虚拟设备 (NVA),或 Azure 防火墙服务。

NVA scenario for Azure-SSIS IR

若要使其正常工作,必须确保以下各项:

  • Azure Batch 管理服务与 Azure-SSIS IR 之间的流量不应路由到防火墙设备/服务。

  • 防火墙设备/服务应允许 Azure-SSIS IR 所需的出站流量。

如果 Azure Batch 管理服务与 Azure-SSIS IR 之间的流量被路由到防火墙设备/服务,将由于非对称路由而中断。 必须为此流量定义 UDR,以便它可以通过进来的路由出去。 可以将下一个跃点类型作为 Internet,将 UDR 配置为路由 Azure Batch 管理服务与 Azure-SSIS IR 之间的流量。

例如,如果 Azure-SSIS IR 位于中国北部 3,并且你想要使用 Azure 防火墙检查出站流量,可以首先通过服务标记 IP 范围下载链接服务标记发现 API 获取“BatchNodeManagement.ChinaNorth3”服务标记的 IP 范围。 然后,将下一个跃点类型作为“Internet”配置相关 IP 范围路由的以下 UDR,以及将下一个跃点类型作为“虚拟设备”配置 0.0.0.0/0 路由。

Azure Batch UDR settings

注意

此方法会产生额外的维护成本,因为需要定期检查相关 IP 范围并为新的范围添加 UDR,以避免中断 Azure-SSIS IR。 建议每月检查一次,因为相关服务标记出现新的 IP 范围时,还需要一个月才能生效。

可以运行以下 PowerShell 脚本,为 Azure Batch 管理服务添加 UDR:

$Location = "[location of your Azure-SSIS IR]"
$RouteTableResourceGroupName = "[name of Azure resource group that contains your route table]"
$RouteTableResourceName = "[resource name of your route table]"
$RouteTable = Get-AzRouteTable -ResourceGroupName $RouteTableResourceGroupName -Name $RouteTableResourceName
$ServiceTags = Get-AzNetworkServiceTag -Location $Location
$BatchServiceTagName = "BatchNodeManagement." + $Location
$UdrRulePrefixForBatch = $BatchServiceTagName
if ($ServiceTags -ne $null)
{
    $BatchIPRanges = $ServiceTags.Values | Where-Object { $_.Name -ieq $BatchServiceTagName }
    if ($BatchIPRanges -ne $null)
    {
        Write-Host "Start adding UDRs to your route table..."
        for ($i = 0; $i -lt $BatchIPRanges.Properties.AddressPrefixes.Count; $i++)
        {
            $UdrRuleName = "$($UdrRulePrefixForBatch)_$($i)"
            Add-AzRouteConfig -Name $UdrRuleName `
                -AddressPrefix $BatchIPRanges.Properties.AddressPrefixes[$i] `
                -NextHopType "Internet" `
                -RouteTable $RouteTable `
                | Out-Null
            Write-Host "Add $UdrRuleName to your route table..."
        }
        Set-AzRouteTable -RouteTable $RouteTable
    }
}
else
{
    Write-Host "Failed to fetch Azure service tag, please confirm that your location is valid."
}

按照上面的配置 NSG 部分中的指导,必须在防火墙设备/服务上实现类似的规则,以允许来自 Azure-SSIS IR 的出站流量:

  • 如果使用 Azure 防火墙:

    • 必须为将 AzureCloud 服务标记作为目标的出站 TCP 流量打开端口 443。

    • 如果使用 Azure SQL Database 服务器/托管实例来托管 SSISDB,则必须为将 Sql/VirtualNetwork 服务标记作为目标的出站 TCP 流量打开端口 1433、11000-11999。

    • 如果使用 Azure 存储 blob 容器来存储标准自定义安装脚本/文件,则必须为将 Storage/VirtualNetwork 服务标记作为目标的出站 TCP 流量打开端口 443。

    • 如果需要访问 Azure 文件存储,则必须为将 Storage/VirtualNetwork 服务标记作为目标的出站 TCP 流量打开端口 445。

  • 如果使用其他防火墙设备/服务:

    • 必须为将 0.0.0.0/0 或以下 Azure 环境特定 FQDN 作为目标的出站 TCP 流量打开端口 443。

      Azure 环境 FQDN
      由世纪互联运营的 Microsoft Azure
      • Azure 数据工厂(管理)
        • *.frontend.datamovement.azure.cn
      • Azure 存储(管理)
        • *.blob.core.chinacloudapi.cn
        • *.table.core.chinacloudapi.cn
      • Azure 容器注册表(自定义设置)
        • *.azurecr.cn
      • 事件中心(日志记录)
        • *.servicebus.chinacloudapi.cn
      • Microsoft 日志记录服务(内部使用)
        • mooncake.warmpath.chinacloudapi.cn
        • azurewatsonanalysis.chinacloudapp.cn
    • 如果使用 Azure SQL Database 服务器/托管实例来托管 SSISDB,则必须为将 0.0.0.0/0 或 Azure SQL Database 服务器/托管实例 FQDN 作为目标的出站 TCP 流量打开端口 1433、11000-11999。

    • 如果使用 Azure 存储 blob 容器来存储标准自定义安装脚本/文件,则必须为将 0.0.0.0/0 或 Azure Blob 存储 FQDN 作为目标的出站 TCP 流量打开端口 443。

    • 如果需要访问 Azure 文件存储,则必须为将 0.0.0.0/0 或 Azure 文件存储 FQDN 作为目标的出站 TCP 流量打开端口 445。

  • 如果通过在子网中分别启用 Microsoft.Storage/Microsoft.ContainerRegistry/Microsoft.EventHub/Microsoft.Sql 资源为 Azure 存储/容器注册表/事件中心/SQL 配置虚拟网络服务终结点,则同一/配对区域中的 Azure-SSIS IR 与这些服务之间的所有流量都将路由到 Azure 主干网络,而不是防火墙设备/服务。

  • 应为将以下证书吊销列表 (CRL) 下载站点作为目标的出站 TCP 流量打开端口 80:

    • crl.microsoft.com:80
    • mscrl.microsoft.com:80
    • crl3.digicert.com:80
    • crl4.digicert.com:80
    • ocsp.digicert.com:80
    • cacerts.digicert.com:80

    如果使用具有不同 CRL 的证书,还应添加其下载站点作为目标。 有关详细信息,请参阅证书吊销列表文章。

    如果阻止此流量,则在启动 Azure-SSIS IR 时性能可能会降低,并且在使用证书时会失去检查 CRL 的功能,从安全角度来看不建议这样做。

如果不需要审核/检查来自 Azure-SSIS IR 的出站流量,可以使用 UDR 强制下一个跃点类型为 Internet 的所有流量:

  • 使用 Azure ExpressRoute 时,可以在子网中为 0.0.0.0/0 路由配置 UDR,下一个跃点类型为 Internet。

  • 使用 NVA 时,可以修改子网中 0.0.0.0/0 路由的现有 UDR,将下一个跃点类型从“虚拟设备”切换到 Internet。

Add a route

注意

将 UDR 的下一个跃点类型配置为 Internet 并不意味着所有流量都将通过 Internet。 只要目标地址属于 Azure 服务之一,Azure 就会通过 Azure 主干网络而不是 Internet 将所有流量路由到该地址。

配置相关资源组

若要启用标准虚拟网络注入,Azure-SSIS IR 需要在与虚拟网络相同的资源组中创建某些网络资源。 这些资源包括:

  • 名为 <Guid>-azurebatch-cloudserviceloadbalancer 的 Azure 负载均衡器。
  • 名为 <Guid>-azurebatch-cloudservicepublicip 的 Azure 公共 IP 地址。
  • 名为 <Guid>-azurebatch-cloudservicenetworksecuritygroup 的 NSG。

注意

现在,可为 Azure-SSIS IR 提供自己的静态公共 IP 地址。 在此方案中,我们将在与静态公共 IP 地址(而不是虚拟网络)相同的资源组中创建 Azure 负载均衡器和 NSG。

这些资源将在 Azure-SSIS IR 启动时创建。 当 Azure-SSIS IR 停止时,将删除这些资源。 如果为 Azure-SSIS IR 提供自己的静态公共 IP 地址,则当 Azure-SSIS IR 停止时不会将其删除。 为了避免阻止 Azure-SSIS IR 停止,不要将这些资源再次用于其他目的。

确保在虚拟网络/静态公共 IP 地址所属的资源组/订阅上没有资源锁。 如果配置只读/删除锁,则启动和停止 Azure-SSIS IR 将会失败,或者它会停止响应。

确保没有 Azure Policy 分配阻止在虚拟网络/静态公共 IP 地址所属的资源组/订阅下创建以下资源:

  • Microsoft.Network/LoadBalancers
  • Microsoft.Network/NetworkSecurityGroups
  • Microsoft.Network/PublicIPAddresses

确保订阅的资源配额足以用于这些资源。 具体而言,对于在虚拟网络中创建的每个 Azure-SSIS IR,需要保留这些资源的两倍数量,因为当我们定期升级你的 Azure-SSIS IR 时,会使用额外资源。

常见问题解答

  • 如何保护用于入站连接的 Azure-SSIS IR 上公开的公共 IP 地址? 是否可以删除公共 IP 地址?

    目前,当 Azure-SSIS IR 加入虚拟网络时,会自动创建一个公共 IP 地址。 我们有一个 NIC 级别的 NSG,仅允许 Azure Batch 管理服务入站连接到 Azure-SSIS IR。 你也可以指定子网级别的 NSG 进行入站保护。

    如果不希望公开任何公共 IP 地址,请考虑将自承载 IR 配置为 Azure-SSIS IR 的代理,而不是将 Azure-SSIS IR 加入到虚拟网络。

  • 是否可以将 Azure-SSIS IR 的公共 IP 地址添加到数据源的防火墙允许列表?

    现在,可为 Azure-SSIS IR 提供自己的静态公共 IP 地址。 在这种情况下,可将 IP 地址添加到数据源的防火墙允许列表。 或者,也可以考虑以下其他选择,根据具体方案来保护来自 Azure-SSIS IR 的数据访问:

    • 如果数据源位于本地,则在将虚拟网络连接到本地网络并将 Azure-SSIS IR 加入虚拟网络子网后,可以将该子网的专用 IP 地址范围添加到数据源的防火墙允许列表。

    • 如果数据源是支持虚拟网络服务终结点的 Azure 服务,则可以在虚拟网络子网中配置虚拟网络服务终结点,并将 Azure-SSIS IR 加入该子网。 然后,可将包含该子网的虚拟网络规则添加到数据源的防火墙。

    • 如果数据源是非 Azure 云服务,则可以使用 UDR 通过 NVA/Azure 防火墙将出站流量从 Azure-SSIS IR 路由到其静态公共 IP 地址。 然后,可将 NVA/Azure 防火墙的静态公共 IP 地址添加到数据源的防火墙允许列表。

    • 如果上述选项都不能满足你的需求,请考虑将自承载 IR 配置为 Azure-SSIS IR 的代理。 然后,可将托管自承载 IR 的计算机的静态公共 IP 地址添加到数据源的防火墙允许列表。

  • 如果我要为 Azure-SSIS IR 提供静态公共地址,为何需要提供两个?

    Azure-SSIS IR 将定期自动更新。 升级期间将创建新节点,而旧节点将被删除。 但是,为了避免停机,只有在新节点准备就绪之后才会删除旧节点。 因此,旧节点使用的第一个静态公共 IP 地址无法立即释放,我们需要第二个静态公共 IP 地址来创建新节点。

  • 我已经为 Azure-SSIS IR 创建了自己的静态公共 IP 地址,但为什么仍然无法访问我的数据源?

    请确认两个静态公共 IP 地址都已添加到数据源的防火墙允许列表中。 每次升级 Azure-SSIS IR 时,其静态公共 IP 地址都在你创建的这两个 IP 地址之间切换。 如果只将其中一个地址添加到允许列表,则升级后,Azure-SSIS IR 的数据访问将会中断。

    如果数据源是 Azure 服务,请检查是否已使用虚拟网络服务终结点配置了它。 如果是这种情况,从 Azure-SSIS IR 到数据源的流量将切换为使用由 Azure 服务管理的专用 IP 地址,并且将你自己的静态公共 IP 地址添加到数据源的防火墙允许列表将不会生效。

有关 Azure-SSIS IR 的详细信息,请参阅以下文章:

  • Azure-SSIS IR。 此文提供有关 IR(包括 Azure-SSIS IR)的一般概念性信息。
  • 教程:将 SSIS 包部署到 Azure 中的分步说明创建一个。 此教程提供有关创建 Azure-SSIS IR 的分步说明。 它使用 Azure SQL 数据库服务器来托管 SSISDB。
  • 创建 Azure-SSIS IR。 此文对本教程的内容做了扩充。 它提供了一些说明,介绍如何使用配置了虚拟网络服务终结点/IP 防火墙规则/专用终结点的 Azure SQL 数据库服务器或加入虚拟网络的 Azure SQL 托管实例来托管 SSISDB。 它介绍了如何将 Azure-SSIS IR 加入虚拟网络。
  • 监视 Azure-SSIS IR。 此文介绍如何检索并了解有关 Azure-SSIS IR 的信息。
  • 管理 Azure-SSIS IR。 此文介绍如何停止、启动或删除 Azure-SSIS IR。 此外,介绍如何通过添加更多节点来横向扩展 Azure-SSIS IR。