如何解决AWS:根据 Cognito 身份验证角色限制 API 对资源的访问
我在 AWS 中为 3 个部署阶段(DEV、STAGING、PROD)设置了微服务架构。 我有两个后端正在运行。一个仅用于通过移动客户端使用,另一个后端支持基于网络的访问。
后端对公众开放。通过 AWS Cognito 提供的 OAuth2 信息控制访问。身份验证信息包含多个角色(ROLE_CLIENT、ROLE_DEVELOPER、ROLE_ADMIN、...)。
根据角色,我要决定哪些主机应该由谁访问。
ROLE_CLIENT 应该只能看到 PROD 系统。 ROLE_DEVELOPER 应该能够访问 PROD 和 DEV 系统。 允许 ROLE_ADMIN 访问任何后端。
示例场景:角色为 ROLE_CLIENT 的用户尝试访问 https://dev.myhost.com/path 下的 DEV 后端。响应应该类似于“403 Forbidden”。
到目前为止,我想出了这些想法:
-
实现一个在所有后端共享的库。库在每次访问时检查角色,并根据库内硬编码的 ROLE - STAGE 映射抛出异常。
-
在某处定义一个中央 API 网关,它将所有后端实例的所有传入流量捆绑在一起,并使用 Lambda 检查是否允许角色调用 https://[STAGE].myhost.com/path.
我对这两种解决方案都不太满意,因为两者都需要某种硬编码的 ROLE - STAGE 映射。
有什么方法可以为所有后端主机 URL 实现类似服务发现的功能吗?下一步是提供一个 API,客户端可以调用该 API 以检索可以根据其角色调用的可能 URL 列表。
解决方法
您是否考虑过使用 Cognito 群组来处理此问题?典型的场景是:
- Admin、dev 和 prod 有自己的组。您为不同的用户分配正确的组。当用户登录时,他们的代币将根据他们的组生成。所以他们会有不同的角色令牌
- 获得令牌后,您可以使用 API Gateway IAM 授权方并在进行 api 调用时传递令牌。
我以前没有使用过这种方法,但应该可以。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。