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

如何限制Elastic Beanstalk公网访问,仅允许通过API Gateway访问?

限制Elastic Beanstalk Flask服务器仅允许API Gateway访问的简单步骤

我来分享几个简单易行的步骤,帮你把Flask服务器的公网访问锁起来,只让API Gateway能访问——我自己部署服务时经常这么做,操作起来没什么复杂的:

方法一:通过安全组做基础网络防护

先从网络层面把大部分无关公网请求挡在外头:

  1. 定位Elastic Beanstalk的安全组
    • 登录AWS控制台,进入Elastic Beanstalk服务,打开你的Flask应用所在环境
    • 左侧导航栏点击「Configuration」,在「Instances」配置块里找到安全组ID,点击跳转到EC2的安全组详情页
  2. 修改入站规则
    • 删除原来允许0.0.0.0/0(所有公网IP)访问HTTP/HTTPS的规则
    • 添加新的入站规则:
      • 类型选「HTTP」或「HTTPS」(对应你应用的端口)
      • 来源选择「Custom」,输入API Gateway在你当前区域的IP前缀。你可以从AWS官方IP地址范围文档里筛选出execute-api服务的IP段(比如us-east-1区域的前缀可能是52.46.0.0/15,记得替换成你自己的区域)

    小提示:调试期间可以暂时保留允许自己IP访问的规则,等API Gateway配置验证通过后再删掉

方法二:Flask代码层加强验证(补全安全闭环)

安全组的IP限制可能会因为AWS更新IP段出现遗漏,所以在代码里加一层专属请求头验证更稳妥:

  1. 添加全局请求验证逻辑
    打开你的Flask主文件,新增一个before_request钩子,检查请求是否携带API Gateway专属的X-Amzn-Trace-Id头(所有来自API Gateway的请求都会自动带上这个头):
    from flask import Flask, abort, request
    
    app = Flask(__name__)
    
    @app.before_request
    def restrict_access():
        # 仅接受来自API Gateway的请求
        if 'X-Amzn-Trace-Id' not in request.headers:
            abort(403, description="Access denied: Only API Gateway can access this service")
    
    # 你的其他路由和业务逻辑...
    if __name__ == '__main__':
        app.run()
    
  2. 部署更新后的代码
    把修改后的代码打包,通过Elastic Beanstalk控制台或者EB CLI重新部署即可

方法三:VPC链接实现完全隔离(进阶方案)

如果想彻底让Elastic Beanstalk脱离公网(无公网IP),可以用这个方案:

  1. 将Elastic Beanstalk环境配置到VPC的私有子网中(不分配公网IP)
  2. 在API Gateway中创建VPC链接,关联到Elastic Beanstalk所在VPC的私有子网和安全组
  3. 这样API Gateway就能通过VPC链接访问你的Flask应用,公网完全无法直接触达

前两种方法组合起来是最快捷的实现方式,既能快速生效,又能保证足够的安全性。

内容的提问来源于stack exchange,提问作者Hammad Ali Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:17:05