【问题标题】:Implement Role Based Access Control using AWS Cognito with Serverless使用 AWS Cognito 和无服务器实施基于角色的访问控制
【发布时间】:2018-02-27 21:01:42
【问题描述】:

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

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

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

  1. 创建了用户池并生成了池 ID
  2. 添加了 App Client 并生成了 App Client ID
  3. 使用无服务器创建和部署我的 API
  4. 使用 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 的访问?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • "那么附加到网关的自定义授权 lambda 将能够针对 Cognito 进行身份验证,然后根据经过身份验证的用户的详细信息进行授权。"您能否告诉我自定义授权方如何同时使用 Cognito 和用户详细信息进行身份验证?
    猜你喜欢
    • 2021-07-16
    • 1970-01-01
    • 2020-02-28
    • 2019-07-05
    • 2010-09-11
    • 2021-08-11
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    相关资源
    最近更新 更多