使用 Cerbos Hub 管理访问控制策略和 PDP
之前我们发布了《Cerbos Hub 入门指南》一文,介绍了如何使用策略库和 Cerbos PDP 设置 Cerbos Hub 的基础知识。之后,我们又发布了《使用 Cerbos Hub 和嵌入式 PDP 包进行边缘授权》一文,探讨了如何在 Cerbos Hub 中使用嵌入式 PDP 来简化和优化边缘授权流程。本文将在此基础上,重点介绍如何使用 Cerbos Hub 高效地管理访问规则。
Cerbos Hub 简化了跨应用和服务同步访问控制规则的流程。该工具有助于协作并快速适应应用需求的变化,从而使访问控制管理更简单、更高效。
本文将通过一个常见的用例,介绍一个简单的 SaaS 应用 CerbFinance,它具有多个用户角色和权限。您将看到 Cerbos Hub 如何管理策略定义的变更,并使这些变更实时生效。
教程设置
要学习本教程,请确保已设置 Cerbos Hub 并将 Cerbos PDP 连接到 Hub。Fork 演示仓库https://github.com/cerbos/cerbos-hub-showcase,查看相关文档README,然后按照 Cerbos Hub 简介中的说明进行操作,但有一点例外:
无需将工作区和客户端凭据粘贴到配置 yaml 文件中,而是在派生项目的路径.env.example下有一个文件。infra/docker/
复制该文件并将其重命名到.env同一路径下,然后粘贴客户端 ID、客户端密钥和字段的值workspace secret。
要获取 WASM 包 URL,请转到Decision points侧边栏中的页面,然后选择选项Embedded卡。
复制捆绑包 URL 并将其粘贴到您的.env文件中。
要启动应用程序,请make start在终端中运行该命令。
有关如何处理嵌入式 PDP 的完整说明,请阅读“使用 Cerbos Hub 和嵌入式 PDP 包在边缘进行授权”一文。
政策是如何定义的
我们的示例应用程序是一个费用跟踪系统。财务团队成员 Frank 可以查看应用程序的某些部分并执行特定操作,而财务经理和管理员则拥有更广泛的访问权限。在本用例中,我们将展示一种动态的基于角色的访问控制 (RBAC) 模型。在该模型中,用户的访问级别(例如限制费用审批权限)会根据费用状态和金额以及用户在公司层级中的位置而变化。
提供的 SaaS 应用示例展示了 Cerbos Hub 如何管理“费用”资源的策略更新流程。该策略定义了:
- 财务经理可以批准任何未结费用,除非该费用是他们自己产生的。
- 团队成员可以批准的项目金额是有上限的。
在我们的 CerbFinance 演示应用程序中,右上角有一个“查看方式”下拉菜单,我们可以在这里切换用户。在本教程中,我们将在财务经理和团队成员角色之间来回切换。
为了了解谁应该拥有哪些权限,我们在下拉菜单左侧显示了所选用户的角色、部门和区域。我们目前选择了 Derek。Derek 是 EMEA 地区的财务经理,也是 Frank 的主管。
我们为本次演示设定的政策定义规定,财务团队成员不得执行财务经理可以执行的某些操作,例如:批准任何金额超过 10,000 美元的费用。
以下摘自政策定义,内容正是如此。
这意味着,我们财务团队成员弗兰克只能审批1万美元以下的费用。超过这个数额的费用,就需要财务经理参与审批。
在前端,我们在下面的屏幕截图中看到的是费用列表,以及基本信息,例如谁提交了费用、何时提交、费用金额、供应商和状态。
最右侧一栏显示一个Details按钮,点击后会弹出一个包含费用信息的模态框。底部会显示可对该费用执行的操作按钮,启用操作的按钮会显示颜色,未启用操作的按钮则显示为灰色。这份费用报告由 CerbFinance 的销售经理 Sally 提交。
对于德里克来说,除了“编辑”之外的所有操作都已启用。但当我们切换到弗兰克时,情况就完全不同了。
由于这笔费用超过 10,000 美元,因此 Frank 的所有操作按钮都未启用。在我们的演示应用程序中,Frank(和其他用户一样)拥有特定的权限——他可以进入某些区域并执行特定任务。但如果我们决定更改这些权限呢?
对政策进行修改
假设公司将团队成员的费用审批限额从 10,000 美元提高到 20,000 美元。我们首先需要在策略库中进行更改。找到指定路径resource_expense.yaml下的文件,找到第 85 行/cerbos/policies/,并将金额值 10000 替换为 20000。保存更改并将其推送到策略库。
更新完成后,Cerbos Hub 会立即启动一系列自动操作。
它会启动 CI/CD 流水线来更新策略,运行测试来检查错误,一旦一切正常,就会将更新后的策略发送到整个系统。
如果任何测试失败,构建也会失败,Cerbos Hub 不会将任何更改发送到我们的 Cerbos PDP 实例。我们可以在BuildsCerbos Hub 工作区的页面上看到失败的测试。
点击最左侧列中的提交哈希值。将打开一个新页面,显示失败的具体测试及其详细信息。在本例中,测试失败的原因是,尽管我们已更改策略,允许财务团队成员审批最高 20,000 美元的费用,但测试数据未更改,仍然预期会失败。
由于这是预期的变更,让我们更新测试,使其反映新的预期行为,并允许财务团队成员批准高达 20,000 美元的费用。
Cerbos Hub 还允许我们直接编辑导致构建失败的 GitHub 提交或提交文件。
最快的解决方法是找到expenses_test.yaml文件,找到第 240 行,该行定义了 finance_team 负责人批准超过 10,000 美元的费用时的预期结果。将其替换EFFECT_DENY为相应的值EFFECT_ALLOW并推送更改。
Cerbos Hub 再次启动 CI/CD 流水线以更新策略。此次测试成功通过后,它会将更改通知所有 Cerbos PDP 实例。
在“决策点”页面上,我们可以看到 PDP 实例正在使用新构建的软件包运行。我们通过检查最新成功构建的提交哈希值与软件包哈希值是否相同来确认这一点。
回到前端,可以看到 Frank 的视图显示已为 Sally 的费用报告启用批准/拒绝操作。
就是这样!
我们已实时更新了策略。我们只需在策略库中更改策略并确保测试通过即可。Cerbos Hub 在构建成功后,会将更改通知给 Cerbos PDP 实例,现在 Frank 可以批准最高 20,000 美元的费用。
此次系统级更新平稳进行,无需停止服务或手动更新,确保 CerbFinance 应用程序持续流畅运行。
加入 Beta 测试
Cerbos 推出了 Cerbos Hub,旨在提供强大、动态且自动化的授权管理系统。在演示中,我们可以看到如何在 SaaS 应用中轻松更新和执行策略,所有更改都能实时反映,无需任何停机或部署麻烦。
Cerbos PDP 确保授权逻辑透明、版本可控且易于管理。Cerbos Hub 的托管服务进一步扩展了这一功能,可与开发工作流程无缝集成,提供实时更新,并确保在任何地方(包括边缘)都能高效地做出授权决策。
如果您还没有加入,请立即加入测试版,节省数月自行开发内部访问控制的时间。
文章来源:https://dev.to/cerbos/managing-access-control-policies-and-pdps-with-cerbos-hub-39o3















