RDS for PPAS 不支持查看用户的出口 IP
select datname, pid, usename,client_addr, client_hostname, client_port,query from pg_stat_activity;
postgres=> select datname, pid, usename,client_addr, client_hostname, client_port,query from pg_stat_activity;
datname | pid | usename | client_addr | client_hostname | client_port | query
----------+-------+----------+----------------+-----------------+-------------+------------------------------------------------------------------------------------------------------
postgres | 35260 | postgres | 192.168.1.2 | | 9879 | select datname, pid, usename,client_addr, client_hostname, client_port,query from pg_stat_activity;
(1 row)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您的描述,您在使用 RDS for PPAS (PostgreSQL) 时遇到了查询用户出口 IP 的问题。实际上,client_addr
字段显示的 IP 地址即为连接到数据库的客户端IP。不过,在某些网络环境下,如果存在代理或网络地址转换(NAT),这个 IP 可能是内部网络地址而非实际的公网出口 IP。
对于 RDS for PostgreSQL 而言,您已经正确地使用了 pg_stat_activity
视图来查询当前活动会话的连接信息,其中 client_addr
列确实代表了客户端连接的IP地址。但是,如果客户端通过公司网络或者代理服务器连接到RDS,那么这个IP很可能是内网IP或者是代理服务器的IP,并非直接反映用户的公网出口IP。
针对您提到的公网 IP 不固定的情况,有以下几点建议:
动态白名单:虽然 RDS 目前不支持自动添加动态变化的公网 IP 到白名单,但您可以考虑编写脚本定时检测并更新白名单,但这需要额外的运维工作且可能涉及安全风险。
使用安全组和VPC规则:如果您在阿里云环境中部署应用,可以利用VPC的安全组规则来控制访问,这样可以从VPC内部访问RDS,而无需将公网IP加入白名单。
固定公网IP或使用EIP:如果条件允许,为您的客户端所在的服务器分配固定的公网IP地址,或者使用弹性公网IP(EIP),这样就可以将此固定的IP地址加入RDS的白名单中。
SSH隧道或VPN:建立一个从客户端到阿里云环境的SSH隧道或使用阿里云的SSL-VPN服务,通过这种方式间接访问RDS,这样只需将隧道的入口点IP加入白名单即可。
应用层代理或跳板机:设置一台具有固定公网IP的服务器作为代理或跳板机,所有对RDS的请求都通过这台服务器转发,仅需将该服务器的IP加入白名单。
综上所述,由于直接获取用户出口IP并实时更新至RDS白名单在技术上存在局限性,建议采用上述策略之一来灵活应对公网IP变动的问题,同时确保数据库访问的安全性。