Azure API 管理 - 当 APM 落后于 WAF 时如何获取原始 IP
Posted
技术标签:
【中文标题】Azure API 管理 - 当 APM 落后于 WAF 时如何获取原始 IP【英文标题】:Azure API Management - How to get original IP when APM is behind WAF 【发布时间】:2019-10-29 01:01:18 【问题描述】:我们有以下技术栈
Imperva WAF API 管理 WebApp 中的 WebApi这是当前的实现
客户端 IP 在 WAF 级别进行身份验证 WAF IP 在 APIM 被列入白名单 APIM IP 在 WebApp 级别被列入白名单一切正常,符合预期。
现在,当我转到 APIM -> 分析 -> 请求时,我看到此处列出了 WAF IP,而不是客户端 IP。所以在这种情况下,我们将无法跟踪谁在使用什么
我知道我们可以选择通过订阅密钥进行跟踪,但这还不够。
谁能建议如何配置以获得正确的 IP?
【问题讨论】:
MSDN 论坛问题中也有同样的问题。 social.msdn.microsoft.com/Forums/en-US/… @ibrahimatay,感谢您的回复,对不起,我错过了您的回复,是的,所以我现在有 x-forwarded-for,其中包含标头中的客户端 IP,现在的问题是如何获取并添加它在 App Insights 中,然后从 App Insights 本身创建自定义报告? 【参考方案1】:相信你可以在here找到你的答案。 您只需要配置您的服务器以从相关标头中检索正确的 IP。
引用相关部分:
需要原始客户端 IP 如果您的应用程序需要真实的客户端 IP 地址,请确保您已启用从“X-Forwarded-For”或“Incap-Client-IP”标头中检索此值。使用 Imperva 时,您的服务器将看到 Imperva IP 而不是真实的客户端 IP。但是,默认情况下,Imperva 会将原始客户端 IP 地址插入两个 HTTP 标头:“X-Forwarded-For”和 Imperva 标头“Incap-Client-IP”。
但请注意,您应该在给定的 XFF 值中取第一个 IP,否则,第二个标头 real-client-IP 的使用可能会受到第 3 方代理等的影响。
希望对您有所帮助。
【讨论】:
【参考方案2】:向微软提出支持请求后,我们得到了我们想要的
我们就是这样完成的
Imperva WAF 调用 APIM 端点时,也会在 header 中传递 Incap-Client-IP 在 APIM -> API -> 所有 API -> 设置 -> 输入要添加到 App Insights 请求日志中的标头属性 在请求日志下 -> 自定义维度 -> 可以看到 App Insights 中添加了 InCap-Client-IP 属性现在我们可以将其导出为 csv 格式,并可以根据客户端 IP 跟踪使用情况。
【讨论】:
【参考方案3】:这对于 Azure APIM 中的内置报告是不可能的。如果您可以在标头中让 WAF 将客户端 IP 转发到 APIM,那么您可以构建自己的报告基础架构,但这会非常复杂。
【讨论】:
感谢 Vitaliy 的回复。好的。正如您所提到的,客户端 IP 对我们捕获很重要,但捕获 i 并创建自己的报告基础架构是一项艰巨的任务。构建 APIM 内置报告提供的工作量太大。如果我们将客户端 ip 传递给 APIM 并报告将基于它,是否有可能? 不可能立即实现。在低投资选项中,最好的方法是使用 AppInsight 集成并设置包含 WAF 传递的客户端 IP 的额外标头的日志记录。也许然后基于 AppInsight 构建所需的报告可能会更简单。 感谢 Vitaliy 的回复。好的。您是否有任何示例实现链接可供我们从 APIM 向 App Insights 添加自定义数据? 谁能帮我设置包含客户端 IP 的额外头部到 Application Insights 的日志记录? 你试过这个docs.microsoft.com/en-us/azure/api-management/… 吗?以上是关于Azure API 管理 - 当 APM 落后于 WAF 时如何获取原始 IP的主要内容,如果未能解决你的问题,请参考以下文章