Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用NodeJS(服务器端)从另一个帐户访问AWS Cognito池_Node.js_Amazon Web Services_Amazon Cognito - Fatal编程技术网

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

Node.js 使用NodeJS(服务器端)从另一个帐户访问AWS Cognito池,node.js,amazon-web-services,amazon-cognito,Node.js,Amazon Web Services,Amazon Cognito,我们正在开发一个有两种用户的应用程序 个人用户(允许自己注册) 用户是机构的一部分(仅由我们的内部管理员添加到应用程序中 用户) 该应用程序的设计方式是,所有Cognito操作(如添加用户、删除用户、密码重置等)都由运行在AWS Lambda中的服务器api(服务器端身份验证流)完成。我们在客户端不做任何事情 我们的基础设施团队目前正在改变所有应用程序都将在其自己的AWS帐户下运行的方式,但我们不希望在每个帐户中创建用户池,因为我们的许多应用程序共享相同的用户池。因此,我们决定将池保留在活期帐户

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

  • 个人用户(允许自己注册)
  • 用户是机构的一部分(仅由我们的内部管理员添加到应用程序中 用户)
  • 该应用程序的设计方式是,所有Cognito操作(如添加用户、删除用户、密码重置等)都由运行在AWS Lambda中的服务器api(服务器端身份验证流)完成。我们在客户端不做任何事情

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

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

    池不存在

    我们认为这是因为它关注的是活期账户,而不是池所在的另一个账户

    请告知


    提前感谢

    我假设您使用NodeJS中的awsdk连接到Cognito用户池

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

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

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

  • 使用其他AWS帐户资源中的资源策略提供对正在运行的AWS帐户的访问
  • 手动向应用程序提供凭据,例如通过在Lambda中添加可用于访问另一AWS帐户中的另一IAM用户的安全环境变量 对于Cognito用户池,选项1目前不可能(您可以检查哪些服务支持此选项)


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

    谢谢你帮我。我们的lambda基于角色访问其他资源,但如果无法通过角色完成跨帐户资源访问,我们肯定可以使用凭据。由于我们的应用程序配置详细信息已存储在ssm中,我可以向ssm添加凭据。我希望仅仅将凭证传递给CognitoAPI就足以连接到池。我今晚会尝试并更新回来。