你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

设置 Azure 应用服务访问限制

通过设置访问限制可以定义一个按优先级排序的允许/拒绝列表,以控制对应用程序的网络访问。 该列表可以包含 IP 地址或 Azure 虚拟网络子网。 如果存在一个或多个条目,则列表末尾会存在一个隐式的“全部拒绝”。 若要详细了解访问限制,请转到访问限制概述

访问限制功能适用于所有 Azure 应用服务托管的工作负载。 工作负载可包括 Web 应用、API 应用、Linux 应用、Linux 自定义容器应用和函数。

向应用发出请求时,会根据访问限制列表中的规则评估 FROM 地址。 如果 FROM 地址位于配置为使用 Microsoft.Web 服务终结点的子网中,则会将源子网与访问限制列表中的虚拟网络规则进行比较。 如果根据列表中的规则不允许该地址进行访问,则服务会返回 HTTP 403 状态码。

访问限制功能在应用服务前端角色中实现,这些角色位于运行代码的工作主机的上游。 因此,访问限制是有效的网络访问控制列表 (ACL)。

限制从 Azure 虚拟网络访问 Web 应用的功能通过服务终结点启用。 使用服务终结点,可以限制从选定的子网对多租户服务进行访问。 对托管在应用服务环境中的应用的流量进行限制不起作用。 如果处于应用服务环境中,可应用 IP 地址规则控制对应用的访问。

注意

必须在网络端以及要对其启用服务终结点的 Azure 服务上同时启用服务终结点。 有关支持服务终结点的 Azure 服务列表,请参阅虚拟网络服务终结点

访问限制流程图。

在门户中管理访问限制规则

若要向应用添加访问限制规则,请执行以下操作:

  1. 登录到 Azure 门户。

  2. 选择要为其添加访问限制的应用。

  3. 在左窗格中,选择“网络”。

  4. 在“网络”窗格的“访问限制”下,选择“配置访问限制” 。

    Azure 门户中的“应用服务网络选项”窗格的屏幕截图。

  5. 在“访问限制”页上查看为应用定义的访问限制规则列表。

    Azure 门户中“访问限制”页面的屏幕截图,显示为所选应用定义的访问限制规则的列表。

    列表显示当前应用于该应用的所有限制。 如果存在对应用的虚拟网络限制,该表将显示是否为 Microsoft.Web 启用了服务终结点。 如果未对应用定义任何限制,则可从任何位置访问该应用。

权限

您必须至少在子网或更高级别上具有以下基于角色的访问控制权限,才能通过 Azure 门户、CLI 或在直接设置站点配置属性时来配置访问限制:

操作 说明
Microsoft.Web/sites/config/read 获取 Web 应用配置设置
Microsoft.Web/sites/config/write 更新 Web 应用的配置设置
Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action* 将存储帐户或 SQL 数据库等资源加入到子网

* 只在添加虚拟网络(服务终结点)规则时需要

如果要添加基于服务终结点的规则,并且虚拟网络与应用位于不同的订阅中,则必须确保已为 Microsoft.Web 资源提供程序注册了使用虚拟网络的订阅。 可以按照本文档显式注册该提供程序,但在订阅中创建第一个 Web 应用时也会自动注册该提供程序。

添加访问限制规则

若要向应用添加访问限制规则,请在“访问限制”窗格中选择“添加规则” 。 规则在添加后会立即生效。

规则会从“优先级”列中最小的数字开始,按优先级顺序强制执行。 即使只添加了一条规则,一个隐式的“全部拒绝”也会立即生效。

在“添加访问限制”窗格上创建规则时,请执行以下操作:

  1. 在“操作”下,选择“允许”或“拒绝” 。

    “添加访问限制”窗格的屏幕截图。

  2. (可选)输入规则名称和说明。

  3. 在“优先级”框中,输入一个优先级值。

  4. 在“类型”下拉列表中选择规则类型。 以下部分介绍了不同类型的规则。

  5. 键入特定于规则的输入后,选择“保存”以保存更改。

注意

  • 限制为 512 条访问限制规则。 如果需要的访问限制规则数超出 512 条,建议考虑安装独立的安全产品,如 Azure Front Door、Azure 应用程序网关或替换 WAF。

