category
本文概述了使用Azure应用程序服务环境部署安全应用程序的情况。为了限制来自互联网的应用程序访问,使用Azure应用程序网关服务和Azure Web应用程序防火墙。本文还提供了有关使用Azure DevOps的应用程序服务环境的持续集成和持续部署(CI/CD)的指导。
这种场景通常部署在银行和保险等行业,在这些行业中,除了应用程序级别的安全性外,客户还意识到平台级别的安全。为了演示这些概念,我们将使用一个允许用户提交支出报告的应用程序。
潜在用例
考虑以下用例的此场景:
- 在需要额外安全性的地方构建Azure Web应用程序。
- 提供专用租赁,而不是共享租户应用程序服务计划。
- 将Azure DevOps与内部负载平衡(ILB)应用程序服务环境结合使用。
架构
Download a Visio file of this architecture.
数据流
- HTTP/HTTPS请求首先到达应用程序网关。
- 您可以选择(图中未显示)为Web应用程序启用Microsoft Entra身份验证。流量首次到达应用程序网关后,将提示用户提供凭据以向应用程序进行身份验证。
- 用户请求流经环境的内部负载均衡器(ILB),后者又将流量路由到Expenses Web应用程序。
- 然后,用户继续创建支出报告。
- 作为创建费用报告的一部分,将调用已部署的API应用程序来检索用户的经理姓名和电子邮件。
- 创建的支出报告存储在Azure SQL数据库中。
- 为了便于连续部署,代码被检查到Azure DevOps实例中。
- 构建虚拟机安装了Azure DevOps代理,允许构建虚拟机提取Web应用程序部署到应用程序服务环境的位(因为构建虚拟机部署在同一虚拟网络内的子网中)。
组件
- 应用程序服务环境提供了一个完全隔离的专用环境,用于安全地大规模运行应用程序。此外,由于应用程序服务环境及其运行的工作负载位于虚拟网络后面,因此它还提供了额外的安全和隔离层。高规模和隔离的要求推动了ILB应用服务环境的选择。
- 此工作负载使用独立的应用程序服务定价层,因此应用程序在Azure数据中心的专用环境中运行,使用更快的处理器、固态驱动器(SSD)存储,并且与标准相比,内存与核心的比率提高了一倍。
- Azure应用程序服务Web应用程序和API应用程序承载Web应用程序及RESTful API。这些应用程序和API托管在独立服务计划中,该计划还提供自动缩放、自定义域等,但位于专用层中。
- Azure应用程序网关是一个在第7层运行的web流量负载均衡器,用于管理web应用程序的流量。它提供SSL卸载,这消除了托管web应用程序的web服务器再次解密流量的额外开销。
- Web应用程序防火墙(WAF)是应用程序网关的一个特性。在应用程序网关中启用WAF进一步增强了安全性。WAF使用开放全球应用程序安全项目(OWASP)规则来保护web应用程序免受跨站点脚本、会话劫持和SQL注入等攻击。
- 之所以选择Azure SQL数据库,是因为此应用程序中的大多数数据都是关系数据,有些数据是文档和Blob。
- Azure Networking在Azure中提供各种联网功能,并且这些网络可以与Azure中的其他虚拟网络进行对等。还可以通过ExpressRoute或站点
- 站点与本地数据中心建立连接。在这种情况下,将在虚拟网络上启用服务端点,以确保数据仅在Azure虚拟网络和SQL数据库实例之间流动。
- Azure DevOps用于帮助团队在冲刺期间进行协作,使用支持敏捷开发的功能,并创建构建和发布管道。
创建了Azure构建虚拟机,以便安装的代理可以删除相应的构建,并将web应用程序部署到环境中。
选择
应用程序服务环境可以在Windows上运行常规web应用程序,或者,如本例所示,在环境中部署的web应用程序都作为Linux容器运行。已选择应用程序服务环境来承载这些单实例容器化应用程序。有其他选择——在设计解决方案时,请查看以下注意事项。
- Azure Service Fabric:如果您的环境主要基于Windows,并且您的工作负载主要是基于Windows。NET Framework,并且您没有考虑重新注册。NET核心,然后使用服务结构来支持和部署Windows服务器容器。此外,Service Fabric支持C#或Java编程API,对于开发本地微服务,可以在Windows或Linux上提供集群。
- Azure Kubernetes Service(AKS)是一个开源项目,也是一个更适合托管复杂多容器应用程序的编排平台,这些应用程序通常使用基于微服务的架构。AKS是一种托管Azure服务,它抽象了Kubernetes集群的供应和配置的复杂性。然而,支持和维护Kubernetes平台需要大量的知识,因此托管一些单实例容器化的web应用程序可能不是最好的选择。
数据层的其他选项包括:
- Azure Cosmos数据库:如果你的大部分数据都是非关系格式的,Azure Cosmos DB是一个很好的选择。该服务提供了一个运行其他数据模型的平台,如MongoDB、Cassandra、Graph数据或简单表存储。
注意事项
在ILB应用程序服务环境中处理证书时,需要考虑一些因素。您需要生成一个链接到受信任根目录的证书,而无需由最终存储证书的服务器生成证书签名请求。例如,使用Internet信息服务(IIS),第一步是从IIS服务器生成证书签名请求(CSR),然后将其发送给SSL证书颁发机构。
您不能从应用程序服务环境的内部负载均衡器(ILB)发出CSR。处理此限制的方法是使用通配符过程。
通配符过程允许您使用DNS名称所有权证明,而不是CSR。如果你拥有一个DNS命名空间,你可以放入一个特殊的DNS TXT记录,通配符过程会检查该记录是否存在,如果找到,就会知道你拥有DNS服务器,因为你有正确的记录。根据这些信息,它会颁发一个注册到受信任根的证书,然后您可以将其上传到ILB。您不需要对Web应用程序上的单个证书存储执行任何操作,因为您在ILB中有一个受信任的根SSL证书。
如果您想在ILB应用程序服务环境中运行的服务之间进行安全调用,请使用自签名或内部颁发的SSL证书。另一个需要考虑的解决方案是如何使ILB应用程序服务环境与内部颁发的SSL证书一起工作,以及如何将内部CA加载到受信任的根存储中。
在设置应用程序服务环境时,在为环境选择域名时,请考虑以下限制。域名不能是:
net
azurewebsites.net
p.azurewebsites.net
nameofthease.p.azurewebsites.net
此外,应用程序使用的自定义域名和ILB应用程序服务环境使用的域名不能重叠。对于域名为contoso.com的ILB应用程序服务环境,您不能为以下应用程序使用自定义域名:
www.contoso.com
abcd.def.contoso.com
abcd.contoso.com
为ILB应用程序服务环境选择一个不会与这些自定义域名冲突的域。在本例中,您可以将contoso-internal.com之类的内容用于环境的域,因为这与以.contoso.com结尾的自定义域名不会冲突。
另一个需要考虑的问题是DNS。为了允许应用程序服务环境中的应用程序相互通信,例如web应用程序与API对话,您需要为承载环境的虚拟网络配置DNS。您可以自带DNS,也可以使用Azure DNS专用区域。
可用性
- 在构建云应用程序时,请考虑应用典型的可用性设计模式。
- 查看适当的应用程序服务web应用程序参考体系结构中的可用性注意事项。
- 有关可用性的其他注意事项,请参阅Azure架构中心中的可用性检查表。
可扩展性
- 了解规模在应用程序服务环境中的工作原理。
- 回顾云应用程序自动缩放的最佳实践。
- 构建云应用程序时,要注意可伸缩性的典型设计模式。
- 查看适当的App Service web应用程序参考体系结构中的可扩展性注意事项。
- 有关其他可扩展性文章,请参阅Azure架构中心中提供的性能效率检查表。
安全
查看安全支柱的概述。- 查看适当的应用程序服务web应用程序参考体系结构中的安全注意事项。
- 考虑遵循安全的开发生命周期流程,以帮助开发人员构建更安全的软件并满足安全合规性要求,同时降低开发成本。
- 查看Azure PCI DSS合规性的蓝图体系结构。
- Azure DDoS防护与应用程序设计最佳实践相结合,提供了增强的DDoS缓解功能,以提供更多抵御DDoS攻击的防御。您应该在任何外围虚拟网络上启用Azure DDoS保护。
弹性
- 考虑在应用程序服务环境中使用地理分布式规模,以获得更大的弹性和可扩展性。
- 审查典型的设计模式的弹性,并考虑在适当的地方实现这些模式。
- 你可以在Azure架构中心找到几个应用服务的推荐做法。
- 考虑对数据层使用主动地理复制,对图像和队列使用地理冗余存储。
- 有关弹性的更深入讨论,请参阅Azure架构中心的相关文章。
部署此场景
要部署此场景,请按照本分步教程演示如何手动部署每个组件。按照教程进行操作时,请选择App Service Environment v3而不是v2。本教程还提供了。NET示例应用程序,该应用程序运行一个简单的Contoso费用报告应用程序。
定价
探索运行此场景的成本。所有服务都在成本计算器中预先配置。要了解定价将如何针对您的特定用例进行更改,请更改适当的变量以匹配您的预期流量。
我们根据您期望获得的流量提供了三个成本概况示例:
- 小型:此定价示例表示每月为几千个用户提供服务的最低生产级别实例所需的组件。该应用程序使用的是一个标准web应用程序的单个实例,该实例足以启用自动缩放。其他每个组件都扩展到一个基本层,这将最大限度地降低成本,但仍能确保有服务级别协议(SLA)支持和足够的容量来处理生产级别的工作负载。
- 中等:此定价示例表示中等规模部署所需的组件。在这里,我们估计一个月内大约有100000名用户。预期流量在具有中等标准层的单个应用程序服务实例中处理。此外,计算器中还添加了中等级别的认知和搜索服务。
- 大型:此定价示例代表了一个适用于高规模的应用程序,每月有数百万用户移动数TB的数据。在这种使用水平下,需要在流量管理器的领导下部署在多个地区的高性能高级web应用程序。数据由以下组件组成:存储、数据库和CDN,所有这些都是为数TB的数据配置的。
接下来的步骤
- Step-by-step deployment tutorial
- Integrate your ILB App Service Environment with the Azure Application Gateway
- Integrate your Web Apps with the Azure Application Gateway
- Geo distributed scale with App Service Environments
相关资源
- App Service web application reference architecture
- high-availability enterprise deployment using App Services Environment
- Publish internal APIs to external users
- 登录 发表评论
- 3 次浏览
最新内容
- 2 days 7 hours ago
- 2 days 9 hours ago
- 2 days 9 hours ago
- 5 days 1 hour ago
- 5 days 8 hours ago
- 5 days 9 hours ago
- 5 days 9 hours ago
- 5 days 9 hours ago
- 1 week 2 days ago
- 1 week 2 days ago