使用 Azure 应用程序网关和 Azure 保护外部 API
作者:API传播员 · 2025-12-06 · 阅读时间:6分钟
本实验室通过Azure门户部署Azure API管理服务(APIM)和应用程序网关(App Gateway),实现网关路由模式以保护外部API。使用自签名证书、网络安全组(NSG)和Web应用程序防火墙(WAF)增强安全性,涵盖网络配置、自定义域设置和故障排除,帮助用户掌握Azure API管理与应用程序网关集成方法。
使用 Azure 应用程序网关和 Azure 保护外部 API
随着网络威胁的日益复杂和频繁,构建强大的安全策略已成为企业的首要任务。在这一过程中,网关路由模式作为一种强大的工具,不仅能够有效保护网络流量,还可以对流量来源和质量进行限制,并支持动态路由规则的实现。
在这种架构中,Azure API 管理服务(APIM)是核心组件,它被部署在内部虚拟网络中以提升安全性。同时,Azure 应用程序网关(App Gateway)作为一个保护层,能够屏蔽 OWASP 漏洞,并提供七层负载均衡功能。通过集成 Web 应用程序防火墙(WAF),进一步增强了整体安全性。
实验室环境概述
本实验室旨在通过 Azure 门户创建相关资源,帮助用户理解网关路由模式的实施过程。以下是实验室的主要特点:
- 资源部署:所有资源将集中在一个资源组中,便于管理。
- 网络需求:需要一个包含两个子网和两个公共 IP 地址的虚拟网络(VNET)。APIM 和 App Gateway 实例各自需要一个专用子网,以支持未来的扩展。
网络资源配置步骤
在部署 APIM 和 App Gateway 实例之前,需要完成以下网络相关资源的配置:
- 创建 VNET。
- 为 APIM 实例创建子网。
- 为 APIM 子网创建网络安全组(NSG),并配置入站和出站规则。
- 为应用网关实例创建子网。
- 为应用网关子网创建 NSG,并配置入站规则。
- 为 APIM 实例创建公共 IP 地址,需设置为 Microsoft 网络路由参考。
- 为应用网关实例创建公共 IP 地址,需设置为 Internet 路由参考。
完成上述步骤后,资源组将包含以下资源:
- VNET
- 两个子网(分别用于 APIM 和 App Gateway)
- 两个公共 IP 地址
- 配置好的网络安全组(NSG)
使用自签名证书保护端点
为了保护 APIM 和应用网关的端点,本实验室使用自签名数字证书。以下是一个示例 PowerShell 脚本,用于创建根 CA 证书并生成 .pfx 格式的证书:
$env = 'dev'
$domain = 'demo.com'
$CnPrefix = 'portal','proxy','management','api'
# 创建根证书
$param1 = @{
Subject = "CN=$env.$domain, C=AU"
KeyLength = 2048
KeyAlgorithm = 'RSA'
HashAlgorithm = 'SHA256'
KeyExportPolicy = 'Exportable'
NotAfter = (Get-Date).AddYears(5)
CertStoreLocation = 'Cert:LocalMachineMy'
KeyUsage = 'CertSign','CRLSign'
}
$rootCA = New-SelfSignedCertificate @param1# 导出根证书
$thumb = $rootCA.Thumbprint
$root = Get-Item -Path Cert:LocalMachineMy$($thumb)
$path = ".rootca-$env.cer"
$base64certificate = @"
-----BEGIN CERTIFICATE-----
$([Convert]::ToBase64String($root.Export('Cert'), [System.Base64FormattingOptions]::InsertLineBreaks))
-----END CERTIFICATE-----
"@
Set-Content -Path $path -Value $base64certificate# 导入根证书到本地信任根存储
Import-Certificate -CertStoreLocation 'Cert:CurrentUserMy' -FilePath ".rootca-$env.cer"# 生成应用网关和 APIM 的证书
function Generate-Cert {
param ([String[]]$cnPrefix)
foreach ($cn in $cnPrefix) {
$param2 = @{
DnsName = "*.$domain"
Subject = "$cn.$domain"
Signer = $rootCA
KeyLength = 2048
KeyAlgorithm = 'RSA'
HashAlgorithm = 'SHA256'
KeyExportPolicy = 'Exportable'
CertStoreLocation = 'Cert:LocalMachineMy'
NotAfter = (Get-Date).AddYears(2)
}
$selfCert = New-SelfSignedCertificate @param2
Export-PfxCertificate -Cert $selfCert -FilePath ".$cn-$env-cert.pfx" -Password (ConvertTo-SecureString -AsPlainText 'password1' -Force)
}
}
Generate-Cert -cnPrefix $CnPrefix
配置 APIM 实例
完成网络配置后,可以开始创建 APIM 实例。以下是主要步骤:
-
创建 APIM 实例:
- 指定开发人员定价层。
- 配置虚拟网络设置,引用之前创建的 VNET、APIM 子网和公共 IP 地址。
-
配置自定义域:
- 默认情况下,APIM 实例通过
*.azure-[api](https://www.explinks.com/wiki/api/).net子域访问。 - 为以下端点创建自定义域:
- 网关:用于访问 API 的代理端点。
- 开发者门户:访问开发者门户的端点。
- 管理:APIM 实例的管理端点。
- 默认情况下,APIM 实例通过
-
配置 DNS:
- 创建专用 DNS 区域,添加 A 记录,将自定义域映射到 APIM 实例的内部 IP 地址。
部署和配置应用程序网关
Azure 应用程序网关(App Gateway)支持 WAF V2 服务层,并基于 OWASP 核心规则集(CRS)。以下是部署和配置的主要步骤:
-
创建 WAF 策略:
- 在部署 App Gateway 时创建 WAF 策略,用于保护代理端点。
-
配置后端池和路由规则:
- 为 APIM 的代理端点创建后端池,并配置路由规则。
-
设置健康探测器:
- 为 APIM 的代理、管理和门户端点分别创建自定义健康探测器。
-
配置自定义域:
- 使用自签名证书为 APIM 的各端点配置自定义域。
故障排除和优化建议
在集成 APIM 和 App Gateway 时,可能会遇到以下问题:
- 后端健康状况未知:检查应用网关子网的 NSG 配置。
- DNS 配置问题:确保自定义域正确解析到 APIM 的内部 IP 地址。
此外,为了优化生产环境的部署,建议:
- 使用多个资源组:根据资源的生命周期和用途进行分组管理。
- 集中日志记录和监控:通过 Azure Monitor 和 Application Insights 实现。
- 采用基础设施即代码(IaC):使用 Terraform 或 ARM 模板自动化部署。
- 使用有效 CA 的证书:增强安全性和用户信任。
- **实施API 密钥保护端点。
通过本实验室,您已经掌握了如何将 Azure API 管理与应用程序网关集成,以实现网关路由模式,并安全地向外部消费者公开内部 API。希望这些内容对您有所帮助!
原文链接: https://keithjenneke.medium.com/securing-external-apis-with-azure-application-gateway-and-azure-api-management-beda796b3ef1
热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密
最新文章
- 从Talkie到DeepSeek:揭秘AI应用出海的盈利路径
- 确保OAuth 2.0访问令牌安全,使用持有者凭证证明
- 利用JAVA语言调用豆包大模型接口实战指南
- 如何调用 GraphQL Admin API 查询非Rest API 可以查询到的数据
- API – API是什么?
- 超越网关API(第二部分):如何扩展Envoy … – Tetrate
- 使用 Azure 应用程序网关和 Azure 保护外部 API
- 如何使用 PostgREST 和 Apache APISIX 构建高效、安全的 RESTful API 解决方案
- 什么是SQL注入?理解、风险与防范技巧
- Excel中,创建一个公式来调用ChatGPT API并返回结果
- 告别Mock服务: 用Chrome DevTools模拟API数据
- 如何获取DeepL API Key 密钥(分步指南)