代码之家  ›  专栏  ›  技术社区  ›  Ludo

AWS无服务器架构——为什么我要使用API网关?

  •  1
  • Ludo  · 技术社区  · 6 年前

    这是我的用例:

    • 位于s3上的静态react前端
    • python后端对lambda进行长时间运行的数据分析
    • rds上的postgres数据库
    • 后端和前端只与json通信
    • 偶尔后端会在s3 bucket中创建和存储powerpoint文件,然后通过向前端发送s3链接来提供这些文件。

    让我相信,设置api网关来连接前端和后端而不是直接从前端调用lambda是值得的!

    特别是考虑到29秒的超时时间对我的应用程序来说不够长,这意味着我需要实现异步处理,并添加一个完整的AWS体系结构的其他层(消息传递、使用SNS和SQS排队和轮询),这增加了成本、时间和潜在的问题。我知道有一些安全问题,没有办法安全地调用lambda函数吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   K Mo    6 年前

    您所说的是直接从运行在客户机上的javascript调用lambda。

    我相信唯一的方法就是在你的react前端嵌入awssdkforjavascript。见: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/browser-invoke-lambda-function-example.html

    这有几个安全问题,只有其中一些可以减轻。

    首先,您需要将aws凭证硬编码到您的前端以供全世界看到。这些凭据的访问权限可能在范围内受到限制,但要非常小心才能正确执行此操作,否则您将为某人的加密挖掘操作付费。

    假设您只希望某些人将文件上载到您正在付费的存储服务,则需要某种形式的身份验证和授权。api网关并不真正执行身份验证,但它可以执行授权,尽管它可以连接到其他aws服务,如cognito或lambda(自定义授权程序)。你必须自己把它构建到你的后端lambda中。绝对可行,而且可能不会比使用来自api网关的自定义授权程序付出更多的努力。

    连接到lambda direct的主要问题是lambda具有快速扩展的能力,如果有人试图用拒绝服务攻击攻击您,这可能是一个问题。lambda很便宜,但是一天24小时运行1000个并发实例会增加开销。

    api网关允许您限制每秒/分钟/小时/等等,lambda只允许您限制任何给定时间的并发实例数。因此,如果将该限制设置为1,攻击者可能会导致该1实例每天运行24小时。