Azure 应用服务访问限制

应用服务中的访问限制相当于允许阻止和筛选流量的防火墙。 访问限制仅适用于入站访问。 大多数应用服务定价层还能够将专用终结点添加到应用,这是应用的另一入口点。 访问限制不适用于通过专用终结点传入的流量。 对于托管在应用服务上的所有应用,默认入口点是公用的。 唯一的例外情况是托管在 ILB 应用服务环境中的应用,其默认入口点位于虚拟网络的内部。

工作原理

当流量抵达应用服务时,应用服务首先会评估流量是来自专用终结点还是通过默认终结点发送的。 如果流量通过专用终结点发送,则会直接发送到站点,没有任何限制。 使用网络安全组配置对专用终结点的限制。

如果你通过默认终结点(通常是公共终结点)发送流量,则首先在应用访问级别评估流量。 可在此处启用或禁用访问。 如果启用了应用访问,会在站点访问级别评估流量。 对于任何应用,你同时拥有主站点和高级工具站点(也称为 scm 或 kudu 站点)。

可以选择为每个站点配置一组访问限制规则。 访问限制规则按优先级顺序进行评估。 如果某些规则具有相同的优先级,则会按照从 Azure 资源管理器 API 和 Azure 门户返回时列出的顺序进行评估,然后再进行排序。 还可以指定没有匹配的规则时的行为。 以下部分将详细介绍。

访问限制高级流程图。

应用访问

应用访问允许你配置是否可以通过默认(公共)终结点进行访问。 可以将此行为配置为 DisabledEnabled。 启用访问后,可以添加站点访问限制规则以控制来自选定虚拟网络和 IP 地址的访问。

如果未配置此设置(属性为 null),则默认行为是启用访问,除非存在专用终结点,这会将行为更改为禁用访问。 在 Azure 门户中,如果未设置属性,则不会设置单选按钮,然后使用默认行为。

Azure 门户中应用访问选项的屏幕截图。

在 Azure 资源管理器 API 中,控制应用访问的属性称为 publicNetworkAccess。 对于内部负载均衡器 (ILB) 应用服务环境,应用的默认入口点始终在虚拟网络内部。 启用应用访问 (publicNetworkAccess) 不会授予对应用的直接公共访问权限;相反,它允许从与应用服务环境的内部 IP 地址相对应的默认入口点进行访问。 如果在 ILB 应用服务环境上禁用应用访问,只能通过添加到各个应用的专用终结点访问应用。

注意

对于 Linux 站点,更改 publicNetworkAccess 属性将导致应用重启。

站点访问

站点访问限制允许筛选传入的请求。 站点访问限制允许生成按优先顺序评估的允许和拒绝规则列表。 它类似于 Azure 网络中的网络安全组 (NSG) 功能。

Azure 门户中站点访问选项的屏幕截图。

站点访问限制提供多种可应用的规则类型:

不匹配规则

可以配置没有匹配的规则时的行为(默认操作)。 这是一条特殊规则,它始终作为规则集合的最后一条规则出现。 如果未配置此设置,则不匹配的规则行为取决于所配置的规则。 如果没有规则,则不匹配的规则行为是允许所有访问,但如果存在一个或多个规则,则它会隐式更改为拒绝所有访问。 无论定义的规则如何,你都可以显式将此行为配置为允许或拒绝访问。

基于 IP 的访问限制规则

要限制可用于访问应用的 IP 地址时,基于 IP 的访问限制功能非常有用。 IPv4 和 IPv6 均受支持。 此功能的一些用例:

  • 从一组定义完善的地址限制对应用的访问。
  • 仅允许通过外部负载均衡服务或其他具有已知出站 IP 地址的网络设备的流量访问。

若要了解如何启用此功能,请参阅配置访问限制

注意

基于 IP 的访问限制规则仅在应用位于应用服务环境中时处理虚拟网络地址范围。 如果应用位于多租户服务中,则需要使用服务终结点,以仅允许虚拟网络中选定子网的流量。

基于服务终结点的访问限制规则

