允许通过专用终结点访问 Azure 事件中心命名空间
使用 Azure 专用链接服务,可以通过虚拟网络中的专用终结点访问 Azure 服务(例如 Azure 事件中心、Azure 存储和 Azure Cosmos DB)以及 Azure 托管的客户服务/合作伙伴服务。
专用终结点是一个网络接口,可以将你通过专用且安全的方式连接到 Azure 专用链接支持的服务。 专用终结点使用虚拟网络中的专用 IP 地址将服务有效地接入虚拟网络中。 发往服务的所有流量都通过专用终结点路由,因此不需要网关、NAT 设备、ExpressRoute 或 VPN 连接或公共 IP 地址。 虚拟网络与服务之间的流量将通过 Microsoft Azure 主干网络传输,因此不会在公共 Internet 上泄露。 可以连接到 Azure 资源的实例,从而获得最高级别的访问控制粒度。
有关详细信息,请参阅什么是 Azure 专用链接?
要点
- 基本层不支持此功能。
- 启用专用终结点可以防止其他 Azure 服务与事件中心交互。 被阻止的请求包括来自其他 Azure 服务、来自 Azure 门户、来自日志记录和指标服务等的请求。 例外情况是,可以允许从某些受信任的服务访问事件中心资源,即使启用了专用终结点也是如此。 有关受信任服务的列表,请参阅受信任服务。
- 为命名空间指定至少一个 IP 规则或虚拟网络规则,以便仅允许来自虚拟网络的指定 IP 地址或子网的流量。 如果没有 IP 和虚拟网络规则,则可以通过公共 Internet(使用访问密钥)访问命名空间。
使用 Azure 门户添加专用终结点
先决条件
若要将事件中心命名空间与 Azure 专用链接集成,需要以下实体或权限:
- 事件中心命名空间。
- 一个 Azure 虚拟网络。
- 虚拟网络中的子网。 可以使用默认子网。
- 对命名空间和虚拟网络拥有所有者或参与者权限。
专用终结点和虚拟网络必须位于同一区域。 使用门户选择专用终结点的区域时,它会自动筛选该区域中的虚拟网络。 命名空间可以位于不同的区域中。
专用终结点使用虚拟网络中的专用 IP 地址。
创建命名空间时配置专用访问
创建命名空间时,可以仅允许对该命名空间进行公共访问(从所有网络进行访问),也可以仅允许对命名空间进行专用访问(仅通过专用终结点进行访问)。
如果在命名空间创建向导的“网络”页上选择“专用访问”选项,则可以通过选择“+ 专用终结点”按钮在页面上添加专用终结点。 有关如何添加专用终结点的详细步骤,请参阅下一部分。
为现有命名空间配置专用访问
如果已有事件中心命名空间,可以执行以下步骤创建专用链接连接:
登录 Azure 门户。
在搜索栏中键入“事件中心”。
从列表中选择要将专用终结点添加到的命名空间。
在“网络”页上,对于“公用网络访问”,如果希望仅通过专用终结点访问命名空间,请选择“已禁用”。
如果要允许受信任的 Azure 服务绕过此防火墙,则对“允许受信任的 Azure 服务绕过此防火墙”选择“是”。
切换到“专用终结点连接”选项卡。
在页面顶部选择“+ 专用终结点”按钮。
在“基本信息”页上执行以下步骤:
选择要在其中创建专用终结点的 Azure 订阅。
选择专用终结点资源的资源组。
输入专用终结点的名称。
为网络接口输入一个名称。
专用终结点选择“区域”。 专用终结点必须与虚拟网络位于同一区域,但可以与你要连接的专用链接资源位于不同的区域。
选择页面底部的“下一步: 资源 ”。
在“资源”页上,查看设置,然后选择“下一步: 虚拟网络”。
在“虚拟网络”页上,选择要在其中部署专用终结点的虚拟网络中的子网。
- 选择一个虚拟网络。 下拉列表中仅列出了当前所选订阅和位置中的虚拟网络。
- 在所选的虚拟网络中选择一个“子网”。
- 请注意,“专用终结点的网络策略”已禁用。 如果要启用它,请选择“编辑”,更新设置,然后选择“保存”。
- 对于专用 IP 配置,默认情况下会选中“动态分配 IP 地址”选项。 如果要分配静态 IP 地址,请选择“静态分配 IP 地址”*。
- 对于应用程序安全组,选择现有应用程序安全组或创建一个与专用终结点相关联的安全组。
- 在“专用 DNS 集成”部分为此专用链接选择“资源组”。
在“标记”页上,创建要与专用终结点资源关联的任何标记(名称和值)。 然后选择页面底部的“查看 + 创建”按钮。
在“查看 + 创建”页上查看所有设置,然后选择“创建”以创建专用终结点 。
确认你创建的专用终结点连接已显示在终结点列表中。 刷新页面并切换到“专用终结点连接”选项卡。在此示例中,专用终结点会自动获得批准,因为你已连接到自己目录中的 Azure 资源,并且有足够的权限。
受信任的 Azure 服务
启用“允许受信任的 Azure 服务绕过此防火墙”设置时,将授权同一租户内的以下服务访问你的事件中心资源。
受信服务 | 支持的使用方案 |
---|---|
Azure 事件网格 | 允许 Azure 事件网格将事件发送到事件中心命名空间中的事件中心。 还需要执行以下步骤:
有关详细信息,请参阅使用托管标识进行事件传递 |
Azure 流分析 | 允许 Azure 流分析作业在事件中心命名空间中从(输入)读取数据或将数据写入(输出)事件中心。 重要说明:流分析作业应配置为使用托管标识来访问事件中心。 有关详细信息,请参阅使用托管标识通过 Azure 流分析作业访问事件中心(预览版)。 |
Azure IoT 中心 | 允许 IoT 中心将消息发送到事件中心命名空间中的事件中心。 还需要执行以下步骤:
|
Azure API 管理 | 使用 API 管理服务可将事件发送到你的事件中心命名空间中的事件中心。
|
Azure Monitor(诊断设置和操作组) | 允许 Azure Monitor 将诊断信息和警报通知发送到你的事件中心命名空间中的事件中心。 Azure Monitor 可以从事件中心读取数据,还可以将数据写入事件中心。 |
Azure Synapse | 允许 Azure Synapse 使用 Synapse 工作区托管标识连接到事件中心。 为事件中心命名空间上的标识添加 Azure 事件中心数据发送方、接收方或所有者角色。 |
Azure 数据资源管理器 | 允许 Azure 数据资源管理器使用群集的托管标识从事件中心接收事件。 需要执行以下步骤:
|
可在下面找到适用于 Azure 事件中心的其他受信任服务:
- Azure Arc
- Azure Kubernetes
- Azure 机器学习
- Azure Purview
若要允许受信任的服务访问你的命名空间,请切换到“网络”页面上的“公共访问”选项卡,然后针对“是否允许受信任的 Azure 服务跳过此防火墙?”选择“是”。
使用 PowerShell 添加专用终结点
以下示例演示如何使用 Azure PowerShell 创建专用终结点连接。 此过程不会为你创建专用群集。 请遵循此文中的步骤创建专用的事件中心群集。
$rgName = "<RESOURCE GROUP NAME>"
$vnetlocation = "<VIRTUAL NETWORK 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 an event hubs namespace in a dedicated cluster
$namespaceResource = New-AzResource -Location $namespaceLocation `
-ResourceName $namespaceName `
-ResourceGroupName $rgName `
-Sku @{name = "Standard"; capacity = 1} `
-Properties @{clusterArmId = "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.EventHub/clusters/<EVENT HUBS CLUSTER NAME>"} `
-ResourceType "Microsoft.EventHub/namespaces" -ApiVersion "2018-01-01-preview"
# create private endpoint connection
$privateEndpointConnection = New-AzPrivateLinkServiceConnection `
-Name $peConnectionName `
-PrivateLinkServiceId $namespaceResource.ResourceId `
-GroupId "namespace"
# get subnet object that you'll use later
$virtualNetwork = Get-AzVirtualNetwork -ResourceGroupName $rgName -Name $vnetName
$subnet = $virtualNetwork | Select -ExpandProperty subnets `
| Where-Object {$_.Name -eq $subnetName}
# create a private endpoint
$privateEndpoint = New-AzPrivateEndpoint -ResourceGroupName $rgName `
-Name $vnetName `
-Location $vnetlocation `
-Subnet $subnet `
-PrivateLinkServiceConnection $privateEndpointConnection
(Get-AzResource -ResourceId $namespaceResource.ResourceId -ExpandProperties).Properties
配置专用 DNS 区域
为事件中心域创建专用 DNS 区域,并创建虚拟网络的关联链接:
$zone = New-AzPrivateDnsZone -ResourceGroupName $rgName `
-Name "privatelink.servicebus.chinacloudapi.cn"
$link = New-AzPrivateDnsVirtualNetworkLink -ResourceGroupName $rgName `
-ZoneName "privatelink.servicebus.chinacloudapi.cn" `
-Name "mylink" `
-VirtualNetworkId $virtualNetwork.Id
$networkInterface = Get-AzResource -ResourceId $privateEndpoint.NetworkInterfaces[0].Id -ApiVersion "2019-04-01"
foreach ($ipconfig in $networkInterface.properties.ipConfigurations) {
foreach ($fqdn in $ipconfig.properties.privateLinkConnectionProperties.fqdns) {
Write-Host "$($ipconfig.properties.privateIPAddress) $($fqdn)"
$recordName = $fqdn.split('.',2)[0]
$dnsZone = $fqdn.split('.',2)[1]
New-AzPrivateDnsRecordSet -Name $recordName -RecordType A -ZoneName "privatelink.servicebus.chinacloudapi.cn" `
-ResourceGroupName $rgName -Ttl 600 `
-PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $ipconfig.properties.privateIPAddress)
}
}
使用 Azure 门户管理专用终结点
创建专用终结点时,必须批准连接。 如果要为其创建专用终结点的资源位于你的目录中,在拥有足够权限的前提下,你可以批准连接请求。 如果要连接到另一个目录中的 Azure 资源,必须等待该资源的所有者批准你的连接请求。
有四种预配状态:
服务操作 | 服务使用者专用终结点状态 | 说明 |
---|---|---|
无 | 挂起的 | 连接是手动创建的,正等待专用链接资源所有者批准。 |
审批 | 已批准 | 连接已自动或手动批准,随时可供使用。 |
拒绝 | 已拒绝 | 连接已被专用链接资源所有者拒绝。 |
删除 | 已断开连接 | 连接被专用链接资源所有者删除。 专用终结点已变为参考性终结点,应将其删除以清理资源。 |
批准、拒绝或删除专用终结点连接
- 登录到 Azure 门户。
- 在搜索栏中键入“事件中心”。
- 选择要管理的命名空间。
- 选择“网络”选项卡。
- 根据要执行的操作(批准、拒绝或移除),转到下面的相应部分。
批准专用终结点连接
如果有任何挂起的连接,则会列出预配状态为“挂起”的连接。
选择要批准的专用终结点
选择“批准”按钮。
在“批准连接”页上添加注释(可选),然后选择“是”。 如果选择“否”,则不会执行任何操作。
应会看到,列表中专用终结点连接的状态已更改为“已批准”。
拒绝专用终结点连接
如果存在任何要拒绝的专用终结点连接(不管是挂起的请求还是现有的连接),请选择该连接并选择“拒绝”按钮。
在“拒绝连接”页上输入注释(可选),然后选择“是”。 如果选择“否”,则不会执行任何操作。
应会看到,列表中专用终结点连接的状态已更改为“已拒绝”。
删除专用终结点连接
- 若要删除某个专用终结点连接,请在列表中选择它,然后在工具栏上选择“删除”。
- 在“删除连接”页上,选择“是”以确认删除该专用终结点。 如果选择“否”,则不会执行任何操作。
- 应会看到,状态已更改为“已断开连接”。 然后,该终结点就会从列表中消失。
验证专用链接连接是否有效
应验证专用终结点的虚拟网络中的资源是否可以通过专用 IP 地址连接到事件中心命名空间,以及它们是否具有正确的专用 DNS 区域集成。
首先,遵循在 Azure 门户中创建 Windows 虚拟机中的步骤创建一个虚拟机。
在“网络”选项卡中:
- 指定虚拟网络和子网 。 必须选择已将专用终结点部署到的虚拟网络。
- 指定一个公共 IP 资源。
- 对于“NIC 网络安全组”,请选择“无” 。
- 对于“负载均衡”,请选择“否”。
连接到 VM,打开命令行并运行以下命令:
nslookup <event-hubs-namespace-name>.servicebus.chinacloudapi.cn
应会看到如下所示的结果。
Non-authoritative answer:
Name: <event-hubs-namespace-name>.privatelink.servicebus.chinacloudapi.cn
Address: 10.0.0.4 (private IP address associated with the private endpoint)
Aliases: <event-hubs-namespace-name>.servicebus.chinacloudapi.cn
限制和设计注意事项
- 有关定价信息,请参阅 Azure 专用链接定价。
- 此功能可在所有 Azure 公共区域中使用。
- 每个事件中心命名空间的最大专用终结点数目:120。
- 流量在应用程序层被阻止,而不是在 TCP 层被阻止。 因此,即使公共访问已禁用,也会看到针对公共终结点的 TCP 连接或
nslookup
操作成功。
有关详细信息,请参阅 Azure 专用链接服务:限制
相关内容
- 详细了解 Azure 专用链接
- 详细了解 Azure 事件中心