Aws Lambda - 如何保留有效令牌以用于其他调用
Aws Lambda - how to persist valid tokens for use with other invocations
我已经设置 api 具有认知身份验证的网关,但需要将一些请求传递给另一个具有自己身份验证的休息服务,您需要在其中提供 clientID 和密码以接收有效的不记名令牌几个小时。
我不需要对请求进行任何更改,只需添加令牌并将其传递给其余服务并接收答案并将其传递给客户端。
由于令牌的有效期为几个小时,我不想每次请求都要求令牌以节省时间。
在哪里可以保留有效令牌? Api-网关还是 lambda 函数?据我所知,Lambda 函数是无状态的,没有存储空间。
谢谢
在您的 lambda 引导过程中获取令牌,将其作为安全字符串写入参数存储,在需要时从参数存储中获取或将其保存在内存中(取决于您期望 lambda 执行的频率 运行)?,当token过期,你的app还在运行ning的时候,重新调用方法,重新写入参数store
有多种方法可以实现这一点。我给你两个我认为对你的情况有意义的建议:
Lambda 实例中的缓存键
您可以在 Lambda 函数中缓存数据。这通常发生在 Lambda 处理程序函数之外的代码中(例如,Node.js 在调用处理程序函数之前初始化处理程序函数之外的所有内容)。
是的,你是对的,Lambda 函数应该 无状态。但是,函数实例正在被重用。因此,如果您确定您的 Lambda 函数仅用于此一个目的(即缓存此类密钥是安全的)并且您可以使用相同的密钥调用外部端点一段时间,则可以通过缓存它来调整性能,并且仅在其过期后立即更新它。这样,您需要在第一次调用时检索密钥,并且只在每次调用同一函数实例时读取它。 (或者,如果您不信任这种缓存机制,则将数据存储在 /tmp
中的文件中)我前段时间写了一个 blog post about caching in AWS Lambda 更详细地解释了这种方法。如果您有任何问题,请告诉我。
优点:在您的代码中缓存相对容易。
将密钥存储在 Secrets Manager 中
与其在同一个 Lambda 函数中检索和缓存密钥,不如每隔几个小时在密钥过期前将其“外包”给 Secrets Manager. This means, you add a new key/secret in Secrets Manager and attach a separate Lambda function rotating the key。然后,在您的原始 Lambda 函数中,您只需从 Secrets Manager 检索密钥。为了稍微优化 Lambda 成本和性能,我仍然建议如上所述将密钥缓存一段时间。
优点:关注点分离。
我已经设置 api 具有认知身份验证的网关,但需要将一些请求传递给另一个具有自己身份验证的休息服务,您需要在其中提供 clientID 和密码以接收有效的不记名令牌几个小时。
我不需要对请求进行任何更改,只需添加令牌并将其传递给其余服务并接收答案并将其传递给客户端。
由于令牌的有效期为几个小时,我不想每次请求都要求令牌以节省时间。
在哪里可以保留有效令牌? Api-网关还是 lambda 函数?据我所知,Lambda 函数是无状态的,没有存储空间。
谢谢
在您的 lambda 引导过程中获取令牌,将其作为安全字符串写入参数存储,在需要时从参数存储中获取或将其保存在内存中(取决于您期望 lambda 执行的频率 运行)?,当token过期,你的app还在运行ning的时候,重新调用方法,重新写入参数store
有多种方法可以实现这一点。我给你两个我认为对你的情况有意义的建议:
Lambda 实例中的缓存键
您可以在 Lambda 函数中缓存数据。这通常发生在 Lambda 处理程序函数之外的代码中(例如,Node.js 在调用处理程序函数之前初始化处理程序函数之外的所有内容)。
是的,你是对的,Lambda 函数应该 无状态。但是,函数实例正在被重用。因此,如果您确定您的 Lambda 函数仅用于此一个目的(即缓存此类密钥是安全的)并且您可以使用相同的密钥调用外部端点一段时间,则可以通过缓存它来调整性能,并且仅在其过期后立即更新它。这样,您需要在第一次调用时检索密钥,并且只在每次调用同一函数实例时读取它。 (或者,如果您不信任这种缓存机制,则将数据存储在 /tmp
中的文件中)我前段时间写了一个 blog post about caching in AWS Lambda 更详细地解释了这种方法。如果您有任何问题,请告诉我。
优点:在您的代码中缓存相对容易。
将密钥存储在 Secrets Manager 中
与其在同一个 Lambda 函数中检索和缓存密钥,不如每隔几个小时在密钥过期前将其“外包”给 Secrets Manager. This means, you add a new key/secret in Secrets Manager and attach a separate Lambda function rotating the key。然后,在您的原始 Lambda 函数中,您只需从 Secrets Manager 检索密钥。为了稍微优化 Lambda 成本和性能,我仍然建议如上所述将密钥缓存一段时间。
优点:关注点分离。