Authentication Cognito的多租户:一个大用户池还是每个租户一个池?

Authentication Cognito的多租户:一个大用户池还是每个租户一个池?,authentication,amazon-cognito,multi-tenant,Authentication,Amazon Cognito,Multi Tenant,我知道使用Cognito的各种多租户方法,并且我已经在思想上致力于“每个租户一个用户池”方法。例如,我们的AWS帐户会有租户a的租户a的租户用户池和租户b的租户b的租户用户池等。但是,现在我已经准备好实施这种方法,我开始有了第二个想法,我想知道我是否可以用一个用户池做一些更简单的事情,同时仍然实现我的目标,它们是:安全性和灵活性 关于安全性,我假设通过用户池分隔用户本质上是更安全的,这仅仅是因为分隔用户的本质。因此,我的第一个问题是: 单独的用户池是否更安全? 或者,使用一个用户池和存储在数据库

我知道使用Cognito的各种多租户方法,并且我已经在思想上致力于“每个租户一个用户池”方法。例如,我们的AWS帐户会有租户a的租户a的租户用户池和租户b的租户b的租户用户池等。但是,现在我已经准备好实施这种方法,我开始有了第二个想法,我想知道我是否可以用一个用户池做一些更简单的事情,同时仍然实现我的目标,它们是:安全性和灵活性

关于安全性,我假设通过用户池分隔用户本质上是更安全的,这仅仅是因为分隔用户的本质。因此,我的第一个问题是:

  • 单独的用户池是否更安全?
  • 或者,使用一个用户池和存储在数据库中的租户/用户关系信息是否同样安全?
  • 至于灵活性,拥有“每个租户一个用户池”将允许为租户A配置SAML身份验证,而租户B可能会选择另一种身份验证方法,比如使用un/pw对其用户池进行身份验证。或者,租户C可以打开MFA,而租户D可以将其关闭。虽然我不怀疑这种方法是灵活的,但我开始怀疑它是否太复杂,是否可以使用一个用户池实现同样的效果

    如果我为所有用户使用一个用户池,我会想到这样一种方法:

    在上面的模型中,我添加了一个关联表tenant_users,因为在使用一组登录凭据时,可能需要让用户成为多个tenant的一部分(我认为类似于Slack)。但是,如果我采用这种方法,我开始怀疑灵活性。例如,我还可以让租户A使用SAML而租户B使用其他身份验证方法吗?如果您注意到租户表中,我添加了一个auth_methods列,该列将存储租户首选的身份验证方法。我希望我可以为Cognito触发器调用的lambda中的各种身份验证方法添加身份验证逻辑。但是,我正进入一个陌生的领域,所以我不知道什么是可能的或不可能的

    总而言之,我的问题是

  • 所有租户的一个用户池是否与每个租户的一个用户池一样安全
  • 如果我在租户表中添加一个auth_methods列,指定每个租户的身份验证首选项,我是否可以在一个用户池中保持灵活性(例如,允许租户选择不同的身份验证方法)

  • 如果您对这一总体方法有任何其他意见,我们将不胜感激。

    我认为,如果您不知道您正在保护哪些资源,以及您如何保护它们,这是一个很难回答的问题

    • 你是在打拳击吗
    • 是否所有登录都相同,都访问相同的应用程序和资源
    • “租户”中的所有数据在该租户的用户之间是否相等
    • 如何在cognito或其他地方进行授权
    如果所有的登录都差不多相等,那么我想说单个租户可能是有意义的

    要记住的一些事情:

    • 您想为一部分用户提供设备跟踪选项吗
    • MFA呢
    • 支付短信MFA费用怎么样
    • 自定义身份验证如何,例如无密码
    • 高级安全性如何(每个用户额外5c)

    如果其中任何一个答案是“是”,那么我认为您可能会考虑多个用户池,每个帐户有1000个用户池的默认上限,但您可以要求Amazon增加这个值。 就我个人而言,我使用了“大用户池”方法进行身份验证,但是我们跟踪了cognito之外的授权。最大的头痛是当租户需要高级安全性(能够查看失败的登录、帐户风险等)或SMS MFA时,因为它们必须在整个用户池中启用,从而导致成本大幅增加

    另一件事,你可以考虑的是,托管UI不允许你预先设置用户名,所以如果你使用一个电子邮件/用户名的表单,然后重定向到合适的托管UI(在多租户情况下),那么他们将需要重新输入他们的电子邮件。 如果您决定不使用托管UI并使用您自己的用户(或aws amplify),那么您将丢失所有oauth2/oidc内容,例如代码流,因此没有SSO,这会使移动应用程序变得更困难


    另请注意,自定义身份验证不能与MFA混合使用,如果使用自定义身份验证,也不能使用托管UI。

    我认为,如果不知道您正在保护哪些资源以及如何保护它们,这是一个很难回答的问题,例如

    • 你是在打拳击吗
    • 是否所有登录都相同,都访问相同的应用程序和资源
    • “租户”中的所有数据在该租户的用户之间是否相等
    • 如何在cognito或其他地方进行授权
    如果所有的登录都差不多相等,那么我想说单个租户可能是有意义的

    要记住的一些事情:

    • 您想为一部分用户提供设备跟踪选项吗
    • MFA呢
    • 支付短信MFA费用怎么样
    • 自定义身份验证如何,例如无密码
    • 高级安全性如何(每个用户额外5c)

    如果其中任何一个答案是“是”,那么我认为您可能会考虑多个用户池,每个帐户有1000个用户池的默认上限,但您可以要求Amazon增加这个值。 就我个人而言,我使用了“大用户池”方法进行身份验证,但是我们跟踪了cognito之外的授权。最大的头痛是当租户需要高级安全性(能够查看失败的登录、帐户风险等)或SMS MFA时,因为它们必须在整个用户池中启用,从而导致成本大幅增加

    还有一件事你可以