node.js - AWS Cognito 组管理限制
问题描述
我正在编写一个系统监控工具,它将使用 Lambda 定期收集用户指定端点上的指标,将结果存储在 Dynamo 中,然后允许用户通过一个反应应用程序获取指标,该应用程序将调用另一个 Lambda 实例以从 Dynamo 检索数据。查询最终将针对分配给每个用户指定的监视器的 UID 进行,该 UID 将对日期时间和监视器 ID 的 GSI 进行查询。
我一直在寻找 Cognito 作为我的用户商店。我的目标是在监视器 UID 级别上定义权限,以允许用户只能访问他们的监视器。我正在考虑为每个监视器创建一个组,然后将其分配给创建用户。然后,该组将位于 Cognito 在登录时提供的 JWT 令牌中,该令牌将用于授权 Lambda 调用。
我的问题是:
- 如果创建了数千个监视器,导致用户池中有数千个组,这是一个可持续的模型吗?
- 如果用户可以访问数百个监视器,那么对于这个用例,令牌大小是否存在过大的风险?
- 理论上我会遇到一个硬性或软性服务限制吗,比如说有数百个用户,每个用户都有几十个监视器?
- 最后,这是以预期的方式使用 Cognito,还是有更有效的细粒度用户控制方法?
注意:我提出这个模型的主要原因是它是无状态的、细粒度的,不需要为每个查询进行权限查找,并且不需要单个记录具有授权意识。
解决方案
我不确定这是否完全适合您的用例,但细粒度访问的一个非常干净的解决方案是利用基于 Cognito 子 ID 的访问策略。例如,这是使用 S3 前缀执行此操作的 AWS 文档,以便模拟具有用户目录的文件系统。例如
{ "Sid": "ListYourObjects", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": ["arn:aws:s3:::bucket-name"], "Condition": { "StringLike": { "s3:prefix": ["cognito/application-name/${cognito-identity.amazonaws.com:sub}"] } } }, { "Sid": "ReadWriteDeleteYourObjects", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::bucket-name/cognito/application-name/${cognito-identity.amazonaws.com:sub}", "arn:aws:s3:::bucket-name/cognito/application-name/${cognito-identity.amazonaws.com:sub}/*" ] }
如果您知道监视器只能由一个用户访问,并且您可以根据 Cognito 子 ID 授予每个监视器的权限,那么这可能是您最干净的方法。
推荐阅读
- algorithm - 公式,圆的周长与矩形的角相交
- regression - 基本函数的数量是否可能超过样条回归中的观察数量?
- c++ - 为什么编译器会抛出“递归调用终止”
- android - 为 ConstraintLayout 内的准线对象添加边距
- python - 使用 ffmpeg 子进程将压缩流通过管道传输到另一个进程
- python - 使用牛顿法在 Python 中计算倒数
- android - 为整个应用设置背景颜色。Android, Jetpack 撰写
- python - Django python请求起点-从头到尾跟踪请求
- node.js - 尝试设置 firebase 自定义声明并收到错误 - JS 后端
- regex - Jmeter正则表达式排除字符串/单词