【问题标题】:Access AWS Cognito pool from another account using NodeJS( server side)使用 NodeJS(服务器端)从另一个账户访问 AWS Cognito 池
【发布时间】:2019-01-12 18:17:14
【问题描述】:

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

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

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

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

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

池不存在

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

请指教

提前致谢

【问题讨论】:

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


    【解决方案1】:

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

    AWS 开发工具包会以某种方式获取凭证,以向特定 AWS 账户的 AWS 服务器进行身份验证。如果您未在代码中指定访问代码/密钥(我希望不是这种情况!),SDK 可能会从环境中获取(临时)密钥。

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

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

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

    此时,Cognito 用户池无法使用选项 1(您可以查看 this table 以查看哪些服务支持此选项)。

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

    【讨论】:

    • 感谢您帮助我。我们的 lambda 基于角色访问其他资源,但是如果无法通过角色完成跨账户资源访问,我们绝对可以使用凭据。由于我们的应用程序配置详细信息已经存储在 ssm 中,我可以将凭据添加到 ssm。我希望只需将凭据传递给 Cognito api 就足以连接到池。我今晚会尝试并更新回来。
    猜你喜欢
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2018-08-20
    • 2020-04-14
    • 2020-01-20
    • 2016-02-27
    • 2021-05-12
    • 1970-01-01
    相关资源
    最近更新 更多