node.js - 使用 NodeJS(服务器端)从另一个账户访问 AWS Cognito 池
问题描述
我们正在开发一个有两种用户的应用程序
- 个人用户(允许自己注册)。
- 代理商的用户部分(仅由我们的内部用户管理员添加到应用程序)。
该应用程序的设计方式是所有 Cognito 操作(如添加用户、删除用户、密码重置等)都由运行在AWS Lambda中的服务器 api(服务器端身份验证流程)完成。我们在客户端不做任何事情。
我们的基础设施团队目前正在更改所有应用程序在其自己的 AWS 账户下运行的方式,但我们不想在每个账户中创建用户池,因为我们的许多应用程序共享同一个用户池。因此,我们决定将池保留在当前帐户中,并且仅将应用程序移动到各自的帐户中。
我们确实知道如何从 NodeJS 的不同帐户连接到池,并假设我们创建了所有各自的角色和权限,我们甚至尝试使用池 id 的完整 ARN,但 api 不允许 ARN,它只需要池id 如果我们只使用池 id,它会抛出一个错误说
池不存在
我们认为这是因为它正在查看当前帐户而不是池所在的另一个帐户。
请指教
提前致谢
解决方案
我假设您使用 NodeJS 中的 AWS 开发工具包连接到 Cognito 用户池。
AWS 开发工具包会以某种方式获取凭证以向特定 AWS 账户的 AWS 服务器进行身份验证。如果您未在代码中指定访问代码/密钥(我希望不是这种情况!),SDK 可能会从环境中获取(临时)密钥。
如果您在 Lambda 或 ECS 容器中运行 NodeJS,则可以设置 IAM 角色。如果您这样做,AWS 将创建一些临时凭证并通过环境变量注入它们。
要连接到不同的 AWS 账户,通常有两种选择:
- 使用其他 AWS 账户资源中的资源策略来提供对正在运行的 AWS 账户的访问权限
- 手动向您的应用程序提供凭证,例如通过在 Lambda 中添加安全环境变量,可用于访问另一个 AWS 账户中的另一个 IAM 用户。
Cognito 用户池目前无法使用选项 1(您可以查看此表以查看哪些服务支持此选项)。
对于您的方案,选项 2 是可能的,主要技巧是以安全的方式提供凭据。如何执行此操作取决于您的特定环境,但 Lambda 中的一个可能性是使用安全环境变量或 SSM 参数。
推荐阅读
- java - JavaFX - 沿着平行于切线的路径制作动画
- python - python 一组所有数字类型。do pop(),不随机输出
- docker - 是否可以“重置” Docker 容器的读/写层?
- python - 如何在python中将None分配给对象引用
- python - python - 区分图例中的 x 和 y 误差
- node.js - MongoDB insertMany BulkWriteError,避免捕获重复键并执行 then 功能
- python - 抛出异常:读取访问冲突。**bp** 为 0xFFFFFFFFFFFFFFFF
- jpa - JPA 实体管理器是线程本地的吗?
- javascript - 只有元组时如何将数据从 JSON 加载到 D3 图表
- ms-project - MS Project:如何使用 JavaScript 插件设置任务的日常实际工作?