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

时间:2017-09-19 07:19:55

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

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

然而,我正在创建的应用程序需要RBAC,在阅读之后,我了解RBAC可以使用"用户组"或者#34;联合身份"。但是,我仍然无法弄清楚如何正确使用我的应用程序中的任何一个。

这是我迄今为止在应用程序中所做的事情

  1. 创建了用户池并生成了池ID
  2. 添加了App Client并生成了App Client ID
  3. 使用无服务器
  4. 创建和部署我的API
  5. 使用Cognito作为身份验证提供程序以及上面生成的池ID和App Client Id对身份池应用访问控制,然后应用具有以下策略的角色
  6. 政策

    {
        "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的访问?

1 个答案:

答案 0 :(得分:0)

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

  • 在Cognito用户池中,您定义的每个组may have an IAM role都与之关联。进行身份验证的用户将承担该角色(如果他们有多个组,则使用优先顺序)
  • 或者,如果您需要做的只是在API网关上进行授权(而不是完整的IAM设置),那么连接到网关的自定义授权器lambda将能够对Cognito进行身份验证,然后根据经过身份验证的用户详细信息。