Google的Zanzibar是什么?全面了解它的功能和特点?
摘要:Zanzibar 是 google 开发和部署的一个全球授权系统,用于评估全球用户对 google 数百个应用的访问权限(包括:Calendar, Cloud, Drive, Maps, Photos, YouTube等)。目前已经存储了上
Zanzibar 是 google 开发和部署的一个全球授权系统,用于评估全球用户对 google 数百个应用的访问权限(包括:Calendar, Cloud, Drive, Maps, Photos, YouTube等)。目前已经存储了上万亿条 ACL(access control list),每秒钟处理来自数十亿用户的数百万个请求,并且在过去的三年里做到了将 95% 分位的请求响应时延控制在 10ms以内,系统的可用性大于99.999%。能够处理“每秒超过 1000 万个客户端查询”,但要实现这一目标,还有很多工作需要。
应用程序权限简史有多种方法可以向应用程序添加权限。最常见的方法是为构建的每个应用程序创建临时实现。对于动态权限,例如最终用户可以授予的权限,这通常在源代码中表现为解释存储在数据库中的行。此代码最终成为每个请求的关键部分,非常敏感,并且编写起来可能很棘手。此代码中的错误很容易导致应用程序中出现安全漏洞和漏洞。为了最大限度地减少所编写的代码的外围区域和大量代码,此代码通常被抽象到一个库中,该库可以在许多此类应用程序之间共享。
一些公司有一个通用的授权库,每当需要在其所有应用程序和服务中调用权限代码时,他们都会重复使用该库。这是 Google 在决定构建和部署Zanzibar 之前使用的方法。通常,这些库通过将它们放在 IPC 接口后面而变得更加通用和与编程语言无关,然后采用策略引擎的形式。然而,库和策略引擎在这种情况下有一个主要缺点:它们是无状态的。库和策略引擎的实现都要求它们获得策略和全套所需数据,然后将它们组合起来以做出权限决策。对于标准 Web 应用程序,这意味着加载表示关系的数据库行,并在每个权限决策时将它们传递给引擎。
由于此限制,下一个合乎逻辑的步骤是开始将与决策相关的信息存储在权限引擎可直接访问的位置。 现在,当需要做出权限决策时,应用程序只需向权限系统询问它已经可以访问的策略和数据。 例如,如果服务已经知道我是一篇文章的作者,并且应该允许作者编辑自己的文章,那么它已经拥有回答问题所需的所有信息:“杰克是否允许编辑这篇文章? 这确实意味着您需要不断“教导”权限系统有关用户与数据之间关系的更改。 另一方面,权限系统实际上可以成为这些关系的唯一规范存储! 当您将其作为权限服务实现时,它会解锁许多非常强大的属性。
谷歌Zanzibar 是这种服务的实现,谷歌提出了一个强有力的案例,说明为什么在服务中计算权限的属性对谷歌很重要。
为什么需要谷歌Zanzibar ?在Zanzibar 的论文中,谷歌列出了决定他们将从权限服务中受益的许多原因。 首先,作为一项服务,他们已将代码重复和版本偏差的数量减少到最低限度。 其次,谷歌拥有大量的应用程序和服务,他们经常需要检查来自一个应用程序在另一个应用程序中的资源之间的权限。 例如,当您使用 Gmail 发送电子邮件并警告您收件人无法阅读电子邮件中链接的文档时,这有效,因为 Gmail 正在向Zanzibar 询问链接的 Google 文档的权限。类似的授权请求也发生在日历、云端硬盘、地图、照片、YouTube 等。 第三,谷歌在权限系统之上构建了通用基础设施,只有当你有一个一致的 API 来编程时,你才能做到这一点。 最后,也是最重要的一点,权限很难。
人们希望任何权限实现都遵守一些常见要求。 首先,它应该是正确的。 有了权限,就很容易定义正确性。 所有授权用户都应能够与受保护的资源进行交互,并且不应允许未经授权的用户与受保护的资源进行交互。 起初这似乎很容易,直到您开始考虑计算机(尤其是大规模托管应用程序)必须应对的挑战。 例如网络和复制延迟、节点故障和时钟同步。
其次,如果您要对所有事情使用一个权限系统,它应该合理地允许您对应用程序所需的所有不同类型的基元进行建模。 就 Google 而言,它们至少具有以下权限模型:文档中的点对点共享、YouTube 中的公开/私密/不公开视频以及 Cloud IAM 中的 RBAC。 Google Zanzibar 足够灵活,可以对不同类型的权限进行建模。
因为您通常需要检查每个请求的权限,并且未能收到肯定的权限检查成功必须解释为拒绝(失败关闭),因此您需要此系统具有高度的可靠性和速度。
最后,随着 Google 的运营规模极大,Google Zanzibar 还必须扩展到每秒数百万个授权请求,跨数十亿用户和数万亿个对象。
对开发人员来说,Google 桑给巴尔是什么?Google Zanzibar 的核心是一个全球分布式授权系统,能够处理“每秒超过 1000 万次客户端查询”,但从开发人员的角度来看,它是一个 API。该 API 允许您外包用户和数据关系,然后让您在访问点快速准确地做出权限决策。