设置基于 IP 地址的规则

按照上一部分所述的过程操作,但有以下新增内容:

  • 在步骤 4 的“类型”下拉列表中,选择“IPv4”或“IPv6” 。

以无类别域际路由选择 (CIDR) 表示法为 IPv4 和 IPv6 地址指定 IP 地址块。 若要指定地址,可以使用类似 1.2.3.4/32 的格式,其中前四个八位字节代表自己的 IP 地址,/32 为掩码 。 所有地址的 IPv4 CIDR 表示法都为 0.0.0.0/0。 若要详细了解 CIDR 表示法,请参阅无类别域际路由选择

设置基于服务终结点的规则

  • 在步骤 4 的“类型”下拉列表中,选择“虚拟网络” 。

    “添加限制”窗格的屏幕截图,其中“虚拟网络类型”处于选中状态。

指定“订阅”、“虚拟网络”和“子网”下拉列表,以匹配要限制访问的内容 。

使用服务终结点可以限制对所选 Azure 虚拟网络子网的访问。 如果尚未为所选子网的 Microsoft.Web 启用服务终结点,它们会自动启用,除非你选择了“忽略缺少的 Microsoft.Web 服务终结点”复选框。 在应用上而不是子网上启用服务终结点的方案主要取决于你是否有权在子网上启用它们。

如果需要其他人在子网上启用服务终结点,请选择“忽略缺少的 Microsoft.Web 服务终结点”复选框。 将为服务终结点配置应用,以便稍后在子网中启用它们。

不能使用服务终结点来限制对在应用服务环境中运行的应用程序的访问。 当应用处于应用服务环境中时,可以应用 IP 访问规则来控制对它的访问。

借助服务终结点,可以使用应用程序网关或其他 Web 应用程序防火墙 (WAF) 设备来配置应用。 你还可以配置具有安全后端的多层应用程序。 有关详细信息,请参阅网络功能和应用服务应用程序网关与服务终结点的集成

注意

  • 对于通过虚拟 IP (VIP) 使用基于 IP 的 TLS/SSL 绑定的 Web 应用,当前不支持服务终结点。

设置基于服务标记的规则

  • 在步骤 4 的“类型”下拉列表中,选择“服务标记”。

    “添加限制”窗格的屏幕截图,其中“服务标记类型”处于选中状态。

访问限制规则支持所有可用服务标记。 每个服务标记代表 Azure 服务中的 IP 范围列表。 这些服务的列表以及指向特定范围的链接可以在服务标记文档中找到。 使用 Azure 资源管理器模板或脚本配置更高级的规则,如区域范围内的规则。

编辑规则

  1. 若要开始编辑现有的访问限制规则,请在“访问限制”页上选择要编辑的规则。

  2. 在“编辑访问限制”窗格上,进行更改,然后选择“更新规则” 。

  3. 选择“保存”,保存更改。

    Azure 门户中“编辑访问限制”窗格的屏幕截图,其中显示现有访问限制规则的字段。

    注意

    编辑规则时,不能在规则类型之间切换。

删除规则

  1. 若要删除规则,请在“访问限制”页上勾选要删除的规则,然后选择“删除”。

  2. 选择“保存”,保存更改。

“访问限制”页的屏幕截图,其中显示要删除的访问限制规则旁边的“删除”省略号。

访问限制高级方案

以下各部分说明一些使用访问限制的高级方案。

按 http 标头筛选

作为任何规则的一部分,你可以添加其他 http 标头筛选器。 支持以下 http 标头:

  • X-Forwarded-For
  • X-Forwarded-Host
  • X-Azure-FDID
  • X-FD-HealthProbe

对于每个标头名称,最多可以添加 8 个以逗号分隔的值。 在规则本身之后评估 http 标头筛选器,并且必须满足两个条件才能应用规则。

多源规则

多源规则允许在单个规则中合并多达 8 个 IP 范围或 8 个服务标记。 如果你有 512 个以上的 IP 范围,或者想要创建将多个 IP 范围与单个 http 标头筛选器组合在一起的逻辑规则,则可以使用此项。

多源规则定义方式与单源规则的定义方式相同,但每个范围用逗号分隔。

PowerShell 示例:

