与 Azure 中继与 Azure 专用链接集成

使用 Azure 专用链接服务,可以通过虚拟网络中的专用终结点访问 Azure 服务(例如,Azure 中继、Azure 服务总线、Azure 事件中心、Azure 存储和 Azure Cosmos DB)以及 Azure 托管的客户/合作伙伴服务。 有关详细信息,请参阅什么是 Azure 专用链接?

专用终结点是一个网络接口,它允许在虚拟网络中运行的工作负荷以私密方式安全地连接到具有专用链接资源的服务(例如,中继命名空间)。 专用终结点使用 VNet 中的专用 IP 地址将服务有效接入 VNet 中。 发往服务的所有流量都可以通过专用终结点路由,因此不需要网关、NAT 设备、ExpressRoute、VPN 连接或公共 IP 地址。 虚拟网络与服务之间的流量将通过 Microsoft 主干网络,因此不会从公共 Internet 泄露。 可以通过允许连接到特定的 Azure 中继命名空间来提供访问控制的粒度级别。

注意

如果通过专用链接使用中继侦听器,请连同标准中继端口一起打开端口 9400-9599 进行传出通信。 请注意,只需对中继侦听器执行此步骤。

使用 Azure 门户添加专用终结点

先决条件

若要将 Azure 中继命名空间与 Azure 专用链接集成,需要以下实体或权限:

  • 一个 Azure 中继命名空间。
  • 一个 Azure 虚拟网络。
  • 虚拟网络中的子网。
  • 虚拟网络的所有者或参与者权限。

专用终结点和虚拟网络必须位于同一区域。 使用门户选择专用终结点的区域时,只会自动筛选该区域中的虚拟网络。 命名空间可以位于不同的区域中。

专用终结点使用虚拟网络中的专用 IP 地址。

为中继命名空间配置专用访问

以下过程提供分步说明,说明如何禁用对中继命名空间的公共访问,然后将专用终结点添加到命名空间。

  1. 登录 Azure 门户

  2. 在搜索栏中,键入“中继”。

  3. 从列表中选择要将专用终结点添加到的命名空间。

  4. 在左侧菜单上,选择“设置”下的“网络”选项卡。

  5. 在“网络”页上,对于“公用网络访问”,如果希望仅通过专用终结点访问命名空间,请选择“已禁用”。

  6. 对于“允许受信任的 Microsoft 服务绕过此防火墙”,如果要允许受信任的 Microsoft 服务绕过此防火墙,请选择“是”。

    “网络”页的屏幕截图,其中公用网络访问设为“已禁用”。

  7. 选择页面顶部的“专用终结点连接”选项卡

  8. 在页面顶部选择“+ 专用终结点”按钮。

    屏幕截图显示在“网络”页面的“专用终结点连接”选项卡上选择“添加专用终结点”按钮。

  9. 在“基本信息”页上执行以下步骤:

    1. 选择要在其中创建专用终结点的 Azure 订阅。

    2. 选择专用终结点资源的资源组。

    3. 输入专用终结点名称

    4. 网络接口输入名称

    5. 专用终结点选择“区域”。 专用终结点必须与虚拟网络位于同一区域,但可以与要连接的 Azure 中继命名空间不在同一区域。

    6. 选择页面底部的“下一步: 资源 ”。

      显示“创建专用终结点”向导的“基本信息”页的屏幕截图。

  10. 在“资源”页上查看设置,然后选择“下一步: 虚拟网络”。

    显示“创建专用终结点”向导的“资源”页的屏幕截图。

  11. 在“虚拟网络”页上,选择要在其中部署专用终结点的虚拟网络子网。 下拉列表中仅列出了当前所选订阅和位置中的虚拟网络。

    屏幕截图显示“创建专用终结点”向导的“虚拟网络”页。

    可以配置是要动态分配 IP 地址还是静态向专用终结点分配 IP 地址

    还可以将新的或现有的应用程序安全组关联到专用终结点。

  12. 在“专用 DNS集成”部分中,默认启用“与专用 DNZ 区域集成”设置(建议)。 可以选择禁用它。

    屏幕截图显示“创建专用终结点”向导的“DNS”页。

    若要与专用终结点建立专用连接,则需要 DNS 记录。 建议将专用终结点与专用 DNS 区域集成。 也可使用自己的 DNS 服务器,或使用虚拟机上的主机文件来创建 DNS 记录。 有关详细信息,请参阅 Azure 专用终结点 DNS 配置

  13. 选择页面底部的“下一步: 标记 >”按钮。

  14. 在“标记”页上,创建要与专用终结点关联的任何标记(名称和值)以及专用 DNS 区域(如果已启用此选项)。 然后,在页面底部选择“查看 + 创建”按钮。

  15. 在“查看 + 创建”页上查看所有设置,然后选择“创建”以创建专用终结点 。

  16. 在“专用终结点”页上,可以查看专用终结点连接的状态。 如果你是中继命名空间的所有者或者对其具有管理权限,并且对于“连接方法”已选择“连接到我的目录中的 Azure 资源”选项,则终结点连接的状态应该为“已自动批准”。 如果它处于“挂起”状态,请参阅使用 Azure 门户管理专用终结点部分。

    屏幕截图显示 Azure 门户中的“专用终结点”页。

  17. 导航回命名空间的“网络”页,并切换到“专用终结点连接”选项卡 。你应该会看到你所创建的专用终结点。

    屏幕截图显示“网络”页面的“专用端点连接”选项卡以及您刚刚创建的专用终结点。

