當Container Service控制台預置的ClusterRole無法滿足您的許可權要求時,您可以通過自訂ClusterRole和Role實現更精細化的RBAC許可權配置,使您能夠根據業務需求和安全要求靈活定製權限原則。本文將為您介紹如何自訂RBAC許可權配置。
自訂RBAC權限原則說明
您可以根據以下資源的策略說明,自訂建立Role和ClusterRole的YAML清單,來實現對ACK叢集資源的精細存取控制。
Role(命名空間角色)
以下YAML樣本定義了一個名為my-role的Role,賦予其在default命名空間中對Pod資源的讀取許可權。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: my-role
rules: # 許可權規則的列表
- apiGroups: [""] # 資源所屬的API組
resources: ["pods"] # 定義Pod資源類型
verbs: ["get", "list"] # 定義執行的get、list權限原則
ClusterRole(叢集角色)
以下YAML樣本定義了一個名為my-clusterrole的ClusterRole,賦予其對叢集中的Pods和Services資源的讀取許可權。
ClusterRole是叢集維度資源,YAML中若指定命名空間參數視為無效。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default
name: my-clusterrole
rules: # 許可權規則的列表
- apiGroups: [""] # 資源所屬的API組
resources: ["pods"] # 定義pod資源類型
verbs: ["get", "list"] # 定義執行的get、list權限原則
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]
您可以根據以下常見資源類型的策略說明,為不同資源建立自訂RBAC許可權,以實現對RAM使用者或角色在叢集資源上更精細的存取控制。
常見資源類型的策略說明
-
讀取許可權
-
get:讀取指定資源的詳細資料。 -
list:擷取資源集合的列表。 -
watch:監控資源的變化,即時接收更新。
-
-
寫入許可權
-
create:建立新的資源執行個體。 -
update:修改已存在的資源。 -
patch:對已存在的資源進行部分修改。 -
delete:刪除指定的資源。
-
|
資源名稱 |
資源類型(resources) |
所屬API組(apiGroups) |
權限原則(verbs) |
|
Pods |
resources: ["pods"] |
|
|
|
Service |
resources: ["services"] |
apiGroups: [""] |
|
|
ConfigMaps |
resources: ["configmaps"] |
apiGroups: [""] |
|
|
Secrets |
resources: ["secrets"] |
apiGroups: [""] |
|
|
PersistentVolumes |
resources: ["persistentvolumes"] |
apiGroups: [""] |
|
|
PersistentVolumeClaim |
resources: ["persistentvolumeclaims"] |
apiGroups: [""] |
|
|
NameSpaces |
resources: ["namespaces"] |
apiGroups: [""] |
|
|
Deployments |
resources: ["deployments"] |
apiGroups: ["apps"] |
|
|
DaemonSet |
resources: ["daemonsets"] |
apiGroups: ["apps"] |
|
|
StatefulSet |
resources: ["statefulsets"] |
apiGroups: ["apps"] |
|
|
Ingresses |
resources: ["ingresses"] |
apiGroups: ["networking.k8s.io"] |
|
|
Networkpolicies |
resources: ["networkpolicies"] |
apiGroups: ["networking.k8s.io"] |
|
|
Jobs |
resources: ["jobs"] |
apiGroups: ["batch"] |
|
|
CronJobs |
resources: ["cronjobs"] |
apiGroups: ["batch"] |
|
|
StorageClasses |
resources: ["storageclasses"] |
apiGroups: ["storage.k8s.io"] |
|
|
HorizontalPodAutoscalers |
resources: ["horizontalpodautoscalers"] |
apiGroups: ["autoscaling"] |
|
操作步驟
您可以通過控制台或kubectl使用自訂RBAC許可權。
當前Container Service Kubernetes 版控制台操作方式僅支援自訂ClusterRole角色與叢集內RBAC許可權的綁定,如果您需要使用自訂Role角色進行許可權綁定,可使用kubectl命令完成。
控制台
步驟一:建立自訂RBAC許可權
-
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
-
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
-
在角色頁面,單擊Cluster Role頁簽。然後單擊建立。
-
在創建 YAML面板輸入自訂策略的YAML內容,單擊確定即可建立ClusterRole。
此步驟以ClusterRole(叢集角色)的YAML為例,建立完成後,可在Cluster Role頁簽查看自訂許可權my-clusterrole。
步驟二:使用自訂RBAC許可權進行授權
-
登入Container Service管理主控台,在左側導覽列選擇授權管理。
在授權管理頁面組態管理許可權。
為RAM使用者授權:單擊RAM 使用者頁簽,定位目標 RAM 使用者,單擊操作列的系統管理權限,進入許可權管理頁面。
為RAM角色授權:單擊RAM 角色頁簽,選擇目標 RAM 角色,單擊系統管理權限,進入許可權管理頁面。
-
單擊+添加許可權,在添加許可權框中,選擇已建立ClusterRole的叢集和需要授權的命名空間,然後在許可權管理中選擇自訂,接著在右邊的下拉框中,選擇my-clusterrole,然後單擊提交授權。
kubectl
步驟一:建立自訂RBAC許可權
-
使用以下樣本應用的YAML內容,建立名為my-clusterrole.yaml檔案。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: my-clusterrole namespace: default rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["services"] verbs: ["get", "list", "watch"] -
執行以下命令,部署ClusterRole。
kubectl apply -f my-clusterrole.yaml
步驟二:擷取授權對象ID
-
為RAM使用者授權,需要通過RAM使用者名稱稱擷取UserId,詳情請參見查詢RAM使用者的詳細資料。
-
為RAM角色授權,需要通過RAM角色名稱擷取RoleId,詳情請參見擷取角色資訊。
步驟三:使用自訂RBAC許可權授權
-
使用以下樣本應用的YAML內容,建立名為my-clusterrole-binding.yaml檔案。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: my-clusterrole-binding subjects: - kind: User name: "20811XXXXXXXXX2288" # 步驟二中擷取授權對象的UserId或RoleId。 roleRef: kind: ClusterRole name: my-clusterrole apiGroup: rbac.authorization.k8s.io -
執行以下命令,部署ClusterRoleBinding。
kubectl apply -f my-clusterrole-binding.yaml
目標RAM使用者被授予自訂RBAC許可權後,通過擷取目的地組群KubeConfig並通過kubectl工具串連叢集,以驗證其許可權。
常見問題
如何授權RAM使用者或角色通過控制台登入容器終端?
即使RAM使用者或角色擁有對Pod的get和list唯讀許可權,預設情況下也無法通過Container Service管理主控台登入到 Pod 的容器終端。 該操作在RBAC機制中需要Pod子資源 pods/exec 的get和 create 許可權。
因此,需在Role或ClusterRole的rules中為 pods/exec 資源授予get和 create 許可權,然後將其綁定給目標使用者或使用者組。樣本如下。
操作入口:登入Container Service管理主控台,在叢集列表頁面單擊目的地組群名稱,在左側導覽列選擇,然後在操作列單擊終端。
Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: ns-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
# 授予命名空間下 pod/exec 的許可權
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["get", "create"]
ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default
name: my-clusterrole
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]
# 授予叢集下 pod/exec 的許可權
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["get", "create"]