category
Azure应用服务的三种变体需要与Azure应用网关的集成配置略有不同。这些变体包括常规应用服务(也称为多租户)、内部负载均衡器(ILB)应用服务环境和外部应用服务环境。
本文将介绍如何使用服务端点来保护流量,从而使用App Service(多租户)配置Application Gateway。本文还讨论了使用私有端点以及与ILB和外部应用服务环境集成的注意事项。最后,本文描述了如何在源代码管理器(SCM)站点上设置访问限制。
与应用服务(App Service)集成(多租户)
应用服务(多租户)有一个面向互联网的公共端点。通过使用服务端点,您可以只允许来自Azure虚拟网络中特定子网的流量,并阻止其他所有内容。在以下场景中,您可以使用此功能来确保App Service实例只能从特定的应用程序网关接收流量。
显示互联网流向Azure虚拟网络中的应用程序网关,然后通过防火墙图标流向App Service中应用程序实例的图。
除了创建App Service实例和应用程序网关之外,此配置还有两个部分。第一部分是在部署应用网关的虚拟网络子网中启用服务端点。服务端点确保所有离开子网流向App Service的网络流量都标记有特定的子网ID。
第二部分是在特定的web应用程序上设置访问限制,以确保只允许标记有此特定子网ID的流量。根据您的偏好,您可以使用不同的工具配置访问限制。
使用Azure门户设置服务
使用Azure门户,您可以按照四个步骤创建和配置应用服务和应用网关的设置。如果您有现有资源,可以跳过第一步。
- 使用App Service文档中的快速起点之一创建App Service实例。一个例子是。NET核心快速入门。
- 使用门户快速入门创建应用程序网关,但跳过有关添加后端目标的部分。
- 在Application Gateway中将App Service配置为后端,但跳过有关限制访问的部分。
- 使用服务端点创建访问限制。
您现在可以通过应用程序网关访问应用程序服务。如果您尝试直接访问App Service,您应该会收到403 HTTP错误,表示web应用程序已阻止您的访问。
屏幕截图显示了错误403-禁止的文本。
使用Azure资源管理器模板设置服务
Azure资源管理器部署模板(Azure Resource Manager deployment template)创建了一个完整的场景。该场景由一个用服务端点锁定的应用服务实例和一个仅从应用网关接收流量的访问限制组成。该模板包括许多智能默认值和添加到资源名称中的唯一后缀,以保持简单。要覆盖它们,您必须克隆仓库或下载模板并对其进行编辑。
要应用该模板,您可以使用模板描述中的“部署到Azure”按钮。或者,您可以使用适当的PowerShell或Azure CLI代码。
使用Azure CLI设置服务
Azure CLI示例创建了一个应用服务实例,该实例被服务端点和访问限制锁定,只能从应用网关接收流量。如果您只需要将现有App Service实例的流量与现有应用程序网关隔离,请使用以下命令:
Azure命令行界面
复制
开放式Cloud Shell
az webapp config access-restriction add --resource-group myRG --name myWebApp --rule-name
AppGwSubnet --priority 200 --subnet mySubNetName --vnet-name myVnetName
在默认配置中,该命令可确保在子网中设置服务端点配置,并在App service中设置访问限制。
使用私有端点的注意事项
作为服务端点的替代方案,您可以使用私有端点来保护应用程序网关和应用程序服务(多租户)之间的流量。您需要确保应用程序网关可以使用DNS解析应用程序服务应用程序的私有IP地址。或者,您可以使用后端池中的私有IP地址,并在HTTP设置中覆盖主机名。
该图显示了流向Azure虚拟网络中应用程序网关的流量,然后通过专用端点流向App Service中应用程序实例的流量。
应用程序网关缓存DNS查找结果。如果您使用完全限定域名(FQDN)并依赖DNS查找来获取私有IP地址,如果在配置后端池后发生DNS更新或指向Azure私有DNS区域的链接,则可能需要重新启动应用程序网关。
要重新启动应用程序网关,请使用Azure CLI停止并启动它:
Azure命令行界面
复制
开放式Cloud Shell
az network application-gateway stop --resource-group myRG --name myAppGw
az network application-gateway start --resource-group myRG --name myAppGw
ILB应用服务环境的注意事项
ILB应用服务环境不会暴露在互联网上。实例和应用程序网关之间的流量已隔离到虚拟网络。要配置ILB应用程序服务环境并使用Azure门户将其与应用程序网关集成,请参阅操作指南。
如果要确保只有来自应用程序网关子网的流量才能到达应用程序服务环境,可以配置一个影响应用程序服务环境中所有web应用程序的网络安全组(NSG)。对于NSG,您可以指定子网IP范围和可选的端口(80/443)。为了使应用服务环境正常运行,请确保您没有覆盖所需的NSG规则。
为了将流量隔离到单个web应用程序,您需要使用基于IP的访问限制,因为服务端点不适用于应用程序服务环境。IP地址应该是应用网关的私有IP。
外部应用服务环境的注意事项
外部应用服务环境具有面向公众的负载均衡器,如多租户应用服务。服务端点不适用于应用服务环境。这就是为什么您必须使用应用程序网关的公共IP地址来使用基于IP的访问限制。要使用Azure门户创建外部应用服务环境,您可以按照此快速入门进行操作。
Kudu/SCM站点的注意事项
SCM站点,也称为Kudu,是每个web应用程序都存在的管理站点。SCM站点无法使用反向代理。您很可能还想将其锁定到单个IP地址或特定子网。
如果要使用与主站点相同的访问限制,可以使用以下命令继承设置:
Azure命令行界面
复制
开放式Cloud Shell
az webapp config access-restriction set --resource-group myRG --name myWebApp
--use-same-restrictions-for-scm-site
如果要为SCM站点添加单独的访问限制,可以使用--SCM-site标志:
Azure命令行界面
复制
开放式Cloud Shell
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
使用默认域的注意事项
配置Application Gateway以覆盖主机名并使用App Service的默认域(通常是azure websites.net)是配置集成的最简单方法。它不需要在App Service中配置自定义域和证书。
本文讨论了重写原始主机名的一般注意事项。在App Service中,有两种情况需要注意此配置。
身份验证
当您使用App Service中的身份验证功能(也称为Easy Auth)时,您的应用程序通常会重定向到登录页面。因为App Service不知道请求的原始主机名,所以重定向是在默认域名上完成的,通常会导致错误。
要解决默认重定向问题,您可以配置身份验证以检查转发的标头,并将重定向域调整为原始域。Application Gateway使用名为X-Original-Host的标头。通过使用基于文件的配置来配置身份验证,您可以配置App Service以适应原始主机名。将此配置添加到配置文件中:
JSON
{
...
"httpSettings": {
"forwardProxy": {
"convention": "Custom",
"customHostHeaderName": "X-Original-Host"
}
}
...
}
ARR亲和力
在多实例部署中,ARR关联可确保客户端请求在会话生命周期内路由到同一实例。ARR关联不适用于主机名覆盖。为了使会话关联性工作,您必须在App Service和Application Gateway中配置相同的自定义域和证书,并且不能覆盖主机名。
下一步
For more information on App Service Environments, see the App Service Environment documentation.
To further secure your web app, you can find information about Azure Web Application Firewall on Application Gateway in the Azure Web Application Firewall documentation.
To deploy a secure, resilient site with a custom domain on App Service by using either Azure Front Door or Application Gateway, see this tutorial.
- 登录 发表评论
- 5 次浏览
Tags
最新内容
- 6 days 12 hours ago
- 6 days 12 hours ago
- 6 days 13 hours ago
- 6 days 13 hours ago
- 6 days 13 hours ago
- 1 week 5 days ago
- 1 week 6 days ago
- 2 weeks 2 days ago
- 2 weeks 2 days ago
- 2 weeks 2 days ago