你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

安全地托管 Web 应用程序

Azure 应用程序服务
Azure 应用程序网关
Azure SQL 数据库
Azure VPN 网关
Azure Web 应用程序防火墙

本文介绍如何使用 应用服务环境部署安全应用程序。 此体系结构使用 Azure 应用程序网关Azure Web 应用程序防火墙 来限制来自 Internet 的应用程序访问。 本文还介绍如何使用 Azure DevOps 将持续集成和持续部署(CI/CD)与应用服务环境集成。

银行和保险等行业通常使用此解决方案,因为客户重视平台级和应用程序级安全性。 为了演示这些概念,以下示例应用程序允许用户提交费用报告。

体系结构

此图显示了安全内部负载均衡器应用服务环境部署的示例方案体系结构。

下载此体系结构的 Visio 文件

数据流

以下数据流对应于上图:

  1. HTTP 和 HTTPS 请求会到达应用程序网关。

  2. (可选)为 Web 应用启用Microsoft Entra 身份验证。 流量到达应用程序网关后,系统会提示用户提供凭据以向应用程序进行身份验证。 此图不显示此步骤。

  3. 用户请求流经环境的内部负载均衡器(ILB),将流量路由到费用 Web 应用。

  4. 用户创建费用报表。

  5. 在创建费用报表过程中,将调用已部署的 API 应用以检索用户的经理名称和电子邮件。

  6. 系统将费用报表存储在 Azure SQL 数据库中。

  7. 为了便于持续部署,代码将被签入到 Azure DevOps 实例中。

  8. 生成虚拟机(VM)包括 Azure DevOps 代理。 此代理使生成 VM 能够拉取 Web 应用项目,并使用它们将 Web 应用部署到应用服务环境。 生成 VM 驻留在与应用服务环境相同的虚拟网络中的子网中。

组件

  • 应用服务环境提供完全隔离的专用环境,可大规模安全地运行应用程序。 应用服务环境及其工作负载都驻留在虚拟网络后面,因此设置增加了额外的安全性和隔离层。 此方案使用 ILB 应用服务环境来满足大规模和隔离的需求。

  • 此工作负荷使用 应用服务独立定价层。 应用程序在 Azure 数据中心的专用环境中运行,该数据中心使用更快的处理器和固态硬盘(SSD)存储,并提供最大的横向扩展功能。

  • 应用服务主机 Web 应用程序和 RESTful API 的 Web 应用API 功能 。 这些应用和 API 托管在独立服务计划中,该计划还提供专用层中的自动缩放、自定义域和其他功能。

  • 应用程序网关 是一个第 7 层 Web 流量负载均衡器,用于管理发到 Web 应用程序的流量。 它提供安全套接字层(SSL)卸载,这消除了解密来自托管应用程序的 Web 服务器的流量的开销。

  • Web 应用程序防火墙 是增强安全性的应用程序网关的一项功能。 Web 应用程序防火墙使用 Open Worldwide Application Security Project (OWASP) 规则来保护 Web 应用程序免受攻击,例如跨站点脚本、会话劫持和 SQL 注入。

  • SQL 数据库 存储应用程序的数据。 大部分数据是关系型数据,其中一些数据作为文档和 Blob 存储。

  • Azure 虚拟网络 在 Azure 中提供各种网络功能。 可以将虚拟网络对等互连,并通过 ExpressRoute 或站点到站点虚拟专用网络(VPN)与本地数据中心建立连接。 此方案使虚拟网络上的 服务终结点 能够确保数据流仅在 Azure 虚拟网络和 SQL 数据库实例之间流动。

  • Azure DevOps 通过帮助团队在冲刺期间进行协作以及提供用于创建生成和发布管道的工具,从而支持敏捷开发。

  • Azure 生成 VM 使已安装的代理能够拉取相应的生成并将 Web 应用部署到环境。

备选方法

应用服务环境可以在 Windows 上运行常规 Web 应用,或在此示例中,作为部署在环境中部署的 Linux 容器运行的 Web 应用。 此方案使用应用服务环境来托管这些单实例容器化应用程序。 设计解决方案时,请考虑以下替代方法:

  • Azure 容器应用 是一个无服务器平台,可降低基础结构开销,并在运行容器化应用程序时节省成本。 无需管理服务器配置、容器业务流程和部署详细信息。 容器应用提供保持应用程序稳定和安全所需的所有 up-to日期服务器资源。

  • Azure Kubernetes 服务(AKS) 是一个开源项目和业务流程平台,旨在托管通常使用基于微服务的体系结构的复杂多容器应用程序。 AKS 是一种托管的 Azure 服务,可简化 Kubernetes 群集的预配和配置。 必须了解 Kubernetes 平台以支持和维护它,因此托管少量单实例容器化 Web 应用程序可能不是最佳选择。

对数据层使用以下替代方法:

可能的用例

对于以下用例,请考虑此解决方案:

  • 构建需要额外安全性的 Azure Web 应用。
  • 提供专用租户,而不是共享租户应用服务计划。
  • 将 Azure DevOps 与 内部负载均衡 的应用服务环境配合使用。

