Aws api gateway 拒绝策略未应用于具有特定角色的cognito用户

Aws api gateway 拒绝策略未应用于具有特定角色的cognito用户,aws-api-gateway,amazon-cognito,amazon-iam,Aws Api Gateway,Amazon Cognito,Amazon Iam,为了在我的AWS API网关中添加安全检查,我执行了以下操作: 我在Amazon Cognito用户池中创建了两个组: 经理 基本用户 我并行创建了两个角色(经理和基本用户)。经理组映射到经理角色,基本用户组映射到基本用户角色 我已为特定端点GET crew manager创建了一个IAM策略,以拒绝对基本_用户的访问,并将此策略附加到基本_用户角色: { “版本”:“2012-10-17”, “声明”:[ { “效果”:“拒绝”, “行动”:[ “执行api:调用” ], “资源”:[

为了在我的AWS API网关中添加安全检查,我执行了以下操作:

  • 我在Amazon Cognito用户池中创建了两个组:
    • 经理
    • 基本用户
  • 我并行创建了两个角色(经理和基本用户)。经理组映射到经理角色,基本用户组映射到基本用户角色

  • 我已为特定端点GET crew manager创建了一个IAM策略,以拒绝对基本_用户的访问,并将此策略附加到基本_用户角色:

  • {
    “版本”:“2012-10-17”,
    “声明”:[
    {
    “效果”:“拒绝”,
    “行动”:[
    “执行api:调用”
    ],
    “资源”:[
    “arn:aws:execute api:us-east-2::/*/GET/crew manager”
    ]
    }
    ]
    }
    
  • 从邮递员那里,我请求使用基本用户的授权持有人令牌获取/crew manager。当我解码令牌时,我确认此令牌中的唯一角色是basic_user。但是,响应仍然是200,而不是类似未经授权的响应

  • 我做错什么了吗?

    角色映射只能与API网关上的AWS IAM授权人一起工作。如果您使用的是cognito授权人,您必须在处理程序中执行授权检查,或者实现您自己的自定义授权人以返回相应的策略。

    当您说将角色映射到每个组时,您指的是通过标识池?从用户和组/I可以将角色添加到cognito中的组。您的意思是授权必须是在我的后端服务中处理?但是,假设我在API gateway下有10个不同的后端,使用自定义授权程序或使用AWS IAM授权程序以及标识池听起来有些过分。cognito中的组不会转换为IAM组。但是,使用cognito标识池,您可以从用户池令牌授予IAM凭据。自定义授权者听起来是最好的选择。因此,从这个客户授权人,我需要:1。从标头2中检索令牌。通过向cognito服务3发出请求,检查令牌是否已被cognito批准。进行我的个人检查(例如:组)这听起来是一个好方法吗?是的,你应该先验证令牌。选择一个支持良好的库来执行此操作。查看一个好的列表。然后根据令牌声明执行您想要的任何逻辑。是的,您传递颁发者,它将获取公钥以验证它。
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Deny",
                "Action": [
                    "execute-api:Invoke"
                ],
                "Resource": [
                    "arn:aws:execute-api:us-east-2:<my_account_id>:<API_ID>/*/GET/crew-manager"
                ]
            }
        ]
    }