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

AWS VPC中调用Network Firewall的Lambda函数超时问题排查

问题根因
  • 核心认知偏差:describe_firewall 属于AWS Network Firewall的控制平面API,调用目标是AWS区域级公共服务端点,并非你VPC内部署的Network Firewall数据平面端点(即路由表中配置的vpce-firewallEndpoint)。你之前通过Network Analyzer验证的仅为Lambda到VPC内防火墙数据面端点的私网连通性,完全没有覆盖Lambda到AWS控制面端点的访问路径,属于无效排查项。
  • 网络路径阻断:你当前VPC架构未部署NAT网关,VPC内资源访问公网必须满足「子网路由指向IGW+资源弹性网卡绑定公网IP」两个条件,但VPC模式部署的Lambda默认不会为弹性网卡分配公网IP,导致代码中硬编码公网endpoint的API流量无法通过IGW转发到公网,TCP握手持续失败最终触发超时。该问题和函数内存、超时阈值、安全组规则、防火墙实例定位逻辑无直接关系,boto3不存在配置缺失导致无法定位防火墙实例的问题——如果是资源不存在或权限不足,会直接返回明确的ClientError,不会触发无日志超时。
修复方案

按优先级从高到低选择方案即可:

  1. 最优方案(私网访问,无需公网带宽)
    • 首先调整Lambda代码,删除硬编码的公网endpoint_url配置,同时建议将boto3客户端初始化移入handler逻辑,避免跨执行环境的连接残留问题,修正后代码如下:
    import boto3
    import json
    
    def lambda_handler(event, context):
        session = boto3.session.Session()
        nf_client = session.client(
            service_name="network-firewall",
            region_name="eu-west-2"
        )
        response = nf_client.describe_firewall(FirewallName="DemoFirewall2")
        return 1
    
    • 在当前VPC内创建com.amazonaws.eu-west-2.network-firewall类型的接口型VPC端点,开启私有DNS解析功能,将端点部署在现有可达子网中,关联安全组放通来自Lambda所属网段的443端口入站。配置完成后boto3会自动通过PrivateDNS将控制面请求解析到VPC端点私网地址,流量全程走VPC内部转发,无需公网访问能力,也不会经过你部署的防火墙数据面链路,延迟和稳定性最优。
  2. 替代方案(公网访问,链路更长)
    如果你不想创建接口VPC端点,需要在防火墙子网部署NAT网关,将Lambda所属子网的默认路由调整为指向NAT网关,同时在Network Firewall的访问策略中放通到AWS Network Firewall公网服务地址段的443出站流量。该方案需要额外支付NAT网关带宽和资源费用,且流量需要多绕一层防火墙,不推荐使用。
验证方法

配置完成后先在测试事件中触发函数,若配置正确CloudWatch会正常记录API返回结果或权限类错误提示,不会再出现无任何业务日志直接超时的现象;如果提示权限不足,给Lambda执行角色附加network-firewall:DescribeFirewall对应权限即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:42:28