我们正在开发一个拥有两种用户的应用程序
该应用程序的设计方式是,所有Cognito操作(例如添加用户,删除用户,密码重置等)均由运行在 AWS中的Server api(服务器端身份验证流程)完成Lambda 。我们在客户端不做任何事情。
我们的基础架构团队目前正在对所有应用程序将在其自己的AWS账户下运行的方式进行更改,但是我们不想在每个账户中创建用户池,因为我们的许多应用程序共享同一用户池。因此,我们决定将池保留在当前帐户中,仅将应用程序移至各自的帐户。
我们确实知道如何从NodeJS的不同帐户连接到池,并假设我们创建了所有各自的角色和权限,我们甚至尝试使用池ID的完整ARN,但api不允许ARN,这需要仅池ID,如果我们仅使用池ID,则会抛出错误
池不存在
我们认为是因为它正在查看当前帐户,而不是池所在的另一个帐户。
请告知
预先感谢
答案 0 :(得分:1)
我假设您使用NodeJS内的AWS开发工具包连接到Cognito用户池。
AWS开发工具包将以某种方式获取凭据以对特定AWS账户的AWS服务器进行身份验证。如果您未在代码中指定访问代码/秘密密钥(希望不是这种情况!),SDK可能会从环境中提取(临时)密钥。
如果您在Lambda或ECS容器中运行NodeJS,则可以设置IAM角色。如果执行此操作,AWS将创建一些临时凭证并通过环境变量注入它们。
要连接到其他AWS账户,通常有两个选择:
当前对于Cognito用户池而言,选项1不可用(您可以检查this table来查看哪些服务支持此功能。)
您的方案可以使用选项2,主要技巧是以安全的方式提供凭据。如何执行此操作取决于您的特定环境,但是Lambda可能会使用安全的环境变量或SSM参数。