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