操作ACK叢集需遵循RAM和Kubernetes RBAC的雙重授權。預設情況下,僅阿里雲帳號和叢集建立者擁有叢集的完整許可權。其他RAM使用者或角色在獲得訪問叢集的RAM授權後,仍需具有RBAC許可權,才能對叢集內的Kubernetes資源進行操作。
工作原理
ACK的授權體系包括阿里雲RAM和Kubernetes RBAC兩個層級,構成了從雲資源到叢集資源的完整授權鏈路。
RAM:決定了誰能“進入”叢集的大門。負責在雲資源層面進行授權,控制使用者對ACK叢集及其依賴雲產品的OpenAPI操作許可權。
RBAC:決定了使用者“進入”大門後能做什麼。負責在叢集內部進行精細化授權,定義使用者能對哪些Kubernetes資源(如Pod、Deployment)執行何種操作(如建立、刪除)。
Kubernetes RBAC 機制
ClusterRole:定義一個在整個叢集範圍生效的許可權集合,再通過ClusterRoleBinding將其綁定至授權主體,使其許可權在整個叢集內生效。Role:定義一個僅在單個命名空間內有效許可權集合,再通過RoleBinding將其綁定至授權主體,使其許可權僅在當前命名空間內生效。
情境一:使用阿里雲帳號進行RBAC授權
登入Container Service管理主控台,在左側導覽列選擇授權管理。
在授權管理頁面組態管理許可權。
為RAM使用者授權:單擊RAM 使用者頁簽,定位目標 RAM 使用者,單擊操作列的系統管理權限,進入許可權管理頁面。
為RAM角色授權:單擊RAM 角色頁簽,定位目標 RAM 角色,單擊系統管理權限,進入許可權管理頁面。
單擊+ 添加許可權,按照頁面提示為目標RAM使用者或角色添加叢集或命名空間層級的許可權配置,並選擇預置角色。
情境二:使用RAM使用者或角色進行RBAC授權
預設情況下,RAM使用者或角色無法為其他帳號授予RBAC許可權。為便於許可權管理,ACK支援指定某個RAM使用者或角色為許可權管理員,使其能夠為其他使用者授予RBAC許可權。
步驟一:將RAM使用者或角色設定為許可權管理員
1. 獲得授權所需的RAM許可權
方式一:系統策略授權
系統策略需使用AliyunRAMReadOnlyAccess和AliyunCSFullAccess,許可權較大。如需精細化授權,請使用方式二:自訂策略精細化授權。
使用阿里雲帳號登入Resource Access Management控制台,定位目標RAM使用者或角色。
RAM使用者:選擇,在使用者列表的操作列,單擊添加許可權。
RAM角色:選擇,在角色列表的操作列,單擊添加許可權。
選擇資源範圍為帳號層級,在權限原則地區定位並選中系統策略AliyunRAMReadOnlyAccess和AliyunCSFullAccess,按照頁面提示完成授權。
方式二:自訂策略精細化授權
許可權管理員需具備以下能力:
查看其他RAM身份資訊
查看叢集列表和詳情
查看叢集已有的RBAC配置
在叢集中執行RBAC授權操作
請登入Resource Access Management控制台,參考以下程式碼範例,為目標RAM使用者或角色授予所需的RAM許可權。具體操作,請參見使用自訂策略授權。
{
"Statement": [{
"Action": [
"ram:Get*",
"ram:List*",
"cs:Get*",
"cs:Describe*",
"cs:List*",
"cs:GrantPermission"
],
"Resource": "*",
"Effect": "Allow"
}
],
"Version": "1"
}2. 獲得RBAC管理員權限
使用阿里雲帳號登入Container Service管理主控台,為目標RAM使用者或角色在叢集維度授予預置角色管理員。
登入Container Service管理主控台,在左側導覽列選擇授權管理。
在授權管理頁面組態管理許可權。
為RAM使用者授權:單擊RAM 使用者頁簽,定位目標 RAM 使用者,單擊操作列的系統管理權限,進入許可權管理頁面。
為RAM角色授權:單擊RAM 角色頁簽,定位目標 RAM 角色,單擊系統管理權限,進入許可權管理頁面。
單擊+ 添加許可權,按照頁面提示添加叢集和命名空間層級的許可權配置,選擇預置角色為管理員。
如果在所有叢集維度進行授權,許可權管理員的身份將自動應用到未來建立的叢集,無需重複授權。
步驟二:為其他RAM使用者或角色授予RBAC許可權
完成前置授權後,許可權管理員即可在授權管理頁面為其他RAM使用者或角色授予RBAC許可權。
適用於生產環境
為提升許可權管理的安全性和可維護性,建議遵循以下建議。
遵循最小許可權原則
僅授予RAM使用者、角色等主體完成其工作所必需的最小許可權集。避免無差別授予管理員等高許可權角色。
實施精細化授權
分層授權:區分RAM(負責雲資源訪問)和RBAC(負責叢集內資源訪問)的職責。
收斂範圍:優先使用
RoleBinding將許可權限制在特定的命名空間內,而非叢集層級的ClusterRoleBinding。精確選擇角色:優先使用ACK提供的預置角色。如需自訂角色,應精確定義許可權規則,避免使用萬用字元(
*)。
持續治理
許可權管理是一個動態過程。應建立定期審計機制,及時回收冗餘或過度的授權,並對許可權管理員等高許可權角色的操作進行記錄和監控。
附錄:預置角色說明
為了簡化許可權管理並快速滿足常見的使用者情境,ACK基於RBAC機制封裝了多種標準化的預置角色。
預置角色 | 叢集內RBAC許可權 |
管理員 | 對叢集所有命名空間下Kubernetes資源的RBAC讀寫權限,對叢集節點、儲存卷、命名空間、配額的讀寫權限。 |
唯讀管理員 | 對叢集所有命名空間下Kubernetes資源的RBAC唯讀許可權,對叢集節點、儲存卷、命名空間、配額的唯讀許可權。 |
營運人員 | 對叢集所有命名空間下控制台可見Kubernetes資源的RBAC讀寫權限,對叢集節點、儲存卷、命名空間的讀取與更新許可權,對其他資源的唯讀許可權。 |
開發人員 | 對叢集所有命名空間或所選命名空間下控制台可見Kubernetes資源的RBAC讀寫權限。 |
受限使用者 | 對叢集所有命名空間或所選命名空間下控制台可見Kubernetes資源的RBAC唯讀許可權。 |
自訂 | 許可權由您所選擇的ClusterRole決定,請在確定所選ClusterRole對各類資源的操作許可權後再進行授權,以免RAM使用者或RAM角色獲得不符合預期的許可權。關於自訂許可權的授權,請參見使用自訂RBAC限制叢集內資源操作。 重要 RAM使用者或RAM角色被授予cluster-admin許可權後,在該叢集內可視為與阿里雲帳號有相同許可權的超級帳號,擁有操作叢集內所有資源的任意許可權。請謹慎授予。 |
常見問題
操作時遇到無許可權錯誤碼怎麼辦?
通過控制台或OpenAPI所做的部分操作缺少所需的RBAC許可權時,將返回相應的無許可權錯誤碼。可參見下表解決。
錯誤碼或錯誤資訊 | 說明 | 解決方案 |
| 查看控制面日誌被拒絕。 | 為使用者授予管理員或營運人員許可權。 |
| 執行Helm操作被拒絕。 | 為使用者授予管理員權限。 |
| 認證輪換被拒絕。 | 為使用者授予管理員權限。 |
| 添加節點被拒絕。 | 為使用者授予管理員或營運人員許可權。 |
| 修改叢集KMS落盤加密狀態被拒絕。 | 為使用者授予管理員或營運人員許可權。 |
| 擷取應用觸發器資訊被拒絕。 | 為使用者授予管理員、營運人員或開發人員許可權。 |
| 查詢叢集命名空間被拒絕。 | 為使用者授予管理員、營運人員、開發人員或受限使用者的許可權。 |
RBAC預置角色不滿足需求,如何建立自訂許可權?
可通過編寫YAML來建立自訂Role或ClusterRole。例如,建立一個只允許查看Pod的ClusterRole,然後在授權時選擇自訂許可權並綁定對應的ClusterRole。具體操作,請參見使用自訂RBAC限制叢集內資源操作。
RBAC的權限原則僅支援允許(Allow)訪問資源,不支援顯式拒絕(Deny)訪問資源。
相關文檔
如果預置的角色不滿足需求,需要自訂RBAC擷取叢集內資源的存取權限,請參見使用自訂RBAC限制叢集內資源操作。
針對不同營運角色的完整授權流程(包含RAM授權和RBAC授權),請參見
如果授權對象為叢集與叢集內應用的營運人員,請參見情境二:授權對象為叢集與叢集內應用的營運人員。
如果授權對象為叢集內應用的開發人員,請參見情境三:授權對象為叢集內應用的開發人員。
如果授權對象為叢集內應用的許可權管理員,請參見情境四:授權對象為叢集內應用的許可權管理員。
ACK提供的服務角色,請參見Container ServiceACK服務角色。
授權過程中如遇問題,請參見授權管理FAQ。