如何在AWS API Gateway中拒绝未映射的方法请求
如何阻止API Gateway未映射方法触发Lambda
你的问题核心是:API Gateway中某路径仅配置了POST方法,但用GET访问时,虽然返回405却仍触发Lambda。要解决这个,得从API Gateway的请求处理逻辑入手,以下是几种可行方案:
方案1:为未映射方法设置「无集成」直接返回405
这是最直接的处理方式,针对目标路径下的未允许方法(比如GET),直接让API Gateway返回405,不触发任何后端集成:
- 打开API Gateway控制台,找到你的API和目标路径
/aws/test/save - 点击「创建方法」,选择GET,然后在集成类型里选「无」
- 进入「方法响应」设置,添加状态码405,同时添加响应头
Allow: POST(告诉客户端允许的方法) - 重新部署API,之后再用GET访问该路径,API Gateway会直接返回405,不会调用Lambda
方案2:用资源策略拦截未允许的请求
如果需要批量管控多个路径或方法,用API Gateway的资源策略更高效,在请求到达Lambda前就直接拒绝:
- 进入API Gateway的「资源策略」页面,添加以下策略(替换占位符为你的实际信息):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:<你的区域>:<你的账号ID>:<你的API ID>/*/POST/aws/test/save" }, { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:<你的区域>:<你的账号ID>:<你的API ID>/*/GET/aws/test/save" } ] }
- 这个策略明确允许POST方法访问目标路径,拒绝GET方法,请求会被API Gateway直接拦截,完全不会触发Lambda
方案3:检查并删除ANY方法
如果你的目标路径下配置了ANY方法,那所有未单独映射的方法都会走ANY的集成,自然会触发Lambda。这种情况下:
- 直接删除该路径下的ANY方法
- 只保留需要的POST方法,再按方案1处理其他可能的未允许方法
内容的提问来源于stack exchange,提问作者Madesh
相关产品推荐
相关产品推荐

