使用NodeJS(服务器端)从另一个帐户访问AWS Cognito池



我们正在开发一个应用程序,其中有两种用户

  1. 个人用户(允许自己注册)
  2. 机构的用户部分(仅由我们内部的管理员添加到应用程序中用户)

应用程序的设计方式是,所有Cognito操作(如添加用户、删除用户、密码重置等)都由运行在AWS Lambda中的服务器api(服务器端身份验证流)完成。我们不在客户端做任何事情。

我们的基础设施团队目前正在对所有应用程序在其自己的AWS帐户下运行的方式进行更改,但我们不想在每个帐户中创建用户池,因为我们的许多应用程序共享相同的用户池。因此,我们决定将池保留在当前帐户中,只将应用程序移动到各自的帐户中。

我们确实知道如何从NodeJS的不同帐户连接到池,假设我们创建了所有相应的角色和权限,我们甚至尝试使用池id的完整ARN,但api不允许ARN,它只需要池id,如果我们只使用池id,它会抛出一个错误,说

池不存在

我们认为这是因为它查看的是当前帐户,而不是池所在的另一个帐户。

请告知

提前感谢

我假设您使用NodeJS中的AWS SDK连接到Cognito用户池。

AWS SDK会以某种方式获取凭证,以向AWS服务器验证某个AWS帐户。如果你没有在代码中指定访问代码/密钥(我希望不是这样!),SDK可能会从环境中获取(临时)密钥。

如果您在Lambda或ECS容器中运行NodeJS,则可以设置IAM角色。如果您这样做,AWS将创建一些临时凭据,并通过环境变量注入它们。

要连接到不同的AWS帐户,通常有两个选项:

  1. 使用其他AWS帐户资源中的资源策略来提供对正在运行的AWS帐户的访问
  2. 手动向您的应用程序提供凭据,例如通过在Lambda中添加安全环境变量,可用于访问另一个AWS帐户中的另一个IAM用户

选项1目前不适用于Cognito用户池(您可以查看此表以查看哪些服务支持此功能)。

选项2适用于您的场景,主要技巧是以安全的方式提供凭据。如何做到这一点取决于您的特定环境,但Lambda中的一种可能性是使用安全环境变量或SSM参数。

最新更新