适用于API网关API的AWS Cognito的身份验证

时间:2019-09-02 17:28:12

标签: api authorization

我在不同组的cognito用户池中有一组用户。示例:管理员组中有5个用户,主管组中有20个用户。我已经在cognito中创建了应用客户端,并启用了一些内置的Oauth2作用域和自定义作用域。 现在我有了API Gateway API,其中已启用COGNITO AUTHORIZER进行身份验证。这些API可以正常工作。

面临的问题: 使用上述方法,我可以访问我的api,但是如何根据用户范围控制API访问。 池中的所有用户都启用了所有作用域。唯一可以区分用户的是cognito:group,在api auth设置中,我只能设置作用域,在这种情况下,所有用户(无论组如何)都具有所有作用域,因此它们正在通过身份验证。如何根据用户类型控制流量?

1 个答案:

答案 0 :(得分:0)

创建用户组时,您将具有一个IAM角色。

基于此,您可以通过在execute api上设置权限来控制对API的访问:

arn:aws:execute-api:{region}:{account}:{apiId}/{stage}/{method}/{ressource}

所有{parameter}都可以是通配符*以匹配所有

您可以在用户组的描述中找到其用户组的IAM角色ARN,然后进入IAM控制台并更新此角色权限

因此您的政策可以是这样的:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:eu-central-1:1564543246:badfg687e/*/*/petstore"
        },
        {
            "Effect": "Deny",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:eu-central-1:1564543246:badfg687e/*/*/*"
        }
    ]
}

例如,此权限允许该IAM角色所属组的用户中的一部分在API badfg687e的资源petstore上执行所有方法,并拒绝所有其他访问。