AWS负载均衡器对接EC2实例防火墙规则配置最佳实践咨询
配置方案与最佳实践
解决负载均衡IP动态变动的流量放行问题
你当前手动同步负载均衡网络接口私有IP配置防火墙的方式完全不可持续,ALB/NLB的网络接口IP会随着负载扩缩容、可用区故障自动调整,没有静态IP的承诺。推荐优先用以下两种方案:
- 如果用AWS原生安全组做访问控制(优先推荐,比EC2内部的系统防火墙更易维护):直接配置后端EC2安全组的入站规则,源地址填负载均衡关联的安全组ID,开放对应的80/443端口即可。安全组ID是固定值,不需要跟随IP变动调整。
- 如果必须使用EC2内部的系统级防火墙(iptables/firewalld/ufw等):可以调用AWS API拉取当前区域ALB的前缀列表(Prefix List)
com.amazonaws.<你的区域>.alb的IP段,写定时脚本自动更新本地防火墙规则,不需要手动维护IP。
注意:前缀列表的ID在同一区域是固定值,也可以直接将前缀列表作为源配置到安全组规则中,不需要手动维护IP段。
仅放行通过Cognito认证的请求
要实现这一点,建议做两层校验,完全避免未认证请求到达后端服务:
- 第一层(负载均衡层拦截):在ALB的监听器规则中配置
AuthenticateCognito动作,关联你用的Cognito用户池。未通过认证的请求会被ALB直接拦截返回重定向到登录页,不会转发到后端EC2,从源头过滤大部分未认证流量。 - 第二层(后端服务校验):在Apache服务中增加校验逻辑,验证ALB转发请求携带的
x-amzn-oidc-data请求头是否存在,以及头中的JWT令牌是否是Cognito签发的有效令牌。哪怕出现安全组配置错误、恶意请求绕过ALB的情况,也会被后端直接拦截。
Apache的简单配置示例如下:
<VirtualHost *:80> ServerName yourapp.example.com RewriteEngine On # 无Cognito签发的OIDC头直接返回403 RewriteCond %{HTTP:x-amzn-oidc-data} ^$ RewriteRule ^ - [F,L] # 其他原有Apache配置 DocumentRoot /var/www/yourapp <Directory /var/www/yourapp> AllowOverride All Require all granted </Directory> </VirtualHost>
如果需要更高安全等级,可以安装mod_auth_openidc模块,直接对接Cognito做JWT签名校验,避免令牌被篡改。
额外优化建议
- 非必要不使用EC2内部系统防火墙,优先用AWS安全组+网络ACL做访问控制,和AWS云服务原生集成,维护成本更低,规则变更实时生效。
- ALB侧开启HTTPS监听,ALB到后端EC2的内部通信也建议启用HTTPS,避免请求头在传输过程中被篡改。
内容的提问来源于stack exchange,提问作者Yogesh Chawla
相关产品推荐
相关产品推荐

