AWS Aurora Serverless v2 IAM认证结合aws:SourceIp无法正常工作
问题分析与解决方案
为什么IpAddress条件无法连接,IpAddressIfExists却能无限制访问?
当使用IpAddress条件时,AWS会强制校验aws:SourceIp是否匹配指定IP范围,一旦该值不存在或不匹配就会直接拒绝访问。你遇到的情况本质是rds-db:connect动作的上下文里,aws:SourceIp没有被正确识别或传递,常见原因包括:
- 你的客户端实际出口IP并非
123.241.200.168/32(比如使用了代理、VPN,或者运营商NAT导致IP动态变化) - Aurora Serverless v2公有集群在处理IAM认证连接时,无法正确获取客户端的公网源IP(比如通过AWS中转网络导致IP被替换)
换成IpAddressIfExists后,只要aws:SourceIp不存在就会跳过校验,所以能从任意地址连接,但这完全失去了IP限制的作用。
实现IP访问限制的正确方式
优先用RDS安全组做IP限制,这是网络层面的控制,比IAM策略更直接可靠:
- 找到集群关联的安全组,添加入站规则:允许
123.241.200.168/32访问PostgreSQL默认端口5432(或你自定义的端口)。
如果一定要通过IAM策略实现,先确认客户端的真实出口IP:
- 在客户端执行
aws sts get-caller-identity,查看请求的源IP是否与你指定的一致,再调整策略中的IP范围。
能否在账户级别配置IP限制?
可以,两种方案可选:
1. 服务控制策略(SCP)—— 适合AWS Organizations账户
如果你的账户属于AWS Organizations,可在组织根或OU层级创建SCP,全局限制所有账户内的rds-db:connect动作仅允许指定IP:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "rds-db:connect", "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": ["123.241.200.168/32"] } } } ] }
注意:SCP是Deny优先,需确保已有Allow策略允许合法访问,SCP仅用于缩小权限范围。
2. 账户级IAM权限边界
为账户内所有IAM实体(用户、角色)设置权限边界,限制rds-db:connect的源IP范围。但这种方式需要逐个配置实体,效率不如SCP高。
内容的提问来源于stack exchange,提问作者krukowskid
相关产品推荐
相关产品推荐

