允许从特定 IP 地址或范围访问 Azure 事件中心命名空间

默认情况下,只要请求附带有效的身份验证和授权,事件中心命名空间即可从 Internet 访问。 使用 IP 防火墙,可以进一步将其限制为 CIDR 中的一组 IPv4 和 IPv6 地址或地址范围(无分类 Inter-Domain 路由)

此功能适用于仅可从某些已知站点访问 Azure 事件中心的情况。 防火墙规则允许你配置规则以接受源自特定 IPv4 和 IPv6 地址的流量。 例如,如果将事件中心与 Azure Express Route 配合使用,则可以创建 防火墙规则 以仅允许来自本地基础结构 IP 地址的流量。

IP 防火墙规则

在事件中心命名空间级别指定 IP 防火墙规则。 因此,规则适用于使用任何受支持的协议的客户端的所有连接。 来自与事件中心命名空间上允许的 IP 规则不匹配的 IP 地址的任何连接尝试都会被拒绝为未授权。 响应未提及 IP 规则。 IP 筛选器规则按顺序应用,与 IP 地址匹配的第一条规则决定了接受或拒绝作。

要点

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

使用 Azure 门户配置防火墙规则

创建命名空间时,可以仅允许对该命名空间进行公共访问(从所有网络进行访问),也可以仅允许对命名空间进行专用访问(仅通过专用终结点进行访问)。 创建命名空间后,可以允许从特定 IP 地址或特定虚拟网络进行的访问(使用网络服务终结点)。

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

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

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

创建命名空间后,在“事件中心命名空间”页的左侧菜单中选择“网络”。 你会看到“所有网络”选项处于选中状态。 可以选择“所选网络”选项,允许来自特定 IP 地址或特定虚拟网络的访问。 下一部分提供有关配置 IP 防火墙以指定允许访问的 IP 地址的详细信息。

为现有命名空间配置 IP 防火墙

本部分介绍如何使用 Azure 门户为事件中心命名空间创建 IP 防火墙规则。

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

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

  3. “网络 ”页上,对于 公用网络访问,请选择 “所选网络 ”选项,以仅允许从指定的 IP 地址进行访问。

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

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

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

      重要

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

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

  4. 若要限制对 特定 IP 地址的访问,请选择 “所选网络 ”选项,然后执行以下步骤:

    1. “防火墙 ”部分中,选择 “添加客户端 IP 地址 ”选项,为当前客户端 IP 提供对命名空间的访问权限。

    2. 对于 地址范围,请输入 CIDR 表示法中的特定 IPv4 或 IPv6 地址或地址范围。

      重要

      当服务将来开始支持 IPv6 连接并且客户端会自动切换到使用 IPv6 时,如果只有 IPv4 地址而不是 IPv6 地址,则客户端会中断。 因此,建议现在将 IPv6 地址添加到允许的 IP 地址列表中,这样当服务最终切换到支持 IPv6 时,客户端不会中断。

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

      “网络”页的“公共访问”选项卡中突出显示的“防火墙”部分。

  5. 在工具栏上选择“保存”,保存这些设置。 等待几分钟,确认会显示在门户通知上。

    注释

    若要限制对特定虚拟网络的访问,请参阅 “允许从特定网络进行访问”。

受信任的 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

使用资源管理器模板配置防火墙规则

重要

基本层不支持防火墙功能。

以下资源管理器模板允许将 IP 筛选器规则添加到现有事件中心命名空间。

模板中的 ipMask 是单个 IPv4 地址或 CIDR 表示法中的 IP 地址块。 例如,在 CIDR 表示法 70.37.104.0/24 中,表示从 70.37.104.0 到 70.37.104.255 的 256 个 IPv4 地址,其中 24 个表示范围的重要前缀位数。

注释

