You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS多租户应用:主用户池管理员如何管理租户Cognito用户池?

解决方案

1. 主用户池与租户用户池的关联映射

  • 在主用户池的用户属性中添加自定义属性(比如custom:tenantIds),存储该用户名下所有租户的ID列表(用逗号分隔或JSON数组均可)。用户创建租户后,CloudFormation栈部署完成时,自动将新租户ID追加到该属性中。
  • 同时在每个租户用户池的用户属性里添加custom:tenantOwnerId,关联主用户池的用户ID,用于后续的权限校验。

2. 主站的租户管理逻辑

  • 用户在website.com通过主Cognito用户池登录后,前端从用户属性中获取custom:tenantIds,拉取每个租户的基本信息(比如企业名称、租户域名前缀)展示在控制台。
  • 当用户点击某个租户的「管理」按钮时,后端通过Cognito Admin API(比如AdminCreateUser、AdminUpdateUserAttributes)操作对应的租户用户池,注意两点:
    • 后端服务需要拥有操作所有租户用户池的IAM权限,该权限可在CloudFormation创建租户时自动附加到服务角色上。
    • 操作前必须校验当前主用户是否为该租户的所有者(通过custom:tenantOwnerId匹配主用户ID),防止越权。

3. 租户域名(tenant.website.com)的登录跳转

  • 无需让用户重复输入账号密码,采用联合身份认证方式:
    1. 用户在主站选中租户后,前端向后端请求生成临时授权凭证(比如JWT),凭证需包含主用户ID和租户ID且签名有效。
    2. 后端验证主用户身份和租户所有权后,调用租户用户池的AdminInitiateAuth API,以租户管理员身份(提前在租户用户池创建关联主用户的管理员账号,或动态生成临时会话)获取租户用户池的ID Token和Access Token。
    3. 前端拿到令牌后跳转至tenant.website.com,将令牌存入本地存储,租户端应用直接使用该令牌完成操作。
  • 你之前尝试的身份池思路是可行的,优化映射逻辑即可:
    • 将主用户池作为身份池的身份提供者,主用户登录后,身份池根据用户的custom:tenantIds属性动态授予对应租户的操作权限。
    • 后端通过身份池的临时凭证调用租户用户池API,无需给后端服务开放所有租户的权限,实现动态权限分配。
架构优化建议
  • 避免为每个租户创建独立用户池:若租户数量较多,大量独立用户池会增加运维成本(如版本升级、监控、备份),可改用单用户池+租户属性隔离方案:
    • 所有用户(主用户、租户管理员、员工)统一存储在主用户池中,通过custom:tenantId属性区分所属租户。
    • 利用Cognito的「组(Group)」管理租户内角色(如租户管理员、员工),组权限通过IAM角色映射实现。
    • 该方案运维成本更低,用户切换租户仅需切换组权限,无需跨用户池操作。
  • 统一权限管控:无论采用多用户池还是单用户池方案,建议用IAM权限边界限制租户管理员的操作范围,例如仅允许操作自身租户内的用户,禁止修改租户核心配置。
  • 异步处理租户创建:CloudFormation栈创建租户耗时较长,可将创建逻辑放入SQS队列,通过Lambda异步处理,前端展示创建状态,避免用户长时间等待。

内容的提问来源于stack exchange,提问作者Pkns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:57:19