授權(quán)概述
容器計(jì)算服務(wù)(ACS)的授權(quán)體系包含對(duì)基礎(chǔ)資源層的RAM授權(quán)和對(duì)ACS集群層的RBAC(Role-Based Access Control)授權(quán)兩部分。本文介紹容器服務(wù)ACS集群訪問(wèn)控制授權(quán)的組成及方式。
ACS授權(quán)體系
ACS的授權(quán)體系包含對(duì)基礎(chǔ)資源層的RAM授權(quán)以及對(duì)ACS集群層的RBAC授權(quán)。ACS授權(quán)體系如下圖所示。
RAM授權(quán)包括對(duì)集群的運(yùn)維操作,因?yàn)锳CS集群是 ACK 的一種 Serverless K8s 集群類型,對(duì)ACS集群的運(yùn)維操作需要通過(guò)ACK OpenAPI執(zhí)行,所以需要獲取ACK產(chǎn)品及其所依賴的阿里云產(chǎn)品的OpenAPI操作權(quán)限,主要包括以下操作:
集群:創(chuàng)建、查看、刪除。
集群RBAC授權(quán)管理。
集群監(jiān)控、日志、事件。
RBAC授權(quán)對(duì)應(yīng)的是運(yùn)行于ACS集群中Kubernetes應(yīng)用的運(yùn)維操作,需要獲取ACS集群及其命名空間的操作權(quán)限,主要包括對(duì)以下Kubernetes對(duì)象的增刪改查操作:
工作負(fù)載:Deployment、StatefulSet、Job、CronJob、Pod、ReplicaSet、HPA等。
網(wǎng)絡(luò):Service、Ingress、NetworkPolicy等。
存儲(chǔ):PV、PVC、StorageClass等。
Namespace、ConfigMap、Secrets等。
因此當(dāng)RAM用戶或RAM角色需要進(jìn)行集群運(yùn)維和應(yīng)用運(yùn)維時(shí),您需要依次對(duì)其進(jìn)行RAM授權(quán)和RBAC授權(quán)。在進(jìn)行RBAC授權(quán)前,您需要先進(jìn)行RAM授權(quán)。三種典型場(chǎng)景的授權(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)限管理員。
RAM授權(quán)
在企業(yè)對(duì)接RAM的賬號(hào)系統(tǒng)中,運(yùn)維人員通過(guò)RAM用戶或RAM角色管理云服務(wù)資源是一個(gè)常見(jiàn)場(chǎng)景。然而默認(rèn)情況下RAM用戶或RAM角色沒(méi)有任何權(quán)限使用云服務(wù)OpenAPI,為了保證云服務(wù)功能的正常使用,需要對(duì)RAM用戶或RAM角色授權(quán)。
當(dāng)您需要對(duì)集群進(jìn)行可見(jiàn)性、擴(kuò)縮容、添加節(jié)點(diǎn)等操作時(shí),需要進(jìn)行RAM授權(quán)。更多信息,請(qǐng)參見(jiàn)自定義RAM授權(quán)策略。
RAM授權(quán)支持以下兩種方式:
RAM系統(tǒng)策略授權(quán):用于指定全局資源的讀寫(xiě)訪問(wèn)控制。當(dāng)RAM用戶或RAM角色具有阿里云賬號(hào)下所有集群的運(yùn)維管理權(quán)限時(shí),建議使用系統(tǒng)策略進(jìn)行快捷授權(quán)。具體操作,請(qǐng)參見(jiàn)為RAM用戶或RAM角色授權(quán)。
容器計(jì)算服務(wù)的常用系統(tǒng)策略如下表所示,您可以根據(jù)業(yè)務(wù)需求添加對(duì)應(yīng)的系統(tǒng)策略。
系統(tǒng)策略名稱
說(shuō)明
AliyunCSFullAccess
使RAM用戶或RAM角色在創(chuàng)建ACS集群時(shí)獲得訪問(wèn)所有ACK OpenAPI的權(quán)限。
重要該權(quán)限操作范圍包括除ACS類型以外ACK全部集群,請(qǐng)謹(jǐn)慎使用。此系統(tǒng)策略僅包含針對(duì)ACK產(chǎn)品OpenAPI的RAM授權(quán)。如您需要對(duì)ACS集群中的應(yīng)用進(jìn)行運(yùn)維,還需要進(jìn)行RBAC授權(quán),請(qǐng)參見(jiàn)RBAC授權(quán)。
AliyunCSReadOnlyAccess
使RAM用戶或RAM角色在創(chuàng)建ACS集群時(shí)獲得訪問(wèn)ACK 所有只讀OpenAPI的權(quán)限,該權(quán)限操作范圍包括除ACS類型以外的所有ACK集群,請(qǐng)謹(jǐn)慎使用。
AliyunACCFullAccess
使RAM用戶或RAM角色獲得容器計(jì)算服務(wù)產(chǎn)品所有OpenAPI的訪問(wèn)權(quán)限。
AliyunACCReadOnlyAccess
使RAM用戶或RAM角色獲得容器計(jì)算服務(wù)產(chǎn)品的所有只讀OpenAPI權(quán)限。
AliyunVPCReadOnlyAccess
使RAM用戶或RAM角色在創(chuàng)建集群時(shí)可以選擇并指定VPC。
AliyunContainerRegistryFullAccess
使RAM用戶或RAM角色獲得阿里云賬號(hào)內(nèi)業(yè)務(wù)鏡像的全部權(quán)限。
AliyunLogReadOnlyAccess
使RAM用戶或RAM角色在創(chuàng)建集群時(shí)可以選擇已有Log Project存儲(chǔ)審計(jì)日志,或查看指定集群的配置巡檢。
AliyunRAMFullAccess
使RAM用戶或RAM角色獲得阿里云賬號(hào)內(nèi)的全局授權(quán)管理權(quán)限。
AliyunEBSFullAccess
使RAM用戶或RAM角色獲得云盤存儲(chǔ)服務(wù)功能的全部權(quán)限。
AliyunARMSReadOnlyAccess
使RAM用戶或RAM角色可以查看集群阿里云Prometheus插件的監(jiān)控狀態(tài)。
AliyunKMSReadOnlyAccess
允許RAM用戶或RAM角色在創(chuàng)建集群時(shí)查看密鑰管理服務(wù)(KMS)中的密鑰。
RAM自定義策略授權(quán):用于對(duì)目標(biāo)RAM用戶或RAM角色實(shí)現(xiàn)細(xì)粒度的云資源訪問(wèn)控制。另外,如果目標(biāo)RAM用戶或RAM角色有基于SDK的二次開(kāi)發(fā)需求,還可實(shí)現(xiàn)API級(jí)別的權(quán)限控制。
ACS集群維度的RAM自定義策略授權(quán)流程,請(qǐng)參見(jiàn)自定義RAM授權(quán)策略。
ACS應(yīng)用維度的訪問(wèn)控制,您可以通過(guò)為服務(wù)賬戶的RAM角色(RAM Roles for Service Accounts,簡(jiǎn)稱RRSA)自定義策略,在集群內(nèi)實(shí)現(xiàn)Pod維度的OpenAPI權(quán)限隔離。更多信息,請(qǐng)參見(jiàn)通過(guò)RRSA配置ServiceAccount的RAM權(quán)限實(shí)現(xiàn)Pod權(quán)限隔離。
例如,當(dāng)RAM用戶或RAM角色需要具有對(duì)指定OSS Bucket的讀取權(quán)限時(shí),可以參考以下策略。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", "oss:GetBucketStat", "oss:GetBucketInfo", "oss:GetBucketTagging", "oss:GetBucketAcl" ], "Resource": "acs:oss:*:*:*" }, { "Effect": "Allow", "Action": [ "oss:ListObjects", "oss:GetBucketAcl" ], "Resource": "acs:oss:*:*:myphotos" }, { "Effect": "Allow", "Action": [ "oss:GetObject", "oss:GetObjectAcl" ], "Resource": "acs:oss:*:*:myphotos/*" } ] }
Role和ClusterRole
RBAC的Role或ClusterRole中包含一組代表相關(guān)權(quán)限的規(guī)則。這些權(quán)限是累加的(不存在拒絕某操作的規(guī)則)。
Role總是用來(lái)在某個(gè)命名空間內(nèi)設(shè)置訪問(wèn)權(quán)限;在您創(chuàng)建Role時(shí),您必須指定該Role所屬的命名空間。
與之相對(duì),ClusterRole則是一個(gè)集群作用域的資源。這兩種資源名字不同(Role和ClusterRole)是因?yàn)镵ubernetes的對(duì)象是命名空間作用域或集群作用域的,不可兩者兼具。
ClusterRole有若干用法。您可以用來(lái):
定義對(duì)某命名空間域?qū)ο蟮脑L問(wèn)權(quán)限,并將在各個(gè)命名空間內(nèi)完成授權(quán)。
為命名空間作用域的對(duì)象設(shè)置訪問(wèn)權(quán)限,并跨所有命名空間執(zhí)行授權(quán)。
為集群作用域的資源定義訪問(wèn)權(quán)限。
如果您需要在命名空間內(nèi)定義角色,應(yīng)該使用Role;如果您需要定義集群范圍的角色,應(yīng)該使用ClusterRole。
關(guān)于如何編寫(xiě)Kubernetes的ClusterRole和Role,請(qǐng)參見(jiàn)自定義Kubernetes授權(quán)策略。
關(guān)于如何授予RAM用戶或RAM角色自定義Kubernetes授權(quán)策略,請(qǐng)參見(jiàn)配置RAM用戶或RAM角色RBAC權(quán)限。
當(dāng)前容器計(jì)算服務(wù)ACS授權(quán)管理只支持自定義ClusterRole角色與集群內(nèi)RBAC權(quán)限的綁定,不支持自定義Role角色與集群內(nèi)RBAC權(quán)限的綁定。
RBAC授權(quán)
當(dāng)RAM用戶或RAM角色需要操作指定集群內(nèi)K8s資源時(shí)(例如獲取集群Pod信息),需要在容器計(jì)算服務(wù)控制臺(tái)的授權(quán)管理頁(yè)面對(duì)指定RAM用戶或RAM角色進(jìn)行數(shù)據(jù)平面資源的授權(quán)。
您可以給RAM用戶或RAM角色授予以下預(yù)置角色。具體操作,請(qǐng)參見(jiàn)配置RAM用戶或RAM角色RBAC權(quán)限。
表 1. 角色權(quán)限說(shuō)明
角色 | 集群內(nèi)RBAC權(quán)限 |
管理員 | 對(duì)所有命名空間下所有資源擁有讀寫(xiě)權(quán)限。 |
運(yùn)維人員 | 對(duì)所有命名空間下控制臺(tái)可見(jiàn)資源擁有讀寫(xiě)權(quán)限,對(duì)集群節(jié)點(diǎn)、存儲(chǔ)卷、命名空間、配額有只讀權(quán)限。 |
開(kāi)發(fā)人員 | 對(duì)所有命名空間或所選命名空間下控制臺(tái)可見(jiàn)資源擁有讀寫(xiě)權(quán)限。 |
受限用戶 | 對(duì)所有命名空間或所選命名空間下控制臺(tái)可見(jiàn)資源擁有只讀權(quán)限。 |
自定義 | 權(quán)限由您所選擇的ClusterRole決定,請(qǐng)?jiān)诖_定所選ClusterRole對(duì)各類資源的操作權(quán)限后再進(jìn)行授權(quán),以免RAM用戶或RAM角色獲得不符合預(yù)期的權(quán)限。關(guān)于ClusterRole的更多信息,請(qǐng)參見(jiàn)自定義Kubernetes授權(quán)策略。 |