跳转到内容

Google Zanzibar

维基百科,自由的百科全书

Zanzibar 是一个授权系统,由Google开发,用于管理访问控制。它最早亮相于 2019 年的USENIX年度技术大会上发表的一篇研究论文。Zanzibar 为多项 Google 服务提供 授权/鉴权 支持,包括Google 云端硬盘Google 相册YouTube[1]

概览

[编辑]

Zanzibar 作为一个授权服务运行,处理来自客户端应用程序的访问控制查询,并以关系元组的形式保存访问控制列表(ACL),这些元组遵循 基于关系的访问控制(ReBAC) 模型。每个元组代表一个主体 (subject)、一个关系(relation)和一个客体(object)。该系统旨在为拥有海量用户的应用程序提供一致性、容错性和可扩展性。 [1]

架构

[编辑]

Zanzibar 的架构包括几个核心组件: [1]

  • 分布式数据库:构建与 Google Spanner 之上,以维护跨数据中心的数据一致性。
  • 缓存层:使用服务器级缓存和服务间缓存来降低延迟
  • 全球复制:跨地理区域复制授权数据,以提高可用性。
  • 命名空间配置:客户端服务定义对象类型、关系和授权规则。
  • 解耦逻辑:诸如“用户 X 对对象 Z 是否拥有权限 Y?”之类的查询返回布尔值结果。

性能

[编辑]

该系统使用缓存预取 (cache prefetching) 和对频繁访问权限的选择性失效 (selective invalidation) 等技术来减少延迟。 [1]

与 ReBAC 的关系

[编辑]

Zanzibar 采用基于关系的访问控制(ReBAC),其中授权决策取决于实体之间的关系,而不是预定义的角色。相比之下,基于角色的访问控制(RBAC) 则根据分配给用户的角色来分配权限。在 Google Zanzibar 的案例中,ReBAC 实现了动态访问控制,可用于文件共享和文档管理系统等协作环境中。 [1]

行业影响

[编辑]

Zanzibar 的研究论文影响了其他基于 ReBAC 原则的授权系统的设计。例子包括 Airbnb 的内部系统 Himeji 和几个采用类似模型的开源项目。 [1]

局限性

[编辑]

实现一个类似 Zanzibar 的系统需要大量的工程和基础设施资源。维护 复制、缓存和模式 (schema) 配置会增加运维复杂性。

Zanzibar 使用的ReBAC关系模型在处理(复杂的)策略逻辑时可能存在局限,因而需要与额外的策略引擎或基于规则的引擎相集成。 [1]

另请参阅

[编辑]

参考

[编辑]
  1. ^ 1.0 1.1 1.2 1.3 1.4 1.5 1.6 Pang, Ruoming; Caceres, Ramon; Burrows, Mike; Chen, Zhifeng; Dave, Pratik; Germer, Nathan; Golynski, Alexander; Graney, Kevin; Kang, Nina; Kissner, Lea; Korn, Jeffrey L. Zanzibar: Google's Consistent, Global Authorization System. 2019 USENIX Annual Technical Conference (USENIX ATC '19) (Renton, WA). 2019.  引用错误:带有name属性“:0”的<ref>标签用不同内容定义了多次