容器計算服務(ACS)的授權體系包含對基礎資源層的RAM授權和對ACS叢集層的RBAC(Role-Based Access Control)授權兩部分。本文介紹Container ServiceACS叢集存取控制授權的組成及方式。
ACS授權體系
ACS的授權體系包含對基礎資源層的RAM授權以及對ACS叢集層的RBAC授權。ACS授權體系如下圖所示。
RAM授權包括對叢集的營運操作,因為ACS叢集是 ACK 的一種 Serverless K8s 叢集類型,對ACS叢集的營運操作需要通過ACK OpenAPI執行,所以需要擷取ACK產品及其所依賴的阿里雲產品的OpenAPI操作許可權,主要包括以下操作:
叢集:建立、查看、刪除。
叢集RBAC授權管理。
叢集監控、日誌、事件。
RBAC授權對應的是運行於ACS叢集中Kubernetes應用的營運操作,需要擷取ACS叢集及其命名空間的操作許可權,主要包括對以下Kubernetes對象的增刪改查操作:
工作負載:Deployment、StatefulSet、Job、CronJob、Pod、ReplicaSet、HPA等。
網路:Service、Ingress、NetworkPolicy等。
儲存:PV、PVC、StorageClass等。
Namespace、ConfigMap、Secrets等。
因此當RAM使用者或RAM角色需要進行叢集營運和應用營運時,您需要依次對其進行RAM授權和RBAC授權。在進行RBAC授權前,您需要先進行RAM授權。三種典型情境的授權操作,如下所示:
如果授權對象為叢集與叢集內應用的營運人員,請參見情境一:授權對象為叢集與叢集內應用的營運人員。
如果授權對象為叢集內應用的開發人員,請參見情境二:授權對象為叢集內應用的開發人員。
如果授權對象為叢集內應用的許可權管理員,請參見情境三:授權對象為叢集內應用的許可權管理員。
RAM授權
在企業對接RAM的帳號系統中,營運人員通過RAM使用者或RAM角色管理雲端服務資源是一個常見情境。然而預設情況下RAM使用者或RAM角色沒有任何許可權使用雲端服務OpenAPI,為了保證雲端服務功能的正常使用,需要對RAM使用者或RAM角色授權。
當您需要對叢集進行可見度、擴縮容、添加節點等操作時,需要進行RAM授權。更多資訊,請參見自訂RAM授權策略。
RAM授權支援以下兩種方式:
RAM系統策略授權:用於指定全域資源的讀寫存取控制。當RAM使用者或RAM角色具有阿里雲帳號下所有叢集的營運系統管理權限時,建議使用系統策略進行快捷授權。具體操作,請參見為RAM使用者或RAM角色授權。
容器計算服務的常用系統策略如下表所示,您可以根據業務需求添加對應的系統策略。
系統策略名稱稱
說明
AliyunCSFullAccess
使RAM使用者或RAM角色在建立ACS叢集時獲得訪問所有ACK OpenAPI的許可權。
重要該許可權操作範圍包括除ACS類型以外ACK全部叢集,請謹慎使用。此系統策略僅包含針對ACK產品OpenAPI的RAM授權。如您需要對ACS叢集中的應用進行營運,還需要進行RBAC授權,請參見RBAC授權。
AliyunCSReadOnlyAccess
使RAM使用者或RAM角色在建立ACS叢集時獲得訪問ACK 所有隻讀OpenAPI的許可權,該許可權操作範圍包括除ACS類型以外的所有ACK叢集,請謹慎使用。
AliyunACCFullAccess
使RAM使用者或RAM角色獲得容器計算服務產品所有OpenAPI的存取權限。
AliyunACCReadOnlyAccess
使RAM使用者或RAM角色獲得容器計算服務產品的所有隻讀OpenAPI許可權。
AliyunVPCReadOnlyAccess
使RAM使用者或RAM角色在建立叢集時可以選擇並指定VPC。
AliyunContainerRegistryFullAccess
使RAM使用者或RAM角色獲得阿里雲帳號內業務鏡像的全部許可權。
AliyunLogReadOnlyAccess
使RAM使用者或RAM角色在建立叢集時可以選擇已有Log Project儲存審計日誌,或查看指定叢集的配置巡檢。
AliyunRAMFullAccess
使RAM使用者或RAM角色獲得阿里雲帳號內的全域授權系統管理權限。
AliyunEBSFullAccess
使RAM使用者或RAM角色獲得雲端硬碟儲存服務功能的全部許可權。
AliyunARMSReadOnlyAccess
使RAM使用者或RAM角色可以查看叢集阿里雲Prometheus外掛程式的監控狀態。
AliyunKMSReadOnlyAccess
允許RAM使用者或RAM角色在建立叢集時查看Key Management Service(KMS)中的密鑰。
RAM自訂策略授權:用於對目標RAM使用者或RAM角色實現細粒度的雲資源存取控制。另外,如果目標RAM使用者或RAM角色有基於SDK的二次開發需求,還可實現API層級的許可權控制。
ACS叢集維度RAM自訂策略授權流程,請參見自訂RAM授權策略。
ACS應用維度存取控制,您可以通過為服務賬戶的RAM角色(RAM Roles for Service Accounts,簡稱RRSA)自訂策略,在叢集內實現Pod維度OpenAPI許可權隔離。更多資訊,請參見通過RRSA配置ServiceAccount的RAM許可權實現Pod許可權隔離。
例如,當RAM使用者或RAM角色需要具有對指定OSS Bucket的讀取許可權時,可以參考以下策略。
{ "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中包含一組代表相關許可權的規則。這些許可權是累加的(不存在拒絕某操作的規則)。
Role總是用來在某個命名空間內設定存取權限;在您建立Role時,您必須指定該Role所屬的命名空間。
與之相對,ClusterRole則是一個叢集範圍的資源。這兩種資源名字不同(Role和ClusterRole)是因為Kubernetes的對象是命名空間範圍或叢集範圍的,不可兩者兼具。
ClusterRole有若干用法。您可以用來:
定義對某命名空間域對象的存取權限,並將在各個命名空間內完成授權。
為命名空間範圍的對象設定存取權限,並跨所有命名空間執行授權。
為叢集範圍的資源定義存取權限。
如果您需要在命名空間內定義角色,應該使用Role;如果您需要定義叢集範圍的角色,應該使用ClusterRole。
關於如何編寫Kubernetes的ClusterRole和Role,請參見自訂Kubernetes授權策略。
關於如何授予RAM使用者或RAM角色自訂Kubernetes授權策略,請參見配置RAM使用者或RAM角色RBAC許可權。
當前容器計算服務ACS授權管理只支援自訂ClusterRole角色與叢集內RBAC許可權的綁定,不支援自訂Role角色與叢集內RBAC許可權的綁定。
RBAC授權
當RAM使用者或RAM角色需要操作指定叢集內K8s資源時(例如擷取叢集Pod資訊),需要在容器計算服務控制台的授權管理頁面對指定RAM使用者或RAM角色進行資料平面資源的授權。
您可以給RAM使用者或RAM角色授予以下預置角色。具體操作,請參見配置RAM使用者或RAM角色RBAC許可權。
表 1. 角色許可權說明
角色 | 叢集內RBAC許可權 |
管理員 | 對所有命名空間下所有資源擁有讀寫權限。 |
營運人員 | 對所有命名空間下控制台可見資源擁有讀寫權限,對叢集節點、儲存卷、命名空間、配額有隻讀許可權。 |
開發人員 | 對所有命名空間或所選命名空間下控制台可見資源擁有讀寫權限。 |
受限使用者 | 對所有命名空間或所選命名空間下控制台可見資源擁有隻讀許可權。 |
自訂 | 許可權由您所選擇的ClusterRole決定,請在確定所選ClusterRole對各類資源的操作許可權後再進行授權,以免RAM使用者或RAM角色獲得不符合預期的許可權。關於ClusterRole的更多資訊,請參見自訂Kubernetes授權策略。 |