从API网关实现速率限制标头?

时间:2019-02-04 10:07:41

标签: amazon-web-services aws-api-gateway

我正在使用AWS API Gateway实施API。我正在使用本机API密钥和使用计划对客户端进行评分。但是,我想将数据使用信息添加到我的API响应中,例如X-RateLimit-RemainingX-RateLimit-Reset标头。

我问过AWS支持人员是否没有任何本机实现,因为这(至少是IMO)是一个非常普遍的要求。那没有。

然后,我使用对AWS usage API的一些调用来实现这些标头(即使我真的不喜欢在每个请求中增加API调用开销)。但是我需要API密钥ID,而不是API密钥值(我的请求中只有一个)。根据此AWS thread,按API键值可能不会有任何查找方法。

在这一步,我只能想象两种解决方案:

  • 浏览所有API密钥的列表以找到正确的密钥。但这不会扩展。
  • 在我们这边处理限速数据(例如,使用Redis服务器跟踪所有呼叫)。但这将代表大量工作,并使我们面临失同步的高风险。

您如何在API响应中共享数据使用情况?我想念什么吗?

1 个答案:

答案 0 :(得分:0)

我认为您可以通过将CloudFront放在API网关的前面来实现。然后,您可以为要添加速率限制响应标头的API基本路径创建cache behavior。如果这将适用于所有路径,那么您需要修改默认行为。

您将需要使用Lambda@Edge来修改原始响应标头。您可以在Lambda @ Edge函数中调用AWS Usage API,然后使用CloudFront缓存行为中的Viewer Response操作附加响应标头。