用户应用程序的AWS Cognito和AWS Api Gateway授权

时间:2019-08-16 00:25:32

标签: amazon-web-services aws-api-gateway amazon-cognito

我正在使用AWS Cognito进行与我的应用程序相关的身份验证。因为我也在使用AWS Api Gateway在应用程序中使用Lambda,所以我需要在Gateway上设置安全级别。

在我的应用程序中,将有许多用户,并且相应地,将有不同的角色(例如管理员,营销,管理等)。应该注意的是,这些用户是应用程序用户,而不是AWS IAM用户。

我创建了几组AWS Cognito用户,然后在这些组中又有几名用户。例如,admin组的用户可以输入任何公开的api。例如,市场营销人员只能列出一些内容,但是他们无法访问要创建的API。

我想知道如何使Api Gateway允许或拒绝对某些应用程序用户的访问,但是要基于AWS Cognito用户池。

PS:我已经在这些小组中处理过IAM角色,也处理过联合身份,但是我不知道自己是否走对了。

3 个答案:

答案 0 :(得分:0)

结合使用Cognito用户池和组以及Cognito身份池,以提供细粒度的基于角色的访问控制。

This AWS blog post详细介绍了如何使用Cognito用户池和Cognito身份池设置基于角色的细粒度访问控制。它以DynamoDB和S3为例,但是您可以应用相同的主体来控制对几乎所有AWS服务的访问。

答案 1 :(得分:0)

步骤1:在AWS Cognito中为您的用户池创建OAuth范围。 Cognito->用户池->应用集成->资源服务器。 https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html

步骤2:在AWS API Gateway中,将“授权”用作您的AWS Cognito用户池,并使用OAuth范围来设置该用户池有权访问的资源服务器。 https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-enable-cognito-user-pool.html

例如,您的管理员组可能将有权访问所有资源服务器,但您的市场营销组可能会受到限制。因此,如果您的营销小组中的某人向API网关提出请求,并且如果他无权访问特定的资源服务器,则他们将收到403响应。希望这会有所帮助。

答案 2 :(得分:0)

下面,我展示如何参数化cognito中的所有内容:

  1. 我拥有一组认知用户。
  2. 我有一个分配给该代码组的用户。
  3. 该组的角色如下,它拒绝对api网关的所有访问:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Deny",
                "Action": [
                    "execute-api:Invoke"
                ],
                "Resource": "*"
            }
        ]
    }
    
  4. 我在cognito中创建了一个身份池,该身份池接收AmazonCógnito,然后选择“从令牌中选择角色”,然后选择“ Deny”。

但是,当我从邮递员登录并获取令牌的ID,然后使用指向从邮递员指向Api网关URL的数据进行访问时,将返回该端点的所有数据,这是不正确的,因为我拒绝访问。