使用 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 实例之前,需要完成以下网络相关资源的配置:

  1. 创建 VNET
  2. 为 APIM 实例创建子网
  3. 为 APIM 子网创建网络安全组(NSG),并配置入站和出站规则。
  4. 为应用网关实例创建子网
  5. 为应用网关子网创建 NSG,并配置入站规则。
  6. 为 APIM 实例创建公共 IP 地址,需设置为 Microsoft 网络路由参考。
  7. 为应用网关实例创建公共 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 实例。以下是主要步骤:

  1. 创建 APIM 实例

    • 指定开发人员定价层。
    • 配置虚拟网络设置,引用之前创建的 VNET、APIM 子网和公共 IP 地址。
  2. 配置自定义域

    • 默认情况下,APIM 实例通过 *.azure-[api](https://www.explinks.com/wiki/api/).net 子域访问。
    • 为以下端点创建自定义域:
      • 网关:用于访问 API 的代理端点。
      • 开发者门户:访问开发者门户的端点。
      • 管理:APIM 实例的管理端点。
  3. 配置 DNS

    • 创建专用 DNS 区域,添加 A 记录,将自定义域映射到 APIM 实例的内部 IP 地址。

部署和配置应用程序网关

Azure 应用程序网关(App Gateway)支持 WAF V2 服务层,并基于 OWASP 核心规则集(CRS)。以下是部署和配置的主要步骤:

  1. 创建 WAF 策略

    • 在部署 App Gateway 时创建 WAF 策略,用于保护代理端点。
  2. 配置后端池和路由规则

    • 为 APIM 的代理端点创建后端池,并配置路由规则。
  3. 设置健康探测器

    • APIM 的代理、管理和门户端点分别创建自定义健康探测器。
  4. 配置自定义域

    • 使用自签名证书为 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