我正在使用AWS Cognito进行与我的应用程序相关的身份验证。因为我也在使用AWS Api Gateway在应用程序中使用Lambda,所以我需要在Gateway上设置安全级别。
在我的应用程序中,将有许多用户,并且相应地,将有不同的角色(例如管理员,营销,管理等)。应该注意的是,这些用户是应用程序用户,而不是AWS IAM用户。
我创建了几组AWS Cognito用户,然后在这些组中又有几名用户。例如,admin组的用户可以输入任何公开的api。例如,市场营销人员只能列出一些内容,但是他们无法访问要创建的API。
我想知道如何使Api Gateway允许或拒绝对某些应用程序用户的访问,但是要基于AWS Cognito用户池。
PS:我已经在这些小组中处理过IAM角色,也处理过联合身份,但是我不知道自己是否走对了。
答案 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中的所有内容:
该组的角色如下,它拒绝对api网关的所有访问:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"execute-api:Invoke"
],
"Resource": "*"
}
]
}
我在cognito中创建了一个身份池,该身份池接收AmazonCógnito,然后选择“从令牌中选择角色”,然后选择“ Deny”。
但是,当我从邮递员登录并获取令牌的ID,然后使用指向从邮递员指向Api网关URL的数据进行访问时,将返回该端点的所有数据,这是不正确的,因为我拒绝访问。