全部產品
Search
文件中心

Container Service for Kubernetes:使用自訂RBAC限制叢集內資源操作

更新時間:Nov 05, 2024

當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"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete", "exec", "proxy"]

Service

resources: ["services"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

ConfigMaps

resources: ["configmaps"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Secrets

resources: ["secrets"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

PersistentVolumes

resources: ["persistentvolumes"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

PersistentVolumeClaim

resources: ["persistentvolumeclaims"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

NameSpaces

resources: ["namespaces"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Deployments

resources: ["deployments"]

apiGroups: ["apps"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

DaemonSet

resources: ["daemonsets"]

apiGroups: ["apps"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

StatefulSet

resources: ["statefulsets"]

apiGroups: ["apps"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Ingresses

resources: ["ingresses"]

apiGroups: ["networking.k8s.io"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Networkpolicies

resources: ["networkpolicies"]

apiGroups: ["networking.k8s.io"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Jobs

resources: ["jobs"]

apiGroups: ["batch"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

CronJobs

resources: ["cronjobs"]

apiGroups: ["batch"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

StorageClasses

resources: ["storageclasses"]

apiGroups: ["storage.k8s.io"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

HorizontalPodAutoscalers

resources: ["horizontalpodautoscalers"]

apiGroups: ["autoscaling"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

操作步驟

您可以通過控制台或kubectl使用自訂RBAC許可權。

重要

當前Container Service Kubernetes 版控制台操作方式僅支援自訂ClusterRole角色與叢集內RBAC許可權的綁定,如果您需要使用自訂Role角色進行許可權綁定,可使用kubectl命令完成。

控制台

步驟一:建立自訂RBAC許可權

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇安全管理 > 角色

  3. 角色頁面,單擊Cluster Role頁簽。然後單擊建立

  4. 建立YAML面板輸入自訂策略的YAML內容,單擊確定即可建立ClusterRole。

    此步驟以ClusterRole(叢集角色)的YAML為例,建立完成後,可在Cluster Role頁簽查看自訂許可權my-clusterrole

步驟二:使用自訂RBAC許可權進行授權

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇安全管理 > 授權

  2. 授權管理頁面,選擇授權對象。

    • RAM使用者

      選擇身份管理 > 使用者,在使用者列表的操作列,單擊添加許可權

    • RAM角色

      選擇身份管理 > 角色,在角色列表的操作列,單擊添加許可權

      說明

      RAM角色支援手動輸入,也支援在下拉式清單中選擇。您可以單擊RAM角色右側空白框,將會顯示已有的RAM角色列表,然後從列表中選擇已有的RAM角色進行授權。

  3. RAM使用者頁簽上,單擊目標使用者操作列下的系統管理權限

  4. 授權管理面板單擊+添加許可權,在添加許可權框中,選擇已建立ClusterRole的叢集和需要授權的命名空間,然後在許可權管理中選擇自訂,接著在右邊的下拉框中,選擇my-clusterrole,然後單擊提交授權

kubectl

步驟一:建立自訂RBAC許可權

  1. 使用以下樣本應用的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"]
  2. 執行以下命令,部署ClusterRole。

    kubectl apply -f  my-clusterrole.yaml

步驟二:擷取授權對象ID

步驟三:使用自訂RBAC許可權授權

  1. 使用以下樣本應用的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
  2. 執行以下命令,部署ClusterRoleBinding。

    kubectl apply -f  my-clusterrole-binding.yaml

目標RAM使用者被授予自訂RBAC許可權後,通過擷取目的地組群KubeConfig並通過kubectl工具串連叢集,以驗證其許可權。