defaultAction 的默认值为 Allow。 添加虚拟网络或防火墙规则时,请确保将 defaultAction 的值设置为 Deny

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "namespace_name": {
            "defaultValue": "contosoehub1333",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.EventHub/namespaces",
            "apiVersion": "2022-01-01-preview",
            "name": "[parameters('namespace_name')]",
            "location": "China East",
            "sku": {
                "name": "Standard",
                "tier": "Standard",
                "capacity": 1
            },
            "properties": {
                "minimumTlsVersion": "1.2",
                "publicNetworkAccess": "Enabled",
                "disableLocalAuth": false,
                "zoneRedundant": true,
                "isAutoInflateEnabled": false,
                "maximumThroughputUnits": 0,
                "kafkaEnabled": true
            }
        },
        {
            "type": "Microsoft.EventHub/namespaces/authorizationrules",
            "apiVersion": "2022-01-01-preview",
            "name": "[concat(parameters('namespace_name'), '/RootManageSharedAccessKey')]",
            "location": "chinaeast",
            "dependsOn": [
                "[resourceId('Microsoft.EventHub/namespaces', parameters('namespace_name'))]"
            ],
            "properties": {
                "rights": [
                    "Listen",
                    "Manage",
                    "Send"
                ]
            }
        },
        {
            "type": "Microsoft.EventHub/namespaces/networkRuleSets",
            "apiVersion": "2022-01-01-preview",
            "name": "[concat(parameters('namespace_name'), '/default')]",
            "location": "China East",
            "dependsOn": [
                "[resourceId('Microsoft.EventHub/namespaces', parameters('namespace_name'))]"
            ],
            "properties": {
                "publicNetworkAccess": "Enabled",
                "defaultAction": "Deny",
                "virtualNetworkRules": [],
                "ipRules": [
                    {
                        "ipMask": "10.1.1.1",
                        "action": "Allow"
                    },
                    {
                        "ipMask": "11.0.0.0/24",
                        "action": "Allow"
                    },
                    {
                        "ipMask": "172.72.157.204",
                        "action": "Allow"
                    }
                ]
            }
        }
    ]
}

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

重要

如果没有 IP 和虚拟网络规则,则所有流量都将流向命名空间,即使你将 defaultAction 设置为 deny。 可以通过公共 Internet(使用访问密钥)访问命名空间。 为命名空间指定至少一个 IP 规则或虚拟网络规则,以便仅允许来自虚拟网络的指定 IP 地址或子网的流量。

使用 Azure CLI 配置防火墙规则

使用 az eventhubs namespace network-rule-set 添加、列出、更新和删除命令来管理事件中心命名空间的 IP 防火墙规则。

使用 Azure PowerShell 配置防火墙规则

使用 Set-AzEventHubNetworkRuleSet cmdlet 添加一个或多个 IP 防火墙规则。 文章中的一个示例:

$ipRule1 = New-AzEventHubIPRuleConfig -IPMask 2.2.2.2 -Action Allow
$ipRule2 = New-AzEventHubIPRuleConfig -IPMask 3.3.3.3 -Action Allow
$virtualNetworkRule1 = New-AzEventHubVirtualNetworkRuleConfig -SubnetId '/subscriptions/subscriptionId/resourcegroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVirtualNetwork/subnets/default'
$networkRuleSet = Get-AzEventHubNetworkRuleSet -ResourceGroupName myResourceGroup -NamespaceName myNamespace
$networkRuleSet.IPRule += $ipRule1
$networkRuleSet.IPRule += $ipRule2
$networkRuleSet.VirtualNetworkRule += $virtualNetworkRule1
Set-AzEventHubNetworkRuleSet -ResourceGroupName myResourceGroup -NamespaceName myNamespace -IPRule $ipRule1,$ipRule2 -VirtualNetworkRule $virtualNetworkRule1,$virtualNetworkRule2,$virtualNetworkRule3

默认操作和公用网络访问

REST API

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

从 2021-06-01-preview 及之后的 API 版本开始, 属性的默认值为 defaultAction,以准确反映服务端强制要求。 如果将默认操作设置为 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 门户将检查“所有网络”选项。

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

后续步骤

若要限制对事件中心对 Azure 虚拟网络的访问,请参阅以下链接: