Zadig 基于 OPA 实现 RBAC 和 ABAC 权限管理技术方案详解

 

随着 Zadig 被越来越多企业用户和社区小伙伴采用,大家对企业级权限和安全性有更高的诉求,亟待一套权限管理方案。经过充分调研,我们最终确定了采用 OPA(开放策略代理)开源策略引擎,事实上,它已经被 Netflix,Pinterest 和 Goldman Sachs 等公司用于生产,正在成为云原生策略管理的事实标准。但 OPA 的编写具有一定的复杂度,网上的教程和官方文档也仅仅停留在 Demo 层面。经过 Zadig 从 v1.9.0 到 v1.10.0 的迭代,我们已完整实现了 RBAC 和 ABAC 权限管理业务和技术方案的落地,这里我们将整套方案的技术细节分享给大家。

背景介绍

OPA

开放策略代理(Open Policy Agent,发音为“ oh-pa”)是一个开放源码的通用策略引擎,它统一了跨技术栈的策略实施。OPA 提供了一种高级声明性语言 rego,允许您将策略指定为代码和简单的 API,以加载软件中的策略决策。您可以使用 OPA 在 Microservices、 Kubernetes、 CI/CD 管道、 API 网关等中强制执行策略

Zadig 基于 OPA 实现 RBAC 和 ABAC 权限管理技术方案详解插图亿华云

图片来源:opa 官方

权限模型

RBAC:

基于角色的访问控制模型(RBAC: Role-based Access Control),顾名思义,给用户定义角色,通过角色来控制权限。目前来说基于角色的访问控制模型是应用较广的一个,特别是 2B 方向 SAAS 领域,应用尤其常见。

Zadig 基于 OPA 实现 RBAC 和 ABAC 权限管理技术方案详解插图1亿华云

如上图示,用户拥有角色,且可拥有多个角色,而每个角色对应不同权限。这样的好处是:不必为每一个用户去配置权限,拥有极大的灵活性和便利性。

ABAC:

基于属性的访问控制模型(ABAC: Attribute-Based Access Control),被一些人称为是权限系统设计的未来,不同于常见的将用户通过某种方式关联到权限的方式,ABAC 则是通过动态计算一个或一组属性是否满足某种条件来进行授权判断(可以编写简单的逻辑)。属性通常来说分为四类:用户属性(如用户年龄),环境属性(如当前时间),操作属性(如读取)和对象属性(如一篇文章,又称资源属性),所以理论上能够实现非常灵活的权限控制,几乎能满足所有类型的需求。Zadig 目前主要是通过标签模拟属性来实现细粒度资源权限控制。

Zadig 基于 OPA 实现 RBAC 和 ABAC 权限管理技术方案详解插图2亿华云

图片来源:阿里云帮助文档

Zadig 权限场景系统级别角色-解决全系统级别的权限问题(RBAC)

管理员:拥有全系统的所有权限

普通用户:拥有公开项目以及其所有资源的查看权限、测试管理和数据分析的查看权限

项目级别角色-解决项目级别的权限问题(RBAC)

project-admin:拥有该项目下的所有权限

read-only:拥有该项目下的所有资源的查看权限

read-project-only(默认):拥有该项目下工作流和集成环境list的权限(但资源会被精细化管理),服务、构建和测试资源的所有查看权限

自定义角色:自定义每个模块权限能力

项目级别策略:解决项目级别资源的精细化管理(ABAC)

因此

THE END
Copyright © 2024 亿华云