RBAC规范和对应实现方案推荐
更新:HHH   时间:2023-1-7


资料地址:http://down.51cto.com/data/2459472

rbac规范  解决不规范和不确定的问题
3.术语
{
组件 component  四个RBAC特征集之一(核心RBAC 层次RBAC 静态职责分离关系 动态职责分离关系)  
对象 object  需要进行访问控制的系统资源
操作 operation  一个程序的可执行映像,被调用时为用户执行的某些功能 GET 
权限 permission 对受RBAC保护的一个或多个对象执行某个操作的许可
角色 role 组织语境中的一个工作职能
用户 user 进行资源或服务访问的实施主体
会话 session  用户到其激活的角色集合的一个映射
职责分离 separation of duty   限制用户获取存在利益冲突的权限集的约束
}
4.缩略语
{
1.RBAC 基于角色的访问控制
2.SSD 
3.DSD 
4.USERS 
5.ROLES 
6.OBJS
7.OPS
8.SESSIONS 
9.PRMS 
10.ACL  访问控制列表
}

5.一致性
核心RBAC是必选组件 ,角色层次、静态约束、动态约束是可选组件

6.RBAC参考模型
每个模型组件的定义:一些基本的元素集、一些基于上述基本元素集的RBAC关系、一些映射函数(给定某个元素集的实例元素下得到另一个元素集的某些实例元素)
{
1.核心RBAC
{
五个基本数据元素:users roles objs ops prms  权限分给角色 角色分给用户
用户会话集  会话是 从用户到该用户的角色集的某个激活角色子集的映射       
一个会话只能关联一个用户
一个用户可以同时拥有多个会话
会话保存该用户激活的角色子集,包含该用户激活的角色的可用权限,权限包含相关的操作 权限包含相关对象
规范
1.users、roles、ops、objs。
2.用户/角色多对多映射
3.给出分配给角色r的用户
4.权限集
5.权限/角色多对多映射
6.给出分配给角色r的权限 
7.权限到操作的映射
8.权限到对象的映射 
9.会话集
10.会话s到对应用户的映射
11.会话s到其激活的角色集的映射
12.会话s到其拥有权限集的映射

}

2.层次RBAC
{
角色层次有效的反应组织内权威和责任的结构
r1继承r2,则r1拥有r2全部权限和自己的权限
某些分布式RBAC实现中,角色层次集中管理,权限/角色分配非集中管理

两种角色层次类型:通用角色层次、受限角色层次(一个角色可以拥有一个或者多个直接祖先,但只能有一个直接后代,一个树)

通用角色层次扩展的规范:
1.继承的角色之间的偏序关系 r1>=r2  r1拥有r2的所有权限且r1的用户将是r2的用户
2.角色层次存在的情况下,角色到该角色授权用户的映射
3.角色层次下角色到授权权限的映射

}

3.带约束的RBAC
{
    静态职责分离关系 
    无角色层次的静态职责分离
        (rs,n) 用户不能同时被rs中的n个或多个角色分配
    有角色层次的静态职责分离
        (rs,n) 基于角色的授权用户,而不是直接分配了该角色的用户进行重新定义
    动态职责分离关系

}

}

7.RBAC系统和管理功能规范
功能规范描述 
    创建和维护RBAC元素集和RBAC关系的管理操作
    进行管理查询的管理查看函数
    创建和维护用户会话的RBAC属性和进行访问控制决策的系统函数
{
核心RBAC 
{
管理函数
1.AddUser 当新建的用户尚不存在时,该命令可用 ,命令执行后 users更新
2.DeleteUser 当且仅当被删除的用户在users中可用,
        被执行后 users数据集  ua数据集 assigned_users函数被更新
        一个正处在会话中的用户被删除,不做定义,可以强制也可以等待会话结束
3.AddRole 当且仅当要创建的角色不存在可用
    被执行后 roles数据集、assigned_users assigned_permissions函数被更新
4.DeleteRole 当且仅当被删除的角色存在时可用
    被执行后 会话中的被集火的角色如何处理未定义
        roles数据集、assigned_users  assigned_permissions函数被更新
5.AssignUser 给用户分配角色 当且仅当用户属于users 角色属于roles可用
    被执行后 UA数据集、assigned_users被更新
6.DeassignUser 用户移除角色 当且仅当用户属于users 角色属于roles 且user已经被分配给该role可用
    被执行后 UA数据集、assigned_users被更新
7.GrantPermission 给角色分配对一个对象执行某个操作的权限   当且仅当操作、对象代表一个权限且角色在roles中。实际实现中可能实现为授予对应该角色的组相应的权限,即修改对象的ACL
    被执行后 PA数据集 assigned_permissions函数被更新
8.RevokePermission 撤销分配给角色的权限集中的某个权限 当且仅当操作代表一个权限且已经分配给该角色 实际实现可能会修改对象的ACL表
    被执行后 PA数据集 assigned_permissions函数被更新

系统函数
1.CreateSession 
}

层次RBAC
{

}
静态职责分离关系 
{

}
动态职责分离关系 
{

}
}

第六章 从元素集、关系、管理查询的角度吧RBAC参考模型定义为四个模型组件

附件1
从管理操作、会话管理、管理查看的功能规范的角度讨论抽象的模型

1.核心RBAC功能规范
{
三类功能规范函数
1.管理函数
    核心RBAC基本元素:users、roles、ops、objs。 
    ops和objs由部署RBAC的底层系统定义,
    管理员可以创建、删除users、roles的成员, 并创建角色、操作与对象之间的联系  
        AddUser DeleteUser                  user 
        AddRole DeleteRole                  role
        AssignUser DeassignUser             UA  user-role
        GrantPermission  RevokePermission   PA  perm-role 

2.支持系统函数
    会话管理、访问控制决策

    CreateSession 创建会话并给会话指定一组缺省激活角色
    AddActiveRole 向会话的激活角色集中添加一个角色
    DropActiveRole 从会话的激活角色集中删除一个角色
    CheckAccess 判断会话主体是否可以对某个对象执行某个操作
3.查看函数
    PA UA实例被建立后,应该可以从用户和角色的角度去查看他们的内容
    可选函数O 
    UserPermission O 返回用户的可用权限
    SessionRoles O 返回会话的激活角色集
    SessionPermissions O 返回会话可用的权限
    RoleOperationsOnObject O 返回给定角色针对给定对象可以执行的操作
    UserOperationsOnObject O 返回给定用户针对给定对象可以执行的操作

    强制函数M
    AssignedUsers M 返回分配了给定角色的用户
    AssignedRoles M 返回分配给了给定用户的角色

}

2.层次RBAC功能规范
{
1.层次管理函数
    包含核心RBAC的所有管理函数,且DeassignUser的语义需要重新定义(只可以删除直接授权的角色 还是可以删除任何被授权的角色没有给出规定)

    层次RBAC需要额外的管理函数:
    创建和删除现存角色间的直接继承关系、、把一个新创建的角色加入现存的角色层次中
    AddInHeritance 在现存的两个角色之间创建直接继承关系
    DeleteInheritance 删除两个现存的角色之间的直接继承关系   隐含继承关系是否打破没有给出要求,自行定义
    AddAsendant 创建新角色,并把它指定为一个现存角色的直接祖先
    AddDescendant 创建一个角色,并把它指定为一个现存角色的直接后代
    ---支持通用角色层次(允许多重继承)和首先角色层次(一个树,每个角色只有一个直接后代)

2.支持系统函数 
    CreateSession AddActiveRole 因为角色层次的存在需要重新定义
    CreateSession 创建的激活角色集包含直接给用户分配的角色和这些角色继承的角色
    AddActiveRole 用户可以激活 直接分配的角色和继承的角色。继承的角色是自动激活还是必须显示的激活不做明确要求

3.查看函数
包含核心RBAC且增加如下函数
AuthorizedUser  返回分配了给定角色或该角色继承的角色的用户(给定角色的授权用户)
AuthorizedRoles  返回给定用户北直街分配的角色和继承这些角色的角色(给定用户的授权角色)
可选函数 
RolePermissions 返回给定角色直接或继承来的权限
UserPermissions 返回给定用户直接分给的角色或继承自其他角色获得的权限
RoleOperationsOnObject 返回给定角色拥有的针对给定对象执行的操作(直接或继承来的)
UserOperationsOnObject  返回给定用户可以执行的针对给定对象的操作(通过直接分配的角色或这些角色继承的角色)

}

