[ 功能建议 ]审计日志涉及用户源IP的获取问题
目前遇到的问题/使用障碍
目前审计日志中,获取【额外的信息】中的IP地址获取的应该为client IP,也就是上一个节点服务转发的IP,例如阿里云SLB 的七层转发地址。这样获取,无法真实获取到真实用户的真实IP,获取到的为上一个转发服务的IP,可能会存在例如nginx反代IP。
希望如何解决/实现它
在IP识别过程中取数据包头的http_x_forward_ip 可以解决。
其他信息
不知道我分析的对不对,我使用的平台服务使用了阿里云的SLB https七层转发,【额外的信息】中获取的为SLB转发的IP,而非用户真实IP地址。
目前的代码是从HTTP_X_FORWARDED_FOR获取的ip,如果没有获取到真实ip,可以检查下nginx是否配置了real_ip_header https://github.com/hhyo/Archery/blob/872c551fa376639e6401dfc2ec52155b517b6a7a/sql/audit_log.py#L75-L81
当前的代码是从HTTP_X_FORWARDED_FOR获取的ip,如果没有获取到真实的ip,可以检查下nginx是否配置了real_ip_header
https://github.com/hhyo/Archery/blob/872c551fa376639e6401dfc2ec52155b517b6a7a/sql/audit_log.py#L75-L81
找到问题了,我们是将archery部署再K8S内的,通过ingress转发,由于configmap中use-forwarded-headers 设置为false,所有请求进来x_forward_for的值被丢弃,正好按照代码如果没有x_forward_for,则取remote_addr,而remote_addr的值为阿里云slb转发地址。谢谢!
还是建议将源IP地址作为单独一列存放,而不是以额外的信息存储,毕竟任何操作记录都需要记录源IP,如果非登录的审计日志,额外的信息可能会被覆盖为sql,则涉及审计信息的元素就不完整了。
@weideguo 确实可以考虑审计信息增加独立的字段来存储ip
找到问题了,我们是将archery部署再K8S内的,通过ingress转发,由于configmap中use-forwarded-headers 设置为false,所有请求进来x_forward_for的值被丢弃,正好按照代码如果没有x_forward_for,则取remote_addr,而remote_addr的值为阿里云slb转发地址。谢谢!