背景
科普權限設計和原理。
資源權限控制,涉及到幾個方面:
- 顆粒度
- 控制邏輯
- 組織架構
業內通用術語
術語 | 全稱 | 作用 |
---|---|---|
XACML | eXtensible Access Control Markup Language | 定義了一種聲明性細粒度、基於屬性的訪問控制策略語言、架構和描述如何根據策略中定義的規則評估訪問請求的處理模型。 XACML 的目標之一是促進多個供應商的訪問控制實現之間的通用術語和互操作性。 XACML 主要是一種基於屬性的訪問控制系統 (ABAC),也稱爲基於策略的訪問控制 (PBAC) 系統,其中與用戶或操作或資源相關聯的屬性(數據位)被輸入到決定是否給定用戶可以以特定方式訪問給定資源。 基於角色的訪問控制(RBAC) 也可以在 XACML 中實現,作爲 ABAC 的特化 |
ABAC | Attribute-based access control | 訪問權限通過使用這些屬性結合在一起的政策,授予用戶。策略可以使用任何類型的屬性(用戶屬性、資源屬性、對象、環境屬性等)。此模型支持布爾邏輯,其中規則包含有關誰在發出請求、資源和操作的“IF, THEN”語句。 |
PBAC | Policy-based access control | 同上 |
RBAC | role-based access control | 是一種限制授權用戶訪問系統的方法。它是一種實現強制訪問控制(MAC)或自由訪問控制(DAC)的方法,關鍵是角色和組來控制,其中組是用戶的集合而不是權限的集合;三大原則
|
同類技術對比
方法 | 場景 | 結構 | 例子 | 優勢 | 劣勢 |
---|---|---|---|---|---|
ABAC/PBAC |
|
|
初級前端工程師(對象)可以下載(操作)內網中的(環境)GitLab 前端源代碼(資源) |
|
|
RBAC | 單系統或者應用如計算機用戶權限控制 | 權限→角色→用戶 |
|
因爲權限控制都和角色有關,會遇到一下問題:
|
授權框架
OPA | Casbin | |
---|---|---|
OPA | Casbin | |
--- | --- | ------ |
定義 | 策略引擎,有自己的語言Rego | 權限控制庫,支持RBAC,ABAC,ACL等多種模型 |
架構特點 | ![]() |
![]() |
支持模型 | Access Control
代碼演練 |
ACL ACL with superuser ACL without users ACL without resources RBAC RBAC with resource roles RBAC with domains/tenants ABAC RESTful Deny-override Allow-and-deny Priority Explicit Priority Subject-Priority 案例和代碼演練 |
在線演練 | https://casbin.org/en/editor/ | https://play.openpolicyagent.org/ |
定義語法 | Rego,簡單 | config語法,簡單![]() |
接入形式 | service or library | library |
支持接入語言 | 主流語言 | 主流語言 |
策略讀取方式 | bundle |
csv,數據庫等,主要看adapter的使用 |
系統接入 | kubernetes,envoy,ceph,kafka等 | kubernetes,envoy |
IDE支持 | 支持IDEA和vsc | 支持IDEA和vsc |
可維護性 | 開源,golang編寫,6K stars,社羣活躍 | 開源,golang編寫,11K stars,社羣活躍 |
性能 | ![]() |
|
控制顆粒度 | 可根據需要定義 | 可根據需要定義 |
易用性 | 需要學習Rego語言,不過大概一個小時可以入門,上手快 | 需要熟悉config配置語法,加上內置函數之類,一個小時入門,上手快 |
接入istio難度 | 根據官方教程,設置邊車,然後通過添加標籤的形式接入,架構如下![]() 特點:
|
官方例子已經對接好Envoy的ext_authz,只需要修改裏面的讀取token和用戶信息的方式,就能直接替換掉原本PDP服務; 另外,文檔中提到的請求頭也不需要處理,因爲新版RequestAuthentication可以傳遞token過去; 另外例子沒有詳細說明可以怎麼接,可以參照opa的模型,也可以單獨一個PDP服務 |