Container ServiceACK的授權體系包含對基礎資源層的RAM授權和對ACK叢集層的RBAC(Role-Based Access Control)授權兩部分。本文介紹Container ServiceACK叢集存取控制授權的組成及方式。
ACK授權體系
ACK的授權體系包含對基礎資源層的RAM授權以及對ACK叢集層的RBAC授權。ACK授權體系如下圖所示。
授與類型 | 使用情境 | 可擷取的相關操作 |
RAM授權 | 對應ACK叢集的營運操作,需要擷取ACK產品及其所依賴阿里雲雲產品的OpenAPI操作許可權。 |
|
RBAC授權 | 對應運行於ACK叢集中Kubernetes應用的營運操作,需要擷取ACK叢集及其命名空間的操作許可權。 |
|
因此,當RAM使用者或RAM角色需要進行叢集營運和應用營運時,您需要依次對其進行RAM授權和RBAC授權。在進行RBAC授權前,您需要先進行RAM授權。三種典型情境的授權操作,如下所示:
如果授權對象為叢集與叢集內應用的營運人員,請參見情境一:授權對象為叢集與叢集內應用的營運人員。
如果授權對象為叢集內應用的開發人員,請參見情境二:授權對象為叢集內應用的開發人員。
如果授權對象為叢集內應用的許可權管理員,請參見情境三:授權對象為叢集內應用的許可權管理員。
對於離職員工或非受信人員,刪除RAM使用者或RAM角色並不會同步刪除該使用者或角色擁有的ACK叢集KubeConfig中的RBAC許可權。因此,在刪除RAM使用者或RAM角色之前,請吊銷離職員工或非受信使用者的KubeConfig許可權。具體操作,請參見吊銷叢集的KubeConfig憑證。
權限類別型
權限類別型 | 是否必須授權 | 許可權說明 |
服務角色 | 僅在第一次使用ACK時需要授權,使用阿里雲帳號(主帳號)或者RAM帳號管理員(子帳號)進行一次授權即可。 | 授權後,才能訪問其他關聯雲端服務資源。 關於容器ACK服務角色,請參見Container ServiceACK服務角色。 |
RAM授權 |
| 支援RAM系統策略授權和自訂策略授權,授權後,RAM使用者或RAM角色才能使用ACK的功能。 |
RBAC許可權 |
| 授權後,RAM使用者或RAM角色才能夠對叢集內的K8s資源進行操作。 |
RAM授權
在企業對接RAM的帳號系統中,營運人員通過RAM使用者或RAM角色管理雲端服務資源是一個常見情境。然而預設情況下RAM使用者或RAM角色沒有使用雲端服務OpenAPI的任何許可權,為了保證RAM使用者或RAM角色的正常使用,需要對RAM使用者或RAM角色進行授權。RAM授權支援系統策略授權和自訂策略授權。
當您需要對叢集進行可見度、擴縮容、添加節點等操作時,需要進行RAM授權。具體操作,請參見為RAM使用者或RAM角色授予RAM許可權。
RAM系統策略授權
系統策略授權用於指定全域資源的讀寫存取控制。當RAM使用者或RAM角色具有阿里雲帳號下所有叢集的營運系統管理權限時,建議使用系統策略進行快捷授權。為RAM使用者或RAM角色添加系統策略許可權,請參見為RAM使用者或RAM角色授予系統策略。
Container Service的常用系統策略如下表所示,您可以根據業務需求添加對應的系統策略。
系統策略名稱稱 | 說明 |
AliyunCSFullAccess | 當RAM使用者或RAM角色需要Container Service產品所有OpenAPI的存取權限。 說明 此系統策略僅包含針對ACK產品的RAM授權。如您需要對ACK叢集中的應用進行營運,還需要進行RBAC授權,請參見RBAC授權。 |
AliyunVPCReadOnlyAccess | 當RAM使用者或RAM角色在建立叢集時選擇指定VPC。 |
AliyunECSReadOnlyAccess | 當RAM使用者或RAM角色為叢集添加已有節點或查看節點詳細資料。 |
AliyunContainerRegistryFullAccess | 當RAM使用者或RAM角色需要全域管理阿里雲帳號內的業務鏡像。 |
AliyunLogReadOnlyAccess | 當RAM使用者或RAM角色在建立叢集時選擇已有Log Project儲存審計日誌,或查看指定叢集的配置巡檢。 |
AliyunAHASReadOnlyAccess | 當RAM使用者或RAM角色需要使用叢集拓撲功能。 |
AliyunRAMFullAccess | 當RAM使用者或RAM角色需要負責阿里雲帳號內的全域授權管理。 |
AliyunYundunSASReadOnlyAccess | 當RAM使用者或RAM角色需要查看指定叢集的運行時安全監控。 |
AliyunARMSReadOnlyAccess | 當RAM使用者或RAM角色需要查看叢集阿里雲Prometheus外掛程式的監控狀態。 |
AliyunKMSReadOnlyAccess | 當RAM使用者或RAM角色在建立Pro叢集時啟用Secret落盤加密能力。 |
AliyunESSReadOnlyAccess | 當RAM使用者或RAM角色需要執行節點池的相關操作,例如查看、編輯和擴縮容等。 |
RAM自訂策略授權
自訂策略授權用於對目標RAM使用者或RAM角色實現細粒度的雲資源存取控制。另外,如果目標RAM使用者或RAM角色有基於SDK的二次開發需求,還可實現API層級的許可權控制。
ACK叢集維度RAM自訂策略授權流程,請參見為RAM使用者或RAM角色授予RAM許可權。
ACK應用維度存取控制,您可以通過為服務賬戶的RAM角色(RAM Roles for Service Accounts,簡稱RRSA)自訂策略,在叢集內實現Pod維度OpenAPI許可權隔離。更多資訊,請參見通過RRSA配置ServiceAccount的RAM許可權實現Pod許可權隔離。
例如,當RAM使用者或RAM角色需要具有對指定OSS Bucket的讀取許可權時,可以參考以下RAM自訂策略。
{
"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/*"
}
]
}
RBAC授權
RAM策略僅控制ACK叢集資源的操作許可權,若RAM使用者或RAM角色需要操作指定叢集內K8s資源時(例如,擷取叢集Pod和Node資訊),需要在Container Service管理主控台的授權管理頁面對指定RAM使用者或RAM角色進行叢集內部資源的訪問授權。
預置角色
您可以給RAM使用者或RAM角色授予以下預置角色。具體操作,請參見為RAM使用者或RAM角色授予RBAC許可權。
表 1. 角色許可權說明
角色 | 叢集內RBAC許可權 |
管理員 | 對所有命名空間下所有資源的讀寫權限。 |
營運人員 | 對所有命名空間下控制台可見資源的讀寫權限,對叢集節點、儲存卷、命名空間、配額的唯讀許可權。 |
開發人員 | 對所有命名空間或所選命名空間下控制台可見資源的讀寫權限。 |
受限使用者 | 對所有命名空間或所選命名空間下控制台可見資源的唯讀許可權。 |
自訂 | 許可權由您所選擇的ClusterRole決定,請在確定所選ClusterRole對各類資源的操作許可權後再進行授權,以免RAM使用者或RAM角色獲得不符合預期的許可權。關於ClusterRole的更多資訊,請參見自訂RBAC授權策略。 |
Role和ClusterRole
RBAC的Role或ClusterRole中包含一組代表相關許可權的規則。這些許可權是純粹累加的(不存在拒絕某操作的規則)。
Role總是用來在某個命名空間內設定存取權限;在您建立Role時,您必須指定該Role所屬的命名空間。
與之相對,ClusterRole則是一個叢集範圍的資源。這兩種資源的名字不同(Role和ClusterRole)是因為Kubernetes對象是命名空間範圍或叢集範圍的,不可兩者兼具。
ClusterRole有若干用法。您可以用來:
定義對某個命名空間域對象的存取權限,並將在各個命名空間內完成授權。
為命名空間範圍的對象設定存取權限,並跨所有命名空間執行授權。
為叢集範圍的資源定義存取權限。
如果您需要在命名空間內定義角色,應該使用Role;如果您需要定義叢集範圍的角色,應該使用ClusterRole。
關於如何編寫Kubernetes的ClusterRole和Role,請參見自訂RBAC授權策略。
關於如何授予RAM使用者或RAM角色自訂RBAC授權策略,請參見為RAM使用者或RAM角色授予RBAC許可權。
當前Container ServiceACK授權管理只支援自訂ClusterRole角色與叢集內RBAC許可權的綁定,不支援自訂Role角色與叢集內RBAC許可權的綁定。