引言
2026年8月《网络数据安全风险评估办法》施行,IP数据合规监管进入实质执法阶段。携程因IP查询违规出境被罚1000万元,前5个月数据安全罚单达55张。本文从三条合规红线出发,给出ip查询精准地址的离线库私有化部署方案,附完整审计日志代码与落地检查清单。
一、先说一个真实的事
2026年6月,携程被罚了1000万。原因是数据出境安全评估没做,用户个人信息违规出境。
这笔罚单在圈子里传开之后,不少做风控和数据的朋友来问我:我们平时调用外部API查IP归属地,算不算数据出境?
算。
这是很多团队之前没意识到的问题。你以为只是查了个IP,但请求发到了境外服务器,IP数据就出境了。携程这个案例出来之后,大家才开始认真审视自己的IP查询链路。
2026年6月18日,国家网信办、工信部、公安部联合公布《网络数据安全风险评估办法》,自2026年8月20日起施行。要求重要数据处理者每年度开展风险评估,评估报告至少保存3年,配套操作日志须同步留存。2026年前5个月,涉及数据安全违规的罚单已达55张,超过2025年全年总数,其中百万元级罚单超过20张。
在ip查询精准地址的场景里,如果每次查询都调用外部API,IP数据流出企业内网,合规审计时无法提供完整的查询链路追溯。这个问题,新规实施后必须解决。
二、三条合规红线,踩中任何一条都麻烦
红线一:数据出境。 ip查询精准地址调用境外API即构成数据出境,需完成安全评估或标准合同备案。别觉得“只是查个归属地”就不算,监管看的是数据流向,不是数据量。
红线二:审计追溯能力。 每次ip查询精准地址须记录时间、目标IP、查询结果、操作人/系统标识。缺少这些字段,年度风险评估过不了。

红线三:日志留存周期。 风险评估报告至少保存3年,配套操作日志须同步留存。大模型API调用场景要求更严——所有提供大模型API调用服务的平台,必须对调用日志进行不少于6个月的留存,日志内容需覆盖调用时间、调用方身份标识、模型名称、请求与响应的Token数量、IP地址等关键字段。
三、怎么解决:离线库私有化部署
核心思路很简单:把ip查询精准地址的能力从在线API搬到内网。查询在内网完成,数据不出境,日志自己控。IP数据云提供的离线库方案正是为此设计的——本地部署后查询耗时降到0.05-0.1ms,单机QPS超过250万,数据不出内网。
第一步:离线库私有化部署
import ipdatacloud
# 加载IP离线库(内网部署,数据不出境)
ip_lib = ipdatacloud.OfflineIPLib(
'/data/ipdb/ip_data_cloud.mmdb',
enable_risk=True
)
第二步:封装带审计日志的查询函数
import logging
import json
import uuid
from datetime import datetime
# 配置审计日志专用logger
audit_logger = logging.getLogger('ip_audit')
audit_handler = logging.FileHandler('/var/log/ip_audit.log')
audit_handler.setFormatter(logging.Formatter('%(asctime)s - %(message)s'))
audit_logger.addHandler(audit_handler)
audit_logger.setLevel(logging.INFO)
def ip_query_with_audit(target_ip: str, caller_id: str = None) -> dict:
"""
带审计日志的ip查询精准地址函数
每次查询自动记录:时间、目标IP、查询结果、操作人/系统标识
"""
query_time = datetime.utcnow().isoformat()
trace_id = str(uuid.uuid4())
# 执行查询(内网离线库,数据不出境)
info = ip_lib.query(target_ip)
if info is None:
result = {
"error": "not_found"}
else:
result = {
"country": info.get("country"),
"province": info.get("province"),
"city": info.get("city"),
"district": info.get("district"),
"isp": info.get("isp"),
"risk_score": info.get("risk_score"),
"risk_level": info.get("risk_level"),
}
# 写入审计日志(满足合规要求的字段完整性)
audit_record = {
"trace_id": trace_id,
"query_time": query_time,
"target_ip": target_ip,
"caller_id": caller_id or "system",
"result_summary": {
"province": result.get("province"),
"city": result.get("city"),
"risk_score": result.get("risk_score"),
},
}
audit_logger.info(json.dumps(audit_record, ensure_ascii=False))
return result
# 调用示例
result = ip_query_with_audit("140.224.61.98", caller_id="risk_engine_01")
print(f"归属地:{result.get('province')} {result.get('city')}")
print(f"风险评分:{result.get('risk_score')}")
第三步:日志生命周期管理
审计日志写入后,需要建立完整的生命周期管理机制。近30天日志热存储供快速检索,30天至6个月日志温存储,超过6个月的日志冷存储归档。定期对日志进行完整性校验,确保未被篡改或丢失。

四、合规落地检查清单
| 检查项 | 要求 | 实现方式 |
|---|---|---|
| 数据不出境 | ip查询精准地址全程在内网完成 | 离线库私有化部署 |
| 审计字段完整 | 时间、目标IP、结果、操作人 | 查询函数自动记录 |
| 日志留存周期 | 至少6个月(大模型场景),风险评估报告至少3年 | 冷热分层存储 |
| 敏感字段脱敏 | 日志中不得包含未脱敏的个人信息 | 写入前正则替换 |
| 合规报送能力 | 可按监管要求导出审计记录 | 统一日志格式,支持导出 |
五、最后说几句
《网络数据安全风险评估办法》的实施,标志着IP数据合规监管从“发文警示”进入“实质执法”阶段。对于涉及ip查询精准地址的业务,离线库私有化部署是当前合规成本较低、技术可行性较高的方案。携程那1000万罚单,不值得再交一次学费。
数据来源:
- 国家网信办、工信部、公安部(2026年6月)
- 上海市网信办(2026年6月)
- 360iResearch(2026年9月)