RBAC規範和對應實現方案推薦

資料地址: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.角色管理插件
...

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章