使用 PowerShell 添加专用终结点

以下示例演示如何使用 Azure PowerShell 创建与 Azure 中继命名空间的专用终结点连接。

专用终结点和虚拟网络必须位于同一区域。 Azure 中继命名空间可以位于不同的区域中。 并且,专用终结点使用虚拟网络中的专用 IP 地址。


$rgName = "<RESOURCE GROUP NAME>"
$vnetlocation = "<VNET LOCATION>"
$vnetName = "<VIRTUAL NETWORK NAME>"
$subnetName = "<SUBNET NAME>"
$namespaceLocation = "<NAMESPACE LOCATION>"
$namespaceName = "<NAMESPACE NAME>"
$peConnectionName = "<PRIVATE ENDPOINT CONNECTION NAME>"

# create resource group
New-AzResourceGroup -Name $rgName -Location $vnetLocation 

# create virtual network
$virtualNetwork = New-AzVirtualNetwork `
                    -ResourceGroupName $rgName `
                    -Location $vnetlocation `
                    -Name $vnetName `
                    -AddressPrefix 10.0.0.0/16

# create subnet with endpoint network policy disabled
$subnetConfig = Add-AzVirtualNetworkSubnetConfig `
                    -Name $subnetName `
                    -AddressPrefix 10.0.0.0/24 `
                    -PrivateEndpointNetworkPoliciesFlag "Disabled" `
                    -VirtualNetwork $virtualNetwork

# update virtual network
$virtualNetwork | Set-AzVirtualNetwork

# create a relay namespace
$namespaceResource = New-AzResource -Location $namespaceLocation -ResourceName $namespaceName -ResourceGroupName $rgName -Properties @{} -ResourceType "Microsoft.Relay/namespaces" 

# create a private link service connection
$privateEndpointConnection = New-AzPrivateLinkServiceConnection `
                                -Name $peConnectionName `
                                -PrivateLinkServiceId $namespaceResource.ResourceId `
                                -GroupId "namespace"

# get subnet object that you'll use in the next step                                
$virtualNetwork = Get-AzVirtualNetwork -ResourceGroupName  $rgName -Name $vnetName
$subnet = $virtualNetwork | Select -ExpandProperty subnets `
                                | Where-Object  {$_.Name -eq $subnetName}  

# now, create private endpoint   
$privateEndpoint = New-AzPrivateEndpoint -ResourceGroupName $rgName  `
                                -Name $vnetName   `
                                -Location $vnetlocation `
                                -Subnet  $subnet   `
                                -PrivateLinkServiceConnection $privateEndpointConnection

(Get-AzResource -ResourceId $namespaceResource.ResourceId -ExpandProperties).Properties

使用 Azure 门户管理专用终结点

创建专用终结点时,必须批准连接。 如果要为其创建专用终结点的资源(中继命名空间)位于你的目录中,那么在你对中继命名空间具有管理权限的前提下,你可以批准连接请求。 如果要连接到一个你无权访问的中继命名空间,则必须等待该资源的所有者批准你的连接请求。

有四种预配状态:

服务操作 服务使用者专用终结点状态 说明
挂起的 连接是手动创建的,正等待 Azure 中继命名空间所有者的批准。
审批 已批准 连接已自动或手动批准,随时可供使用。
拒绝 已拒绝 Azure 中继命名空间所有者拒绝了连接。
删除 已断开连接 连接已被 Azure 中继命名空间所有者删除,专用终结点仅供参考,应将其删除以清理资源。

批准、拒绝或删除专用终结点连接

  1. 登录到 Azure 门户。
  2. 在搜索栏中,键入“中继”。
  3. 选择要管理的命名空间。
  4. 选择“网络”选项卡。
  5. 根据要执行的操作(批准、拒绝或删除),转到下面的相应部分。

批准专用终结点连接

  1. 如果有任何挂起的连接,则会列出预配状态为“挂起”的连接。

  2. 选择要批准的专用终结点

  3. 选择“批准”按钮。

    屏幕截图显示所选专用终结点的命令栏上的“批准”按钮。

  4. 在“批准连接”页上输入可选注释,然后选择“是” 。 如果选择“否”,则不会执行任何操作。

    屏幕截图显示“批准连接”页面,要求您进行确认。

  5. 应会看到,列表中连接的状态已更改为“已批准”。

拒绝专用终结点连接

  1. 如果要拒绝任何专用终结点连接(不管是挂起的请求还是此前已批准的现有连接),请选择该终结点连接并选择“拒绝”按钮。

    屏幕截图显示所选专用终结点的命令栏上的“拒绝”按钮。

  2. 在“拒绝连接”页上输入可选注释,然后选择“是” 。 如果选择“否”,则不会执行任何操作。

    屏幕截图显示“拒绝连接”页面,要求您进行确认。

  3. 应会看到,列表中连接的状态已更改为“已拒绝”。

删除专用终结点连接

  1. 若要删除某个专用终结点连接,请在列表中选择它,然后在工具栏上选择“删除”。

    屏幕截图显示所选专用终结点的命令栏上的“删除”按钮。

  2. 在“删除连接”页上,选择“是”以确认删除该专用终结点。 如果选择“否”,则不会执行任何操作。

    屏幕截图显示“删除连接”页面,要求您进行确认。

  3. 应会看到,状态已更改为“已断开连接”。 然后,你就不会在列表中看到终结点了。

你应验证专用终结点虚拟网络中的资源是否已通过其专用 IP 地址连接到 Azure 中继命名空间。

为了进行此测试,请按照在 Azure 门户中创建 Windows 虚拟机中的步骤,创建一个虚拟机

在“网络”选项卡中:

  1. 指定虚拟网络和子网 。 选择已将专用终结点部署到的虚拟网络。
  2. 指定一个公共 IP 资源。
  3. 对于“NIC 网络安全组”,请选择“无” 。
  4. 对于“负载均衡”,请选择“否” 。

连接到 VM,打开命令行并运行以下命令:

nslookup <your-relay-namespace-name>.servicebus.chinacloudapi.cn

你应该会看到如下所示的结果。

Non-authoritative answer:
Name:    <namespace-name>.privatelink.servicebus.chinacloudapi.cn
Address:  10.0.0.4 (private IP address associated with the private endpoint)
Aliases:  <namespace-name>.servicebus.chinacloudapi.cn

限制和设计注意事项

设计注意事项

