AWS WebSocket API发送消息时返回Forbidden(403)错误求助
解决AWS API Gateway WebSocket发送消息返回Forbidden的问题
核对路由与前端消息匹配规则
确认API Gateway路由的routeKey和前端发送消息里的action字段完全一致(大小写敏感)。比如前端发送{"action": "sendMsg"},路由的routeKey就不能是SendMsg或者sendmessage,也可以直接用$default路由匹配所有未指定的消息,快速验证是否是路由匹配问题。确保API Gateway有Lambda调用权限
检查Lambda函数的权限策略,确认存在API Gateway的调用许可。如果没有,手动添加以下权限策略(替换占位符为你的实际信息):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:你的区域:账号ID:function:目标Lambda函数名", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:execute-api:你的区域:账号ID:你的API ID/*/*/*" } } } ] }检查前端消息格式
必须发送标准JSON格式的消息,且包含匹配路由的字段。示例代码:const socket = new WebSocket('wss://你的API域名/stage'); socket.send(JSON.stringify({ action: 'sendMessage', content: '测试消息' }));避免发送纯文本或格式错误的JSON,否则API Gateway无法匹配路由,会返回Forbidden。
确认API Gateway已重新部署
所有路由或配置修改后,必须重新部署到对应的阶段(如prod),未部署的配置不会生效。排查阶段附加的WAF或日志
- 进入API Gateway的阶段设置,检查是否绑定了WAF Web ACL,若开启可能拦截了消息请求,可临时关闭验证。
- 开启阶段的访问日志,日志会输出到CloudWatch,通过日志能明确Forbidden的具体原因(如路由匹配失败、权限不足等)。
内容的提问来源于stack exchange,提问作者user23887016
相关产品推荐
相关产品推荐

