AWS Lambda本地调用正常 生产环境返回403错误如何解决?
AWS Lambda SAM本地运行正常线上返回403错误排查指南
你收到的是axios发起请求后服务端返回403状态码抛出的通用错误,错误详情如下:
{ "errorType": "Error", "errorMessage": "Error: Request failed with status code 403", "trace": [ "Error: Error: Request failed with status code 403", " at Runtime.<anonymous> (/var/task/app.js:2:1014144)", " at Generator.throw (<anonymous>)", " at n (/var/task/app.js:2:1013200)", " at processTicksAndRejections (internal/process/task_queues.js:95:5)" ] }
403属于权限拒绝类错误,本地SAM调用正常但线上部署失败,是本地运行环境和AWS Lambda生产环境的配置差异导致的,常见原因如下:
- Lambda执行角色权限不足
本地SAM调用时默认使用你本地AWS CLI配置的用户身份权限,该身份一般有对应资源的访问权限。部署到线上后Lambda使用单独配置的执行角色,若该角色未添加目标资源的访问权限策略,请求AWS内部服务时就会返回403。
排查方式:检查Lambda执行角色的IAM策略,确认已添加对应资源的允许访问动作。 - 网络访问限制
若Lambda部署在VPC内,未配置NAT网关、公有子网出站规则,或VPC安全组、网络ACL禁止了到目标服务的出站访问,会导致请求被拦截返回403。
若请求的是外部第三方服务,确认目标服务是否封禁了Lambda部署区域的AWS公网IP段:本地调用时使用你本地公网IP,不在封禁列表内,线上Lambda的出口IP在封禁列表中就会触发403。 - 身份凭证配置差异
本地运行时你可能在本地环境变量中配置了正确的API密钥、访问Token等身份凭证,但部署时未将对应凭证同步配置到Lambda的环境变量中,导致请求携带的凭证无效,被服务端返回403。
若请求AWS服务时使用了SigV4签名,本地调用时axios自动使用本地CLI的凭证完成签名,线上未适配Lambda运行时的凭证获取逻辑,也会触发403。 - 目标服务访问控制策略限制
目标服务(如API Gateway)若配置了资源策略、WAF规则,仅放行你本地公网IP,未允许Lambda所在区域的IP段访问,或请求缺少目标服务要求的特定头信息、参数,也会返回403。
快速排查方法
在axios的错误捕获逻辑中添加完整的请求URL、请求头、响应头打印,部署后通过CloudWatch Logs查看线上请求的完整上下文,即可快速定位403的返回来源。
内容的提问来源于stack exchange,提问作者Yashwanth Remidi
相关产品推荐
相关产品推荐

