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

Azure API 管理登陆区域体系结构

Azure API 管理
Azure 应用程序网关
Azure Functions
.NET

在内部系统和外部渠道中,组织及其客户如何访问服务越来越重要。 在内部,API 有助于访问业务线(LoB)应用程序、专有解决方案和合作伙伴集成。 在外部,越来越多的组织专注于通过 API 盈利提高工作效率和产生收入。 鉴于这一趋势,Azure API 管理充当标准化治理、发布和监督内部和外部利益干系人 API 的基础要素。

Azure 应用程序网关充当 API 的安全检查点。 无需允许用户直接通过 Internet 进行连接,而是通过应用程序网关路由所有流量。 此设置添加了额外的访问控制来帮助保护 API。 使用此方法,可以使用单个 API 管理实例支持组织内部 API 和组织外部 API,同时保留网关后面保护的任何公开 API。

注意

此体系结构是 Azure 云采用框架 中 Azure 登陆区域中 API 管理 指南的基础。

体系结构

此图显示了 API 管理的安全基线体系结构。

下载此体系结构的 Visio 文件

此体系结构假定策略从 Azure 登陆区域引用实现 到位,并且结构从管理组向下驱动。

Workflow

  • 公共 IP 地址分配给应用程序网关,用作外部流量的入口点。 该终结点通过自定义域公开 API。

  • 应用程序网关部署在其自己的子网中,并受 Web 应用程序防火墙(WAF)策略保护,用于检查和筛选传入请求。

  • 流量从应用程序网关路由到 API 管理(高级),该管理子网驻留在单独的 API 管理子网中。 API 管理实例在内部模式下配置,可防止直接公共访问。

  • 专用终结点用于将 API 管理安全地连接到仅向虚拟网络公开的后端应用程序服务器。 API 管理还会定期连接依赖项,例如 Azure 密钥保管库。 通常,所有这些专用连接都与专用终结点子网中的终结点发生。

  • Log Analytics 工作区和 Application Insights 集成用于日志记录、监视和遥测。

组件

  • API 管理 是一项托管服务,可用于跨混合和多云环境管理服务。 它为内部和外部用户提供 API 可观测性和消耗性的控制和安全性。 在此体系结构中,API 管理充当抽象后端体系结构的外观。

  • 应用程序网关 是一种托管服务,充当第 7 层负载均衡器和 WAF。 应用程序网关保护内部 API 管理实例,该实例支持使用内部和外部模式。 在此体系结构中,API 管理可保护 API,应用程序网关添加了 WAF 等补充功能。

  • 专用域名系统(DNS)区域 是 Azure DNS 的一项功能,可用于管理和解析虚拟网络中的域名,而无需实现自定义 DNS 解决方案。 专用 DNS 区域可以通过 虚拟网络链接与一个或多个虚拟网络保持一致。 在此体系结构中,需要专用 DNS 区域,以确保在虚拟网络中正确解析名称。

  • Application Insights 是一种可扩展的应用程序性能管理服务,可帮助开发人员检测异常、诊断问题和了解使用模式。 Application Insights 为实时 Web 应用提供可扩展应用程序性能管理和监视。 支持各种平台,包括 .NET、Node.js、Java 和 Python。 它支持托管在 Azure、本地、混合环境或其他公有云中的应用。 在此体系结构中,Application Insights 监视已部署应用程序的行为。

  • Log Analytics 是一种基于云的数据分析工具,可用于编辑和运行对 Azure Monitor 日志中的数据的日志查询,(可选)在 Azure 门户中。 开发人员可以运行简单的查询来检索记录或使用 Log Analytics 进行高级分析,然后将结果可视化。 在此体系结构中,Log Analytics 聚合所有平台资源日志进行分析和报告。

  • Azure Key Vault 是一种云服务,可安全地存储和访问机密。 这些机密的范围从 API 密钥和密码到证书和加密密钥。 在此体系结构中,Key Vault 存储应用程序网关使用的安全套接字层(SSL)证书。

备选方法

对于 API 管理实例连接到的后端服务,可以使用以下几种替代方法:

  • Azure 应用服务 是一项完全托管的基于 HTTP 的服务,用于生成、部署和缩放 Web 应用。 它支持 .NET、.NET Core、Java、Ruby、Node.js、PHP 和 Python。 应用程序可以在基于 Windows 或 Linux 的环境中运行和缩放。

  • Azure Kubernetes 服务(AKS) 是一种托管的 Kubernetes 产品/服务,可提供完全托管的群集。 它支持集成的持续集成和持续交付(CI/CD),以及内置的治理和安全性。

  • Azure 逻辑应用 是一个基于云的平台,用于创建和运行自动化工作流。 有关详细信息,请参阅 示例参考体系结构

  • Azure 容器应用 是一项完全托管的无服务器容器服务,可用于在无服务器平台上运行微服务和容器化应用程序。

对于多区域部署,请考虑使用 Azure Front Door 在用户与应用程序的静态和动态 Web 内容之间提供快速、可靠且安全的访问。

若要查看应用程序网关如何保护 API 的其他示例,请参阅 使用应用程序网关和 API 管理保护 API

注意事项

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

可靠性

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

  • 部署至少两个 缩放单元 的 API 管理,这些缩放单元分布在每个区域中的两个或更多可用性区域。 监视容量指标并预配足够的容量单位,以便即使一个可用性区域中的单位丢失,也可以继续运行。

  • 建议使用高级层,因为它支持可用性区域和多区域部署。 此功能意味着即使一个区域或区域出现故障,服务也可以继续运行。 这些功能有助于在中断或灾难期间保护应用程序。

  • 对于灾难恢复,请使用用户分配的托管标识而不是系统分配的标识设置 API 管理。 如果重新部署或删除资源,标识及其权限将保持不变,因此可以更轻松地还原访问权限。 使用 Azure Pipelines 自动执行备份。 确定是否需要在多个区域中部署服务,以提高可靠性。

  • 虚拟网络对等互连在区域内提供强大的性能,但它的可伸缩性限制为 500 个网络。 如果需要连接更多工作负载,请使用 中心辐射型设计Azure 虚拟 WAN

安全性

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

  • API 管理 验证策略 针对 OpenAPI 架构验证 API 请求和响应。 这些功能不是 WAF 的替代项,但它们可以提供针对某些威胁的额外保护。 添加验证策略可能会影响性能,因此我们建议使用性能负载测试来评估它们对 API 吞吐量的影响。

  • Microsoft Defender for API 为 API 管理中发布的 API 提供完整的生命周期保护、检测和响应。 一个关键功能是通过使用基于机器学习的检测和基于规则的检测,通过运行时异常观察来检测 Open Web Application Security Project (OWASP) API 前 10 个漏洞的漏洞。

  • API 管理 工作区 可帮助你组织和隔离 API。 使用此方法可以更轻松地控制谁可以访问和管理它们。 每个工作区可以有自己的权限集,因此只能限制对需要权限的人员或团队的访问权限。 这种分离可降低意外更改或未经授权的访问的风险,并支持更安全的 API 环境。

  • 使用 Key Vault 机密作为 API 管理策略中的命名值 来保护 API 管理策略中的敏感信息。

  • 使用 应用程序网关进行内部 API 管理实例的外部访问 ,以保护 API 管理实例,使用 WAF 抵御常见的 Web 应用程序攻击和漏洞,并启用混合连接。

  • 在虚拟网络中部署 API 管理网关,以支持混合连接并提高安全性。

  • 虚拟网络对等互连可提高区域中的性能,并支持虚拟网络之间的专用通信。

  • 使用 WAF 时,会引入一个层,用于检查传入流量是否存在恶意行为。 此保护有助于阻止常见威胁,例如 SQL 注入和跨站点脚本编写。 应用程序网关和分布式拒绝服务(DDoS)保护有助于防止过多的流量或连接洪水从压倒性的 API 管理实例。 有关详细信息,请参阅 使用应用程序网关和 API 管理来保护 API

  • Azure Functions 的专用终结点允许通过虚拟网络中的专用 IP 地址安全地连接到函数应用。 此设置可防止向公共 Internet 公开函数,从而降低未经授权的访问风险。 在此体系结构中,专用终结点可确保只有网络中受信任的资源才能访问 Azure Functions。

成本优化

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

  • 此部署使用 高级计划 来支持可用性区域和虚拟网络功能。 如果不需要专用实例,也可以使用支持网络访问和可用性区域的 Flex Consumption。 查看此部署的 定价计算器

  • 对于概念证明或原型,我们建议使用其他 API 管理层,例如开发人员或标准层。

卓越运营

卓越运营涵盖了部署应用程序并使其在生产环境中保持运行的运营流程。 有关详细信息,请参阅设计卓越运营的审查清单

  • 将 API 管理配置表示为 Azure 资源管理器模板,并采用基础结构即代码 (IaC) 方法。

  • 使用 CI/CD 流程来管理、更新 API 管理配置和控制其版本。

  • 创建自定义运行状况探测来帮助验证 API 管理实例的状态。 使用 URL /status-0123456789abcdef 为应用程序网关中的 API 管理服务创建通用运行状况终结点。

  • 密钥保管库中更新的证书在 API 管理中自动轮换,这反映了四小时内所做的更改。

  • 如果使用 DevOps 工具(例如 Azure DevOps 或 GitHub),则云托管的代理或运行器将通过公共 Internet 运行。 由于此体系结构中的 API 管理设置为内部网络,因此需要使用有权访问虚拟网络的 DevOps 代理。 DevOps 代理可帮助你将策略和其他更改部署到体系结构中的 API。 可以使用这些 CI/CD 模板 将过程分成几个部分,以便开发团队可以为每个 API 部署更改。 DevOps 运行程序启动模板来处理这些单独的部署。

部署此方案

GitHub 上提供了此体系结构。 它包含所有必要的 IaC 文件和 部署说明

作者

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

主要作者:

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

后续步骤