【问题标题】:How to secure the APIGateway generated URL?如何保护 APIGateway 生成的 URL?
【发布时间】:2017-07-02 11:11:37
【问题描述】:

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

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

我想到的解决方案:

  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、标头和请求参数,他就可以调用那一百万次。我们可以做的一件事是拥有一个 API-Key,但它是一个没有过期时间的静态字符串。一旦标题与他在一起,他就可以滥用它。所以,任何想法,如何在 APIGateway 中防止这种情况。如果没有我可以寻找的 AWS 之外的任何其他服务?很高兴,如果我能得到这个答案。

【问题讨论】:

  • 用户需要登录 React App 吗?如果是这样,您可以使用 Cognito 用户池作为 API 网关端的身份验证策略,那么没有有效令牌的请求将按预期被阻止。
  • 不同的 lambda.. 是什么意思?
  • @KaHouIeong 好点。我使用 Auth0,也许我应该用它搜索一些东西。有没有其他简单的方法来解决这个问题,比如添加一个 api 密钥?
  • @naveenkerati 这个 URL 不仅会被客户端(react 应用程序)调用,还会被另一个调用这个 URL 的 Lambda 调用。所以,我提到了这一点,只是为了告诉我 CORS 在我的情况下不起作用
  • Auth0 有保护 API 网关的教程:auth0.com/docs/integrations/aws-api-gateway

标签: amazon-web-services url aws-lambda backend aws-api-gateway


【解决方案1】:

目前 API Gateway 不支持私有 url,因此它将是公开的。

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

  • IAM 授权人
  • Custom授权人

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

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

为了控制授权消费者对 API 的使用,目前使用 API Key 是 AWS 原生的唯一方式。

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

【讨论】:

  • 感谢您的回答。我已经稍微修改了问题,检查我更新的问题。如果您对此发表意见,我会很高兴
  • 不错。我在想 WAF 只是为了保护对网站的 DDOS 攻击。我对您将 api 密钥从云端发送到 api 网关 url 的概念感兴趣。你能解释更多或分享我一个链接吗?因为无法获得正确的搜索词来搜索从云端到 api 网关的 api 密钥传输
  • 您可以将 x-api-key:{api_key} 标头添加到 CloudFront Origin。检查以下链接docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…。还要确保将标头列入白名单,而不是将 Host 标头发送到 APIGateway 行为。
  • 谢谢阿山,我去看看。
  • 对不起@Ashan,问了太多问题。我认为,该链接更多用于前端。当浏览器请求该网页时,首先它会转到云端,如果没有,它会转到 S3。该链接帮助我们为上述案例设置自定义标题。但我无法理解您使用 cloudFront 的自定义标头并将其传递给后端(APIGateway)的概念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 2012-08-29
  • 1970-01-01
相关资源
最近更新 更多