在我的应用程序中,我使用Cognito用户池来管理身份,并且拥有一个特殊的服务帐户,该帐户可以访问Python后端应用程序中的所有用户数据。我还有一个Lambda函数,该函数每晚运行,使用ADMIN_NO_SRP_AUTH
身份以特殊管理员身份进行身份验证并执行维护。
我现在遇到的问题是,即使Lambda的IAM角色已配置为对Cognito用户池的特权访问,似乎我也需要传递用户密码。理想情况下,我希望能够从Cognito获取任意用户的JWT令牌,而不必知道他们的密码(或者理想情况下,完全禁用该用户的交互式登录)。
我有几种替代方法:
保持现在的逻辑,并从Parameter Store安全地注入密码。但是,通过这种方式,我需要设计一个定期旋转密码的系统。
在登录之前立即在Lambda中生成随机字符串,使用AdminSetUserPassword
重设服务帐户的密码,然后使用该密码登录。这样就解决了轮换问题,但是这样做似乎是错误的方式,并且容易出现比赛情况。
对CUSTOM_AUTH
进行挑战。这似乎不必要地复杂,因为我不得不自己亲自设计挑战性lambda,而不是仅仅依靠原始的IAM角色。
放弃服务帐户方法,并使用不同的auth方法为lambda直接访问后端提供权限。这是可行的,但我喜欢通过Cognito JWT在后端仅使用一种身份验证方法的概念。
对我来说似乎很奇怪,存在具有管理凭据的特权操作“以任何用户身份登录”,或者我只是缺少了什么?