云计算(尤其是平台即服务 (PaaS) 和容器即服务 (CaaS) 产品)的兴起正在改变公司部署和运营其业务应用的方式。 设计云应用时最重要的挑战之一是选择完全托管的云服务,以在不影响安全性的情况下降低成本和耗时的操作任务。
这篇博文向您展示如何在Microsoft Azure App Service上托管应用并使用NGINX Plus保护它们以防止来自互联网的攻击。
Microsoft Azure App Service 是一个企业级、完全托管的平台,允许组织在 Microsoft Azure 中部署 Web、API 和移动应用程序,而无需管理底层基础架构,如图 1 所示。 Azure 应用服务提供以下主要功能:
借助 Azure App Service,微软提供了一种在云上运行 Web应用的丰富且快速的方法。 事实上,开发人员可以使用 ASP.NET、Java、Node.js、PHP 和 Python 在本地开发应用,然后使用 Microsoft Visual Studio 或 Azure CLI 轻松将其部署到 Azure 应用服务。DevOps 团队还可以受益于 Azure 应用服务的持续部署功能,在多个环境中快速可靠地部署应用版本。
Azure App Service 上的applications可以访问 Azure 上部署的其他资源,或者可以通过 VPN 建立与本地公司资源的连接。
基本上,使用 Azure App Service 创建的应用直接暴露给 Internet 并分配给azurewebsites.net的子域。 为了更加安全,您可以使用 SSL 终止或使用 OAuth2 或 OpenID Connect (OIDC) 等身份验证和授权协议保护您的应用。 但是,不可能使用细粒度的出站和入站安全规则定制网络,也不可能应用诸如 Web应用防火墙 (WAF) 之类的中间件来防止来自 Internet 的恶意攻击或漏洞利用。
如果您在 Azure 应用服务中运行敏感应用并想要保护它们,则可以使用 Azure 应用服务环境 (ASE)。 ASE 是部署到虚拟网络中的隔离环境,专用于单个客户的应用。 因此,您可以更好地控制入站和出站应用网络流量。
使用 ASE,您可以在更安全的环境中以非常高的规模部署 Web、API、移动或功能应用程序,如图 2 所示。
ASE 有两个版本: ASE v1 和 ASE v2。 在这篇文章中我们讨论 ASE v2。
您可以使用 Azure 门户手动创建新的 ASE v2,也可以使用 Azure 资源管理器自动创建新的 ASE v2。
创建新的 ASE 时,必须在两种部署类型之间进行选择:
在下面的示例中,我们选择 ILB ASE 来阻止来自 Internet 的访问。 因此,我们 ASE 中部署的应用只能从同一网络中运行的虚拟机 (VM) 访问。 以下两个命令使用 Azure 资源管理器和 Azure CLI 来预配新的ILB ASE v2 :
$ azure config mode arm $ azure group deploy create my-resource-group my-deployment-name --template-uri https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/201-web-app-asev2-ilb-create/azuredeploy.json
另一方面,如果您希望您的应用程序可通过互联网访问,那么您必须保护它免受可能试图窃取存储在您的应用中的敏感信息的恶意攻击者的攻击。
要保护 ASE 中第 7 层的应用,主要有两种选择:
(您可以用 WAF 功能替代自定义应用交付控制器 [ADC],但我们在此不介绍该用例。)
解决方案的选择取决于您的安全限制。 一方面,Azureapplication网关为安全实施提供了交钥匙解决方案,并且不需要您维护底层基础架构。 另一方面,在虚拟机上部署 NGINX Plus 可以为您提供强大的堆栈,具有更好的控制力和灵活性,可以微调您的安全规则。
在 Azure应用网关和 NGINX Plus 之间进行选择以对 ASE 内部创建的应用进行负载平衡和保护,需要很好地理解每个解决方案提供的功能。 虽然 Azure应用网关适用于简单用例,但对于复杂用例,它不提供 NGINX Plus 中的许多标准功能。
下表比较了 Azureapplication网关和 NGINX Plus 对负载平衡和安全功能的支持。 有关 NGINX Plus 功能的更多详细信息请参阅下表。
特征 | Azureapplication网关 | NGINX Plus |
---|---|---|
缓解能力 | application层(第 7 层) | application层(第 7 层) |
HTTP 感知 | ✅ | ✅ |
HTTP/2 感知 | ❌ | ✅ |
WebSocket 感知 | ❌ | ✅ |
SSL 卸载 | ✅ | ✅ |
路由功能 | 根据请求 URL 或基于 cookie 的会话亲和力做出简单决策 | 高级路由功能 |
基于 IP 地址的访问控制列表 | ❌(必须在 Azure 中的 Web 应用级别定义) | ✅ |
端点 | 任何 Azure 内部 IP 地址、公共 Internet IP 地址、Azure VM 或 Azure 云服务 | 任何 Azure 内部 IP 地址、公共 Internet IP 地址、Azure VM 或 Azure 云服务 |
Azure Vnet 支持 | 面向 Internet 和内部 (Vnet) 的应用 | 面向 Internet 和内部 (Vnet) 的应用 |
网页应用防火墙 | ✅ | ✅ |
容量耗尽攻击 | 部分的 | 部分的 |
协议攻击 | 部分的 | 部分的 |
应用层攻击 | ✅ | ✅ |
HTTP 基本身份验证 | ❌ | ✅ |
JWT 身份验证 | ❌ | ✅ |
OpenID 连接 SSO | ❌ | ✅ |
如您所见,NGINX Plus 和 Azureapplication网关都充当具有第 7 层负载平衡功能和 WAF 的 ADC,以确保强有力地防御常见的 Web 漏洞和攻击。
NGINX Plus 提供了 Azureapplication网关所缺少的几个附加功能:
为了提高安全性,您可以部署Azure DDoS Protection来缓解第 3 层和第 4 层的威胁,以补充 Azureapplication网关或 NGINX Plus 提供的第 7 层威胁缓解功能。
图 3 展示了如何结合 NGINX Plus 和 Azure App Service 为在生产中运行业务应用提供安全的环境。 该部署策略使用 NGINX Plus 的负载均衡和 WAF 功能。
该部署结合了以下组件:
Azure 应用服务环境- 此示例部署利用两个示例 Web应用- Web 应用程序 1和Web 应用程序 2 - 来演示如何使用 NGINX Plus 保护和负载平衡不同的 Web 应用程序。 在 NGINX Plus 中,您可以通过配置不同的上游
块将请求分发到不同的 Web应用,并使用位置
块根据 URI 进行内容路由。 以下显示了满足此目标的最小 NGINX Plus 配置(此处所有请求都发往同一个上游组):
上游后端 { 服务器IP 地址-您的 ASE-ILB ; } 服务器 { 位置 / { proxy_set_header 主机 $host; proxy_pass http://backend; } }
Azure 还支持资源组,以便以逻辑方式对应用的 Azure 资源进行分组。 使用资源组不会对基础设施设计和拓扑产生影响,我们不会在这里展示它们。
Azure VM 规模集为您提供虚拟化功能,可随时扩展,而无需购买和维护支持扩展的物理硬件。 但是,您仍然有责任通过执行配置、修补、安全更新和安装在其上运行的软件等任务来维护虚拟机。
在图 4 所示的架构中,NGINX Plus 实例部署在 Azure VM 规模集内,以实现主动-主动高可用性。 主动-主动设置非常棒,因为所有 NGINX Plus VM 都可以处理由 Azure 负载均衡器路由的传入请求,从而为您提供经济高效的容量。
使用 Azure VM 规模集,您还可以根据平均 CPU 使用率轻松设置 NGINX Plus 实例的自动缩放。 在这种情况下,您需要注意同步 NGINX Plus 配置文件。 您可以为此目的使用 NGINX Plus 配置共享功能,如NGINX Plus 管理指南中所述。
通过将 Azure App Service 用于您的云应用并在您的 Web 应用程序、API 和移动后端前面使用 NGINX Plus,您可以在全球范围内对这些应用进行负载平衡和保护。 通过将 NGINX Plus 与 Azure App Service 结合使用,您可以获得完全负载平衡的基础架构,并具有针对来自 Web 的漏洞和攻击的高级别防护。 这确保了强大的设计,能够以安全的方式运行生产中的关键应用。
Web 应用概述(微软)
应用服务环境简介(Microsoft)
使用 Azure 门户 (Microsoft) 创建具有 Web应用防火墙的应用程序网关
比较 NGINX Open Source 和 NGINX Plus (NGINX) 的功能
HTTP 负载平衡(NGINX)
客座合著者 Cedric Derue 是 Altran 的解决方案架构师和 Microsoft MVP。 客座合著者 Vincent Thavonekham 是微软区域总监和 VISEO 的 Azure MVP。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”