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

如何在单个AWS Cognito UserPool中实现基于用户组的访问权限控制

单个Cognito用户池完全可以实现该需求,无需拆分用户池、依赖身份池或配置复杂的多角色交叉映射。

具体实现方案如下:

核心实现逻辑

通过IAM基础权限拦截 + 调用层参数过滤两层逻辑即可完成,所有配置都在单个用户池内生效:

  • 首先为两个用户组分别绑定IAM角色,无组用户不关联任何带ListUsers权限的角色:
    • 给group_a绑定的IAM角色添加cognito-idp:ListUsers的允许权限,资源指定为当前用户池的ARN即可
    • 给group_b绑定的IAM角色也添加cognito-idp:ListUsers的允许权限,资源范围和group_a一致
    • 无组用户默认没有对应IAM权限,直接调用原生ListUsers会被AWS返回403,无需额外处理
  • 第二步:封装ListUsers调用入口,加权限校验逻辑:
    不要直接给终端用户暴露Cognito原生的ListUsers API,在业务层或者通过API Gateway加一层拦截,解析用户传入的访问令牌,读取自带的cognito:groups声明后做对应处理:
    1. 用户属于group_a:直接调用ListUsers接口,不传过滤参数,返回全量用户数据
    2. 用户属于group_b:调用ListUsers时添加Filter参数,仅查询cognito:groups等于group_b或者cognito:groups为空的用户,返回过滤后的结果
    3. 用户无任何组归属:直接返回403拒绝访问

优化建议

  • 如果用API Gateway封装入口,可以直接配置Lambda授权器完成上述校验逻辑,不需要修改业务代码
  • 组归属信息直接从Cognito签发的访问令牌自带字段读取,不需要额外查询用户池,性能开销极低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:36:03