本文說明 Google Kubernetes Engine 中 Identity and Access Management (IAM) 和 Kubernetes 角色式存取控管 (RBAC) 的差異,協助您管理專案資源的存取權。本文假設您已瞭解下列事項:
本文適用於控管權限存取權,並想瞭解 IAM 和 RBAC 之間的差異和重疊之處的資安專家。如要進一步瞭解Google Cloud 內容中提及的常見角色和工作範例,請參閱「常見的 GKE 使用者角色和工作」。
管理 GKE 資源的存取權
建立 Google Cloud 專案時,您是專案的唯一使用者。根據預設,其他使用者無法存取您的專案或其資源,包括 Google Kubernetes Engine (GKE) 資源。GKE 支援多種選項,可使用角色式存取控管 (RBAC) 管理專案及其叢集內資源的存取權。
這些機制有部分功能重疊,但是以不同類型的資源為目標。本頁面會分別說明各個部分,以下是簡短介紹:
Kubernetes 內建 Kubernetes RBAC,可針對 Kubernetes 叢集內的物件授予精細的權限。權限是以 ClusterRole 或角色物件的形式存在於叢集內。RoleBinding 物件會將角色授予 Kubernetes 使用者、聯合使用者帳戶或 IAM 服務帳戶。
如果您主要都是使用 GKE,且叢集內的所有物件和作業都需要精細的權限設定,Kubernetes RBAC 會是最佳選擇。
IAM 管理 Google Cloud 資源,包括叢集和叢集內的物件類型。權限會指派給 IAM 主體。
IAM 沒有機制可授予特定 Kubernetes 物件的權限。舉例來說,您可以授予使用者建立 CustomResourceDefinition (CRD) 的權限,但無法授予使用者僅建立特定 CustomResourceDefinition 的權限,也無法限制只能在專案中的特定命名空間或特定叢集建立。IAM 角色會授予專案中所有叢集的權限,如果角色是在資料夾層級套用,則會授予所有子項專案中所有叢集的權限。
如果您使用多個 Google Cloud 元件,且不需要管理精細的 Kubernetes 專屬權限,IAM 是不錯的選擇。
Kubernetes RBAC
Kubernetes 內建 RBAC 支援,可讓您建立精細的角色,這些角色存在於 Kubernetes 叢集內。角色的範圍可界定於某個特定 Kubernetes 物件或某種類型的 Kubernetes 物件,以及定義角色針對該物件授予哪些相關動作 (稱為動詞)。RoleBinding 也是一種 Kubernetes 物件,且可將角色授予使用者。GKE 使用者可以是下列任一項:
- 聯合使用者帳戶
- IAM 服務帳戶
- Kubernetes ServiceAccount
- 使用 X509 用戶端憑證驗證的使用者
詳情請參閱「角色式存取控管」。
IAM
IAM 可讓您將角色授予主體。角色是一組權限,授予主體後,主體就能存取一或多個 Google Cloud 資源。如要進一步瞭解主體、角色和其他 IAM 術語,請參閱「IAM 總覽」。
在 GKE 中,主體可以是下列任一項:
- 使用者帳戶
- 服務帳戶
如要進一步瞭解如何使用 IAM 控管 GKE 中的存取權,請參閱「建立 IAM 允許政策」。
IAM 政策類型
IAM 支援下列政策類型:
使用拒絕政策,限制特定主體在專案、資料夾或組織中執行特定動作,即使 IAM 允許政策授予這些主體包含相關權限的角色,也無法執行。
IAM 建議
建議您使用下列 IAM 預先定義角色,以便處理常見情境:
- Kubernetes Engine 叢集檢視者 (
roles/container.clusterViewer):適用於只需連線至叢集的開發運作人員、工程師和應用程式開發人員。 - Kubernetes Engine 叢集管理員 (
roles/container.clusterAdmin):適用於需要管理 Google Cloud 專案中一或多個叢集的平台管理員和叢集操作員。
如需可用的預先定義 IAM 角色清單,請參閱「預先定義的 GKE 角色」。
GKE 會使用附加至節點的 IAM 服務帳戶,執行記錄和監控等系統工作。這些節點服務帳戶至少必須具備專案的 Kubernetes Engine 預設節點服務帳戶 (roles/container.defaultNodeServiceAccount) 角色。根據預設,GKE 會使用 Compute Engine 預設服務帳戶做為節點服務帳戶,該帳戶會在專案中自動建立。
IAM 與 Kubernetes RBAC 的互動
IAM 和 Kubernetes RBAC 會搭配運作,協助您管理叢集的存取權。RBAC 可控管叢集和命名空間層級的存取權,IAM 則可在專案層級運作。實體必須在任一層級具備足夠權限,才能使用叢集中的資源。