use*_*579 8 aws-lambda aws-api-gateway
我已经设置了具有认知身份验证的 api 网关,但需要将一些请求传递给另一个具有自己的身份验证的休息服务,您需要提供 clientID 和密钥来接收有效期数小时的不记名令牌。
我不需要对请求进行任何更改,只需添加令牌并将其传递给其余服务并接收答案并将其传递给客户端。
由于令牌的有效期为几个小时,因此我不想在每次请求时都要求提供令牌以节省时间。
我可以在哪里保存有效令牌?API 网关还是 lambda 函数?据我所知,Lambda 函数是无状态的,并且没有存储空间。
谢谢
有多种方法可以实现这一目标。我给你两个我认为对你的情况有意义的建议:
在 Lambda 实例中缓存密钥
您可以在 Lambda 函数中缓存数据。这通常发生在 Lambda 处理函数之外的代码中(例如,对于 Node.js,处理函数之外的所有内容都会在调用处理函数之前初始化)。
是的,您说得对,Lambda 函数应该是无状态的。然而,函数实例正在被重用。因此,如果您确定您的 Lambda 函数仅用于此目的(即缓存此类密钥是安全的)并且您可以使用同一密钥调用外部端点一段时间,则可以通过缓存它来调整性能,仅在过期后立即更新。这样,您需要在第一次调用时检索密钥,并且仅在同一函数实例的每次其他调用时读取它。/tmp(或者,如果您不信任此缓存机制,请将数据存储在文件中)我不久前写了一篇关于 AWS Lambda 中的缓存的博客文章,其中更详细地解释了这种方法。如果您有疑问,请告诉我。
优点:在代码中进行缓存相对容易。
将密钥存储在 Secrets Manager 中
您可以将其“外包”给Secrets Manager,而不是在同一 Lambda 函数中检索和缓存密钥。这意味着,您可以在 Secrets Manager 中添加新的密钥/秘密,并附加一个单独的 Lambda 函数,在密钥过期前每隔几个小时轮换一次密钥。然后,在原始 Lambda 函数中,您只需从 Secrets Manager 检索密钥即可。为了稍微优化 Lambda 成本和性能,我仍然建议如上所述将密钥缓存一段时间。
优点:关注点分离。
| 归档时间: |
|
| 查看次数: |
8218 次 |
| 最近记录: |