3.静态职责分离关系功能规范
{
1.管理函数
SSD限制用户同事可以分配的角色,AssignUser应该不违背任何SSD约束
一个SSD关系有三元组组成: SSD_Set_Name role_set SSD_Card
SSD_Set_Name 指定了要限制用户/角色分配以贯彻利益冲突策略的事务或商业过程的名称
role_set 是  SSD_Set_Name 对应的角色集
SSD_Card 给出了阈值
非角色层次SSD RBAC管理函数 
    CreateSSDSet 创建一个命名的SSD关系
    DeleteSSDSet 删除一个现存的SSD关系
    AddSSDRoleMember 添加一个角色到给定SSD角色集
    DeleteSSDRoleMember 从一个给定的SSD角色集删除一个角色
    SertSSDCardinality 为给定的SSD角色集设置阈值
--角色层次SSD只需要针对角色层次的组合约束和SSD约束都应该满足

2.支持系统函数 
和核心RBAC一直
3.查看函数
核心RBAC和如下函数:
SSDRoleSets 返回SSD RBAC中的命名SSD关系
SSDRoleSetRoles 返回与给定命名角色集关联的角色
SSDRoleSetCardinality 返回与命名的给定角色集关联的阈值

}

4.动态职责分离关系功能规范
{
1.管理功能
CreateDSDSet
DeleteDSDSet
AddDSDRoleMember 
DeleteDSDRoleMember
SetDSDCardinality

2.支持系统函数 
CreateSession AddActiveRole DropActiveRole不能违反DSD约束
3.查看函数
DSDRoleSets
DSDRoleSetRoles
DSDRoleSetCardinality

}

4.功能规范包
RBAC是一项提供诸多访问控制管理特征的技术
第六章定义的一个功能组件族:核心RBAC 层次RBAC 静态职责分离关系 动态职责分离关系 
每个功能组件包含三部分:创建和维护RBAC元素集和关系的管理操作、管理查看函数、系统级别的用户会话管理和访问控制策略的函数
{
    (高级查看是可选的 )
    (必选)核心RBAC -> (可选)角色层次RBAC(受限/通用二选一) -> (可选)SSD关系(遵循依赖 有/无角色层次与上一选择对应) -> (可选)DSD关系 -> 需求包
}

-----------------------------------------------------
组件原理

1.核心RBAC 
{
用户/角色 多对多
角色/权限 多对多
}
2.层次RBAC 
{
    角色层次是数学上的偏序关系
    角色可以拥有重合的权限
}
3.静态职责分离关系
对用户/角色分配进行约束 实施利益冲突策略
(role_set,n)的对,用户不能被分配属于role_set角色集的n个或更多个角色
常对可能违反高层组织职责分离策略的管理操作施加限制

4.动态职责分离关系
和SSD不同的是上下文
DSD通过限制永不会话中可以被激活的角色来限制用户权限的可用性
一个用户被分配两个独立的角色,但是这两个角色不可以同时行使权限

--------------------------
Z语言:
基本单位:模式:说明部分+谓词部分
说明部分:定义一些状态或模式变量
谓词部分:定义一般的谓词公式

-------------------------------------
https://casbin.org/docs/zh-CN/rbac

1.插件
{
1.策略存储插件
https://github.com/search?q=org%3Acasbin+adapter&unscoped_q=adapter
file gorm xorm  mongodb  redis protobuf  redis json  awss3

2.策略同步插件
https://github.com/casbin/etcd-watcher
https://github.com/billcobbler/casbin-redis-watcher
redis  etcd 

3.角色管理插件
...

}
返回云计算教程...