Compartilhar via

允许从特定 IP 地址或范围访问Azure Service Bus命名空间

默认情况下,只要请求包含有效的身份验证和授权,Internet 就可以访问Service Bus命名空间。 通过使用 IP 防火墙,可以将入站流量限制为一组 IPv4 地址或 IPv4 地址范围(CIDR(无分类 Inter-Domain 路由)表示法)。

此功能适用于仅应从某些已知站点访问Azure Service Bus的情况。 可以通过防火墙规则来配置规则,以便接受来自特定 IPv4 地址的流量。 例如,如果将 Service Bus 用于 Azure Express Route,则可以创建 防火墙规则,以仅允许来自本地基础结构 IP 地址或公司 NAT 网关地址的流量。

IP 防火墙规则

在Service Bus命名空间级别应用 IP 防火墙规则。 因此,这些规则适用于通过任何受支持协议(AMQP (5671) 和 HTTPS (443))从客户端发出的所有连接。 Service Bus将任何来自与Service Bus命名空间中允许的IP规则不匹配的IP地址的连接尝试视为未授权并拒绝。 响应不会提及 IP 规则。 IP 筛选器规则将按顺序应用,与 IP 地址匹配的第一个规则决定了将执行接受操作还是执行拒绝操作。

Note

Service Bus SKU 之间的网络选项不同。 标准 SKU 支持 IP 筛选,但不包括“受信任的服务”选项。 有关高级 SKU 网络功能,请参阅专用高级 SKU 网络文档。

要点

  • 专用终结点和服务终结点仅在 Service Bus premium 层中受支持。 如果无法升级到 premium 层,则可以使用 Azure 门户 Azure Resource Manager templatesAzure CLIPowerShellREST API

  • 为命名空间指定至少一个 IP 防火墙规则或虚拟网络规则,以便仅允许来自虚拟网络的指定 IP 地址或子网的流量。 如果没有 IP 和虚拟网络规则,可通过公共 Internet 访问命名空间(使用访问密钥)。

  • 实施防火墙规则可以防止其他Azure服务与Service Bus交互。 例外情况是,即使启用了 IP 筛选,您仍可以允许某些受信任的服务访问 Service Bus 资源。 有关受信任服务的列表,请参阅受信任服务

    以下服务不支持受信任的服务,而是利用名为 VNet 集成的功能通过 VNet 进行出站调用:

    • Azure App Service
    • Azure Functions

    有关详细信息,请参阅 将应用程序集成到 Azure 虚拟网络中

使用 Azure 门户

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

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

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

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

创建命名空间后,在Service Bus命名空间页左侧菜单中选择Networking。 你会看到“所有网络”选项处于选中状态。 可以选择“所选网络”选项,允许来自特定 IP 地址或特定虚拟网络的访问。 下一部分详细介绍如何配置 IP 防火墙,以指定允许从其进行访问的 IP 地址。

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

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

  1. Azure 门户 中转到 Service Bus 命名空间

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

    Note

    只有在“高级”命名空间中才会显示“网络”选项卡。

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

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

      显示已禁用公共访问的命名空间的“网络”页面的屏幕截图。

      选择是否允许受信任的Azure服务绕过防火墙。 有关用于Azure Service Bus的受信任Azure服务列表,请参阅 Trusted Azure services 部分。

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

      Important

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

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

  4. 若要仅允许从指定的 IP 地址进行访问,请选择“选定网络”选项(如果尚未选择)。 在“防火墙”部分中执行以下步骤:

    1. 选择“添加客户端 IP 地址”选项,使当前客户端 IP 可以访问命名空间。

    2. 对于“地址范围”,请输入某个特定的 IPv4 地址或以 CIDR 表示法表示的 IPv4 地址范围。

    3. 指定是否要“允许受信任的 Microsoft 服务绕过此防火墙”。 有关用于Azure Service Bus的受信任Azure服务列表,请参阅 Trusted Azure services 部分。

      Warning

      如果选择“ 所选网络 ”选项,并且不会在此页上添加至少一个 IP 防火墙规则或虚拟网络,则无法通过公共 Internet 访问命名空间(使用访问密钥)。

       Azure 门户网络页面的Screenshot。选中了允许从所选网络访问的选项,并突出显示了“防火墙”部分。

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

    Note

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

受信任的 Microsoft 服务

启用 允许受信任的 Microsoft 服务绕过此防火墙 设置时,将授予以下服务访问你的 Service Bus 资源的权限。

Important

启用受信任的 Microsoft 服务时,请始终分配托管标识。 此标识有助于Service Bus命名空间与受信任的Azure服务之间的安全通信。

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

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

Azure Stream Analytics 允许 Azure Stream Analytics 作业将数据输出到 Service Bus 的 队列主题

重要提示:流分析作业应配置为使用托管身份来访问 Service Bus 命名空间。 将身份添加到服务总线命名空间中的 Azure Service Bus 数据发送者角色。

Azure IoT Hub 允许物联网中心将消息发送到 Service Bus 命名空间中的队列或主题。 还需要执行以下步骤:
Azure API Management

API 管理服务允许您将消息发送到您的 Service Bus 命名空间中的 Service Bus 队列/主题。

  • 使用 send-request 策略调用 API 时,可以通过将消息发送到Service Bus队列/主题来触发自定义工作流。
  • 还可以将Service Bus队列/主题视为 API 中的后端。 有关示例策略,请参阅使用托管身份验证访问服务总线队列或主题。 还需要执行以下步骤:
    1. 在 API 管理实例上启用系统分配的标识。 有关说明,请参阅 在 Azure API Management 中使用托管标识。
    2. 将该标识添加到服务总线命名空间中的 Azure Service Bus 数据发送者 角色
Azure Monitor(诊断设置和操作组) 允许 Azure Monitor 将诊断信息和警报通知发送到您 Service Bus 命名空间中的 Service Bus。 Azure Monitor可以读取数据并将其写入Service Bus命名空间。
Azure Synapse 允许Azure Synapse使用 Synapse 工作区托管标识连接到服务总线。 将 Azure Service Bus 的数据发送者、接收者或拥有者角色添加到 Service Bus 命名空间的标识中。

可以在下面找到Azure Service Bus的其他受信任服务:

  • Azure Data Explorer
  • Azure Health Data Services
  • Azure Arc
  • Azure Kubernetes
  • Azure Machine Learning
  • Microsoft Purview
  • Microsoft Defender for Cloud
  • Azure供应商中心

使用模板

本部分显示了向现有Service Bus命名空间添加虚拟网络和防火墙规则的示例模板。

ipMask 是单个 IPv4 地址或者是以 CIDR 表示法表示的一个 IP 地址块。 例如,在 CIDR 表示法中,70.37.104.0/24 表示从 70.37.104.0 到 70.37.104.255 的 256 个 IPv4 地址,其中 24 表示范围的有效前缀位数。

Note

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

@description('Name of the Service Bus namespace')
param namespaceName string

@description('Location for all resources.')
param location string = resourceGroup().location

resource serviceBusNamespace 'Microsoft.ServiceBus/namespaces@2024-01-01' = {
  name: namespaceName
  location: location
  sku: {
    name: 'Premium'
    tier: 'Premium'
    capacity: 1
  }
  properties: {
    premiumMessagingPartitions: 1
    minimumTlsVersion: '1.2'
    publicNetworkAccess: 'Enabled'
    disableLocalAuth: false
    zoneRedundant: true
  }

  resource networkRuleSet 'networkRuleSets' = {
    name: 'default'
    properties: {
      publicNetworkAccess: 'Enabled'
      defaultAction: 'Deny'
      virtualNetworkRules: []
      ipRules: [
        {
          ipMask: '10.1.1.1'
          action: 'Allow'
        }
        {
          ipMask: '11.0.0.0/24'
          action: 'Allow'
        }
      ]
    }
  }
}

若要部署模板,请按照 Azure Resource Manager 的说明进行作。

Important

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

使用Azure CLI

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

使用Azure PowerShell

使用以下Azure PowerShell命令添加、列出、删除、更新和删除 IP 防火墙规则。

默认操作和公用网络访问

REST API

对于 API 版本 2021-01-01-preview 及更早版本,属性的 defaultAction 默认值为 Deny。 但是,除非已设置 IP 筛选器或虚拟网络规则,否则不会强制实施拒绝规则。 如果未设置任何 IP 筛选器或虚拟网络规则,Service Bus 会将默认操作视为 Allow

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

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

有关这些属性的详细信息,请参阅创建或更新专用终结点连接

Note

上述设置均未使声明绕过SAS或Microsoft Entra身份验证的验证。 身份验证检查始终在服务验证网络检查(由defaultActionpublicNetworkAccessprivateEndpointConnections设置配置)之后运行。

Azure门户

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

 Azure 门户网络页面的Screenshot。在“防火墙和虚拟网络”选项卡上选择了“允许从所有网络访问”选项。

若要限制对Service Bus Azure虚拟网络的访问,请参阅以下文章: