允许从特定虚拟网络访问 Azure 事件中心命名空间

将事件中心与 Azure 虚拟网络服务终结点集成,以限制从特定虚拟网络子网访问事件中心命名空间。 本文介绍虚拟网络集成的工作原理,并提供配置它的分步说明。

概述

通过使用 虚拟网络服务终结点,在虚拟网络(例如虚拟机)中运行的工作负荷可以安全地访问事件中心命名空间。 网络流量路径在两端都受到保护。

使用至少一个虚拟网络服务终结点配置事件中心命名空间时,该命名空间仅接受来自授权子网的流量。 从虚拟网络的角度来看,服务终结点创建从子网到事件中心命名空间的隔离网络隧道。

即使事件中心服务终结点使用公共 IP 地址,此配置在子网中的工作负荷与事件中心命名空间之间建立专用和隔离的连接。

要点

  • 基本层不支持此功能。
  • 为事件中心命名空间启用虚拟网络时,默认情况下会阻止传入请求,除非它们源自允许的虚拟网络运行的服务。 阻止的请求包括来自其他 Azure 服务、Azure 门户、日志记录和指标服务等的请求。 例外情况是,即使启用了虚拟网络,也可以允许从某些 受信任的服务 访问事件中心资源。 有关受信任服务的列表,请参阅受信任服务。
  • 为命名空间指定至少一个 IP 规则或虚拟网络规则,以便仅允许来自虚拟网络的指定 IP 地址或子网的流量。 如果未指定任何 IP 和虚拟网络规则,则可通过公共 Internet 访问命名空间(使用访问密钥)。

通过虚拟网络集成实现的高级安全场景

虚拟网络集成支持需要严格安全隔离的方案,同时仍允许隔离服务之间的通信。

网络隔离舱之间的直接 IP 路由(即使是通过 TCP/IP 使用 HTTPS 的隔离舱)都容易受到网络层攻击。 事件中心通过充当中介提供更安全的替代方法。 连接到同一事件中心实例的单独虚拟网络中的工作负荷可以在保持网络隔离的同时可靠地交换消息。

此方法使安全敏感解决方案可以访问 Azure 的可缩放消息传送功能,同时创建比直接对等连接更安全的通信路径。

将事件中心绑定到虚拟网络

虚拟网络规则 控制事件中心命名空间是否接受来自特定虚拟网络子网的连接。

将事件中心命名空间绑定到虚拟网络:

  1. 在虚拟网络子网上创建 服务终结点 ,并为 Microsoft.EventHub 启用该服务终结点。 有关详细信息,请参阅虚拟网络服务终结点。
  2. 添加 虚拟网络规则 ,将事件中心命名空间绑定到服务终结点。

虚拟网络规则在事件中心命名空间与虚拟网络子网之间创建关联。 子网中的所有工作负荷都可以在规则存在时访问事件中心命名空间。

注释

事件中心不与子网建立出向连接。 该规则仅向事件中心授予从子网的入站访问权限。

使用 Azure 门户

创建命名空间时,可以选择:

  • 公共访问:允许从所有网络进行访问。
  • 专用访问:仅限制对专用终结点的访问。

创建命名空间后,可以通过使用网络服务终结点指定 IP 地址或虚拟网络来进一步优化访问。

创建命名空间时配置公共访问

若要启用公共访问,请在命名空间创建向导的“网络”页上选择“公共访问”。

显示“创建命名空间”向导的“网络”页的屏幕截图,其中选择了“公共访问”选项。

创建命名空间后,在“事件中心命名空间”页的左侧菜单中选择“网络”。

默认情况下,为所有网络的命名空间启用公共网络访问。

创建命名空间后,从“服务总线命名空间”页的左侧菜单中选择“网络”。 默认情况下,“ 所有网络 ”选项处于选中状态。 可以选择 “所选网络 ”,以允许从特定 IP 地址或虚拟网络进行访问。 下一部分详细说明了如何指定允许从其进行访问的网络。

此选项允许使用 访问密钥从所有网络进行公共访问。 命名空间接受来自任何 IP 地址的连接(使用访问密钥)。

下一部分详细介绍了如何配置虚拟网络服务终结点,以指定允许访问的虚拟网络。

为现有命名空间配置所选网络

本部分演示如何使用 Azure 门户添加虚拟网络服务终结点。 若要限制访问,需要集成此事件中心命名空间的虚拟网络服务终结点。

  1. 在 Azure 门户中导航到事件中心命名空间。

  2. 在左侧菜单中的“设置”下选择“网络”。

  3. 在“网络”页上,对于“公共网络访问”,可以设置以下三个选项之一。 选择 “所选网络 ”选项以仅允许从特定虚拟网络进行访问。

    下面是有关 公共网络访问 页中可用选项的更多详细信息:

    • Disabled. 此选项禁用对命名空间的任何公共访问。 只能通过专用终结点访问命名空间。

    • 所选网络。 此选项允许使用选定网络的访问密钥对命名空间进行公共访问。

      重要

      如果选择 “所选网络”,请添加至少一个 IP 防火墙规则或可访问命名空间的虚拟网络。 如果希望仅通过专用终结点限制流向此命名空间的所有流量,请选择“禁用”。

    • 所有网络(默认)。 此选项允许使用访问密钥从所有网络进行公共访问。 如果选择“ 所有网络 ”选项,事件中心将接受来自任何 IP 地址的连接(使用访问密钥)。 此设置等效于一个接受 0.0.0.0/0 IP 地址范围的规则。

  4. 若要限制对特定网络的访问,请选择页面顶部的 “所选网络 ”选项(如果尚未选择)。

  5. 在页面的 “虚拟网络 ”部分中,选择“ +添加现有虚拟网络*”。 如果要创建新的虚拟网络,请选择“+ 创建新虚拟网络”。

    选择“添加现有虚拟网络”菜单项。

    重要

    如果选择 “所选网络”,请添加至少一个 IP 防火墙规则或可访问命名空间的虚拟网络。 如果希望仅通过专用终结点限制流向此命名空间的所有流量,请选择“禁用”。

  6. 从虚拟网络列表中选择虚拟网络,然后选择“子网”。 将虚拟网络添加到列表之前,必须启用服务终结点。 如果未启用服务终结点,门户将提示你启用它。

    显示所选子网的图像。

  7. 为 Microsoft.EventHub 启用子网的服务终结点后,会看到一条成功消息。 选择页面底部的“添加”,添加网络。

    显示选择子网并启用终结点的图像。

    注释

    如果无法启用服务终结点,则可以使用资源管理器模板忽略缺少的虚拟网络服务终结点。 此功能在门户中不可用。

  8. 指定是否允许 受信任的 Azure 服务绕过此防火墙。 有关详细信息,请参阅 受信任的 Azure 服务 。

  9. 选择工具栏上的“保存”以保存设置。 等待几分钟,确认才会显示在门户通知中。

    显示虚拟网络保存的图像。

    注释

    若要限制对特定 IP 地址或范围的访问,请参阅 “允许从特定 IP 地址或范围进行访问”。

    注释

    若要删除虚拟网络规则,请先删除虚拟网络上的任何 Azure 资源管理器删除锁。

受信任的 Azure 服务

启用 “允许受信任的 Azure 服务绕过此防火墙 ”设置时,将向同一租户中的以下服务授予对事件中心资源的访问权限。

受信任的服务 支持的使用方案
Azure 事件网格 允许 Azure 事件网格 将事件发送到你的 Event Hubs 命名空间中的事件中心。 还需要执行以下步骤:
  • 为主题或域启用系统分配的标识
  • 将标识添加到事件中心命名空间上的 Azure 事件中心数据发送者角色
  • 然后,将使用事件中心作为终结点的事件订阅配置为使用系统分配标识。

有关详细信息,请参阅使用托管标识进行事件传递

Azure 流分析 允许 Azure 流分析作业从事件中心命名空间中的(输入)读取数据或将数据写入(输出)事件中心。

重要说明:流分析作业应配置为使用 托管标识 访问事件中心。 有关详细信息,请参阅使用托管标识从 Azure 流分析作业访问事件中心(预览版)。

Azure IoT 中心 允许 IoT 中心 向你的 Event Hubs 命名空间中的事件中心发送消息。 还需要执行以下步骤:
  • 为 IoT 中心启用系统分配的标识
  • 将该标识分配给事件中心命名空间上的 Azure 事件中心数据发送者角色。
  • 然后,将使用事件中心作为自定义终结点的 IoT 中心配置为使用基于标识的身份验证。
Azure API 管理

API 管理服务允许将事件发送到事件中心命名空间中的事件中心。

Azure Monitor(诊断设置和操作组) 允许 Azure Monitor 将诊断信息和警报通知发送到事件中心命名空间中的事件中心。 Azure Monitor 可以从事件中心读取数据,还可以将数据写入事件中心。
Azure Synapse 允许 Azure Synapse 使用 Synapse 工作区托管标识连接到事件中心。 将 Azure 事件中心数据发送方、接收方或所有者角色添加到事件中心命名空间上的标识。
Azure 数据资源管理器 允许 Azure 数据资源管理器使用群集的托管标识从事件中心接收事件。 需要执行以下步骤:
  • 在 Azure 数据资源管理器上配置托管标识
  • 向该事件中心上的标识授予 Azure 事件中心数据接收器 角色。
 

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

  • Azure Arc
  • Azure Kubernetes
  • Azure 机器学习
  • Azure Purview

使用 资源管理器 模板

此示例资源管理器模板将虚拟网络规则添加到现有事件中心命名空间。 它为网络规则指定虚拟网络中子网的 ID。

ID 是虚拟网络子网的完全限定资源管理器路径。 例如: /subscriptions/{id}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{vnet}/subnets/default。

