拒绝策略不适用于具有特定角色的认知用户

Posted

技术标签:

【中文标题】拒绝策略不适用于具有特定角色的认知用户【英文标题】:DENY policy not applied to cognito users with specific role 【发布时间】:2021-07-25 14:36:01 【问题描述】:

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

    我在我的 Amazon Cognito 用户池中创建了两个组:
经理 basic_user

    我并行创建了两个角色(manager 和 basic_user)。 manager 组映射到 manager 角色,basic_user 组映射到 basic_user 角色。

    我创建了一个 IAM 策略来拒绝 basic_user 用户的访问,用于特定端点 GET 船员经理,并将此策略附加到 basic_user 角色:


    "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"
            ]
        
    ]

    从 Postman,我使用 basic_user 的授权不记名令牌向 GET /crew-manager 发出请求。当我解码令牌时,我确认此令牌中的唯一角色是 basic_user。但是,响应仍然是 200,而不是类似未经授权的响应。

我是不是做错了什么?

【问题讨论】:

当您说将角色映射到每个组时,您的意思是通过身份池? 来自用户和组/我可以在 Cognito 中向组添加角色 【参考方案1】:

角色映射仅适用于您的 API 网关上的 AWS IAM 授权方。如果您使用的是 cognito 授权器,则必须在处理程序中进行授权检查或实施您自己的自定义授权器以返回适当的策略。

【讨论】:

你的意思是授权必须在我的后端服务中处理?但是,假设我在 API 网关下有 10 个不同的后端,这听起来有点矫枉过正 然后使用自定义授权方或使用 AWS IAM 授权方和身份池。 cognito 中的组不会转换为 IAM 组。但是,使用 cognito 身份池,您可以从用户池令牌授予 IAM 凭证。 自定义授权器听起来是最好的选择。因此,从这个客户授权人那里,我需要: 1. 从标头中检索令牌 2. 通过向 cognito 服务发出请求来检查令牌是否被 cognito 批准 3. 进行我的个人检查(例如:组)是否听起来不错? 是的,您首先要验证令牌。选择一个支持良好的库来执行此操作。查看jwt.io 以获得一个好的列表。然后根据令牌声明执行您想要的任何逻辑。 是的,你传递了颁发者,它会获取公钥来验证它。

以上是关于拒绝策略不适用于具有特定角色的认知用户的主要内容,如果未能解决你的问题,请参考以下文章

角色分配策略中无法识别 aws 自定义属性

Azure 认知服务 - 计算机视觉 - OCR 不适用于手写

AWS IAM 策略允许用户创建具有特定策略/角色的 IAM 用户

授权不适用于用户搜索

ChatGPT 和知识策略:构建低成本的认知助手

大数据开发认知--架构