誠如前一回所提到,蓋一座叢集不太可能只拿來自己用,大家共用的情況下,勢必是要面臨管控使用者怎麼做事情的課題⋯⋯在前面有提到,要讓士農工商各司其職
大家應該都會於「註冊帳號、設定密碼」這件事情不陌生。 假設你是一家公司的新進員工,通常都會拿到一個信箱,然後透過這個信箱或帳號,登入公司的內部系統。 然後隨著工作的需要,會需要去使用或管理其他的系統。 此時如果你每碰到一個新的系統,就重新申請一個新的帳號和密碼,那麼除了個別系統需要走一次申請帳號流程,還需要耗費多餘的心力來管理使用者的權限。 最可怕的是,當你多年後要離職,搞不好你自己都不記得曾經申請過哪些系統。
因此誕生了 RBAC(Role-Based Access Control,角色式存取控制)也是 Kubernetes 與 OpenShift 中最核心的權限管理機制,用來定義「誰(使用者/群組)可以對哪些資源做什麼事」。
在上述的 K8s / OCP 的 RBAC 機制中,可以配合下方表格來確認設想的權限是否完善。
元件名稱 | 功能說明 |
---|---|
User / Group / ServiceAccount | 欲授權的對象,例如 alice 、dev-team 、某個 CI/CD 自動帳號 |
Role / ClusterRole | 定義一組權限(例如:可 get , list pods) |
RoleBinding / ClusterRoleBinding | 將某個角色授權給某使用者或群組 |
Namespace(命名空間) | 權限的作用範圍:Role 只針對特定 namespace,ClusterRole 可作用於整個叢集 |
作為慣用 AWS 的使用者,不免俗地比較 AWS IAM 和 OCP。 進行這種比較,日後好同時理解慣用 OCP 和慣用 AWS 的術語及類比解釋給對方聽。
項目 | AWS IAM | OpenShift RBAC |
---|---|---|
控管對象 | AWS 雲端資源(EC2、S3、Lambda...) | K8s / OCP 資源(Pod、Service、Route...) |
權限單位 | IAM Policy(JSON 定義) | Role / ClusterRole(YAML 定義) |
授權機制 | Attach policy to user/role/group | RoleBinding / ClusterRoleBinding |
認證來源 | AWS IAM 使用者、Federated IDP、SSO | OAuth + LDAP / GitHub / OIDC |
範圍 | 全區域或服務等級別(global) | Namespace 或 Cluster(scoped) |
自訂細節 | 可精確到資源 ARN、動作、條件 | 可定義資源種類、動作 verb |
預設行為 | 預設無權限(Explicit deny 優先) | 預設無權限,需手動綁定 |
# 1. 建立使用者
oc create user alice
# 2. 加入群組
oc adm groups new dev-team
oc adm groups add-users dev-team alice
# 3. 指派角色
oc adm policy add-role-to-user edit alice -n dev