AWS Lambda函数REST API终端点-403错误

22

我有一个作为REST API暴露的AWS Lambda函数。

当在aws lambda控制台上通过测试按钮调用时,它可以正常工作。

当通过在线REST客户端调用时,我会收到403错误。 它被创建为不需要身份验证(Open)。

我缺少了什么配置?


你能否查看 CloudWatch 日志并提供更多细节?CloudWatch 记录了 Lambda 函数的每一个步骤,这应该有助于调试。 - Matt Auerbach
1
Matt> 我检查了一下...但是找不到任何对应于基于REST的调用的日志,因为调用本身由于403(禁止)而失败。还有其他想法吗? - Jasper
1
据推测,Lambda 是通过 API 网关访问的。当您通过 API 网关控制台中的“测试”按钮调用时会发生什么?http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-test-method.html - Mike76
你解决了吗?我遇到了奇怪的行为,其中:lambda代理集成通过APIG控制台正常工作;我有两个GET路径,/some/path?query=param/some/path/:id。从Postman客户端,前者可以工作,但后者返回你描述的403错误。 - Kwhitejr
如何做到这一点?它被创建为需要-无身份验证(开放)?我如何将其创建为无身份验证? - Surinder
我遇到了这个问题,所以我启用了日志来尝试调试它,突然问题消失了。我销毁并重新创建了资源,甚至从设置中删除了 CloudWatch 日志角色,问题也解决了。呼!是账户级别的什么?! - antirealm
5个回答

22

据说Lambda通过AWS API Gateway公开。

如果您在新的“无身份验证”API Gateway资源上获得403错误的一个原因是您尚未部署更改。

在API Gateway控制台中,单击操作下拉列表并选择部署API

这样就可以了。


想必你已经掌握了这个。 - Dave Maple
2
Actions 中没有部署 API。 - albatross

11
也许您正在向错误的端点发送请求。
我通过向https://example.com/locate发送POST请求收到了403错误响应。
但是,一旦我添加了阶段http://example.com/dev/locate并部署了对此API的更改,它就可以正常工作,并返回200响应。

enter image description here

希望能够帮到您。

9
您需要首先确保在AWS API Gateway上启用了CORS,如果您从不同的域名访问它,因为API网关会抛出403错误,而不是Lambda函数。您可以为方法或完整资源启用CORS。选择操作,然后选择启用CORS。如果资源不存在,则会将OPTIONS方法添加到该资源中。
在API网关上启用CORS将确保所有响应标头的Access-Control-Allow-Origin值设置为'*'(即允许所有来源,但您可以指定特定的来源,例如http://localhost)。

Enable CORS for method

始终确保调用正确的URL。您可以从API网关的阶段部分或Lambda函数(如果您已将Lambda函数设置为集成端点)中获取URL。

API url -> API Gateway -> Stage

API Url -> Lambda function

您可以在方法和集成响应中看到新的标头设置。

enter image description here


1

如果您正在将日志写入Cloudwatch,则请确保已配置CloudWatch日志角色ARN。 可以从API ->设置中访问。


0

如果您正在使用AWS的授权,则AWS会计算签名。

如果您传递get或post参数,则必须按字母顺序发送它。

原因是当您传递令牌计算签名UI或前端计算基础顺序时,但AWS会按字母顺序重新计算签名以匹配签名。

尝试按字母顺序发送参数。

post = { 'id':23, 'tag':'35353 }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接