首页 > 解决方案 > 为基于 Python 的编码设置用户速率限制(对于最终用户和我自己)(使用 AWS Cognito?)的简单方法是什么

问题描述

我正在将一项小型服务与 Amazon 的 API Gateway 和 Lambda 服务组合在一起。这项服务将对用户免费,但我想尝试限制用户提出过多的请求。理想情况下,我也想做某种基于 IP 的节流,但我的印象是基于 IP 的节流并不常见并且可能存在问题。

AWS Cognito 似乎可以与 API Gateway 一起用于此任务,但我不清楚是否有任何简单的方法可以让我启动并运行它(没有任何网络托管)以及让用户使用它(与 Python 的 requests 包之类的东西)。

最终,我想要一些相对简单的东西,如下所示:

r=requests.get(my_api_url,params=params,auth=(user_cognito_name, user_cognito_password))

或更可能是这样的:

user_jwt_token = <some_magic> #Not sure how to implement this
r=requests.get(my_api_url,params=params,auth=user_jwt_token)

从我所见,实现 Cognito 访问的 Python 库似乎相当复杂......

然后还有获取代币的问题。这篇文章描述了如何使用一堆 AWS lambda 函数来设置令牌维护:

https://medium.com/@houzier.saurav/aws-cognito-with-python-6a2867dd02c6

我认为这种方法的优点是您可以避免设置服务器,我也想这样做。然而,它似乎真的很复杂。

理想情况下,我想要一个 AWS 服务,如“AWS Cognito Manager”或“AWS Cognito Helper”,您可以在其中指定一些基本的 AWS cognito 信息,然后获得一个特定的 URL。然后任何人都可以访问该 URL 以获取令牌。我不确定令牌需要什么维护,但理想情况下,同一个网站——由 AWS 或我支付的某些公司管理——也可以处理维护问题(如果有的话)。或者,用于维护的简单 python 代码也可以。我要避免的是建立自己的网站或尝试拼凑大量 Lambda 调用或设置专门用于处理登录的 EC2 实例。

#Example of desired renewal code
renewed_token = magic_function(base_token,user_name,user_password)

请注意,在这一切之后,我的整个方法可能是错误的。也许我真的不需要 AWS Cognito,或者我只是以错误的方式思考问题。

标签: pythonamazon-web-servicesamazon-cognito

解决方案


推荐阅读