RBAC(Role-Based Access Control)是基于角色的訪問控制。通過RBAC,您可以將權限與集群角色相關聯,從而為不同角色成員配置不同的權限策略,降低賬號安全風險。本文介紹如何為RAM用戶(子賬號)或RAM角色配置對應的Kubernetes集群內RBAC權限。
配置說明
配置項 | 說明 |
默認權限 |
|
授權方式 |
說明 開始授權前,請先確保目標RAM用戶或RAM角色在RAM管理控制臺中已被授予指定集群的RAM只讀權限。 |
授權模式 | 支持對多個目標RAM用戶或RAM角色進行單個和批量授權。 |
由于阿里云RAM的安全限制,當您通過容器計算服務控制臺修改RAM用戶或RAM角色的RAM授權時,請按照頁面提示的參考策略內容和操作說明在RAM控制臺為目標RAM用戶或RAM角色進行手動授權。
為RAM用戶或RAM角色授予RBAC權限
登錄容器計算服務控制臺,在左側導航欄選擇授權管理。
在授權管理頁面的選擇RAM用戶配置向導,配置管理權限。
重要因為ACS集群是ACK Serverless類型集群之一,所以如果您已經或者將通過ACK控制臺對RAM用戶或RAM角色授予“所有集群”RBAC權限,那么“所有集群”中包括ACS集群,您將無法再通過容器計算服務ACS產品控制臺對ACS集群做單獨授權,默認繼承“所有集群”授權策略。
為RAM用戶授權
單擊RAM 用戶頁簽,在RAM用戶列表,單擊目標RAM用戶右側的管理權限,進入集群 RBAC 配置配置向導。
為RAM角色授權
單擊RAM 角色頁簽,輸入RAM 角色名稱后單擊管理權限,進入集群 RBAC 配置配置向導。
如果您需要使用RAM用戶或RAM角色進行授權,請確保該RAM用戶或RAM角色已完成集群的RAM授權(請參見自定義RAM授權策略),同時已被授予集群內RBAC管理員權限或cluster-admin角色。
單擊集群 RBAC 配置配置向導,單擊添加權限,為目標RAM用戶或RAM角色添加集群和命名空間級別的權限配置,并選擇相應的預置角色,然后單擊下一步。
說明ACS預置角色包括管理員、運維人員、開發人員和受限用戶4種標準的訪問權限,可滿足大部分用戶在容器計算服務控制臺上的使用需求。如果您想自由定義集群的訪問權限,可選擇ACS內置的自定義角色,使用自定義權限功能。
在一個目標集群或命名空間中為RAM用戶或RAM角色的授權時,支持配置一個預置角色,多個自定義角色。
如果您希望在所有集群維度為RAM用戶或RAM角色進行一鍵授權,使得后續新創建的集群也會為被授權的RAM用戶或RAM角色自動綁定已經授權的預置角色,您可以選擇集群為所有集群。
預置角色
集群內RBAC權限
管理員
對所有命名空間下所有資源的讀寫權限。
運維人員
對所有命名空間下控制臺可見Kubernetes資源的讀寫權限,對集群存儲卷、命名空間、配額的只讀權限。
開發人員
對所有命名空間或所選命名空間下控制臺可見Kubernetes資源的讀寫權限。
受限用戶
對所有命名空間或所選命名空間下控制臺可見Kubernetes資源的只讀權限。
自定義
權限由您所選擇的ClusterRole決定,請在確定所選ClusterRole對各類資源的操作權限后再進行授權,以免RAM用戶或RAM角色獲得不符合預期的權限。您可以參考下文,展開查看如何查看自定義權限。
重要RAM用戶或RAM角色被授予cluster-admin權限后,在該集群內可視為與阿里云賬號有相同權限的超級賬號,擁有操作集群內所有資源的任意權限。請謹慎授予。
單擊自定義,然后單擊右側的查看,查看對應自定義權限的詳情。
登錄集群節點,執行以下命令,查看自定義權限的詳情。
kubectl get clusterrole
預期輸出:
NAME AGE 13d admin 13d arms-aliyunserviceroleforarms-clusterrole 13d asi-pod-patch 13d asi:view 13d cluster-admin 13d 13d edit 13d 13d secret-reader 13d system:aggregate-to-admin 13d system:aggregate-to-edit 13d system:aggregate-to-view 13d .... system:volume-scheduler 13d view 13d
以超級管理員cluster-admin為例,執行以下命令,查看其權限詳情。
重要RAM用戶或RAM角色被授予cluster-admin權限后,在該集群內可視為與阿里云賬號有相同權限的超級賬號,擁有操作集群內所有資源的任意權限。請謹慎授予。
kubectl get clusterrole cluster-admin -o yaml
預期輸出:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" creationTimestamp: 2022-12-30T08:31:15Z labels: kubernetes.io/bootstrapping: rbac-defaults name: cluster-admin resourceVersion: "57" selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/cluster-admin uid: 2f29f9c5-cdf9-11e8-84bf-00163e0b2f97 rules: - apiGroups: - '*' resources: - '*' verbs: - '*' - nonResourceURLs: - '*' verbs: - '*'
在授權提交頁簽,根據頁面提示進行操作。
如果出現授權成功,表示該RAM用戶或RAM角色已被授予RAM權限,RBAC授權成功,操作結束。
如果出現報錯,表示該RAM用戶或RAM角色未被授予RAM權限。請按照頁面提示,通過RAM控制臺對RAM用戶或RAM角色授予指定集群的只讀權限。
配置完成后,您可以使用目標RAM用戶或RAM角色登錄容器計算服務控制臺,并進行相關操作。
通過RAM用戶或RAM角色為其他賬號授予RBAC權限
默認情況下,RAM用戶或RAM角色不具備對其他RAM用戶或RAM角色進行RBAC授權的能力。如果您需要通過某個RAM用戶或RAM角色為其他賬號進行RBAC授權,您需要使用阿里云賬號或具備所有集群RBAC管理員角色的RAM用戶為該RAM用戶或RAM角色授予所需的RAM權限和RBAC權限。
RAM權限
您需要給該RAM用戶或RAM角色授予相應的RAM權限策略,策略包括以下內容:
查看其他RAM賬號。
授予RAM權限策略。
查看集群信息。
查看RBAC權限配置。
RBAC授權能力。
登錄RAM管理控制臺,參考以下代碼示例,為該RAM用戶或RAM角色授予所需的RAM權限。更多信息請參見自定義RAM授權策略。
請將xxxxxx
替換為需要綁定的RAM策略的名稱。替換為*,表示RAM用戶或RAM角色擁有所有RAM策略的授權綁定能力。“Resource”:“*” 表示授權該uid下所有資源的鑒權Action操作,ACK OpenAPI (cs:*) 包括除ACS類型集群外所有ACK集群操作權限,請務必謹慎授權。
{
"Statement": [{
"Action": [
"ram:Get*",
"ram:List*",
"cs:DescribeClustersV1",
"cs:GrantPermission"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ram:AttachPolicyToUser",
"ram:AttachPolicy"
],
"Effect": "Allow",
"Resource": [
"acs:ram:*:*:policy/xxxxxx",
"acs:*:*:*:user/*"
]
}
],
"Version": "1"
}
授權完成后,該RAM用戶或RAM角色可以在指定策略范圍內對其他RAM用戶或RAM角色進行RAM授權。
RBAC權限
授予所需的RAM權限后,您還需要為該RAM用戶或RAM角色在目標集群或命名空間上授予預置角色管理員或者自定義權限策略中的cluster-admin角色。具體操作,請參見為RAM用戶或RAM角色授予RBAC權限。
將RAM用戶或RAM角色設置為權限管理員
如果您不方便使用阿里云賬號為RAM用戶或RAM角色進行授權,您可以將某個RAM用戶或RAM角色設置為權限管理員,隨后使用該RAM用戶或RAM角色進行授權操作。
登錄RAM管理控制臺,定位目標RAM用戶或RAM角色。
RAM用戶
選擇
,在用戶列表的操作列,單擊添加權限。RAM角色
選擇
,在角色列表的操作列,單擊添加權限。
在添加權限面板,選擇授權范圍,然后選擇權限為系統策略,根據名稱搜索或在列表中找到并單擊AliyunRAMFullAccess和AliyunACCFullAccess系統策略,將該策略移動到右側的已選擇區域,然后單擊確定。權限成功添加后,單擊完成。
登錄容器計算服務控制臺為該RAM用戶或RAM角色在所有集群維度授予預置角色管理員。
具體操作,請參見為RAM用戶或RAM角色授予RBAC權限。
完成上述步驟后,該RAM用戶或RAM角色成為一個權限管理員,擁有給其他RAM用戶或RAM角色進行RAM授權和RBAC授權的能力。
無權限錯誤碼說明
當您通過控制臺或OpenAPI所做的部分操作缺少所需的RBAC權限時,控制臺或OpenAPI將返回相應的無權限錯誤碼。各個錯誤碼對應操作所需的集群RBAC權限說明如下表所示。
錯誤碼或錯誤信息 | 所需的集群RBAC權限 |
ForbiddenCheckControlPlaneLog | 管理員或運維人員權限。 |
ForbiddenHelmUsage | 管理員權限。 |
ForbiddenRotateCert | 管理員權限。 |
ForbiddenQueryClusterNamespace | 管理員、運維人員、開發人員或受限用戶權限。 |