當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許可權進行授權
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在授權管理頁面,選擇授權對象。
RAM使用者
選擇
,在使用者列表的操作列,單擊添加許可權。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,詳情請參見GetUser - 查詢RAM使用者的詳細資料。
為RAM角色授權,需要通過RAM角色名稱擷取RoleId,詳情請參見GetRole - 擷取角色資訊。
步驟三:使用自訂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工具串連叢集,以驗證其許可權。