添加虚拟网络或防火墙规则时,将值 defaultAction 设置为 Deny。

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "eventhubNamespaceName": {
        "type": "string",
        "metadata": {
          "description": "Name of the Event Hubs namespace"
        }
      },
      "virtualNetworkName": {
        "type": "string",
        "metadata": {
          "description": "Name of the Virtual Network Rule"
        }
      },
      "subnetName": {
        "type": "string",
        "metadata": {
          "description": "Name of the Virtual Network Sub Net"
        }
      },
      "location": {
        "type": "string",
        "metadata": {
          "description": "Location for Namespace"
        }
      }
    },
    "variables": {
      "namespaceNetworkRuleSetName": "[concat(parameters('eventhubNamespaceName'), concat('/', 'default'))]",
      "subNetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets/', parameters('virtualNetworkName'), parameters('subnetName'))]"
    },
    "resources": [
      {
        "apiVersion": "2018-01-01-preview",
        "name": "[parameters('eventhubNamespaceName')]",
        "type": "Microsoft.EventHub/namespaces",
        "location": "[parameters('location')]",
        "sku": {
          "name": "Standard",
          "tier": "Standard"
        },
        "properties": { }
      },
      {
        "apiVersion": "2017-09-01",
        "name": "[parameters('virtualNetworkName')]",
        "location": "[parameters('location')]",
        "type": "Microsoft.Network/virtualNetworks",
        "properties": {
          "addressSpace": {
            "addressPrefixes": [
              "10.0.0.0/23"
            ]
          },
          "subnets": [
            {
              "name": "[parameters('subnetName')]",
              "properties": {
                "addressPrefix": "10.0.0.0/23",
                "serviceEndpoints": [
                  {
                    "service": "Microsoft.EventHub"
                  }
                ]
              }
            }
          ]
        }
      },
      {
        "apiVersion": "2018-01-01-preview",
        "name": "[variables('namespaceNetworkRuleSetName')]",
        "type": "Microsoft.EventHub/namespaces/networkruleset",
        "dependsOn": [
          "[concat('Microsoft.EventHub/namespaces/', parameters('eventhubNamespaceName'))]"
        ],
        "properties": {
          "publicNetworkAccess": "Enabled",
          "defaultAction": "Deny",
          "virtualNetworkRules": 
          [
            {
              "subnet": {
                "id": "[variables('subNetId')]"
              },
              "ignoreMissingVnetServiceEndpoint": false
            }
          ],
          "ipRules":[],
          "trustedServiceAccessEnabled": false
        }
      }
    ],
    "outputs": { }
  }

若要部署模板,请按照 Azure 资源管理器的说明进行操作。

重要

如果未指定任何 IP 或虚拟网络规则,即使已设置为defaultActionDeny命名空间,所有流量也会流入命名空间。 命名空间可通过公共 Internet 访问(使用访问密钥)。 若要仅允许来自虚拟网络的指定 IP 地址或子网的流量,请为命名空间指定至少一个 IP 规则或虚拟网络规则。

使用 Azure CLI

使用 az eventhubs namespace network-rule-set 命令管理事件中心命名空间的虚拟网络规则:

  • add - 添加虚拟网络规则
  • list - 列出所有网络规则
  • update - 更新网络规则
  • remove - 删除虚拟网络规则

使用 Azure PowerShell

使用以下 Azure PowerShell 命令管理事件中心命名空间的虚拟网络规则:

Command Description
Add-AzEventHubVirtualNetworkRule 添加虚拟网络规则
New-AzEventHubVirtualNetworkRuleConfig 创建虚拟网络规则配置(用于 Set-AzEventHubNetworkRuleSet)
Set-AzEventHubNetworkRuleSet 将网络规则配置应用于命名空间
Remove-AzEventHubVirtualNetworkRule 删除虚拟网络规则

默认操作和公用网络访问

REST API

API 版本不同,defaultAction 属性的行为也不同。

API 版本 默认值 Behavior
2021-01-01-preview 及更早版本 Deny 除非配置 IP 筛选器或虚拟网络规则,否则不会强制实施拒绝规则。 如果没有规则,则允许流量。
2021-06-01-preview 及更高版本 Allow 该服务强制执行配置的动作。 设置为 Deny 阻止不符合规则的流量。

API 版本 2021-06-01-preview 还引入了 publicNetworkAccess 属性:

  • Enabled - 允许通过公共互联网执行操作
  • Disabled - 仅限制操作到私有链接

当您禁用并重新启用规则时,服务会记住这些规则。

有关详细信息,请参阅 “创建或更新网络规则集 ”和 “创建或更新专用终结点连接”。

注释

网络设置不会绕过身份验证。 服务在检查配置的网络规则defaultActionpublicNetworkAccessprivateEndpointConnections后,始终验证 SAS 或 Microsoft Entra 身份验证声明。

Azure 门户

Azure 门户始终使用最新的 API 版本来获取和设置属性。 如果您以前使用2021-01-01-preview 及早期版本配置命名空间,并且没有指定任何 IP 筛选器和虚拟网络规则,那么门户会在命名空间的网络”页上检查“所选网络”。 现在,勾选所有网络选项。

“公共访问”页的屏幕截图,其中选择了“所有网络”选项。