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

Azure 事件中心为基于云的解决方案提供安全且可缩放的消息传送平台。 通过将事件中心与 Azure 虚拟网络服务终结点集成,可以通过隔离消息传送服务与公共 Internet 访问来增强安全性。 本指南介绍如何配置虚拟网络规则、启用工作负载之间的专用通信,以及如何为事件中心命名空间实施高级安全方案。 无论使用的是 Azure 门户、资源管理器模板、CLI 还是 PowerShell,本文都提供了分步说明,可帮助你安全地将事件中心绑定到虚拟网络。

概述

事件中心与 虚拟网络服务终结点 的集成可实现从绑定到虚拟网络的工作负荷(例如虚拟机)对消息传送功能的安全访问,并在两端保护网络流量路径。

配置为绑定到至少一个虚拟网络子网服务终结点后,相应的事件中心命名空间仅接受来自虚拟网络中授权子网的流量。 从虚拟网络的角度来看,将事件中心命名空间绑定到服务终结点会创建从虚拟网络子网到消息传送服务的隔离网络隧道。

结果是绑定到子网的工作负荷与相应事件中心命名空间之间的专用和隔离关系,即使消息服务终结点的可观察网络地址位于公共 IP 范围内。 这种行为有个例外。 默认情况下,启用服务终结点会 denyall 激活与虚拟网络关联的 IP 防火墙 中的规则。 可以在 IP 防火墙中添加特定的 IP 地址,以启用对事件中心公共终结点的访问。

要点

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

虚拟网络集成启用的高级安全方案

需要严格隔离安全性的解决方案,以及虚拟网络子网在隔离服务之间提供分段时,仍需要驻留在这些隔离舱中的服务之间的通信路径。

隔离舱之间的任何即时 IP 路由(包括通过 TCP/IP 承载 HTTPS 的)都存在利用网络层漏洞的风险。 消息传递服务提供完全隔离的通信路径,其中消息在各方之间转换时会以平均方式写入磁盘。 绑定到同一事件中心实例的两个不同的虚拟网络中的工作负荷可以通过消息高效可靠地通信,同时保留相应的网络隔离边界完整性。

此行为意味着安全敏感的云解决方案可以访问 Azure 的可靠、可缩放的异步消息传送功能。 消息传输在安全解决方案组件之间创建通信路径,这些组件本质上比对点通信模式更安全,包括HTTPS和其他TLS保护的协议。

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

虚拟网络规则 是防火墙安全功能,用于控制 Azure 事件中心命名空间是否接受来自特定虚拟网络子网的连接。

将事件中心命名空间绑定到虚拟网络涉及两个步骤:

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

虚拟网络规则是事件中心命名空间与虚拟网络子网的关联。 虽然存在规则,但绑定到子网的所有工作负荷都有权访问事件中心命名空间。 事件中心不建立出站连接,不需要访问,并且启用此规则时不会授予对子网的访问权限。

使用 Azure 门户

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

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

创建命名空间后,可以通过使用网络服务终结点指定 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 事件网格将事件发送到事件中心命名空间中的事件中心。 还需要执行以下步骤:
  • 为主题或域启用系统分配的标识
  • 将标识添加到事件中心命名空间上的 Azure 事件中心数据发送者角色
  • 然后,将事件中心用作终结点的事件订阅配置为使用系统分配的标识。

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

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

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

Azure IoT 中心 允许 IoT 中心将消息发送到事件中心命名空间中的事件中心。 还需要执行以下步骤:
  • 为 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

使用 Resource Manager 模板

此示例资源管理器模板将虚拟网络规则添加到现有事件中心命名空间。 它为网络规则指定虚拟网络中子网的 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使用添加、列出、更新和删除命令来管理服务总线命名空间的虚拟网络规则。

使用 Azure PowerShell

使用以下 Azure PowerShell 命令为服务总线命名空间添加、列出、更新和删除网络规则。

默认操作和公用网络访问

REST API

该属性的defaultAction默认值适用于 API 版本 Deny 但是,除非设置了 IP 筛选器或虚拟网络规则,否则不会强制实施拒绝规则。 即,如果没有任何 IP 筛选器或虚拟网络规则,系统会将该属性值视为 Allow

从 API 版本 2021-06-01-preview 开始,属性的 defaultAction 默认值是 Allow 准确反映服务端强制。 如果将默认操作设置为 Deny,则系统会强制执行 IP 筛选器和虚拟网络规则。 如果将默认操作设置为 Allow,则系统不会强制执行 IP 筛选器和虚拟网络规则。 关闭这些规则并重新打开后,服务会记住这些规则。

2021-06-01-preview 及之后的 API 版本还引入了一个名为 的新属性。 如果将其设置为 Disabled,则操作仅限于专用链接。 如果将其设置为 Enabled,则可通过公共 Internet 执行操作。

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

注释

以上设置都不会绕过通过 SAS 或 Microsoft Entra 身份验证对声明进行的验证。 身份验证检查始终在服务验证由 defaultActionpublicNetworkAccessprivateEndpointConnections 设置配置的网络检查后运行。

Azure 门户

Azure 门户始终使用最新的 API 版本来获取和设置属性。 如果你之前已使用 2021-01-01-preview 及更早版本配置了命名空间,已将 defaultAction 设置为 Deny,并且指定了零个 IP 筛选器和虚拟网络规则,则门户之前应已在命名空间的“网络”页上勾选“所选网络”。 现在,Azure 门户将检查“所有网络”选项。

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

后续步骤

详细了解虚拟网络:

使用这些资源加深对事件中心的理解和实施安全网络。