限制

  • 每个 Azure 中继命名空间的最大专用终结点数目:64。
  • 每个订阅的包含专用终结点的 Azure 中继命名空间数目上限:64。
  • 网络安全组 (NSG) 规则和用户定义的路由不适用于专用终结点。 有关详细信息,请参阅 Azure 专用链接服务:限制

受信任的 Azure 服务

启用“允许受信任的 Azure 服务绕过此防火墙”设置时,将授权以下服务访问你的 Azure 中继资源

受信服务 支持的使用方案
Azure 机器学习 AML Kubernetes 使用 Azure 中继促进 AML 服务和 Kubernetes 群集之间的通信。 Azure 中继是一项完全托管的服务,为托管在不同网络上的应用程序之间提供安全的双向通信。 这使得它非常适合在专用链接环境中使用,其中 Azure 资源和本地资源之间的通信受到限制。
Azure Arc 与上述资源提供程序关联的已启用 Azure Arc 的服务将能够以发送方身份连接到 Azure 中继命名空间中的混合连接,而不会被 Azure 中继命名空间上设置的 IP 防火墙规则阻止。 Microsoft.Hybridconnectivity 服务在 Azure 中继命名空间中创建混合连接,并根据场景向相关 Arc 服务提供连接信息。 如果使用的是 Azure Arc,则这些服务只与你的 Azure 中继命名空间以及以下 Azure 服务通信:

- Azure Kubernetes
- Microsoft Purview

下面提供了 Azure 中继的其他受信任服务:

  • Azure 事件网格
  • Azure IoT 中心
  • Azure 流分析
  • Azure Monitor
  • Azure API 管理
  • Azure Synapse
  • Azure 数据资源管理器
  • Azure IoT Central
  • Azure Healthcare Data Services
  • Azure 数字孪生

注意

2021-11-01 版本或更高版本的 Azure 中继 SDK 中,Microsoft.Relay/namespaces/networkRuleSets 属性中提供了“trustedServiceAccessEnabled”属性,用于启用受信任的服务访问。

要允许 Azure 资源管理器模板中的受信任服务,请在模板中包含此属性:

"trustedServiceAccessEnabled": "True"

例如,根据上面提供的 ARM 模板,可对其进行修改,以包含此网络规则集属性来启用受信任服务:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "namespaces_name": {
            "defaultValue": "contosorelay0215",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Relay/namespaces",
            "apiVersion": "2021-11-01",
            "name": "[parameters('namespaces_name')]",
            "location": "China East",
            "sku": {
                "name": "Standard",
                "tier": "Standard"
            },
            "properties": {}
        },
        {
            "type": "Microsoft.Relay/namespaces/authorizationrules",
            "apiVersion": "2021-11-01",
            "name": "[concat(parameters('namespaces_sprelayns0215_name'), '/RootManageSharedAccessKey')]",
            "location": "chinaeast",
            "dependsOn": [
                "[resourceId('Microsoft.Relay/namespaces', parameters('namespaces_sprelayns0215_name'))]"
            ],
            "properties": {
                "rights": [
                    "Listen",
                    "Manage",
                    "Send"
                ]
            }
        },
        {
            "type": "Microsoft.Relay/namespaces/networkRuleSets",
            "apiVersion": "2021-11-01",
            "name": "[concat(parameters('namespaces_sprelayns0215_name'), '/default')]",
            "location": "China East",
            "dependsOn": [
                "[resourceId('Microsoft.Relay/namespaces', parameters('namespaces_sprelayns0215_name'))]"
            ],
            "properties": {
                "trustedServiceAccessEnabled": "True",
                "publicNetworkAccess": "Enabled",
                "defaultAction": "Deny",
                "ipRules": [
                    {
                        "ipMask": "172.72.157.204",
                        "action": "Allow"
                    },
                    {
                        "ipMask": "10.1.1.1",
                        "action": "Allow"
                    },
                    {
                        "ipMask": "11.0.0.0/24",
                        "action": "Allow"
                    }
                ]
            }
        }
    ]
}

后续步骤