这是我的用例:
说服我,有必要经历设置API网关连接前端和后端的所有麻烦,而不是直接从前端调用lambda!
特别是考虑到29s超时,这对我的应用来说不够长,这意味着我需要实现异步处理并添加另一层aws架构(使用SNS和SQS进行消息传递,排队和轮询),这会增加成本,时间和潜力对于问题。我理解存在一些安全问题,是否无法安全地调用lambda函数?
答案 0 :(得分:3)
您正在谈论直接从客户端计算机上运行的JavaScript调用lambda。
我认为唯一的方法是在您的反应前端嵌入AWS SDK for JavaScript。看到: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/browser-invoke-lambda-function-example.html
这有几个安全问题,只有一部分可以减轻。
首先,您需要将AWS凭证硬编码到您的前端,供全世界查看。这些凭据的访问权限范围有限,但要非常小心,否则您将为某人的加密操作付费。
假设您只希望某些人将文件上传到您要付费的存储服务,则需要某种形式的身份验证和授权。 API Gateway并不真正进行身份验证,但它可以进行授权,尽管可以连接到Cognito或Lambda等其他AWS服务(自定义授权程序)。你必须自己将它构建到你的后端Lambda中。绝对可行,可能没有比使用API网关中的自定义授权器更多的努力。
直接连接Lambda的主要问题是Lambda具有快速扩展的能力,如果有人试图通过拒绝服务攻击来攻击你,这可能是一个问题。 Lambda很便宜,但每天24小时运行1000个并发实例会加起来。
API网关允许您每秒/分钟/小时/等的速率限制,Lambda仅允许您在任何给定时间限制并发实例的数量。因此,如果您将该限制设置为1,攻击者可能会导致该实例每天24小时运行。