You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure环境下上传blob时如何获取发送方IP地址

解决方案:获取Blob上传方IP地址的实现方法

首先说明你在$logs目录找不到IP的原因

默认存储账户的经典日志不会自动启用,新版的存储诊断日志也不会默认写入$logs容器,需要你手动配置日志导出规则后才能拿到完整的请求数据。同时Blob触发器的默认输入绑定不会直接传递客户端IP信息,需要搭配额外配置获取。


可行实现方案

方案1:启用存储账户诊断设置,从操作日志中查询IP

这是最常用的无需修改业务逻辑的方案:

  • 进入对应存储账户的管理页,在左侧「监控」分类下选择诊断设置
  • 选择Blob服务,点击「添加诊断设置」
  • 日志类别勾选StorageRead、StorageWrite,导出目标可以选择Log Analytics工作区(方便查询)或者指定单独的存储容器存放日志
  • 保存配置后,所有Blob操作都会记录完整请求信息,包含ClientIp、操作类型、Blob路径、请求时间、SAS标识等字段
  • 如果选择导出到Log Analytics,可直接用以下查询语句筛选指定Blob的上传IP:
    StorageBlobLogs
    | where OperationName == "PutBlob"
    | where Uri has "你要查询的Blob的完整路径/名称"
    | project TimeGenerated, ClientIp, UserAgent, Uri, SasKeyType
    

注意:诊断日志会有5~15分钟的延迟,不支持实时获取。

方案2:在Blob触发器触发时直接获取IP(实时场景)

如果需要触发Blob处理逻辑时直接拿到上传方IP,可以调整业务流程实现:

  • 方案A:不直接给用户开放存储容器的上传权限,改为提供HTTP触发的函数作为统一上传入口,HTTP请求中可以直接通过req.HttpContext.Connection.RemoteIpAddress拿到客户端IP,你在HTTP函数内完成Blob写入,同时将IP写入Blob的自定义元数据,后续Blob触发器触发时直接读取元数据即可拿到IP
  • 方案B:如果必须给用户发放SAS令牌直接上传存储,生成SAS时给每个用户分配唯一的自定义SAS标识,将标识和用户的IP/身份信息存在你的业务数据库,后续从诊断日志中匹配对应SAS标识即可关联到上传方的身份和IP信息

常见问题排查

  • 如果拿到的ClientIp是代理/CDN的出口IP而非用户真实IP,需要在你使用的CDN/代理服务中配置传递X-Forwarded-For请求头,该字段内容会被记录到存储日志的扩展字段中
  • 经典存储日志启用后才会写入$logs容器,该功能已经逐步被新版诊断设置替代,建议优先使用诊断设置获取日志

内容的提问来源于stack exchange,提问作者node1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:15:01