企业授权服务 2022
· 阅读需 8 分钟
授权决定个人或系统是否可以访问特定资源。这个过程是一个典型的场景,可以通过软件进行自动化。我们将回顾谷歌的 Zanzibar、受 Zanzibar 启发的解决方案以及市场上的其他 AuthZ 服务。
Zanzibar:谷歌的一致性全球授权系统
- 谷歌的 = 经受住了谷歌产品的考验,每秒检查 2000 万个权限,p95 < 10 毫秒,99.999% 的可用性
- 一致性 = 确保授权检查基于不超过客户端指定更改的 ACL 数据
- 全球 = 地理分布的数据中心,并在全球数千台服务器上分配负载。
- 授权 = 通用授权
在 Zanzibar 的背景下,我们可以这样表达 AuthZ 问题:
isAuthorized(user, relation, object) = 用户与对象之间是否存在关系?
这被称为基于关系的访问控制(==ReBAC==)。客户端可以在 ReBAC 的基础上构建 ABAC 和 RBAC。不幸的是,Zanzibar 不是开源的,也不能作为现成的服务购买。
Zanzibar 架构
为什么 Zanzibar 可扩展?
- 使用 Spanner 作为数据库
- Leopard 索引系统
- 将组到组的路径展平,类似于图中的可达性问题
- 将索引元组存储为整数的有序列表,使用如跳表等结构,以实现集合之间的高效并集和交集。
- 异步数据流客户端 > aclserver > changelog > Leopard 索引系统
- 如何维护外部一致性?Zookie 协议 - 客户端使用基于时间戳的令牌检查权限。
Auth0 细粒度授权 (FGA)
Auth0 FGA 是谷歌 Zanzibar 的