使用服务终结点可以锁定对应用的入站访问,使源地址必须来自所选的一组子网。 此功能可与 IP 访问限制一起使用。 服务终结点与远程调试不兼容。 如果要对应用使用远程调试,则客户端不可位于启用了服务终结点的子网中。 设置服务终结点的过程与设置 IP 访问限制的过程类似。 你可构建包含虚拟网络中的公用地址和子网的访问规则允许/拒绝列表。

注意

配置了专用终结点的应用或使用基于 IP 的 SSL(应用分配的地址)的应用不支持基于服务终结点的访问限制规则。

若要详细了解如何在应用中配置服务终结点,请参阅 Azure 应用服务访问限制

任何服务终结点源

对于测试或特定场景,你可以允许来自任何启用了服务终结点的子网的流量。 为此,可以使用文本“AnyVnets”而不是 IP 范围来定义基于 IP 的规则。 无法在门户中创建这些规则,但可以修改现有的基于 IP 的规则并将 IP 地址替换为“AnyVnets”字符串。

基于服务标记的访问限制规则

Azure 服务标记是一组明确定义的 Azure 服务 IP 地址。 服务标记负责将各种 Azure 服务中使用的 IP 范围进行分组,通常还会将范围进一步限定到特定的区域。 使用此规则类型可以筛选来自特定 Azure 服务的入站流量。

有关标记的完整列表和详细信息,请访问服务标记链接。

若要了解如何启用此功能,请参阅配置访问限制

多源规则

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

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

无法在门户中创建这些规则,但可以修改现有服务标记或基于 IP 的规则,并将更多源添加到规则。

站点访问限制规则的 http 标头筛选

对于任何规则(无论哪种类型),都可以添加 http 标头筛选。 使用 http 标头筛选器可以进一步检查传入的请求并根据特定的 http 标头值进行筛选。 每个规则最多可以有八个标头值。 下面列出了支持的 http 标头:

  • X-Forwarded-For。 标准标头,用于标识通过代理服务器连接的客户端的来源 IP 地址。 接受有效的 IP 地址。
  • X-Forwarded-Host。 标准标头,用于标识客户端请求的原始主机。 接受长度不超过 64 个字符的任何字符串。

http 标头筛选的一些用例包括:

  • 仅允许转发主机名的代理服务器的流量访问
  • 仅允许具有服务标记规则和 X-Azure-FDID 标头限制的特定 Azure Front Door 实例访问

诊断日志记录

应用服务可以将各种日志记录类别发送到 Azure Monitor。 其中一个类别称为“IPSecurity Audit logs”,它表示访问限制中的活动。 所有与允许和拒绝规则(不匹配的规则除外)匹配的请求都会被记录下来,并可用于验证访问限制的配置。 排查规则配置问题时,日志记录功能也是一个功能强大的工具。

高级用例

结合上述功能,可以解决以下部分所述的一些特定用例。

阻止单个 IP 地址

如果你想要拒绝/阻止一个或多个特定 IP 地址,可将 IP 地址添加为拒绝规则,并将不匹配规则配置为允许所有不匹配的流量。

限制对高级工具站点的访问

高级工具站点(也称为 scm 或 kudu)提供一个可配置的独立规则集合。 你也可以为此站点配置不匹配规则。 可以通过某个设置来使用针对主站点配置的规则。 不能有选择地允许访问某些高级工具站点功能。 例如,不能有选择地允许访问高级工具站点中的 WebJobs 管理控制台。

通过专用终结点进行部署

你可能有一个可公开访问的站点,但部署系统位于虚拟网络中。 可以通过添加专用终结点来保持部署流量的私密性。 然后,需要确保启用公共应用访问。 最后,需要将高级工具站点的不匹配规则设置为拒绝,这会阻止发送到该终结点的所有公共流量。

允许外部合作伙伴访问专用终结点保护的站点

在此场景中,你正在通过专用终结点访问站点,并通过专用终结点进行部署。 你可以临时邀请外部合作伙伴来测试网站。 可以通过启用公共应用访问来实现此目的。 添加一个规则(基于 IP)以识别合作伙伴的客户端。 为主站点和高级工具站点配置不匹配规则操作以拒绝访问。

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

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

后续步骤

注意

阻止对站点公共访问的访问限制规则也可以阻止日志流式处理等服务。 如果需要这些规则,则需要在限制中允许应用服务的 IP 地址。