iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
Kubernetes

Kubernetes三十天就上手系列 第 26

Day 26- 使用 RBAC 進行身份驗證和授權

  • 分享至 

  • xImage
  •  

使用 RBAC 進行身份驗證和授權

基於角色的存取控制的設定

基於角色的存取控制(RBAC,Role-Based Access Control)是 Kubernetes 提供的一種存取控制機制,用於管理和控制對 Kubernetes 資源的存取。RBAC 允許你為用戶、群組或服務帳戶分配特定角色,從而限制它們在 Cluster 中可以執行的操作。這一天的課程將深入探討如何設定 RBAC 來進行身份驗證和授權,確保 Kubernetes Cluster 的安全性。

RBAC 的基本概念

  1. Role(角色)

    • 角色定義了用戶或服務帳戶可以對 Kubernetes 資源執行的操作。這些操作包括 CRUD(創建、讀取、更新、刪除)操作。
    • 角色可以在命名空間範圍內生效(Role),也可以在整個 Cluster 範圍內生效(ClusterRole)。
  2. RoleBinding(角色綁定)

    • 角色綁定將一個角色(Role 或 ClusterRole)與用戶、組或服務帳戶綁定,從而授予它們特定的權限。
    • 角色綁定可以在命名空間內生效(RoleBinding),或在整個 Cluster 範圍內生效(ClusterRoleBinding)。
  3. Subject(主體)

    • 主體是指將要授予權限的實體,可以是用戶(User)、群組(Group)或服務帳戶(ServiceAccount)。

RBAC 的流程示意圖

Kubernetes 的 RBAC (Role-Based Access Control) 涉及四個核心組件:RoleClusterRoleRoleBinding、和 ClusterRoleBinding。這四個組件之間的關係決定了如何在特定範圍內(如 Namespace)或全域範圍內分配資源存取權限。流程圖示意圖如下:

   +--------------------------------------------------+
   |  Resources/Verbs  (e.g., Pod, get,list, create)  |
   +--------------------------------------------------+
               |                           |
               |                           |
               v                           v
      +------------------+       +--------------------+
      |      Role        |       |    ClusterRole     |
      | (Namespace Scope)|       | (Cluster Scope)    |
      +------------------+       +--------------------+
               |                           |
               |                           |
               v                           v
      +------------------+       +--------------------+
      |   RoleBinding    |       |  ClusterRoleBinding|
      | (Namespace Scope)|       | (Cluster Scope)    |
      +------------------+       +--------------------+
               |                           |
               |                           |
               v                            v
    +-------------------------------------------------+
    |       Subjects (User, Group, Service Account)   |
    +-------------------------------------------------+

說明

  1. Role (Namespace Scope):

    • Role 是在特定 Namespace 中的權限集合。它定義了哪些資源(如 Pods)可以被操作,以及具體哪些操作(如 getlist)被允許。
  2. ClusterRole (Cluster Scope):

    • ClusterRole 是全域範圍內的權限集合,它可以用於所有 Namespace,或者針對全Cluster範圍的資源進行定義。
  3. RoleBinding (Namespace Scope):

    • RoleBindingRole 綁定到具體的主體(如使用者、群組或服務帳戶)中,使這些主體在指定的 Namespace 中擁有相應的權限。
  4. ClusterRoleBinding (Cluster Scope):

    • ClusterRoleBindingClusterRole 綁定到全Cluster的主體上,使這些主體在全 Cluster 範圍內擁有指定的權限。
  5. Subjects (User, Group, Service Account):

    • 這些主體可以是具體的使用者、使用者群組或 Kubernetes 中的服務帳戶。透過 RoleBindingClusterRoleBinding,他們被賦予了對特定資源進行操作的權限。

流程解析

  • RoleClusterRole 定義了權限的範圍(Namespace 限定或全 Cluster)。
  • RoleBindingClusterRoleBinding 則將這些權限分配給特定的主體。
  • 最終,這些主體就可以在指定範圍內對 Kubernetes 資源進行操作。

我們展示了 Kubernetes RBAC 的核心概念,並強調了權限如何被具體分配和應用。這種方式可以靈活地控制誰能對 Kubernetes 資源執行什麼操作,從而提高 Cluster 的安全性。

RBAC 的設定步驟

接下來就帶著大家按部就班的進行演練。

1. 創建一個命名空間角色(Role)

以下是一個簡單的 YAML 範例,該角色允許在 default 命名空間中讀取 Pod 資源:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]
  • apiGroups: [""] 表示資源來自核心 API 組。
  • resources: ["pods"] 定義了這個角色管理的資源類型為 Pods。
  • verbs: ["get", "list", "watch"] 指定了允許的操作。

2. 創建一個角色綁定(RoleBinding)

將上述角色綁定到特定的服務帳戶,使其能夠在 default 命名空間中執行 Pod 的讀取操作:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: ServiceAccount
  name: pod-reader-sa
  namespace: default
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
  • subjects 定義了要授權的主體,這裡是 pod-reader-sa 服務帳戶。
  • roleRef 將這個角色綁定到之前定義的 pod-reader 角色。

3. 創建一個 Cluster 角色(ClusterRole)

Cluster 角色用於定義跨命名空間的全域權限。例如,以下範例允許讀取 Cluster 中所有命名空間的 Pod 資源:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]

4. 創建Cluster角色綁定(ClusterRoleBinding)

將 Cluster 角色綁定到一個具體的用戶,使其擁有全域讀取 Pod 的權限:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-all-pods
subjects:
- kind: User
  name: jane-doe
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-pod-reader
  apiGroup: rbac.authorization.k8s.io

RBAC 的最佳實踐

  1. 最小權限原則

    • 授權時,僅為用戶或服務帳戶分配其執行任務所需的最小權限,避免授予過多的權限。
  2. 命名空間隔離

    • 使用命名空間來隔離不同應用或團隊,並通過角色和角色綁定限制它們的存取範圍。
  3. 定期稽核和更新

    • 定期審查 RBAC 設定,確保角色和權限設置仍然符合當前的安全需求。隨著業務需求的變化,及時更新角色和角色綁定。
  4. 監控和記錄

    • 啟用和監控 Kubernetes API Server 的稽核紀錄,這有助於檢測潛在的安全威脅或未經授權的存取嘗試。

總結

RBAC 是 Kubernetes 中控制 Cluster 和資源存取的重要機制。通過正確地設定角色和角色綁定,你可以有效地管理用戶和應用程式的存取權限,從而提高整個 Cluster 的安全性和合規性。在接下來的課程中,我們將探討 Operators 及其在應用程式自動化管理中的作用,這是進一步提升 Kubernetes 運維效率的關鍵。


上一篇
Day 25- Operators 自動化應用程式運維
下一篇
Day 27- Kubernetes 中的網路安全 Network Policies
系列文
Kubernetes三十天就上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言