RBAC是什么转唉?
RBAC模型(Role-Based Access Control:基于角色的訪問控制)模型是比較早期提出的權限實現(xiàn)模型,在多用戶計算機時期該思想即被提出稳捆,其中以美國George Mason大學信息安全技術實驗室(LIST)提出的RBAC96模型最具有代表赠法,并得到了普遍的公認。
RBAC認為權限授權的過程可以抽象地概括為:Who是否可以對What進行How的訪問操作乔夯,并對這個邏輯表達式進行判斷是否為True的求解過程砖织,也即是將權限問題轉換為Who、What末荐、How的問題侧纯,Who、What甲脏、How構成了訪問權限三元組眶熬,具體的理論可以參考RBAC96。
在RBAC模型里面块请,有3個基礎組成部分娜氏,分別是:用戶、角色和權限墩新,它們之間的關系如下圖所示:
User(用戶):每個用戶都有唯一的UID識別贸弥,并被授予不同的角色
Role(角色):不同角色具有不同的權限
Permission(權限):訪問權限
用戶-角色映射:用戶和角色之間的映射關系
角色-權限映射:角色和權限之間的映射
例如下圖,管理員和普通用戶被授予不同的權限抖棘,普通用戶只能去修改和查看個人信息茂腥,而不能創(chuàng)建用戶和凍結用戶狸涌,而管理員由于被授予所有權限,所以可以做所有操作最岗。
Kubernates集群中的所有資源的訪問和變更都是通過Kubernates API Server的 REST API來實現(xiàn)的帕胆,所以集群安全的關鍵點就在于如何識別并認證客戶端身份,以及隨后訪問權限的授權這兩個關鍵問題般渡。Kubernates安全機制里面設計了三道關卡懒豹,得通過三關客戶端的調用請求才能夠得到API Server的真正響應:
1. 認證
2. 鑒權
3. 準入控制(Admission Control)
API Server認證方式有三種:
1. HTTPS證書認證:基于CA根證書簽名的雙向數(shù)字證書認證方式
2. HTTP Token認證:通過一個Token來識別合法用戶
3. HTTP Base認證:通過用戶名+密碼的方式認證
API Server目前支持以下6種授權策略:
1. AlwaysDeny
2. AlwaysAllow
3. ABAC: 基于屬性的訪問控制
4. Webhook:通過調用外部REST服務對用戶進行授權
5. RBAC:基于角色的訪問控制
6. Node: 是一種專用模式,用于對kubelet發(fā)出的請求進行訪問控制
RBAC工作原因HOW驯用?
RBAC作為kubeadm安裝方式的默認選項脸秽,足見其重要程度。
1. RBAC的資源對象
????1. 1Role?
? 一個角色就是一組權限的集合蝴乔。角色(Role)只能對命名空間內的資源進行授權记餐,例如:
? apiGroups:支持的API組列表
? resources: 支持的資源對象列表,例如pods薇正、deployments片酝、jobs等
? verbs:對資源對象的操作方法列表,例如get挖腰、watch雕沿、list、delete猴仑、replace审轮、patch等
2. ClusterRole
? 集群角色除了具有和角色一致的命名空間內資源的管理能力,因其集群級別的范圍辽俗,還可以用于這些特殊元素的授權:
? 集群范圍的資源疾渣,例如Node
? 非資源型的路徑,/healthz
? 包含全部命名空間的資源榆苞,例如pods, --all-namespace
3. RoleBinding & ClusterRoleBinding
? 角色綁定或集群角色綁定用來把一個角色綁定到一個目標上稳衬,綁定目標可以是User,Group,或者Service Account。使用RoleBinding 為某個命名空間授權坐漏,使用ClusterRoleBinding為集群范圍內授權.
2. 對資源的引用方式
有兩種resources和ResourceNames. 可以像以上例子一樣配置resources為一個數(shù)組, 以此來授權讓某個主體同時能夠讀取pod和pod log:
在指定resourceNames以后薄疚,使用get,delete等操作請求,就會被限制在這個資源實例范圍內赊琳。例如街夭,下面的聲明讓一個主體只能對一個configmap進行get和update操作:
API Server在接受到請求以后,會讀取該請求的數(shù)據(jù)躏筏,生成一個訪問策略對象板丽。然后將這個訪問策略對象和授權策略文件中的所有訪問策略對象逐條匹配,如果至少有一個策略對象被匹配,則該請求被鑒權通過埃碱,否則終止API調用流程猖辫,并返回客戶端的錯誤調用碼。
示例
1. 使用RBAC授權模式砚殿,需要在API Server的啟動參數(shù)中加上 --authorization-mode = RBAC
2. 常見的角色綁定示例
首先聲明角色pod-reader:
聲明RoleBinding:
通過kubectl apply -f 上面的yaml文件啃憎,可以完成jane is pod-reader的角色綁定,pod-reader只能對該命名空間范圍內的pods做操作get, watch, list.
總結:
本文首先介紹了RBAC的基本概念似炎,RBAC的工作原理辛萍,最后演示了如何進行角色綁定。
reference:
(1)https://segmentfault.com/a/1190000023179921
(2)https://blog.51cto.com/billy98/2380061?