如何为EC2自动扩缩组场景在MongoDB Cloud维护有限IP访问列表?
MongoDB Cloud IP访问控制列表(ACL)维护最优策略
针对自动扩缩组EC2动态公网IP难以维护MongoDB Cloud ACL,且需保留EC2源IP以便直接接收响应的问题,以下是几个最优解决方案:
方案1:基于VPC NAT网关固定弹性IP(EIP)
- 核心思路:将EC2迁移至私有子网,每个可用区部署一个绑定固定EIP的NAT网关,配置私有子网路由表让EC2出站流量通过对应AZ的NAT网关转发。此时MongoDB Cloud看到的源IP为NAT网关的固定EIP,而非EC2的动态公网IP。
- 操作步骤:
- 在两个AZ分别创建私有子网,将自动扩缩组的EC2实例迁移至私有子网(移除公网IP分配)。
- 每个AZ创建一个NAT网关,绑定独立的固定EIP。
- 更新私有子网的路由表,将
0.0.0.0/0的路由指向对应AZ的NAT网关。 - 在MongoDB Cloud的ACL中仅添加这2个NAT网关的EIP即可。
- 优势:仅需维护2个固定IP,完全规避自动扩缩带来的IP动态变化问题;响应会通过NAT网关直接返回给发起请求的EC2,满足需求。
方案2:使用AWS PrivateLink实现私有网络连接
- 核心思路:通过AWS PrivateLink在你的VPC与MongoDB Cloud之间建立私有网络通道,EC2无需公网IP即可访问MongoDB,MongoDB端无需维护公网IP ACL,转而通过VPC端点的安全组进行访问控制。
- 操作步骤:
- 在AWS控制台创建MongoDB Cloud对应的PrivateLink端点(需确认MongoDB Atlas支持该区域的PrivateLink)。
- 配置EC2所在子网的安全组,允许访问PrivateLink端点。
- 在MongoDB Cloud端配置允许该PrivateLink端点的访问权限(无需添加公网IP)。
- 优势:完全脱离公网环境,通信更安全;无需维护任何公网IP的ACL,彻底解决动态IP问题。
方案3:自动同步EC2公网IP至MongoDB ACL
- 核心思路:利用AWS服务监听自动扩缩组的实例生命周期事件,自动调用MongoDB Cloud API更新ACL条目。
- 操作步骤:
- 创建Lambda函数,逻辑为:接收EC2实例创建/销毁事件,提取公网IP,调用MongoDB Atlas API添加/删除ACL规则。
- 通过EventBridge(原CloudWatch Events)配置触发器,监听自动扩缩组的
EC2 Instance Launch Successful和EC2 Instance Terminate Successful事件。 - 为Lambda函数配置MongoDB Cloud API的访问密钥,以及AWS的EC2描述权限。
- 优势:无需改变现有EC2的公网子网部署架构;自动维护ACL,无需人工干预。
- 劣势:ACL中的IP数量会随自动扩缩组的实例数波动,可能较多;需维护Lambda函数及API权限,存在一定运维成本。
方案优先级推荐
优先选择方案2(PrivateLink),其次是方案1(NAT网关),最后考虑方案3(自动同步)——前两者能从根本上减少IP维护量,且架构更稳定安全。
内容的提问来源于stack exchange,提问作者Fabien Haddadi
相关产品推荐
相关产品推荐

