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

标签 node.js amazon-web-services amazon-cognito

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

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

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

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

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

pool does not exists

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

请指教

提前致谢

最佳答案

我假设您使用 NodeJS 内的 AWS 开发工具包来连接到 Cognito 用户池。

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

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

要连接到不同的 AWS 账户,通常您有两种选择:

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

目前 Cognito 用户池无法使用选项 1(您可以检查 this table 以了解哪些服务支持此功能)。

选项 2 适用于您的场景,主要技巧是以安全的方式提供凭据。如何执行此操作取决于您的具体环境,但 Lambda 中的一种可能性是使用安全环境变量或 SSM 参数。

关于node.js - 使用 NodeJS(服务器端)从另一个帐户访问 AWS Cognito 池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54162540/

相关文章:

node.js - NodeJS 的 Sequelize 和 hasMany 使用 UUID 错误

amazon-web-services - AWS Batch 中的 "optimal"是什么意思?

javascript - 如何使用 Cognito 身份池和 Amplify 连接到 AWS AppSync

javascript - Amazon Cognito - 需要电话验证 - 但不需要 MFA。有可能吗?

python - Boto3 - 在不使用访问 key 的情况下使用 Amazon Cognito 进行身份验证

node.js - Microsoft Graph API - 修补用户(应用程序 token 的权限问题)

javascript - Express - 循环查询时 Promise 挂起

ios - 无法在 IPv6 网络 iOS GCDAsyncSocket 中连接

amazon-web-services - 如何更改用户状态FORCE_CHANGE_PASSWORD?

node.js - Sequelize 和响应请求 GraphQL