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

如何保护AWS Elastic Beanstalk端点免受公共直接访问?

解决方案

方法1:用AWS WAF拦截非法请求(推荐)

直接给Elastic Beanstalk的应用负载均衡器绑定AWS WAF,通过规则过滤不符合要求的请求:

  • 创建WAF Web ACL,关联到你的应用负载均衡器
  • 添加字符串匹配规则,校验请求的Referer头是否以https://xxxx.com/开头(需包含HTTPS协议和路径前缀)
  • 规则动作设置为:允许符合条件的请求,拒绝其余所有请求
  • 额外优化:可补充规则校验Origin头是否等于https://xxxx.com,进一步提升验证严谨性

注:Referer虽可被伪造,但能有效阻止绝大多数非浏览器场景的直接访问(比如Postman默认不会携带合法的Referer),且配置简单、成本极低。

方法2:后端代码层面添加请求头验证

在Spring Boot应用中新增拦截器/过滤器,强制校验请求的Referer或Origin头:

  • 实现HandlerInterceptor接口,在preHandle方法中做校验:
public class RefererValidationInterceptor implements HandlerInterceptor {
    private static final String ALLOWED_DOMAIN = "https://xxxx.com";

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String referer = request.getHeader("Referer");
        String origin = request.getHeader("Origin");
        
        // 校验Referer或Origin是否符合要求
        if ((referer != null && referer.startsWith(ALLOWED_DOMAIN)) 
            || (origin != null && origin.equals(ALLOWED_DOMAIN))) {
            return true;
        }
        
        response.setStatus(HttpServletResponse.SC_FORBIDDEN);
        return false;
    }
}
  • 在Spring配置类中注册该拦截器,确保覆盖所有API路径
  • 灵活优化:可将允许的域名存入环境变量,方便不同部署环境切换配置

方法3:通过Lambda@Edge传递验证令牌(更高安全性)

借助CloudFront的Lambda@Edge函数为合法前端请求添加唯一令牌,后端校验令牌有效性:

  1. 在CloudFront的Viewer Request事件中绑定Lambda@Edge函数,为来自xxxx.com的请求添加自定义头(例如X-Frontend-Token: your-unique-secret)
  2. 在Spring Boot后端新增过滤器,检查所有API请求是否携带该自定义头且令牌值匹配
  3. 注意:Lambda@Edge需部署在us-east-1区域,令牌需严格保密,避免泄露

关于之前CloudFront前缀列表配置无效的原因

前端发起的API请求来自终端用户的浏览器,请求源IP是用户的公网IP,而非CloudFront服务器的IP。将负载均衡器安全组源限制为CloudFront前缀列表后,用户的请求会被直接拦截,自然导致网站无法调用API——安全组的源限制针对的是请求发起方的IP,此处发起方是终端用户,而非CloudFront。

内容的提问来源于stack exchange,提问作者Seng Wee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:02:15