【问题标题】:AWS Cognito Group Management LimitationsAWS Cognito 组管理限制
【发布时间】:2020-05-04 02:16:40
【问题描述】:

我正在编写一个系统监控工具,它将使用 Lambda 定期收集用户指定端点上的指标,将结果存储在 Dynamo 中,然后允许用户通过一个反应应用程序获取指标,该应用程序将调用另一个 Lambda 实例来检索数据发电机。查询最终将针对分配给每个用户指定的监视器的 UID 进行,该 UID 将对日期时间和监视器 ID 的 GSI 进行查询。

我一直在寻找 Cognito 作为我的用户存储。我的目标是在监视器 UID 级别上定义权限,以允许用户只能访问他们的监视器。我正在考虑为每个监视器创建一个组,然后将其分配给创建用户。然后,该组将位于 Cognito 在登录时提供的 JWT 令牌中,该令牌将用于授权 Lambda 调用。

我的问题是:

  • 如果创建了数千个监视器,这是一个可持续的模型吗 导致用户池中的数千个组?
  • 如果用户可以访问数百个监视器,对于此用例,令牌大小是否存在过大的风险?
  • 理论上我会遇到一个硬性或软性服务限制吗,比如说有数百个用户,每个用户都有几十个显示器?
  • 最后,这是以预期的方式使用 Cognito 还是有更有效的方法来进行细粒度用户控制?

注意:我提出这个模型的主要原因是它是无状态的、细粒度的,不需要为每个查询进行权限查找,并且不需要单个记录具有授权意识.

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda amazon-dynamodb amazon-cognito


    【解决方案1】:

    我不确定这是否完全适合您的用例,但细粒度访问的一个非常干净的解决方案是利用基于 Cognito 子 ID 的访问策略。例如here's the AWS doc for doing this with S3 prefixes,以模拟带有用户目录的文件系统。例如

    {
        "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 授予每个监视器权限,那么这可能是您最干净的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-06
      • 2018-12-22
      • 2019-04-19
      • 2020-08-06
      • 2016-02-24
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多