如何保护生成的 APIGateway URL?

How to secure the APIGateway generated URL?

我有一个使用 APIGatewayLambda 运行的无服务器后端。这是我的架构:

目前,拥有我的 APIGateway 的 URL 的任何人都可以查询或更改数据。我如何保护 URL,以便只有客户端(反应应用程序)可以访问它。所以,我担心的是,任何人都可以在 chrome 控制台中打开 network 选项卡并获取我的 APIGateway 的 URL 并可以使用 curl 或邮递员使用它。我想阻止这种情况。

我想到的解决方案:

  1. 设置一个 CORS,这样只有 origin 可以访问它。但是,我有一个不同的 lambda 调用这个 URL。所以,CORS 不会成功。

我确信 APIGateway 本身有一些方法。我没有得到正确的搜索词来从 AWS 文档中获取它。我还想知道除了客户端(React App)

之外,防止访问后端 URL 的最佳做法是什么

@Ashan回答后更新:

谢谢@Ashan 的解答。就我而言,我使用 Auth0,因此自定义授权者应该适合我。我刚刚遇到这个 https://www.youtube.com/watch?v=n4hsWVXCuVI,它几乎解释了 APIGateway 可能的所有授权和身份验证。我知道可以通过 Cognito/Auth0 进行身份验证,但我有一些简单的网站,它们具有表单,其后端由 APIGateway 处理。我可以防止使用验证码抓取机器人的滥用,但一旦攻击者获得 URL、header 和请求参数,他就可以调用那一百万次。我们可以做的一件事是拥有一个 API-Key,但它是一个没有过期的静态字符串。一旦 header 和他在一起,他就可以滥用它。所以,任何想法,如何在 APIGateway 中防止这种情况。如果不是我可以寻找的除 AWS 之外的任何其他服务?如果我能得到答案,我会很高兴。

目前 API 网关不支持私有 url,因此它将公开可用。

要限制访问,您需要使用授权方使用 IAM 策略对请求进行身份验证和授权。目前有两种选择。

  • IAM 授权方
  • Custom 授权人

如果您的身份验证流程可以直接(AWS STS、IAM 用户访问密钥或角色)或间接(使用 AWS Cognito 用户池或任何其他 SSO 提供商)获得临时安全凭证,那么您可以使用 IAM 授权方。从 API 网关端不涉及任何代码,只需为每个 API 网关资源选中 IAM 复选框即可。您可以使用 API 网关 SDK 调用 API 网关请求,SDK 将在其中处理设置身份验证的繁重工作 headers。

如果您使用自己的身份验证机制,则可以编写单独的 Lambda 函数来验证令牌。可以在 API 网关指定此 Lambda 函数名称,并使用 http 侦听器名称访问自定义令牌以验证请求。

要控制授权消费者的 API 使用,使用 API 密钥是目前 AWS 原生的唯一方法。

由于您将 S3 用于 React 应用程序托管,您可以通过使用 AWS WAF 和 CloudFront 在您的应用程序堆栈前面进一步减少攻击面。 API 密钥可以添加到 CloudFront headers 以转发到您的 API 网关源,并且由于 CloudFront 和 API 网关通信使用 SSL,因此几乎不可能有人找到API 键。使用 AWS WAF,您可以限制常见攻击的恶意访问。这包括基于速率的阻止,以限制某人重复调用 API.