解决 TLS 和 DNS 设计决策问题

应用服务环境的默认域后缀的域名系统(DNS)设置不会限制应用程序对这些名称的可访问性。 ILB 应用服务环境的自定义域后缀功能允许你使用自己的域后缀访问应用服务环境中托管的应用程序。

自定义域后缀定义应用服务环境使用的根域。 对于 ILB 应用服务环境,默认根域为 appserviceenvironment.net。 ILB 应用服务环境是客户虚拟网络的内部环境,因此客户除了与虚拟网络环境一致的默认域外,还可以使用根域。 例如,Contoso Corporation 可能会使用默认的 internal.contoso.com 根域,该域仅可在 Contoso 的虚拟网络中解析和访问。 可以通过访问此虚拟网络中的应用来访问 APP-NAME.internal.contoso.com

自定义域后缀适用于应用服务环境。 此功能不同于单个应用服务实例上的自定义域绑定。

如果用于自定义域后缀的证书包含使用者备用名称(SAN)条目 *.scm.CUSTOM-DOMAIN,则可从中访问 APP-NAME.scm.CUSTOM-DOMAIN源代码管理管理器(SCM)站点。 只能使用基本身份验证通过自定义域访问 SCM。 仅当使用默认根域时,单一登录才可用。

在 ILB 应用服务环境中管理证书时,请考虑以下因素:

  • 将有效的 SSL 或传输层安全性 (TLS) 证书存储在 Azure 密钥保管库中。PFX 格式。

  • 确保证书小于 20 KB。

  • 对所选自定义域名使用通配符证书。

  • 为应用服务环境配置系统分配的或用户分配的托管标识。 托管标识针对 SSL 或 TLS 证书所在的 Azure 密钥保管库进行身份验证。

  • 预期应用服务环境在密钥保管库轮换后的 24 小时内应用证书更改。

对 Azure Key Vault 的网络访问

  • 可以公开访问密钥保管库,也可以通过可从部署应用服务环境的子网访问的专用终结点。

  • 如果使用公共访问,则可以保护密钥保管库,以仅接受来自应用服务环境的出站 IP 地址的流量。

  • 应用服务环境在访问密钥保管库时使用平台出站 IP 地址作为源地址。 可以在 Azure 门户的 “IP 地址 ”页中找到此 IP 地址。

DNS 配置

若要使用自定义域后缀访问应用服务环境中的应用程序,请在自定义域的 Azure 专用 DNS 区域中配置自己的 DNS 服务器或配置 DNS。 有关详细信息,请参阅 DNS 配置

保护唯一的默认主机名

安全唯一的默认主机名功能提供了一个长期解决方案,用于保护资源免受 DNS 条目和子域接管的悬而未动。 如果为应用服务资源启用此功能,则组织外部没有人可以重新创建具有相同默认主机名的资源。 此保护可防止恶意参与者利用悬停的 DNS 条目并接管子域。 有关详细信息,请参阅 安全唯一的默认主机名

注意事项

这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改进工作负荷质量的指导原则。 有关详细信息,请参阅 Well-Architected Framework

可靠性

可靠性有助于确保应用程序能够履行对客户的承诺。 有关详细信息,请参阅 可靠性设计评审清单

可用性

安全性

安全性提供针对故意攻击和滥用宝贵数据和系统的保证。 有关详细信息,请参阅 安全设计评审清单

成本优化

成本优化侧重于减少不必要的开支和提高运营效率的方法。 有关详细信息,请参阅 成本优化的设计评审清单

了解运行此方案的成本。 以下示例成本配置文件基于预期的流量。 所有服务都在成本计算器中预配置。

  • 小型部署:此定价示例表示每月为数千个用户提供服务的最低生产级实例的组件。 该应用使用独立 Web 应用的单个小型实例。 每个额外的组件扩展到基本层,以最大程度地降低成本,同时确保服务级别协议(SLA)支持和足够的容量来处理生产级工作负荷。

  • 中等部署:此定价示例表示中等大小的部署的组件,每月提供大约 100,000 个用户。 中等大小的单个独立应用服务实例管理流量。 应用程序网关和 SQL 数据库容量增加以支持添加的工作负荷。

  • 大型部署:此定价示例表示每月为数百万用户提供服务的大规模应用程序的组件,并移动数 TB 的数据。 此级别的使用需要部署在多个区域且由 Azure 流量管理器前端的高性能隔离层 Web 应用。 估算值包括流量管理器和额外的应用程序网关和虚拟网络实例。 SQL 数据库的容量增加以支持添加的工作负荷。

若要查看特定用例的定价,请更改相应的变量以匹配预期流量。

性能效率

性能效率是指工作负荷能够高效地缩放以满足用户需求。 有关详细信息,请参阅 性能效率的设计评审清单

作者

Microsoft维护本文。 以下参与者撰写了本文。

主要作者:

  • 尼古拉斯·麦考伦 |首席客户工程师

若要查看非公共LinkedIn配置文件,请登录到LinkedIn。

后续步骤