amazon-web-services - 使用 AWS Cognito 和 Serverless 实现基于角色的访问控制

标签 amazon-web-services serverless-framework aws-cognito

我按照本教程使用 AWS 服务(S3、Lambda、Cognito、DynamoDB)和使用 ReactJS 的无服务器框架创建了一个无服务器应用程序 https://serverless-stack.com/ .本教程使用 AWS Cognito 用户池和身份池进行用户管理和身份验证。本教程中的应用程序是一个“记笔记”应用程序,它在应用程序中没有基于角色的访问控制。

然而,我正在创建的应用程序需要 RBAC,在阅读了它之后,我明白可以使用“用户组”或“联合身份”来实现 RBAC。但是,我仍然无法弄清楚如何在我的应用程序中正确使用它们中的任何一个。

这是我到目前为止在应用程序中所做的

  • 创建了一个用户池并生成了池 ID
  • 添加了一个 App Client 并生成了 App Client ID
  • 使用无服务器创建和部署我的 API
  • 使用 Cognito 作为身份验证提供者以及上面生成的池 ID 和应用程序客户端 ID 对带有身份池的 API 应用访问控制,然后应用具有以下策略的角色

  • 政策
    {
        "Version": "2012-10-17",
        "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "mobileanalytics:PutEvents",
            "cognito-sync:*",
            "cognito-identity:*"
          ],
          "Resource": [
            "*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:*"
          ],
          "Resource": [
            "arn:aws:s3:::YOUR_S3_UPLOADS_BUCKET_NAME/${cognito-identity.amazonaws.com:sub}*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "execute-api:Invoke"
          ],
          "Resource": [
            "arn:aws:execute-api:YOUR_API_GATEWAY_REGION:*:YOUR_API_GATEWAY_ID/*"
          ]
        }
      ]
    }
    

    这允许每个人访问所有 API。如何为每个用户分配角色,然后根据他们的角色限制对某些 API 的访问?

    最佳答案

    有几种方法可以做到;更重要的是,您根本不需要身份池。

  • 在 Cognito 用户池中,您定义的每个组 may have an IAM role与之相关。进行身份验证的用户将承担该角色(如果他们有多个组,则使用优先顺序)
  • 或者,如果您需要做的只是在 API 网关上进行授权(而不是完整的 IAM 设置),那么附加到网关的自定义授权方 lambda 将能够针对 Cognito 进行身份验证,然后根据经过身份验证的用户的详细信息进行授权.
  • 关于amazon-web-services - 使用 AWS Cognito 和 Serverless 实现基于角色的访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46294293/

    相关文章:

    python - 如何使用 Python boto3 从 AWS DynamoDB 表中获取特定属性的所有项目?

    amazon-web-services - Api 网关与 Event Bridge 的连接出现错误。不支持 Eventbridge-PutEvents

    amazon-web-services - 从 lambda 层加载时无服务器离线未定义模块

    oauth-2.0 - 当需要电子邮件属性但 Facebook 不提供时,用户如何通过 Facebook 注册 Cognio 用户池?

    single-sign-on - 如何使用 AWS Cognito 作为单点登录?

    linux - ssl 证书不适用于 apache linux ec2 实例

    amazon-web-services - 让我们在 AWS Elastic Beanstalk 上加密

    reactjs - 使用 HTTPS 在 AWS S3 上部署 ReactJS 应用程序

    node.js - API Gateway 排序查询字符串

    amazon-web-services - AWS Cognito Groups 和 AWS Api Gateway