应用程序网关集成

Azure 应用服务的三种变体需要采用略微不同的配置,才能与 Azure 应用程序网关集成。 变体包括普通应用服务(也称为多租户)、内部负载均衡器 (ILB) 应用服务环境和外部应用服务环境。

本文将演练如何通过应用服务(多租户)来配置应用程序网关,使用服务终结点来保护流量。 本文还将讨论有关使用专用终结点和与 ILB 以及外部应用服务环境集成的注意事项。 最后,本文介绍如何在源控制管理器 (SCM) 站点上设置访问限制。

与应用服务(多租户)集成

应用服务(多租户)具有面向 Internet 的公共终结点。 使用服务终结点可以只允许来自 Azure 虚拟网络中特定子网的流量,并阻止其他所有流量。 在以下方案中,你将使用此功能来确保应用服务实例只能接收来自特定应用程序网关实例的流量。

Diagram that shows the internet flowing to an application gateway in an Azure virtual network and then flowing through a firewall icon to instances of apps in App Service.

除了创建应用服务实例和应用程序网关以外,此配置还包括两个部分。 第一个部分是在部署应用程序网关的虚拟网络子网中启用服务终结点。 服务终结点确保所有离开子网发往应用服务的所有网络流量都通过特定的子网 ID 进行标记。

第二个部分是设置特定 Web 应用的访问限制,以确保仅允许通过此特定子网 ID 标记的流量。 可以根据偏好使用不同的工具配置访问限制。

使用 Azure 门户设置服务

使用 Azure 门户,可以按照四个步骤创建和配置应用服务和应用程序网关的设置。 如果已有现有的资源,则可以跳过前几个步骤。

  1. 参考应用服务文档中的某篇快速入门创建应用服务实例。 一个示例是 .NET Core 快速入门
  2. 参考门户快速入门创建应用程序网关,但跳过有关添加后端目标的部分。
  3. 在应用程序网关中将应用服务配置为后端,但跳过有关限制访问的部分。
  4. 使用服务终结点创建访问限制

现在可以通过应用程序网关访问应用服务。 如果尝试直接访问应用服务,则应会收到 403 HTTP 错误,指出 Web 应用阻止了你的访问。

Screenshot shows the text of Error 403 - Forbidden.

使用 Azure 资源管理器模板设置服务

Azure 资源管理器部署模板将创建完整方案。 此方案包括使用服务终结点和访问限制锁定的应用服务实例,以便仅从应用程序网关接收流量。 该模板包含许多智能默认值,以及添加到资源名称的唯一后缀(以简化模板)。 若要替代它们,必须克隆存储库,或下载模板并对其进行编辑。

若要应用模板,可以使用模板说明中的“部署到 Azure”按钮。 或者,可以使用适当的 PowerShell 或 Azure CLI 代码。

使用 Azure CLI 设置服务

Azure CLI 示例创建了使用服务终结点和访问限制锁定的应用服务实例,以便仅从应用程序网关接收流量。 如果只需从现有的应用程序网关将流量隔离到现有应用服务实例,请使用以下命令:

az webapp config access-restriction add --resource-group myRG --name myWebApp --rule-name AppGwSubnet --priority 200 --subnet mySubNetName --vnet-name myVnetName

在默认配置中,该命令可确保在子网中设置服务终结点配置,并在应用服务中设置访问限制。

使用专用终结点的注意事项

你可以使用专用终结点替代服务终结点,以保护应用程序网关和应用服务(多租户)之间的流量。 你需要确保应用程序网关可以使用 DNS 解析应用服务应用的专用 IP 地址。 或者,你也可以使用后端池中的专用 IP 地址,并替代 HTTP 设置中的主机名。

Diagram that shows traffic flowing to an application gateway in an Azure virtual network and then flowing through a private endpoint to instances of apps in App Service.