Add-AzWebAppAccessRestrictionRule -ResourceGroupName "ResourceGroup" -WebAppName "AppName" `
  -Name "Multi-source rule" -IpAddress "192.168.1.0/24,192.168.10.0/24,192.168.100.0/24" `
  -Priority 100 -Action Allow

阻止单个 IP 地址

对于要显式阻止单个 IP 地址或 IP 地址块但同时要允许访问其他所有地址的情况,可为特定 IP 地址添加“拒绝”规则,并将不匹配的规则操作配置为“允许”。

Azure 门户中的“访问限制”页的屏幕截图,只显示一个受阻止的 IP 地址。

限制对 SCM 站点的访问

除了能够控制对应用的访问以外,还可以限制对应用所用的 SCM(高级工具)站点的访问。 SCM 站点既是 Web 部署终结点,也是 Kudu 控制台。 你可以从应用程序单独分配对 SCM 站点的访问限制,也可以对应用和 SCM 站点使用相同的限制设置。 如果选中“使用主站点规则”复选框,规则列表将隐藏,并使用主站点中的规则。 如果清除该复选框,SCM 站点设置将再次显示。

Azure 门户中“访问限制”页的屏幕截图,显示没有为 SCM 站点或应用设置访问限制。

限制对特定 Azure Front Door 实例的访问

从 Azure Front Door 流向应用程序的流量始发自 AzureFrontDoor.Backend 服务标记中定义的一组已知 IP 范围。 使用服务标记限制规则,可以限制流量只能来自 Azure Front Door。 为确保流量仅来自特定实例,需要根据 Azure Front Door 发送的唯一 http 标头进一步筛选传入的请求。

Azure 门户中的“访问限制”页的屏幕截图,显示如何添加 Azure Front Door 限制。

PowerShell 示例:

$afd = Get-AzFrontDoor -Name "MyFrontDoorInstanceName"
Add-AzWebAppAccessRestrictionRule -ResourceGroupName "ResourceGroup" -WebAppName "AppName" `
  -Name "Front Door example rule" -Priority 100 -Action Allow -ServiceTag AzureFrontDoor.Backend `
  -HttpHeader @{'x-azure-fdid' = $afd.FrontDoorId}

以编程方式管理访问限制规则

可通过以下任一方法以编程方式添加访问限制:

  • 使用 Azure CLI。 例如:

    az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
      --rule-name 'IP example rule' --action Allow --ip-address 122.133.144.0/24 --priority 100
    
  • 使用 Azure PowerShell。 例如:

    Add-AzWebAppAccessRestrictionRule -ResourceGroupName "ResourceGroup" -WebAppName "AppName"
        -Name "Ip example rule" -Priority 100 -Action Allow -IpAddress 122.133.144.0/24
    

还可通过以下任一方法手动设置值:

  • 在 Azure 资源管理器中对应用配置使用 Azure REST API PUT 操作。 此信息在 Azure 资源管理器中的位置为:

    management.azure.com/subscriptions/subscription ID/resourceGroups/resource groups/providers/Microsoft.Web/sites/web app name/config/web?api-version=2020-06-01

  • 使用资源管理器模板。 例如,可以使用 resources.azure.com 并编辑 ipSecurityRestrictions 块以添加所需的 JSON。

    前面的示例的 JSON 语法为:

    {
      "properties": {
        "ipSecurityRestrictions": [
          {
            "ipAddress": "122.133.144.0/24",
            "action": "Allow",
            "priority": 100,
            "name": "IP example rule"
          }
        ]
      }
    }
    

    使用服务标记和 http 头限制的高级示例的 JSON 语法为:

    {
      "properties": {
        "ipSecurityRestrictions": [
          {
            "ipAddress": "AzureFrontDoor.Backend",
            "tag": "ServiceTag",
            "action": "Allow",
            "priority": 100,
            "name": "Azure Front Door example",
            "headers": {
              "x-azure-fdid": [
                "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
              ]
            }
          }
        ]
      }
    }
    

设置 Azure Functions 访问限制

访问限制也适用于与应用服务计划具有相同功能的函数应用。 启用访问限制时,还可针对任何不允许的 IP 禁用 Azure 门户代码编辑器。

后续步骤

Azure Functions 的访问限制
应用程序网关与服务终结点的集成