如何判断Azure API Management请求是否来自Application Gateway及安全疑问
一、Context.Request.OriginalUrl.Host的安全风险
Context.Request.OriginalUrl.Host的值完全来自请求的Host Header,二者是一致的。既然官方文档明确指出Host Header可被客户端篡改、用于来源判断不安全,那么用这个字段做同样的校验自然也存在相同的风险,不可靠。
二、判断请求源自Application Gateway的更优方法
以下是几种更安全的实现方式:
自定义专用验证头
配置Application Gateway在转发请求到APIM时,添加一个仅内部知晓的自定义请求头(比如X-AG-Validation-Key)并设置固定的密钥值。然后在APIM的入站策略中,添加校验逻辑:检查该头是否存在且值与预设密钥完全匹配,不匹配则直接拒绝请求。
注意:密钥要严格保密,且建议将App Gateway和APIM部署在同一个虚拟网络内,减少头信息被拦截篡改的可能。源IP地址过滤
利用Application Gateway的固定出站IP(或VNet内网IP),在APIM中配置IP过滤策略:只允许来自这些IP地址的请求通过。如果App Gateway使用的是公共IP,可直接将其加入允许列表;如果是VNet部署,可指定对应的子网IP范围。
提示:若App Gateway是多实例或动态IP场景,需定期更新IP列表,或使用Azure服务标签简化维护。Azure AD服务间身份验证
为App Gateway和APIM配置Azure AD服务主体身份验证:让App Gateway在转发请求时携带Azure AD颁发的访问令牌,APIM的入站策略中校验令牌的有效性(包括签名、受众、过期时间等)。这种方式安全性最高,适合对身份验证要求严格的场景,但配置相对复杂。
内容的提问来源于stack exchange,提问作者sampa