应用程序网关将缓存 DNS 查找结果。 如果使用完全限定的域名 (FQDN),并且依赖于 DNS 查找来获取专用 IP 地址,则如果在配置后端池后发生 DNS 更新或指向 Azure 专用 DNS 区域的链接,则可能需要重启应用程序网关。

若要重启应用程序网关,请使用 Azure CLI 停止并启动它:

az network application-gateway stop --resource-group myRG --name myAppGw
az network application-gateway start --resource-group myRG --name myAppGw

ILB 应用服务环境的注意事项

ILB 应用服务环境不向 Internet 公开。 实例与应用程序网关之间的流量已隔离到虚拟网络。 若要配置 ILB 应用服务环境,并使用 Azure 门户将其与应用程序网关集成,请参阅操作指南

若要确保只有来自应用程序网关子网的流量抵达应用服务环境,可以配置一个影响应用服务环境中所有 Web 应用的网络安全组 (NSG)。 对于 NSG,可以指定子网 IP 范围,并选择性地指定端口 (80/443)。 若要使应用服务环境正常运行,请确保不要替代所需的 NSG 规则

若要将流量隔离到单个 Web 应用,需要使用基于 IP 的访问限制,因为服务终结点不适用于应用服务环境。 IP 地址应该是应用程序网关的专用 IP。

外部应用服务环境的注意事项

与多租户应用服务一样,外部应用服务环境具有面向公众的负载均衡器。 服务终结点不适用于应用服务环境。 这就是必须使用应用程序网关的公共 IP 地址来使用基于 IP 的访问限制的原因。 若要使用 Azure 门户创建外部应用服务环境,可以遵循此快速入门

Kudu/SCM 站点的注意事项

SCM 站点(也称为 Kudu)是每个 Web 应用都存在的管理站点。 无法对 SCM 站点使用反向代理。 你很有可能需要将其锁定到单个 IP 地址或特定的子网。

若要使用与主站点相同的访问限制,可以使用以下命令继承设置:

az webapp config access-restriction set --resource-group myRG --name myWebApp --use-same-restrictions-for-scm-site

如果要为 SCM 站点添加单独的访问限制,可以使用 --scm-site 标志:

az webapp config access-restriction add --resource-group myRG --name myWebApp --scm-site --rule-name KudoAccess --priority 200 --ip-address 208.130.0.0/16

使用默认域的注意事项

配置应用程序网关以替代主机名并使用应用服务的默认域(通常是 chinacloudsites.cn)是配置集成的最简单方法。 它不需要在应用服务中配置自定义域和证书。

本文讨论替代原始主机名的一般注意事项。 在应用服务中,有两种情况需要注意此配置。

身份验证

在应用服务(也称为“简单身份验证”)中使用身份验证功能时,应用通常会重定向到登录页。 由于应用服务不知道请求的原始主机名,因此重定向将在默认域名上进行,并且通常会导致错误。

若要解决默认重定向问题,可以将身份验证配置为检查转发标头,并将重定向域调整为原始域。 应用程序网关使用名为 X-Original-Host 的标头。 通过使用基于文件的配置来配置身份验证,可以将应用服务配置为适应原始主机名。 将此配置添加到配置文件:

{
    ...
    "httpSettings": {
        "forwardProxy": {
            "convention": "Custom",
            "customHostHeaderName": "X-Original-Host"
        }
    }
    ...
}

ARR 相关性

在多实例部署中,ARR 相关性可确保在会话的生命周期内将客户端请求路由到同一实例。 ARR 相关性不适用于主机名替代。 若要使会话相关性正常工作,必须在应用服务和应用程序网关中配置相同的自定义域和证书,而不是替代主机名。

后续步骤

有关应用服务环境的详细信息,请参阅应用服务环境文档

若要进一步保护 Web 应用,请参阅 Azure Web 应用程序防火墙文档中有关应用程序网关上的 Web 应用程序防火墙的信息。

若要使用 Azure Front Door 或应用程序网关在应用服务上部署具有自定义域的安全且可复原的站点,请参阅本教程