基于属性的权限控制模型ABAC
本文來說下基于屬性的權(quán)限控制模型ABAC
文章目錄
- RBAC 的缺憾
- 什么是ABAC訪問控制模型
- ABAC相關(guān)術(shù)語(yǔ)
- ABAC的使用場(chǎng)景
- 為什么 ABAC 能解決復(fù)雜場(chǎng)景下的問題
- Attribute 易于管理
- 細(xì)粒度授權(quán)支持
- 訪問控制管理成本很低
- 動(dòng)態(tài)的總體控制
- 本文小結(jié)
RBAC 的缺憾
RBAC 在很多時(shí)候是管用的,比如我們的系統(tǒng)是面向銷售公司或者學(xué)校這種組織架構(gòu)很嚴(yán)整的地方,但是在復(fù)雜場(chǎng)景下,RBAC 漸漸就不夠用了,它會(huì)產(chǎn)生很多虛無的 role 而且在管理和控制上更難:在某個(gè)醫(yī)療機(jī)構(gòu)中,我們想要控制一個(gè)科室內(nèi),護(hù)士只能訪問自己所負(fù)責(zé)的病人資料時(shí),我們就無法直接使用 nurse 這個(gè) role,我們需要更細(xì)粒度的 role 去劃分病人老張還是老王,這就會(huì)產(chǎn)生和現(xiàn)實(shí)不對(duì)應(yīng)的 role,例如:老張的護(hù)士,老王的護(hù)士。在醫(yī)院這種病人流動(dòng)性很大的場(chǎng)景下,頻繁的創(chuàng)建和銷毀 role 是很容易出問題,我們的確要求很頻繁,但是與現(xiàn)實(shí)不 match 的虛無的 role 很難管理。
另一種情況是,如果管理者考慮醫(yī)療數(shù)據(jù)的安全性與隱私性,不希望護(hù)士在離開醫(yī)院后能夠訪問到病人資料,我們會(huì)更加難辦,常見的策略要么是在底層網(wǎng)絡(luò)層進(jìn)行處理,直接禁止在院外的一切訪問,但是很多企業(yè)的需求往往是,使用 VPN 我依舊可以訪問內(nèi)部的資源,但是我還是希望基于所在地進(jìn)行精確的控制,比如看郵件是可以的,但是看財(cái)務(wù)數(shù)據(jù)是不行的。在 RBAC 下,我們也可以通過虛擬的 role 來控制,比如下班后給與其 Out of Office 的 role,然后給與這個(gè) role 最小的權(quán)限,這自然又需要虛擬的 role 與大量的動(dòng)態(tài)控制。
一般來說,在 RBAC 中濫用 role 所帶來的問題被稱為 “role explosion”,跟“曹操”與“曹操小時(shí)候”這個(gè)笑話很類似,但的確我們的訪問控制系統(tǒng)中存在很多這樣的 role。
什么是ABAC訪問控制模型
所以,直覺上來說我們需要更多的“東西”來進(jìn)行更精細(xì)的訪問控制,用來匹配我們復(fù)雜的業(yè)務(wù)場(chǎng)景,同時(shí),我們也希望這個(gè)新的模型易于理解和實(shí)現(xiàn),也利于控制與運(yùn)維,這就是 ABAC —— 基于屬性的訪問控制 (Attribute Based Access Control) —— 想要解決的問題。簡(jiǎn)單來說,對(duì)于 ABAC 我們判斷一個(gè)用戶是否能訪問某項(xiàng)資源,是對(duì)其很多不同屬性的計(jì)算而得到的。
傳統(tǒng)的 RBAC 與 ACL 等訪問控制機(jī)制中,可以認(rèn)為是 ABAC 的子集,對(duì)于 RBAC,只是我們的訪問機(jī)制的實(shí)現(xiàn)只是基于屬性 role 而已,ACL 則是基于屬性是 identity 的 AC。
基于屬性的訪問控制(Attribute-Based Access Control,下文簡(jiǎn)稱ABAC)是一種靈活的授權(quán)模型。是通過實(shí)體的屬性、操作類型、相關(guān)的環(huán)境來控制是否有對(duì)操作對(duì)象的權(quán)限。
例如:P5(職級(jí))的同學(xué)有OA系統(tǒng)的權(quán)限。
上述是一個(gè)簡(jiǎn)單的ABAC的例子,就是通過實(shí)體的職級(jí)這一屬性來控制是否有OA系統(tǒng)的權(quán)限
再比如:P5(職級(jí))的研發(fā)(職位)同學(xué)有公司Gitlab的權(quán)限
上述例子是通過一組實(shí)體的屬性(職級(jí)和職位)來控制對(duì)操作對(duì)象的權(quán)限
再比如:P5(職級(jí))的研發(fā)(職位)同學(xué)在公司內(nèi)網(wǎng)(環(huán)境)可以查看和下載(操作)代碼。
上述例子顯然比之前兩個(gè)更加復(fù)雜,除了判斷實(shí)體的屬性(職級(jí)和職位),還判斷了當(dāng)前的環(huán)境屬性和操作屬性
所以我們可以ABAC的訪問控制模型用下面這張圖表現(xiàn)出來
ABAC相關(guān)術(shù)語(yǔ)
ABAC的使用場(chǎng)景
ABAC授權(quán)模型理論上能夠?qū)崿F(xiàn)非常靈活的權(quán)限控制,幾乎能滿足所有類型的需求。從使用場(chǎng)景來說比較適用于用戶數(shù)量多并且授權(quán)比較復(fù)雜的場(chǎng)景。簡(jiǎn)單的場(chǎng)景也是可以使用ABAC的,但是使用基礎(chǔ)的ACL或者RBAC也能滿足需求。
場(chǎng)景一:
還是拿上面的例子來說:P5(職級(jí))的研發(fā)(職位)同學(xué)在公司內(nèi)網(wǎng)(環(huán)境)可以查看和下載(操作)代碼。
在需要根據(jù)環(huán)境屬性和操作屬性來動(dòng)態(tài)計(jì)算權(quán)限的時(shí)候,使用其他的授權(quán)模型可能不太能滿足需求。這個(gè)時(shí)候就需要使用ABAC授權(quán)模型。
場(chǎng)景二:
ABAC也適用于 成員(角色)快速變化的場(chǎng)景,由于ABAC 是通過用戶的屬性來授權(quán)的。在新建用戶/修改用戶屬性時(shí)會(huì)自動(dòng)更改用戶的權(quán)限,無需管理員手動(dòng)更改賬戶角色。
在屬性的組合比較多,需要更細(xì)粒度地劃分角色的情況下。RBAC需要建立大量的角色。ABAC授權(quán)模型會(huì)更加靈活。
為什么 ABAC 能解決復(fù)雜場(chǎng)景下的問題
在學(xué)習(xí) ABAC 的過程中我發(fā)現(xiàn),ABAC 和很多創(chuàng)新一樣,并不是因?yàn)榭萍嫉耐黄菩赃M(jìn)展,而只是在 RBAC 的思維上前進(jìn)了一點(diǎn),理解 ABAC 的術(shù)語(yǔ)時(shí),你能很快的聯(lián)想到已有的技術(shù)實(shí)踐,比如 AWS IAM。而且,這些術(shù)語(yǔ)也如同我們做面向?qū)ο缶幊虝r(shí),是很好的描述現(xiàn)實(shí)的。
Attribute 易于管理
我們可以很容易的為不同的用戶設(shè)計(jì) attribute,往往在很多企業(yè)的實(shí)現(xiàn)中存在一個(gè) consumer profile 或者 user details 的服務(wù),這些服務(wù)中很多字段比如職位、職級(jí)、辦公室、項(xiàng)目等就是天然的 attribute,對(duì)于需要管理的 object,如果是一臺(tái)虛擬機(jī),那么 IP 地址、歸屬組織、cost code 等都可以是 attribute,而且因?yàn)?attribute 是 K-V 式的,往往一張一對(duì)多的表就可以控制好 subject、object 與 attribute 的對(duì)應(yīng)。
細(xì)粒度授權(quán)支持
ABAC 能做到細(xì)粒度的授權(quán)管理,我們知道,在 policy 中,我們的準(zhǔn)許訪問的判斷是可以寫的很靈活的,我們甚至可以判斷請(qǐng)求中的某個(gè)屬性是否滿足于一個(gè)正則表達(dá)式,或者字符串相等(這個(gè)很常見,特別是在使用 AWS IAM 做最小權(quán)限原則時(shí)),我們也可以使用邏輯與、邏輯或的關(guān)系自由組合很多不同的訪問規(guī)則。你可以使用之前提到的 Specification Pattern 很輕松的實(shí)現(xiàn)靈活的 policy,解析 JSON 或者 XML 去動(dòng)態(tài)的創(chuàng)建規(guī)則,而這些含有規(guī)則的 JSON 或 XML,則是可以被編程實(shí)現(xiàn)的(可編程的 policy 是動(dòng)態(tài)的授權(quán)驗(yàn)權(quán)的前提)。你的 policy 甚至可以做到,只有姓張的工程師在某個(gè)項(xiàng)目時(shí)才能訪問某個(gè)資源,在 RBAC 的時(shí)代,這是很難的。
訪問控制管理成本很低
ABAC 對(duì)系統(tǒng)管理員是友好的,在 RBAC 的時(shí)代,如果我需要實(shí)現(xiàn)細(xì)粒度的資源管理或者經(jīng)常 subject 與 object 的對(duì)應(yīng)關(guān)系經(jīng)常變動(dòng),那么管理員難以操作的,也很容易出現(xiàn)問題,其中常常被采用的解決方案就是創(chuàng)建那些本不應(yīng)該存在的 role。但是在 ABAC 時(shí)代,管理員的管理對(duì)象會(huì)縮減到 policy,也就是只處理訪問控制。我們?cè)倩氐结t(yī)療機(jī)構(gòu)的那個(gè)例子中,如果某個(gè)護(hù)士負(fù)責(zé)照顧老張,系統(tǒng)管理員只需要新建一個(gè) policy 并寫上允許訪問即可,當(dāng)老張出院后,只需要?jiǎng)h除或者失效這個(gè) policy 就可以了。在 RBAC 的環(huán)境中,你可能需要為某個(gè)虛擬的 role 動(dòng)態(tài)的添加 permission,而 permission 如果到了針對(duì)單個(gè)病人的情況下,是絕對(duì)多如牛毛的,特別是有兩個(gè)叫做老張的病人時(shí)。
動(dòng)態(tài)的總體控制
Environment conditions 也能夠提供統(tǒng)一的系統(tǒng)級(jí)別的控制,比如威脅等級(jí)或者按照區(qū)域劃分安全級(jí)別,不同的區(qū)域使用 ABAC 時(shí),可能環(huán)境上會(huì)有變化。例如我們常用紅區(qū)來表示最高安全級(jí)別,那么我們默認(rèn)就需要 deny 所有請(qǐng)求,并且會(huì)觸發(fā)警報(bào)等等,但是在綠區(qū)這種辦公區(qū)域,可能默認(rèn)所有的請(qǐng)求都是被允許的等等。Environment conditions 可以提供“拉閘”這樣的功能,而且它也是可以動(dòng)態(tài)調(diào)整的。
本文小結(jié)
本文介紹了基于屬性的權(quán)限控制模型ABAC的一些基礎(chǔ)知識(shí)與內(nèi)容。微服務(wù)的流行與 ABAC 的配合值得寫另一篇文章,特別是分布式身份驗(yàn)證之后,怎么做到分布式的授權(quán)與驗(yàn)權(quán),怎么實(shí)現(xiàn) PEP、PDP 等 ABAC 提倡的模塊設(shè)計(jì),這些東西可否做成應(yīng)用程序透明的方式,可否與 security sidecar 集成等等,這些都是可以進(jìn)一步完善的。
總結(jié)
以上是生活随笔為你收集整理的基于属性的权限控制模型ABAC的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fugl-Meyer Assessmen
- 下一篇: 管理培训生