随着越来越多的工作负载在其设计中遵循 API 优先方法,并且 Internet 上对 Web 应用程序的威胁和严重性与日俱增,制定用于保护 API 的安全策略已变得至关重要。 实现 API 安全性的一个步骤是使用 网关路由模式来保护网络流量。 除了支持灵活的路由规则外,还可以使用网关来限制流量源位置和流量质量。 本文介绍如何使用 Azure 应用程序网关 和 Azure API 管理来保护 API 访问。
体系结构
本文不会介绍应用程序的基础平台,例如应用服务环境、Azure SQL 托管实例和 Azure Kubernetes 服务。 图表的这些部分仅演示可以执行的操作(作为范围更广泛的解决方案)。 本文专门讨论了着色区域、API 管理和应用程序网关。
下载此体系结构的 Visio 文件。
工作流
应用程序网关可接收其子网网络安全组 (NSG) 已允许的 HTTP 请求。
然后,应用程序网关上的 Web 应用程序防火墙 (WAF) 会根据 WAF 规则(包括 Geomatch 自定义规则)检查请求。 如果请求有效,则请求可以继续。
应用程序网关会设置 URL 代理机制,用于将请求发送到正确的后端池。 例如,根据 API 调用的 URL 格式:
格式为
api.<some-domain>/external/*
的 URL 可以到达后端,以与请求的 API 交互。格式设置为
api.<some-domain>/*
的调用会进入死角 (sinkpool),这是一个没有目标的后端池。
此外,应用程序网关会接受和代理来自同一 Azure 虚拟网络中
api.<some-domain>/internal/*
下的资源。最后,在 API 管理级别,API 设置为接受以下模式下的调用:
api.<some-domain>/external/*
api.<some-domain>/internal/*
在此场景中,API 管理使用两种类型的 IP 地址,即公共地址和专用地址。 公共 IP 地址用于端口 3443 上的内部通信,以及外部虚拟网络配置中的运行时 API 流量。 当 API 管理向面向 Internet 的公共后端发送请求时,便将公共 IP 地址显示为请求的源。 有关详细信息,请参阅 VNet 中 API 管理服务的 IP 地址。
应用程序网关级的传递规则可将
portal.<some-domain>/*
下的用户正确重定向到开发人员门户,以便开发人员可从内部和外部环境管理 API 及其配置。
组件
借助 Azure 虚拟网络,许多类型的 Azure 资源可相互之间、与 Internet 以及与本地网络进行私密通信。 在此体系结构中,应用程序网关负责将公共 Internet 流量隧道传输到此专用网络。
Azure 应用程序网关是一种 Web 流量负载均衡器,可用于管理发往 Web 应用程序的流量。 这种类型的路由称为应用程序层(OSI 层 7)负载均衡。 在此体系结构中,网关不仅用于路由,还托管 Web 应用程序防火墙 (WAF),以防止常见的基于 Web 的攻击途径。
Azure API 管理是一种混合式多云管理平台,适用于所有环境中的 API。 API 管理为现有后端服务创建一致的新式 API 网关。 在此体系结构中,API 管理以完全专用模式使用,以从 API 代码和主机中卸载交叉问题。
建议
此解决方案侧重于实现整个解决方案,以及测试来自 API 管理虚拟网络内外的 API 访问。 有关 API 管理虚拟网络集成过程的详细信息,请参阅在包含应用程序网关的内部 VNET 中集成 API 管理。
要与后端中的专用资源通信,应用程序网关和 API 管理必须与资源位于同一虚拟网络中,或必须位于已对等互连的虚拟网络中。
专用内部部署模型允许 API 管理连接到现有虚拟网络,使其可从该网络上下文内部进行访问。 若要启用此功能,请部署开发人员或高级 API 管理层。
在 Azure 密钥保管库中管理应用程序网关证书。
若要个性化与服务的交互,可以使用 CNAME 条目。
备选方法
可以使用其他服务来提供类似级别的防火墙和 Web 应用程序防火墙 (WAF) 保护:
- Azure Front Door
- Azure 防火墙
- Barracuda 等合作伙伴解决方案
- Azure 市场中提供的其他解决方案
注意事项
可靠性
无论实例计数如何,Azure 应用程序网关始终以高度可用的方式部署。 为了避免区域故障的影响,可以将应用程序网关配置为跨越多个可用性区域。 有关详细信息,请参阅自动缩放和高可用性。
为 API 管理服务组件启用区域冗余,以提供复原能力和高可用性。 区域冗余在物理上分离的区域中的数据中心之间复制 API 管理网关和控制平面,使其能够适应区域故障。 要支持可用性区域,必须使用 API 管理高级层。
API 管理还支持多区域部署,这可以在一个区域脱机时提高可用性。 有关详细信息,请参阅多区域部署。 在此拓扑中,由于应用程序网关属于区域性服务,因此还必须为每个区域创建一个应用程序网关。
安全性
有关应用程序网关安全性的详细信息,请参阅应用程序网关的 Azure 安全基线。
有关 API 管理安全性的详细信息,请参阅 API 管理的 Azure 安全基线。
Azure DDoS 防护与应用程序设计最佳做法相结合,提供增强的 DDoS 缓解功能来更全面地防御 DDoS 攻击。 应在任何外围虚拟网络上启用 Azure DDOS 防护。
成本优化
此体系结构的成本取决于配置方面,如下所示:
- 服务层
- 可伸缩性,表示为支持给定需求而由服务动态分配的实例数
- 此体系结构是连续运行还是每月仅运行数小时
评估这些方面后,请转到 Azure 定价计算器来估算定价。
性能效率
应用程序网关是此体系结构的入口点,WAF 功能需要额外的处理能力来进行每次请求分析。 若要允许应用程序网关在现场扩展其计算容量,启用自动缩放非常重要。 有关详细信息,请参阅指定自动缩放。 按照产品文档建议设置应用程序网关子网的大小。 这可确保子网大小足以支持完全横向扩展。
若要支持高度并发的场景,请启用 API 管理自动缩放。 自动缩放可扩展 API 管理功能,以响应越来越多的传入请求。 有关详细信息,请参阅自动缩放 Azure API 管理实例。
部署此方案
有关此方案的演示,请参阅 Azure 快速入门库出版物《带有内部 API 管理和 Web 应用的应用程序网关》。
后续步骤
请按照良好的 Web API 设计准则设计 API,并使用良好的 Web API 实现做法实现 API。