使用Cognito用户组的API Gateway端点的RBAC

0

【以下的问题经过翻译处理】 客户希望在Cognito中创建用户组(例如管理员、客户等),并将特定角色附加到每个组。 他们希望使用这些角色策略来确定用户是否有权访问API网关终端节点,例如/admin或/home 等。API网关使用Cognito授权器,他们想避免编写自定义的lambda授权器。应用程序使用Cognito用户池和SAML。目前,id_token在其声明中包含cognito:roles属性,客户希望了解如何使用此属性来允许/拒绝访问API。 根据我所了解的,这可以通过IAM授权来实现 - [这里](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html),但我不认为这可以在Cognito用户池和组中实现。 在Lambda函数处理之前,让api gateway终端能够允许或拒绝访问的正确方法是什么。 是否有使用REST API实现这一目标的替代/更好方法?

1 回答
0

【以下的回答经过翻译处理】 你无法使用默认的 Cognito 验证器实现 RBAC,但有两种选项可以使用 Cognito 令牌在 API Gateway 中实现 RBAC:

  1. 使用 lambda 验证器对令牌进行验证和解码,然后检查令牌中的声明以确定是否允许或拒绝调用。你可以使用 AWS-JWT 库实现此验证器。该库原生支持验证 cognito:groups,这里有个示例
  2. 另一种选择是使用从 Cognito 用户池生成的 ID-Token,使用 基于角色的访问控制 方法使用 Cognito Identity Pool 获取临时凭证。这使你能够假定令牌中定义的角色并基于该角色的权限获得临时凭证。然后,你需要在 API Gateway 方面使用 IAM 验证器,并使用 AWS SDK 或 Amplify 使用从 cognito 身份池返回的临时凭据调用 API。

我认为 #1 更容易实现,因为 API Gateway 支持 lambda 验证器。如果你需要实现访问除 API Gateway 之外的服务的 RBAC,#2 可能很有帮助。这个视频 可能有助于扩展使用方法 #2 的选项。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则