标准虚拟网络注入方法
适用于:Azure 数据工厂 Azure Synapse Analytics
使用 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 所需的连接:
选择虚拟网络权限
若要启用标准虚拟网络注入,必须为创建 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 门户上执行此操作。
这些 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 防火墙服务。
若要使其正常工作,必须确保以下各项:
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 路由。
注意
此方法会产生额外的维护成本,因为需要定期检查相关 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 数据工厂(管理)
如果使用 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。
注意
将 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。