使用RBAC授予集群內(nèi)資源操作權(quán)限
RBAC(Role-Based Access Control)是基于角色的訪問控制。您可以通過Role和ClusterRole定義可操作的資源對象,通過RoleBinding和ClusterRoleBinding將角色綁定到特定的用戶,從而實現(xiàn)RBAC權(quán)限配置,讓不同用戶擁有不同的Kubernetes資源操作權(quán)限。RAM用戶或RAM角色進(jìn)行集群RAM授權(quán)之后,您還需要對其進(jìn)行集群內(nèi)部資源的RBAC授權(quán),才能對集群內(nèi)Kubernetes資源進(jìn)行操作,例如創(chuàng)建Deployment、Service。
RBAC工作原理
Kubernetes RBAC支持以下類型的角色和綁定,通過角色定義資源的訪問權(quán)限時,僅支持允許訪問資源,不支持拒絕訪問資源。關(guān)于如何編寫Kubernetes的ClusterRole和Role,請參見使用自定義RBAC限制集群內(nèi)資源操作。
Role:角色,定義對單個命名空間內(nèi)資源的訪問權(quán)限。
RoleBinding:角色綁定,定義用戶和角色的關(guān)系。
ClusterRole:集群角色,定義對整個集群內(nèi)資源的訪問權(quán)限。
ClusterRoleBinding:集群角色綁定,定義用戶和集群角色的關(guān)系。
前提條件
RAM用戶或RAM角色已獲取目標(biāo)集群的RAM只讀權(quán)限,參考策略如下。具體操作,請參見使用自定義策略授權(quán)。
{
"Statement": [
{
"Action": [
"cs:Get*",
"cs:List*",
"cs:Describe*"
],
"Effect": "Allow",
"Resource": [
"acs:cs:*:*:cluster/<yourclusterID>"
]
}
],
"Version": "1"
}
授權(quán)說明
阿里云賬號(主賬號)可以對所有集群進(jìn)行所有操作,RAM用戶或RAM角色擁有自己創(chuàng)建的集群的所有操作權(quán)限,非集群創(chuàng)建者的RAM用戶或RAM角色,需要額外進(jìn)行RAM和RBAC授權(quán),才能操作集群。
操作步驟
容器服務(wù)ACK默認(rèn)提供管理員、運(yùn)維人員、開發(fā)人員和受限用戶這四種標(biāo)準(zhǔn)的集群資源RBAC訪問權(quán)限,可滿足大部分用戶在容器服務(wù)控制臺上的使用需求。如果您想自由定義集群資源的RBAC訪問權(quán)限,請參見使用自定義RBAC限制集群內(nèi)資源操作。
滿足以下條件的賬號才可以為其他RAM用戶或RAM角色進(jìn)行授權(quán)。
阿里云賬號(主賬號)。
擁有管理員權(quán)限的RAM用戶或RAM角色。
使用阿里云賬號授權(quán)
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇授權(quán)管理。
在授權(quán)管理頁面配置管理權(quán)限。
為RAM用戶授權(quán)
單擊RAM 用戶頁簽,在RAM用戶列表中,單擊目標(biāo)RAM用戶右側(cè)的管理權(quán)限,進(jìn)入權(quán)限管理頁面,您也可以選擇多個目標(biāo)RAM用戶進(jìn)行批量授權(quán)。
為RAM角色授權(quán)
單擊RAM 角色頁簽,輸入RAM 角色名稱,然后單擊管理權(quán)限,進(jìn)入權(quán)限管理頁面。
說明RAM角色支持手動輸入,也支持在下拉列表中選擇。您可以單擊RAM角色右側(cè)空白框,將會顯示已有的RAM角色列表,然后從列表中選擇已有的RAM角色進(jìn)行授權(quán)。
單擊+ 添加權(quán)限,為目標(biāo)RAM用戶或RAM角色添加集群和命名空間級別的權(quán)限配置,并選擇相應(yīng)的預(yù)置角色,然后單擊提交授權(quán)。
說明在一個目標(biāo)集群或命名空間中為RAM用戶或RAM角色的授權(quán)時,支持配置一個預(yù)置角色、多個自定義角色,此時,所獲得的權(quán)限為多個角色權(quán)限的并集。
如果您需要在所有集群維度為RAM用戶或RAM角色進(jìn)行一鍵授權(quán),使得后續(xù)新創(chuàng)建的集群也會為被授權(quán)的RAM用戶或RAM角色自動綁定已經(jīng)授權(quán)的預(yù)置角色,您可以選擇集群為所有集群。
預(yù)置角色
集群內(nèi)RBAC權(quán)限
管理員
對集群所有命名空間下Kubernetes資源的RBAC讀寫權(quán)限,以及對集群節(jié)點、存儲卷、命名空間、配額的讀寫權(quán)限。
運(yùn)維人員
對所有命名空間下控制臺可見Kubernetes資源的讀寫權(quán)限,對集群節(jié)點、存儲卷、命名空間、配額的只讀權(quán)限。
開發(fā)人員
對所有命名空間或所選命名空間下控制臺可見Kubernetes資源的RBAC讀寫權(quán)限。
受限用戶
對所有命名空間或所選命名空間下控制臺可見Kubernetes資源的RBAC只讀權(quán)限。
自定義
權(quán)限由您所選擇的ClusterRole決定,請在確定所選ClusterRole對各類資源的操作權(quán)限后再進(jìn)行授權(quán),以免RAM用戶或RAM角色獲得不符合預(yù)期的權(quán)限。關(guān)于自定義權(quán)限的授權(quán),請參見使用自定義RBAC限制集群內(nèi)資源操作。
重要RAM用戶或RAM角色被授予cluster-admin權(quán)限后,在該集群內(nèi)可視為與阿里云賬號有相同權(quán)限的超級賬號,擁有操作集群內(nèi)所有資源的任意權(quán)限。請謹(jǐn)慎授予。
使用RAM用戶或RAM角色授權(quán)
阿里云賬號(主賬號)對賬號中的資源具有完全管理權(quán)限,您也可以將新建或已有的RAM用戶或角色授予如下RAM權(quán)限和RBAC權(quán)限,使其成為一個權(quán)限管理員,后續(xù)使用該RAM用戶或RAM角色為其他用戶或角色進(jìn)行授權(quán)。
步驟一:將RAM用戶或RAM角色設(shè)置為權(quán)限管理員
1、獲取RAM授權(quán)權(quán)限
使用系統(tǒng)策略授權(quán)
使用阿里云賬號登錄RAM管理控制臺,定位目標(biāo)RAM用戶或RAM角色。
RAM用戶
選擇
,在用戶列表的操作列,單擊添加權(quán)限。RAM角色
選擇
,在角色列表的操作列,單擊添加權(quán)限。
在彈出面板中,選擇資源范圍為賬號級別,在下拉列表中選擇權(quán)限策略為系統(tǒng)策略,根據(jù)名稱搜索或在列表中找到并選中AliyunRAMFullAccess和AliyunCSFullAccess系統(tǒng)策略,單擊確認(rèn)新增授權(quán),然后單擊關(guān)閉。
重要AliyunRAMFullAccess為高風(fēng)險權(quán)限,請謹(jǐn)慎授予。如需精細(xì)化授權(quán),請參見使用自定義策略精細(xì)化授權(quán)。
使用自定義策略精細(xì)化授權(quán)
默認(rèn)情況下,RAM用戶或RAM角色不具備對其他RAM用戶或角色進(jìn)行RBAC授權(quán)的能力。您需要為其授予如下權(quán)限:
查看其他RAM賬號。
授予RAM權(quán)限策略。
查看集群信息。
查看RBAC權(quán)限配置。
RBAC授權(quán)能力。
登錄RAM管理控制臺,參考以下代碼示例,為該RAM用戶或RAM角色授予所需的RAM權(quán)限。具體操作,請參見使用自定義策略授權(quán)。
請將xxxxxx
替換為需要綁定的RAM策略的名稱。替換為 *,表示RAM用戶或RAM角色擁有所有RAM策略的授權(quán)綁定能力。
{
"Statement": [{
"Action": [
"ram:Get*",
"ram:List*",
"cs:Get*",
"cs:Describe*",
"cs:List*",
"cs:GrantPermission"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ram:AttachPolicyToUser",
"ram:AttachPolicy"
],
"Effect": "Allow",
"Resource": [
"acs:ram:*:*:policy/xxxxxx",
"acs:*:*:*:user/*"
]
}
],
"Version": "1"
}
2、獲取RBAC管理員權(quán)限
使用阿里云賬號登錄容器服務(wù)管理控制臺,為該RAM用戶或RAM角色在所有集群維度授予預(yù)置角色管理員。具體操作,請參見使用阿里云賬號授權(quán)。
完成上述RAM權(quán)限和RBAC權(quán)限授權(quán)之后,該RAM用戶或RAM角色成為一個權(quán)限管理員,擁有給其他RAM用戶或RAM角色進(jìn)行RAM授權(quán)和RBAC授權(quán)的能力。
擁有管理員權(quán)限的RAM用戶或RAM角色,可以在所有集群維度進(jìn)行一鍵授權(quán),后續(xù)新創(chuàng)建的集群也會自動綁定已經(jīng)授權(quán)的ClusterRole。
步驟二:為其他RAM用戶或RAM角色授權(quán)
RAM用戶或RAM角色獲取管理員權(quán)限之后,即可登錄為其他用戶或角色授權(quán),具體操作和阿里云賬號授權(quán)操作一致,請參見使用阿里云賬號授權(quán)。
無權(quán)限錯誤碼說明
當(dāng)您通過控制臺或OpenAPI所做的部分操作缺少所需的RBAC權(quán)限時,控制臺或OpenAPI將返回相應(yīng)的無權(quán)限錯誤碼。各個錯誤碼對應(yīng)操作所需的集群RBAC權(quán)限說明如下表所示。
錯誤碼或錯誤信息 | 解決方案 |
ForbiddenCheckControlPlaneLog | 請為用戶授予管理員或運(yùn)維人員權(quán)限。 |
ForbiddenHelmUsage | 請為用戶授予管理員權(quán)限。 |
ForbiddenRotateCert | 請為用戶授予管理員權(quán)限。 |
ForbiddenAttachInstance | 請為用戶授予管理員或運(yùn)維人員權(quán)限。 |
ForbiddenUpdateKMSState | 請為用戶授予管理員或運(yùn)維人員權(quán)限。 |
Forbidden get trigger | 請為用戶授予管理員、運(yùn)維人員或開發(fā)人員權(quán)限。 |
ForbiddenQueryClusterNamespace | 請為用戶授予管理員、運(yùn)維人員、開發(fā)人員或受限用戶的權(quán)限。 |
相關(guān)文檔
如果預(yù)置的角色不能滿足您的要求,您需要自定義RBAC獲取集群內(nèi)資源的訪問權(quán)限,請參見使用自定義RBAC限制集群內(nèi)資源操作。
當(dāng)RAM的用戶或RAM角色需要進(jìn)行集群運(yùn)維和應(yīng)用運(yùn)維時,您需要依次對其進(jìn)行RAM授權(quán)和RBAC授權(quán)。
如果授權(quán)對象為集群與集群內(nèi)應(yīng)用的運(yùn)維人員,請參見場景一:授權(quán)對象為集群與集群內(nèi)應(yīng)用的運(yùn)維人員。
如果授權(quán)對象為集群內(nèi)應(yīng)用的開發(fā)人員,請參見場景二:授權(quán)對象為集群內(nèi)應(yīng)用的開發(fā)人員。
如果授權(quán)對象為集群內(nèi)應(yīng)用的權(quán)限管理員,請參見場景三:授權(quán)對象為集群內(nèi)應(yīng)用的權(quán)限管理員。
如需查看容器服務(wù)ACK的服務(wù)角色,請參見容器服務(wù)ACK服務(wù)角色。
授權(quán)過程問題,請參見授權(quán)管理FAQ。