所屬技術領域:
Kubernetes
|名詞定義|
基于角色的通路控制(Role-Based Access Control, 即”RBAC”)使用”rbac.authorization.k8s.io” API Group實作授權決策,允許管理者通過Kubernetes API動态配置政策。
|技術特點|
RBAC
政策包含主體(subject)、動作(verb)、資源(resource)和命名空間(namespace)
-User A can create pods in namespace B
預設拒絕所有通路: deny all
Cannot:
--不能綁定到namespace中的一個具體的object
--不能綁定到指定資源的任意一個fields
Can:
--可以對subresources進行綁定(比如nodes/status)
RBAC-Role
Role對象隻能用于授予對某一namespace中資源的通路權限。
以下示例表示在“default” namespace中定義一個Role對象,用于授予對資源pods的讀通路權限,綁定到該Role的使用者則具有get/watch/list pod資源的權限:

RBAC-RoleBinding
RoleBinding可以将同一namespace中的subject(使用者)綁定到某個具有特定權限的Role下,則此subject即具有該Role定義的權限。
下面示例中定義的RoleBinding對象在”default” namespace中将”pod-reader”角色授予使用者”Caden”。 這一授權将允許使用者”Caden”從”default” namespace中讀取pod。
RBAC-ClusterRole
ClusterRole對象可以授予整個叢集範圍内資源通路權限, 也可以對以下幾種資源的授予通路權限:
• 叢集範圍資源(例如節點,即node)
• 非資源類型endpoint(例如”/healthz”)
• 跨所有namespaces的範圍資源(例如pod,需要運作指令kubectl get pods --all-namespaces來查詢叢集中所有的pod)
RBAC-ClusterRoleBinding
ClusterRoleBinding在整個叢集級别和所有namespaces将特定的subject與ClusterRole綁定,授予權限。
下面示例中所定義的ClusterRoleBinding 允許在使用者組”pods-reader”中的任何使用者都可以讀取叢集中任何namespace中的pods。
RABC-Default ClusterRolbinding
syatem:basic-user:未認證使用者組(group system:unauthenticated)的預設角色,不具備任何的操作權限
cluster-admin:system:masters組預設的叢集角色綁定,通過綁定cluster-admin clusterrole,具備叢集所有資源的所有操作權限
叢集系統元件都有預設的clusterrolebingding,包括kube-controller-manager,kube-scheduler,kube-proxy
相關指令行工具
擷取并檢視Role/ClusterRole/RoleBinding/ClusterRoleBinding的資訊
• kubectl get role -n kube-system
檢視kube-system namespace下的所有role
kubectl get role -n kube-system -o yaml
檢視某個role定義的資源權限
• kubectl get rolebinding -n kube-system
檢視kube-system namespace下所有的rolebinding
kubectl get rolebinding -n kube-system -o yaml
檢視kube-system namespace下的某個rolebinding詳細資訊(綁定的Role和subject)
• kubectl get clusterrole
檢視叢集所有的clusterrole
kubectl get clusterrole -o yaml
檢視某個clusterrole定義的資源權限詳細資訊
• kubectl get clusterrolebinding
檢視所有的clusterrolebinding
kubectl get clusterrolebinding -o yaml
檢視某一clusterrolebinding的詳細資訊
有兩個kubectl指令可以用于在命名空間内或者整個叢集内授予角色。
• kubectl create rolebinding
在某一特定名字空間内授予Role或者ClusterRole。示例如下:
a) 在名為”acme”的名字空間中将admin ClusterRole授予使用者”bob”:
kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=bob --namespace=acme
b) 在名為”acme”的名字空間中将view ClusterRole授予服務賬戶”myapp”:
kubectl create rolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp --namespace=acme
• kubectl create clusterrolebinding
在整個叢集中授予ClusterRole,包括所有名字空間。示例如下:
a) 在整個叢集範圍内将cluster-admin ClusterRole授予使用者”root”:
kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root
b) 在整個叢集範圍内将system:node ClusterRole授予使用者”kubelet”:
kubectl create clusterrolebinding kubelet-node-binding --clusterrole=system:node --user=kubelet
c) 在整個叢集範圍内将view ClusterRole授予名字空間”acme”内的服務賬戶”myapp”:
kubectl create clusterrolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp
|資料來源|
名詞定義:
https://www.jianshu.com/p/9991f189495f技術特點: