近幾年,權(quán)限訪問控制模型被反復提及,目前常用的是RBAC(Role-Based Access Control),RBAC是迄今為止最為普及的權(quán)限設計模型,其優(yōu)點是簡單,實現(xiàn)起來非常容易。
但是隨著授權(quán)需求復雜度的提升和對控制邏輯靈活性的高度要求,ABAC(attribute-based access control)訪問控制模型將會越來越普及。近期火爆的零信任架構(gòu)里,ABAC模型就比RBAC更加合適。
ABAC既然是針對屬性(attributes)的,那我們先來看看它一般是針對哪些屬性進行授權(quán)控制的。屬性可以是任意的對象,一般會涉及的屬性主要是以下四類:
基于屬性,ABAC可以設置很多靈活的策略來進行訪問的控制,比如:
看起來是不是挺強大的。
因為模型是基于策略,而策略又是基于各種靈活的屬性動態(tài)控制的,所以ABAC模型里通常有配置文件(XML、YAML等)或DSL配合規(guī)則解析引擎使用。規(guī)則引擎負責控制邏輯的處理,配置文件負責策略的定義和描述。
XACML(eXtensible Access Control Markup Language)就是基于ABAC訪問模型的一個實現(xiàn)(可能也是最復雜的一種實現(xiàn))。
在XACML的架構(gòu)中,有5種控制節(jié)點:
典型的訪問請求是這樣流轉(zhuǎn)的:
1. 用戶訪問資源,發(fā)送原始請求,請求會被PEP攔截;
2. PEP把請求轉(zhuǎn)換成一個XACML的訪問申請請求;
3. PEP把訪問申請請求轉(zhuǎn)發(fā)給PDP;
4. PDP根據(jù)策略配置對認證請求進行評估。策略保存在PRP,并由PAP維護。如果需要采集屬性信息,還會從PIP收集屬性;
5. PDP收到訪問申請請求的結(jié)果(允許,禁止)并發(fā)送給PEP;
6. PEP根據(jù)收到的信息,允許或者禁止用戶訪問資源。
文字太多,請看圖:
我們再來看一下ABAC訪問控制模型和零信任架構(gòu)的結(jié)合點,從Gartner提供的報告中,我們可以看到典型的零信任架構(gòu)圖如下:
SDP Gateway是用于做訪問攔截和訪問代理,這個跟XACML里的PEP功能類似。
SDP Controller是做訪問控制的策略定義和執(zhí)行,這個則是包含了XACML里除了PEP以外的節(jié)點的功能。
ABAC可以說是縮小版的零信任模型。
零信任架構(gòu)是想解決最小化授權(quán)、策略集中化管理、動態(tài)授權(quán)控制、自適應授權(quán)控制等問題。這些功能的實現(xiàn)跟ABAC權(quán)限控制模型不謀而合(也有廠商的零信任架構(gòu)是基于ABAC和RBAC兩種授權(quán)控制模型結(jié)合實現(xiàn)的)。
隨著零信任架構(gòu)的大放光彩,ABAC授權(quán)模型也將被大家所熟知。