基于Elastic Beanstalk的Flask应用:如何安全对外开放私有LB内容?
最优集成方案
方案一:直接把私有LB换成公网LB(首推)
这是最简洁、最贴合EB架构设计的方案,不用加额外组件,操作步骤如下:
- 登录AWS控制台,进入你的Elastic Beanstalk环境配置页面
- 找到「负载均衡器」配置模块,把负载均衡器类型从「内部(私有)」改成「互联网面向」
- 调整LB所在子网:选公有子网(公有子网关联了互联网网关,能直接接公网流量)
- 锁死安全组规则:
- 公网LB的安全组只开必要端口(比如HTTP/80、HTTPS/443),能限制源IP范围的话尽量限(比如只允许办公IP段访问)
- 后端EC2实例的安全组只放通来自公网LB安全组的流量到Flask应用端口(比如默认的5000)
- 验证:EB会自动搞定LB的重新配置和DNS解析更新,之后直接用公网LB的域名就能访问Flask应用
方案二:CloudFront搭配私有LB(适合需要CDN/WAF的场景)
如果业务需要CDN加速、Web应用防火墙这类附加能力,用CloudFront+私有LB的架构就行,不用公网NAT:
- 配置CloudFront分发,把源设为私有LB的DNS域名
- 开启CloudFront的「私有源访问」功能,用Origin Access Control(OAC)授权CloudFront访问私有LB
- 给私有LB所在的VPC配置CloudFront的VPC端点,让CloudFront的流量能直接进VPC访问私有LB,不用走公网
- 安全组配置:私有LB的安全组允许来自CloudFront VPC端点的流量,EC2实例安全组允许私有LB的流量
为啥不推荐「公网LB -> NAT -> 私有LB」
这个架构确实冗余:公网LB本身就能直接对接后端资源,中间加NAT完全是多此一举,既增加成本,又多了一层故障点和延迟,完全不符合AWS架构的极简原则。
内容的提问来源于stack exchange,提问作者Sumanth Shetty
相关产品推荐
相关产品推荐

