TIP
原文: 查看英文原文
English: View English version
面向 Open Policy Agent (OPA) 用户的 SpiceDB 指南
INFO
以下内容的重点不是竞争分析,而是帮助现有 OPA 用户理解 SpiceDB 的桥梁。
权限系统的三个核心组件
每个完整的权限系统都包含三个主要元素:
- 模型(Models) — 定义系统中控制操作的逻辑和规则
- 数据(Data) — 为操作本身提供上下文(谁在执行操作、操作的对象等)
- 引擎(Engine) — 解释模型和数据以做出访问控制决策
SpiceDB 与 OPA 对比
虽然比较 SpiceDB 和 OPA 就像比较苹果和橘子,但两者都可以通过这三个组件的视角来分析,以理解各自的设计方法。SpiceDB 和 OPA 代表了两种根本不同的授权方式。
模型
- OPA 使用 Rego(一种声明式查询语言)进行策略定义。策略非常灵活,可以在多个领域中表达任意逻辑。
- SpiceDB 采用基于模式的方法来定义关系和权限。模式语言是专门为授权而构建的,用于建模资源、关系和权限。
数据
- OPA 通常使用在查询时提供或从外部源加载的结构化 JSON 输入数据。
- SpiceDB 维护一个受 Google Zanzibar 启发的专用基于关系的数据模型。关系存储在 SpiceDB 内部,表示对象之间的连接。
引擎
- OPA 使用逻辑推理对输入数据评估策略。它是一个通用策略引擎。
- SpiceDB 通过专门优化的数据库操作查询关系图来确定访问权限,这些操作专为大规模授权而设计。
何时使用 SpiceDB 而非 OPA
当您的用例有以下需求时,SpiceDB 更为合适:
- 大规模基于关系的访问控制 — 将权限建模为用户和资源之间的关系
- 在大数据集上进行细粒度权限查询 — 在数百万关系中高效检查和列出访问权限
- 内置关系存储和版本控制 — 具有一致性保证的专用授权数据存储
- 具有一致性保证的实时权限评估 — 对"新敌人问题"的抵抗能力和可配置的一致性级别
何时使用 OPA 而非 SpiceDB
当您有以下需求时,OPA 更为合适:
- 跨多个领域的通用策略评估 — 超越授权的策略(例如准入控制、数据过滤、配置验证)
- 无模式约束的灵活策略逻辑 — 使用 Rego 表达的任意策略逻辑
- 与现有基于 JSON 的系统集成 — 对现有数据结构进行策略评估
- 针对非关系密集型用例的简化部署 — 轻量级的 sidecar 或库部署