跳转至主要内容

Casbin 与 Cedar 对比

Cedar 是 AWS 创建的开源策略语言和评估引擎,也是 Amazon Verified Permissions 背后使用的语言。 Casbin 是 Apache 软件基金会旗下的授权库,模型可配置,并有多种语言的实现。两者都在你的应用内部评估请求;区别在于规则的表达方式,以及引擎周边提供了什么。

总结​

CasbinCedar
规则写法一个模型文件加上按行写的策略规则用 Cedar 语言写的 permit 和 forbid 语句
访问控制方式ACL、RBAC、带域的 RBAC、ABAC、ReBAC 等,在模型中选择通过实体组实现 RBAC,通过条件实现 ABAC
语义由模型的策略效果定义;支持允许优先、拒绝优先和优先级固定:默认拒绝,forbid 优先于 permit
校验加载时检查模型语法;可以用在线编辑器测试策略按 schema 校验;有自动化分析工具
原生实现Go、Java、Node.js、Python、.NET、PHP、Rust、C++ 等Rust,另有 Java、Go 和 WebAssembly 选项
存储与分发数据库适配器和 watcher需要自己提供存储,或使用 AWS 托管服务
托管服务不需要;在你的进程内运行Amazon Verified Permissions
治理Apache 软件基金会(孵化中)AWS 开源,Apache-2.0

策略语言与可配置模型​

Cedar 策略读起来像一句话:

permit (
principal in Role::"editor",
action == Action::"update",
resource in Folder::"articles"
)
when { resource.owner == principal };

这门语言的语义是固定的:除非有 permit 匹配,否则一律拒绝,任何匹配的 forbid 都优先。策略可以在部署前按 schema 检查,其设计也允许对一组策略允许什么做自动推理。

Casbin 把同样的规则拆成模型和数据。这里请求对象是一篇带有 Folder 和 Owner 字段的文章(ABAC):

[matchers]
m = g(r.sub, p.sub) && r.obj.Folder == p.obj && r.act == p.act && r.obj.Owner == r.sub
p, editor, articles, update
g, alice, editor

模型决定请求和策略规则如何比较,以及结果如何合并。这种灵活性正是 Casbin PERM 设计的意义:同一个引擎可以表现为简单的 ACL、带租户的 RBAC、拒绝优先,或者有序的防火墙式列表。见 工作原理 和 支持的模型。

引擎周边提供了什么​

Cedar 提供的是一个求值器。加载实体、存储策略和分发变更都留给你的应用,如果用 AWS 则交给 Amazon Verified Permissions。

Casbin 包含了这些部分:

  • 适配器 把策略持久化到 SQL 和 NoSQL 数据库、文件以及云存储中。
  • Watcher 让多个实例保持同步。
  • 角色管理器 解析角色层级,包括来自 LDAP 或身份提供商等外部来源的层级。
  • Management API 和 RBAC API 让管理员在运行时修改权限。
  • 大多数 Web 框架都有对应的 中间件。

切换语言​

Cedar 的参考实现是 Rust 写的,另有少数其他语言的绑定和移植。

Casbin 为 Go、Java、Node.js、Python、.NET、PHP、Rust、C++ 等语言维护原生实现,模型和策略写一次就能在所有实现中使用。

如何选择​

如果你想要一门带 schema 校验和形式化分析、可读性好的策略语言,或者打算使用 Amazon Verified Permissions,选 Cedar。

如果你需要选择或定制访问控制模型,希望自带存储、同步和管理 API,需要你所用语言的原生库,或者更倾向于由 Apache 软件基金会治理、不依赖某一家云厂商的项目,选 Casbin。

试用 Casbin​

在 在线编辑器 中测试模型和策略,或跟着 Go、Node.js、Python 或 Java 教程操作。

另见 对比概览。

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.