一个永远不应该犯的错误是认为权限和身份访问很容易。如果你打算只是在数据库中抛出一些行,然后根据行的存在(或不存在)做出授权决定......那么你可能就不 "安全 "了。 而且,一旦你成功了,你也应该开始考虑一个可扩展的、更精确的方法。
身份和访问管理(IAM)是一个应用程序的关键部分(安全!合规!)。如果做得正确,IAM可以减少运营支出,并允许你的企业以更灵活的方式处理新的举措。不幸的是,建立权限系统--即使是基本的权限系统--也可能是一项压倒性的任务,也许应该外包给 "正确的 "平台。
Authzed的创始人(Jake Moshenko、Joey Schorr和Jimmy Zelinskie)看到许多开发者在他们的应用程序中努力构建权限,他们知道一定会有更好的方法。
受桑给巴尔启发的数据库的诞生
2019年,谷歌发布了《桑给巴尔》论文。该研究描述了如何从分布式系统中获取最佳概念,并将其与一个可靠的、高性能的系统相结合,没有单点故障--这也恰好是无限的水平扩展。
论文发表后,Jake、Joey和Jimmy想看看这种方法如何帮助他们的开源项目Quay(第一个私有Docker注册中心)建立一个更有效的IAM功能。他们已经在Quay中集成了基本的权限控制,但还远远没有达到Zanzibar的水平。
他们意识到Zanzibar方法的价值,并开始考虑分布式权限如何能帮助他们。他们为这种方法想出了以下的价值体系。
- 总是正确的决定
- 在他们的多角化服务和应用中采用统一的安全模型
- 可靠的、永远在线的平台访问
- 随着权限和控制的增长而扩展,而且越多越好
- 高效能、低延迟的权限检查
还有一个最后的要求:他们希望创建一个明显比Zanzibar更平易近人、不那么令人生畏的平台。
2021年,他们推出了Authzed,目的是建立一个受桑给巴尔启发的IAM平台,并帮助推进GIFEE(Google Infrastructure For Everyone Else)的概念。他们建立了一个名为SpiceDB的Zanzibar的开源实现,这是一个开源的数据库系统,用于管理安全关键的应用程序权限。最近,他们推出了他们的Authzed管理服务,提供一个完全管理的平台来验证应用程序的权限。
Authzed和SpiceDB如何帮助我处理权限问题?
现代的IAM解决方案都有一个类似的目标:将政策与应用脱钩。SpiceDB在此基础上更进一步,将策略操作的数据解耦。这意味着SpiceDB在你的组织的所有应用中创建了一个统一的权限视图。
这种策略已经成为行业的最佳实践,并被大公司(如Airbnb)和小公司(如Carta)采用。然而,SpiceDB有几个方面使其有别于其他解决方案。
以最佳的灵活性来构建。
SpiceDB模式语言是建立在对象之间关系图的概念之上的。这种ReBAC设计能够有效地支持所有流行的访问控制模型(如RBAC和ABAC)和包含混合行为的自定义模型。通过开发SpiceDB模式,你可以更快地进行迭代,并在改变应用程序代码之前测试设计。
自己对用户进行建模,并从不同的来源引入不同的用户。
SpiceDB是 "身份供应商中立的",这意味着你可以一起使用多个身份供应商(如Auth0和Okta),并对不同的异质用户集进行提问。这种能力目前在桑给巴尔是不可能的。
运行全球部署,而不需要支付费用。
SpiceDB支持全球复制的后端,这意味着你可以在全球范围内作为一个单一的、全球部署的权限数据库运行这项服务。这很有成本效益,因为他们与多个用户共享那个单一的集群,并联合出更小的块状。因此,你得到了全球部署的好处,而没有成本。
[在这里观看团队演示Authzed:https://authzed.com/demo]
SpiceDB在引擎盖下是什么样子的?
SpiceDB作为一个集中的服务,存储授权数据。开发人员创建一个模式,模拟他们的权限要求,使用客户端库将模式应用到数据库,并将数据插入到数据库。
一旦存储,数据可以被执行查询,以检查你的应用程序中的权限。你可以回答这样的问题:"这个用户可以访问这个资源吗?"和 "这个用户可以访问的所有资源是什么?"
由于SpiceDB是Google的Zanzibar模型的开源版本,Zanzibar的许多主要设计概念都存在于SpiceDB中。它从一个请求的生命开始,这个请求由调度接口处理,然后被持久化到数据存储中。下面是一个SpiceDB部署的高层次架构概述。
(来源:Authzed博客文章《SpiceDB的架构》)
而且,是的,SpiceDB是一个数据库--但它是一个专门为计算和委托而建立的图形数据库。这意味着仍然需要一个分布式的后端存储的关系数据,以允许执行一般化的查询。
Zanzibar使用Spanner作为其后端分布式数据存储。Spanner提供低延迟、高可用性、即时一致性和ACID交易。Authzed的团队希望有一个能提供同样功能的Spanner替代品,他们的搜索最终导致他们找到了CockroachDB。与Authzed类似,CockroachDB是另一家GIFEE公司(当然有一些区别),它为开发者提供了在任何云端部署的自由--没有厂商锁定。
在CockroachDB的支持下,SpiceDB的存储后端有一个Spanner等价物,为用户提供具有ACID语义的全球分布数据。(如果你想了解更多关于Authzed为什么选择在CockroachDB上构建,请看这个视频。Authzed如何建立一个开放源码软件,桑给巴尔启发的权限数据库)。
今天就开始使用Authzed和SpiceDB吧!
SpiceDB是开源的,可以免费使用:点击这里。如果你有兴趣让Authzed为你建立和管理SpiceDB,请与他们的团队联系。你也可以看看这个演示。
对社区有问题吗?Authzed有一个Discord,你可以加入讨论。他们也有一个可用于建模和测试权限的游乐场。自己试试吧!
感谢Authzed的Jake Moshenko(联合创始人)和Even Cordell(软件工程师)为这篇文章提供的信息。如果你想看他们解释SpiceDB的架构和用例,请点击这里查看完整的采访:/。