Lambda授权器如何检测IAM用户是否已被禁用?
我们有两个客户端服务器Iterable和Punchh。第一个服务器只使用用户名的base64令牌:密码,而另一个服务器使用用户名和密码(密码被屏蔽)。这两个服务器正在将(POST方法)事件推到我们的API网关。为了避免任何恶意数据包被发送到网关,我们使用了一个IAM测试用户(在下面的示例图中是dd_transfer),一旦发现恶意数据包,就可以对其进行分解。因此,IAM测试用户现在应该被拒绝访问API网关,其中Punchh和Iterable都在推送它们的有效负载。
当我有一个活跃的测试用户时,只要Punchh或Iterable webhooks push(Post)数据,他们就可以访问API网关。但是,如果在IAM中禁用同一用户(密码为null),则不应允许该用户访问网关。不幸的是,一旦IAM测试用户被停用/禁用,仍然允许访问这两个外部服务器。我不想使用boto3对凭证报告csv文件进行编程和搜索,该文件被编码为base64。这将暴露太多的帐户用户信息-非常危险。是否有另一种方法可让Lambda Authorizer函数确定IAM用户何时已被停用?
下面是代码、网关和服务器的屏幕截图。
注意,这两个服务器的有效载荷表示不同。Punchhweb钩子管理页面使用密码和用户名,而Iterableweb钩子管理页只使用base64编码的令牌。谢谢Lambda授权程序代码

API网关方法(注意: Post和Get方法请求是相同的)

Lambda授权器配置

Punchh页面

可链接网页

发布于 2022-03-20 03:16:48
我找到了一种安全的方法来确定是否启用了dd_transfer用户,这就是使用GetLoginProfile API。https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iam.html#IAM.Client.get_login_profile
如果dd_transfer有一个有效的密码,那么将在响应消息中显示一个LoginProfile对象,返回一个200个响应代码,并在生成策略时给出对API的访问权限(“允许”)。
但是,如果由于禁用了dd_transfer而密码为null,则将返回一个NoSuchEntity异常,指示无法找到用户dd_transfer的登录配置文件。这是直截了当的,但至少我不需要担心访问是否允许恶意事件绕过我们的API并进入S3桶。
我添加了一个try/catch块,通过调用generate函数传递‘Deny’参数来优雅地处理错误,以便生成拒绝访问策略。
这比使用凭据报表API,然后将文本/csv文件中的每条记录解码为64来查找dd_transfer条目要少得多。csv文件不公开实际的原始数据(如密码等),但GetLoginProfile编写起来所需的时间较少。然后,在异常处理程序中,我将调用。
https://stackoverflow.com/questions/71538822
复制相似问题