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

如何在不影响Lambda互联网访问的前提下从本地连接RDS数据库?

问题场景

我在VPC中部署了一个Lambda函数,该函数需同时访问互联网和RDS数据库。现有配置如下:

  • 6个RDS默认私有子网 + 1个公有子网
  • 两张路由表:
    • 公有路由表:关联公有子网,0.0.0.0/0路由至Internet Gateway(IGW)
    • 私有路由表:关联6个私有子网,0.0.0.0/0路由至NAT网关
      当前状态:
  • Lambda可正常访问RDS和互联网
  • 本地机器无法连接RDS;仅当将私有路由表的0.0.0.0/0路由目标改为IGW时才能连接,但会导致Lambda失去互联网访问权限
  • 已针对本地IP和NAT网关IP配置RDS安全组入站规则
解决方案(不影响Lambda互联网访问)

方法1:部署公有子网跳板机(Bastion Host)

  • 在公有子网创建一台小型EC2实例(跳板机),安全组配置:
    • 入站规则:允许你的本地IP访问SSH端口(22)
    • 出站规则:允许访问RDS的数据库端口(如3306、5432等)
  • 配置RDS的安全组入站规则:允许跳板机的安全组访问数据库端口
  • 本地操作:先通过SSH连接跳板机,再从跳板机内部使用RDS私有IP/端点连接数据库
  • 优势:配置简单成本低,私有路由表无需修改,Lambda互联网访问不受影响

方法2:使用AWS Systems Manager(SSM)端口转发

  • 确保本地机器已安装并配置AWS CLI,且拥有SSM相关操作权限
  • 在VPC内任选一台EC2实例(无需公网IP),给其附加包含SSM访问权限的IAM角色
  • 配置EC2实例安全组:允许访问RDS的数据库端口;配置RDS安全组:允许该EC2实例的安全组访问数据库端口
  • 本地执行端口转发命令(以MySQL为例):
    aws ssm start-session --target <EC2实例ID> --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":["<RDS私有端点>"], "portNumber":["3306"], "localPortNumber":["3306"]}'
    
  • 之后直接用本地数据库客户端连接localhost:3306即可访问RDS
  • 优势:无需暴露公网IP,安全性高;无需维护跳板机的公网访问

方法3:建立VPC VPN连接(适合长期访问需求)

  • 配置AWS Client VPN或Site-to-Site VPN,将本地网络与目标VPC打通
  • 连接VPN后,本地机器即可直接使用RDS私有IP/端点连接数据库
  • 优势:本地可直接访问VPC内所有私有资源,无需中转;安全性高
  • 注意:需要配置VPN的路由和安全组规则,确保本地流量能到达RDS子网

不推荐的方法:将RDS暴露到公网

  • 不建议修改RDS子网组添加公有子网并分配弹性公网IP,这会将RDS直接暴露到互联网,存在明显安全风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:15:21